diff --git a/verilog/rtl/azadi_soc_top_dffram_4kb.v b/verilog/rtl/azadi_soc_top_dffram_4kb.v
new file mode 100644
index 0000000..80d7395
--- /dev/null
+++ b/verilog/rtl/azadi_soc_top_dffram_4kb.v
@@ -0,0 +1,23860 @@
+/*azadi_soc_top_conv-v0.6*/
+
+`default_nettype wire
+module azadi_soc_top (
+	`ifdef USE_POWER_PINS
+    inout VPWR,	// User area 1 1.8V supply
+    inout VGND,	// User area 1 digital ground
+  `endif
+	clk_i,
+	rst_ni,
+	prog,
+	clks_per_bit,
+	gpio_i,
+	gpio_o,
+	gpio_oe,
+	uart_tx,
+	uart_rx,
+	pwm_o,
+	pwm_o_2,
+	pwm1_oe,
+	pwm2_oe,
+	ss_o,
+	sclk_o,
+	sd_o,
+	sd_oe,
+	sd_i
+);
+	input wire clk_i;
+	input wire rst_ni;
+	input wire prog;
+	input wire [15:0] clks_per_bit;
+	input wire [31:0] gpio_i;
+	output wire [31:0] gpio_o;
+	output wire [31:0] gpio_oe;
+	output wire uart_tx;
+	input wire uart_rx;
+	output wire pwm_o;
+	output wire pwm_o_2;
+	output wire pwm1_oe;
+	output wire pwm2_oe;
+	output wire [3:0] ss_o;
+	output wire sclk_o;
+	output wire sd_o;
+	output wire sd_oe;
+	input wire sd_i;
+	wire prog_rst_n;
+	wire system_rst_ni;
+	wire [31:0] gpio_in;
+	wire [31:0] gpio_out;
+	assign gpio_in = gpio_i;
+	assign gpio_o = gpio_out;
+	wire instr_valid;
+	wire [11:0] tlul_addr;
+	wire req_i;
+	wire [31:0] tlul_data;
+	wire instr_csb;
+	wire [11:0] instr_addr;
+	wire [31:0] instr_wdata;
+	wire [3:0] instr_wmask;
+	wire instr_we;
+	wire [31:0] instr_rdata;
+	wire data_csb;
+	wire [11:0] data_addr;
+	wire [31:0] data_wdata;
+	wire [3:0] data_wmask;
+	wire data_we;
+	wire [31:0] data_rdata;
+	wire [31:0] iccm_ctrl_data;
+	wire iccm_ctrl_we;
+	wire [11:0] iccm_ctrl_addr_o;
+	localparam signed [31:0] tlul_pkg_TL_AIW = 8;
+	localparam signed [31:0] tlul_pkg_TL_AW = 32;
+	localparam signed [31:0] tlul_pkg_TL_DW = 32;
+	localparam signed [31:0] tlul_pkg_TL_DBW = 4;
+	localparam signed [31:0] tlul_pkg_TL_SZW = 2;
+	wire [85:0] ifu_to_xbar;
+	localparam signed [31:0] tlul_pkg_TL_DIW = 1;
+	wire [51:0] xbar_to_ifu;
+	wire [85:0] xbar_to_iccm;
+	wire [51:0] iccm_to_xbar;
+	wire [85:0] lsu_to_xbar;
+	wire [51:0] xbar_to_lsu;
+	wire [85:0] xbar_to_dccm;
+	wire [51:0] dccm_to_xbar;
+	wire [85:0] xbarp_to_gpio;
+	wire [51:0] gpio_to_xbarp;
+	wire [85:0] plic_req;
+	wire [51:0] plic_resp;
+	wire [85:0] xbar_to_uart;
+	wire [51:0] uart_to_xbar;
+	wire [85:0] xbar_to_timer;
+	wire [51:0] timer_to_xbar;
+	wire [85:0] xbar_to_pwm;
+	wire [51:0] pwm_to_xbar;
+	wire [85:0] xbar_to_spi;
+	wire [51:0] spi_to_xbar;
+	wire [35:0] intr_vector;
+	wire [31:0] intr_gpio;
+	wire intr_uart0_tx_watermark;
+	wire intr_uart0_rx_watermark;
+	wire intr_uart0_tx_empty;
+	wire intr_uart0_rx_overflow;
+	wire intr_uart0_rx_frame_err;
+	wire intr_uart0_rx_break_err;
+	wire intr_uart0_rx_timeout;
+	wire intr_uart0_rx_parity_err;
+	wire intr_req;
+	wire intr_srx;
+	wire intr_stx;
+	wire intr_timer;
+	wire intr_u_tx;
+	assign intr_vector = {intr_srx, intr_stx, intr_u_tx, intr_gpio, 1'b0};
+	localparam integer brq_pkg_RV32BNone = 0;
+	localparam integer brq_pkg_RV32MSlow = 1;
+	localparam integer brq_pkg_RegFileFF = 0;
+	brq_core_top #(
+		.PMPEnable(1'b0),
+		.PMPGranularity(0),
+		.PMPNumRegions(4),
+		.MHPMCounterNum(0),
+		.MHPMCounterWidth(40),
+		.RV32E(1'b0),
+		.RV32M(brq_pkg_RV32MSlow),
+		.RV32B(brq_pkg_RV32BNone),
+		.RegFile(brq_pkg_RegFileFF),
+		.BranchTargetALU(1'b0),
+		.WritebackStage(1'b1),
+		.ICache(1'b0),
+		.ICacheECC(1'b0),
+		.BranchPredictor(1'b0),
+		.DbgTriggerEn(1'b1),
+		.DbgHwBreakNum(1),
+		.Securebrq(1'b0),
+		.DmHaltAddr(1'sb0),
+		.DmExceptionAddr(1'sb0)
+	) u_top(
+		.clk_i(clk_i),
+		.rst_ni(system_rst_ni),
+		.tl_i_i(xbar_to_ifu),
+		.tl_i_o(ifu_to_xbar),
+		.tl_d_i(xbar_to_lsu),
+		.tl_d_o(lsu_to_xbar),
+		.hart_id_i(32'b00000000000000000000000000000000),
+		.boot_addr_i(32'h20000000),
+		.irq_software_i(1'b0),
+		.irq_timer_i(intr_timer),
+		.irq_external_i(intr_req),
+		.irq_fast_i({15 {1'sb0}}),
+		.irq_nm_i(1'b0),
+		.debug_req_i(1'b0),
+		.fetch_enable_i(1'b1),
+		.alert_minor_o(),
+		.alert_major_o(),
+		.core_sleep_o()
+	);
+	tl_xbar_main main_swith(
+		.clk_i(clk_i),
+		.rst_ni(system_rst_ni),
+		.tl_brqif_i(ifu_to_xbar),
+		.tl_brqif_o(xbar_to_ifu),
+		.tl_brqlsu_i(lsu_to_xbar),
+		.tl_brqlsu_o(xbar_to_lsu),
+		.tl_iccm_o(xbar_to_iccm),
+		.tl_iccm_i(iccm_to_xbar),
+		.tl_dccm_o(xbar_to_dccm),
+		.tl_dccm_i(dccm_to_xbar),
+		.tl_timer0_o(xbar_to_timer),
+		.tl_timer0_i(timer_to_xbar),
+		.tl_uart_o(xbar_to_uart),
+		.tl_uart_i(uart_to_xbar),
+		.tl_spi_o(xbar_to_spi),
+		.tl_spi_i(spi_to_xbar),
+		.tl_pwm_o(xbar_to_pwm),
+		.tl_pwm_i(pwm_to_xbar),
+		.tl_gpio_o(xbarp_to_gpio),
+		.tl_gpio_i(gpio_to_xbarp),
+		.tl_plic_o(plic_req),
+		.tl_plic_i(plic_resp)
+	);
+	rv_timer timer0(
+		.clk_i(clk_i),
+		.rst_ni(system_rst_ni),
+		.tl_i(xbar_to_timer),
+		.tl_o(timer_to_xbar),
+		.intr_timer_expired_0_0_o(intr_timer)
+	);
+	pwm_top u_pwm(
+		.clk_i(clk_i),
+		.rst_ni(system_rst_ni),
+		.tl_i(xbar_to_pwm),
+		.tl_o(pwm_to_xbar),
+		.pwm_o(pwm_o),
+		.pwm_o_2(pwm_o_2),
+		.pwm1_oe(pwm1_oe),
+		.pwm2_oe(pwm2_oe)
+	);
+	spi_top u_spi_host(
+		.clk_i(clk_i),
+		.rst_ni(system_rst_ni),
+		.tl_i(xbar_to_spi),
+		.tl_o(spi_to_xbar),
+		.intr_rx_o(intr_srx),
+		.intr_tx_o(intr_stx),
+		.ss_o(ss_o),
+		.sclk_o(sclk_o),
+		.sd_o(sd_o),
+		.sd_oe(sd_oe),
+		.sd_i(sd_i)
+	);
+	gpio GPIO(
+		.clk_i(clk_i),
+		.rst_ni(system_rst_ni),
+		.tl_i(xbarp_to_gpio),
+		.tl_o(gpio_to_xbarp),
+		.cio_gpio_i(gpio_in),
+		.cio_gpio_o(gpio_out),
+		.cio_gpio_en_o(gpio_oe),
+		.intr_gpio_o(intr_gpio)
+	);
+	wire prog_rst_ni;
+	rstmgr reset_manager(
+		.clk_i(clk_i),
+		.rst_ni(rst_ni),
+		.prog_rst_ni(prog_rst_ni),
+		.sys_rst_ni(system_rst_ni)
+	);
+	rv_plic intr_controller(
+		.clk_i(clk_i),
+		.rst_ni(system_rst_ni),
+		.tl_i(plic_req),
+		.tl_o(plic_resp),
+		.intr_src_i(intr_vector),
+		.irq_o(intr_req),
+		.msip_o()
+	);
+	uart_top u_uart(
+		.clk_i(clk_i),
+		.rst_ni(system_rst_ni),
+		.tl_i(xbar_to_uart),
+		.tl_o(uart_to_xbar),
+		.tx_o(uart_tx),
+		.rx_i(uart_rx),
+		.intr_tx(intr_u_tx)
+	);
+	wire rx_dv_i;
+	wire [7:0] rx_byte_i;
+	iccm_controller iccm_controller(
+		.clk_i(clk_i),
+		.rst_ni(rst_ni),
+		.prog_i(prog),
+		.rx_dv_i(rx_dv_i),
+		.rx_byte_i(rx_byte_i),
+		.we_o(iccm_ctrl_we),
+		.addr_o(iccm_ctrl_addr_o),
+		.wdata_o(iccm_ctrl_data),
+		.reset_o(prog_rst_ni)
+	);
+	uart_rx_prog u_uart_rx_prog(
+		.clk_i(clk_i),
+		.rst_ni(rst_ni),
+		.i_Rx_Serial(uart_rx),
+		.CLKS_PER_BIT(clks_per_bit),
+		.o_Rx_DV(rx_dv_i),
+		.o_Rx_Byte(rx_byte_i)
+	);
+
+	instr_mem_top iccm_adapter(
+		.clk_i(clk_i),
+		.rst_ni(system_rst_ni),
+		.tl_i(xbar_to_iccm),
+		.tl_o(iccm_to_xbar),
+		.iccm_ctrl_addr(iccm_ctrl_addr_o),
+		.iccm_ctrl_wdata(iccm_ctrl_data),
+		.iccm_ctrl_we(iccm_ctrl_we),
+		.prog_rst_ni(prog_rst_ni),
+		.csb(instr_csb),
+		.addr_o(instr_addr),
+		.wdata_o(instr_wdata),
+		.wmask_o(instr_wmask),
+		.we_o(instr_we),
+		.rdata_i(instr_rdata)
+	);
+
+    wire [3:0] WE_instr;
+    assign WE_instr = instr_wmask & {4{~instr_we}};
+
+    DFFRAM #(
+			.COLS(4)
+		)u_iccm(
+	    `ifdef USE_POWER_PINS
+	        .VPWR(VPWR),
+	        .VGND(VGND),
+    	`endif
+		.CLK(clk_i),
+		.WE(WE_instr),
+		.EN(~instr_csb),
+		.Di(instr_wdata),
+		.Do(instr_rdata),
+		.A(instr_addr[8:0])
+	);
+	data_mem_top dccm_adapter(
+		.clk_i(clk_i),
+		.rst_ni(system_rst_ni),
+		.tl_d_i(xbar_to_dccm),
+		.tl_d_o(dccm_to_xbar),
+		.csb(data_csb),
+		.addr_o(data_addr),
+		.wdata_o(data_wdata),
+		.wmask_o(data_wmask),
+		.we_o(data_we),
+		.rdata_i(data_rdata)
+	);
+	wire [3:0] WE_data;
+    assign WE_data = data_wmask & {4{~data_we}};
+    DFFRAM #(
+			.COLS(4)
+		)u_dccm(
+	    `ifdef USE_POWER_PINS
+	        .VPWR(VPWR),
+	        .VGND(VGND),
+    	`endif
+		.CLK(clk_i),
+		.WE(WE_data),
+		.EN(~data_csb),
+		.Di(data_wdata),
+		.Do(data_rdata),
+		.A(data_addr[8:0])
+	);
+endmodule
+module brq_core (
+	clk_i,
+	rst_ni,
+	hart_id_i,
+	boot_addr_i,
+	instr_req_o,
+	instr_gnt_i,
+	instr_rvalid_i,
+	instr_addr_o,
+	instr_rdata_i,
+	instr_err_i,
+	data_req_o,
+	data_gnt_i,
+	data_rvalid_i,
+	data_we_o,
+	data_be_o,
+	data_addr_o,
+	data_wdata_o,
+	data_rdata_i,
+	data_err_i,
+	irq_software_i,
+	irq_timer_i,
+	irq_external_i,
+	irq_fast_i,
+	irq_nm_i,
+	debug_req_i,
+	fetch_enable_i,
+	alert_minor_o,
+	alert_major_o,
+	core_sleep_o
+);
+	parameter [0:0] PMPEnable = 1'b0;
+	parameter [31:0] PMPGranularity = 0;
+	parameter [31:0] PMPNumRegions = 4;
+	parameter [31:0] MHPMCounterNum = 0;
+	parameter [31:0] MHPMCounterWidth = 40;
+	parameter [0:0] RV32E = 1'b0;
+	localparam integer brq_pkg_RV32MFast = 2;
+	parameter integer RV32M = brq_pkg_RV32MFast;
+	localparam integer brq_pkg_RV32BNone = 0;
+	parameter integer RV32B = brq_pkg_RV32BNone;
+	localparam integer brq_pkg_RegFileFF = 0;
+	parameter integer RegFile = brq_pkg_RegFileFF;
+	localparam integer brq_pkg_RV32FSingle = 1;
+	parameter integer RVF = brq_pkg_RV32FSingle;
+	parameter [31:0] FloatingPoint = 1'b1;
+	parameter [0:0] BranchTargetALU = 1'b0;
+	parameter [0:0] WritebackStage = 1'b1;
+	parameter [0:0] ICache = 1'b0;
+	parameter [0:0] ICacheECC = 1'b0;
+	parameter [0:0] BranchPredictor = 1'b0;
+	parameter [0:0] DbgTriggerEn = 1'b0;
+	parameter [31:0] DbgHwBreakNum = 1;
+	parameter [0:0] Securebrq = 1'b0;
+	parameter [31:0] DmHaltAddr = 32'h1a110800;
+	parameter [31:0] DmExceptionAddr = 32'h1a110808;
+	input wire clk_i;
+	input wire rst_ni;
+	input wire [31:0] hart_id_i;
+	input wire [31:0] boot_addr_i;
+	output wire instr_req_o;
+	input wire instr_gnt_i;
+	input wire instr_rvalid_i;
+	output wire [31:0] instr_addr_o;
+	input wire [31:0] instr_rdata_i;
+	input wire instr_err_i;
+	output wire data_req_o;
+	input wire data_gnt_i;
+	input wire data_rvalid_i;
+	output wire data_we_o;
+	output wire [3:0] data_be_o;
+	output wire [31:0] data_addr_o;
+	output wire [31:0] data_wdata_o;
+	input wire [31:0] data_rdata_i;
+	input wire data_err_i;
+	input wire irq_software_i;
+	input wire irq_timer_i;
+	input wire irq_external_i;
+	input wire [14:0] irq_fast_i;
+	input wire irq_nm_i;
+	input wire debug_req_i;
+	input wire fetch_enable_i;
+	output wire alert_minor_o;
+	output wire alert_major_o;
+	output wire core_sleep_o;
+	wire test_en_i;
+	assign test_en_i = 1'b0;
+	localparam [31:0] W = 32;
+	wire fp_flush;
+	wire in_ready_c2fpu;
+	wire in_valid_c2fpu;
+	wire out_ready_fpu2c;
+	wire out_valid_fpu2c;
+	wire valid_id_fpu;
+	wire fp_rm_dynamic;
+	wire fp_alu_op_mod;
+	wire [4:0] fp_rf_raddr_a;
+	wire [4:0] fp_rf_raddr_b;
+	wire [4:0] fp_rf_raddr_c;
+	wire [31:0] fp_rf_rdata_a;
+	wire [31:0] fp_rf_rdata_b;
+	wire [31:0] fp_rf_rdata_c;
+	wire fp_rf_wen_id;
+	wire is_fp_instr;
+	wire [95:0] fp_operands;
+	wire fp_busy;
+	wire fpu_busy_idu;
+	wire [31:0] fp_result;
+	wire [31:0] data_wb;
+	wire [4:0] fp_rf_waddr_id;
+	wire [4:0] fp_rf_waddr_wb;
+	wire fp_rf_we;
+	wire fp_rf_wen_wb;
+	wire use_fp_rs1;
+	wire use_fp_rs2;
+	wire use_fp_rd;
+	wire fp_rf_write_wb;
+	wire [31:0] rf_int_fp_lsu;
+	wire fp_swap_oprnds;
+	wire fpu_is_busy;
+	wire fp_load;
+	wire [31:0] fp_rf_wdata_wb;
+	wire [4:0] fp_status;
+	localparam [31:0] fpnew_pkg_OP_BITS = 4;
+	wire [3:0] fp_operation;
+	wire [2:0] fp_rounding_mode;
+	wire [2:0] fp_frm_csr;
+	wire [2:0] fp_frm_fpnew;
+	wire [3:0] fp_alu_operator;
+	localparam [31:0] fpnew_pkg_NUM_FP_FORMATS = 4;
+	localparam [31:0] fpnew_pkg_FP_FORMAT_BITS = 2;
+	wire [1:0] fp_src_fmt;
+	wire [1:0] fp_dst_fmt;
+	localparam [31:0] PMP_NUM_CHAN = 2;
+	localparam [0:0] DataIndTiming = Securebrq;
+	localparam [0:0] DummyInstructions = Securebrq;
+	localparam [0:0] PCIncrCheck = Securebrq;
+	localparam [0:0] ShadowCSR = Securebrq;
+	localparam [0:0] SpecBranch = PMPEnable & (PMPNumRegions == 16);
+	localparam [0:0] RegFileECC = Securebrq;
+	localparam [31:0] RegFileDataWidth = (RegFileECC ? 39 : 32);
+	wire dummy_instr_id;
+	wire instr_valid_id;
+	wire instr_new_id;
+	wire [31:0] instr_rdata_id;
+	wire [31:0] instr_rdata_alu_id;
+	wire [15:0] instr_rdata_c_id;
+	wire instr_is_compressed_id;
+	wire instr_perf_count_id;
+	wire instr_fetch_err;
+	wire instr_fetch_err_plus2;
+	wire illegal_c_insn_id;
+	wire [31:0] pc_if;
+	wire [31:0] pc_id;
+	wire [31:0] pc_wb;
+	wire [67:0] imd_val_d_ex;
+	wire [67:0] imd_val_q_ex;
+	wire [1:0] imd_val_we_ex;
+	wire data_ind_timing;
+	wire dummy_instr_en;
+	wire [2:0] dummy_instr_mask;
+	wire dummy_instr_seed_en;
+	wire [31:0] dummy_instr_seed;
+	wire icache_enable;
+	wire icache_inval;
+	wire pc_mismatch_alert;
+	wire csr_shadow_err;
+	wire instr_first_cycle_id;
+	wire instr_valid_clear;
+	wire pc_set;
+	wire pc_set_spec;
+	wire [2:0] pc_mux_id;
+	wire [1:0] exc_pc_mux_id;
+	wire [5:0] exc_cause;
+	wire lsu_load_err;
+	wire lsu_store_err;
+	wire lsu_addr_incr_req;
+	wire [31:0] lsu_addr_last;
+	wire [31:0] branch_target_ex;
+	wire branch_decision;
+	wire ctrl_busy;
+	wire if_busy;
+	wire lsu_busy;
+	wire core_busy_d;
+	reg core_busy_q;
+	wire [4:0] rf_raddr_a;
+	wire [31:0] rf_rdata_a;
+	wire [4:0] rf_raddr_b;
+	wire [31:0] rf_rdata_b;
+	wire rf_ren_a;
+	wire rf_ren_b;
+	wire [4:0] rf_waddr_wb;
+	wire [31:0] rf_wdata_wb;
+	wire [31:0] rf_wdata_fwd_wb;
+	wire [31:0] rf_wdata_lsu;
+	wire rf_we_wb;
+	wire rf_we_lsu;
+	wire [4:0] rf_waddr_id;
+	wire [31:0] rf_wdata_id;
+	wire rf_we_id;
+	wire rf_rd_a_wb_match;
+	wire rf_rd_b_wb_match;
+	wire [5:0] alu_operator_ex;
+	wire [31:0] alu_operand_a_ex;
+	wire [31:0] alu_operand_b_ex;
+	wire [31:0] bt_a_operand;
+	wire [31:0] bt_b_operand;
+	wire [31:0] alu_adder_result_ex;
+	wire [31:0] result_ex;
+	wire mult_en_ex;
+	wire div_en_ex;
+	wire mult_sel_ex;
+	wire div_sel_ex;
+	wire [1:0] multdiv_operator_ex;
+	wire [1:0] multdiv_signed_mode_ex;
+	wire [31:0] multdiv_operand_a_ex;
+	wire [31:0] multdiv_operand_b_ex;
+	wire multdiv_ready_id;
+	wire csr_access;
+	wire [1:0] csr_op;
+	wire csr_op_en;
+	wire [11:0] csr_addr;
+	wire [31:0] csr_rdata;
+	wire [31:0] csr_wdata;
+	wire illegal_csr_insn_id;
+	wire lsu_we;
+	wire [1:0] lsu_type;
+	wire lsu_sign_ext;
+	wire lsu_req;
+	wire [31:0] lsu_wdata;
+	wire lsu_req_done;
+	wire id_in_ready;
+	wire ex_valid;
+	wire lsu_resp_valid;
+	wire lsu_resp_err;
+	wire instr_req_int;
+	wire en_wb;
+	wire [1:0] instr_type_wb;
+	wire ready_wb;
+	wire rf_write_wb;
+	wire outstanding_load_wb;
+	wire outstanding_store_wb;
+	wire irq_pending;
+	wire nmi_mode;
+	wire [17:0] irqs;
+	wire csr_mstatus_mie;
+	wire [31:0] csr_mepc;
+	wire [31:0] csr_depc;
+	wire [(0 >= (PMPNumRegions - 1) ? ((2 - PMPNumRegions) * 34) + (((PMPNumRegions - 1) * 34) - 1) : (PMPNumRegions * 34) - 1):(0 >= (PMPNumRegions - 1) ? (PMPNumRegions - 1) * 34 : 0)] csr_pmp_addr;
+	wire [(0 >= (PMPNumRegions - 1) ? ((2 - PMPNumRegions) * 6) + (((PMPNumRegions - 1) * 6) - 1) : (PMPNumRegions * 6) - 1):(0 >= (PMPNumRegions - 1) ? (PMPNumRegions - 1) * 6 : 0)] csr_pmp_cfg;
+	wire [0:1] pmp_req_err;
+	wire instr_req_out;
+	wire data_req_out;
+	wire csr_save_if;
+	wire csr_save_id;
+	wire csr_save_wb;
+	wire csr_restore_mret_id;
+	wire csr_restore_dret_id;
+	wire csr_save_cause;
+	wire csr_mtvec_init;
+	wire [31:0] csr_mtvec;
+	wire [31:0] csr_mtval;
+	wire csr_mstatus_tw;
+	wire [1:0] priv_mode_id;
+	wire [1:0] priv_mode_if;
+	wire [1:0] priv_mode_lsu;
+	wire debug_mode;
+	wire [2:0] debug_cause;
+	wire debug_csr_save;
+	wire debug_single_step;
+	wire debug_ebreakm;
+	wire debug_ebreaku;
+	wire trigger_match;
+	wire instr_id_done;
+	wire instr_done_wb;
+	wire perf_instr_ret_wb;
+	wire perf_instr_ret_compressed_wb;
+	wire perf_iside_wait;
+	wire perf_dside_wait;
+	wire perf_mul_wait;
+	wire perf_div_wait;
+	wire perf_jump;
+	wire perf_branch;
+	wire perf_tbranch;
+	wire perf_load;
+	wire perf_store;
+	wire illegal_insn_id;
+	wire unused_illegal_insn_id;
+	wire clk;
+	wire clock_en;
+	assign core_busy_d = ((ctrl_busy | if_busy) | lsu_busy) | fp_busy;
+	always @(posedge clk_i or negedge rst_ni)
+		if (!rst_ni)
+			core_busy_q <= 1'b0;
+		else
+			core_busy_q <= core_busy_d;
+	reg fetch_enable_q;
+	always @(posedge clk_i or negedge rst_ni)
+		if (!rst_ni)
+			fetch_enable_q <= 1'b0;
+		else if (fetch_enable_i)
+			fetch_enable_q <= 1'b1;
+	assign clock_en = fetch_enable_q & (((core_busy_q | debug_req_i) | irq_pending) | irq_nm_i);
+	assign core_sleep_o = ~clock_en;
+	prim_clock_gating core_clock_gate_i(
+		.clk_i(clk_i),
+		.en_i(1'b1),
+		.test_en_i(test_en_i),
+		.clk_o(clk)
+	);
+	localparam [31:0] brq_pkg_PMP_I = 0;
+	brq_ifu #(
+		.DmHaltAddr(DmHaltAddr),
+		.DmExceptionAddr(DmExceptionAddr),
+		.DummyInstructions(DummyInstructions),
+		.ICache(ICache),
+		.ICacheECC(ICacheECC),
+		.PCIncrCheck(PCIncrCheck),
+		.BranchPredictor(BranchPredictor)
+	) if_stage_i(
+		.clk_i(clk),
+		.rst_ni(rst_ni),
+		.boot_addr_i(boot_addr_i),
+		.req_i(instr_req_int),
+		.instr_req_o(instr_req_out),
+		.instr_addr_o(instr_addr_o),
+		.instr_gnt_i(instr_gnt_i),
+		.instr_rvalid_i(instr_rvalid_i),
+		.instr_rdata_i(instr_rdata_i),
+		.instr_err_i(instr_err_i),
+		.instr_pmp_err_i(pmp_req_err[brq_pkg_PMP_I]),
+		.instr_valid_id_o(instr_valid_id),
+		.instr_new_id_o(instr_new_id),
+		.instr_rdata_id_o(instr_rdata_id),
+		.instr_rdata_alu_id_o(instr_rdata_alu_id),
+		.instr_rdata_c_id_o(instr_rdata_c_id),
+		.instr_is_compressed_id_o(instr_is_compressed_id),
+		.instr_fetch_err_o(instr_fetch_err),
+		.instr_fetch_err_plus2_o(instr_fetch_err_plus2),
+		.illegal_c_insn_id_o(illegal_c_insn_id),
+		.pc_if_o(pc_if),
+		.pc_id_o(pc_id),
+		.instr_valid_clear_i(instr_valid_clear),
+		.pc_set_i(pc_set),
+		.pc_set_spec_i(pc_set_spec),
+		.pc_mux_i(pc_mux_id),
+		.exc_pc_mux_i(exc_pc_mux_id),
+		.branch_target_ex_i(branch_target_ex),
+		.csr_mepc_i(csr_mepc),
+		.csr_depc_i(csr_depc),
+		.csr_mtvec_i(csr_mtvec),
+		.csr_mtvec_init_o(csr_mtvec_init),
+		.id_in_ready_i(id_in_ready),
+		.pc_mismatch_alert_o(pc_mismatch_alert),
+		.if_busy_o(if_busy)
+	);
+	assign perf_iside_wait = id_in_ready & ~instr_valid_id;
+	assign instr_req_o = instr_req_out & ~pmp_req_err[brq_pkg_PMP_I];
+	wire use_fp_rs3;
+	brq_idu #(
+		.RV32E(RV32E),
+		.RV32M(RV32M),
+		.RV32B(RV32B),
+		.BranchTargetALU(BranchTargetALU),
+		.DataIndTiming(DataIndTiming),
+		.SpecBranch(SpecBranch),
+		.WritebackStage(WritebackStage),
+		.BranchPredictor(BranchPredictor)
+	) id_stage_i(
+		.clk_i(clk),
+		.rst_ni(rst_ni),
+		.ctrl_busy_o(ctrl_busy),
+		.illegal_insn_o(illegal_insn_id),
+		.instr_valid_i(instr_valid_id),
+		.instr_rdata_i(instr_rdata_id),
+		.instr_rdata_alu_i(instr_rdata_alu_id),
+		.instr_rdata_c_i(instr_rdata_c_id),
+		.instr_is_compressed_i(instr_is_compressed_id),
+		.branch_decision_i(branch_decision),
+		.instr_first_cycle_id_o(instr_first_cycle_id),
+		.instr_valid_clear_o(instr_valid_clear),
+		.id_in_ready_o(id_in_ready),
+		.instr_req_o(instr_req_int),
+		.pc_set_o(pc_set),
+		.pc_set_spec_o(pc_set_spec),
+		.pc_mux_o(pc_mux_id),
+		.exc_pc_mux_o(exc_pc_mux_id),
+		.exc_cause_o(exc_cause),
+		.icache_inval_o(icache_inval),
+		.instr_fetch_err_i(instr_fetch_err),
+		.instr_fetch_err_plus2_i(instr_fetch_err_plus2),
+		.illegal_c_insn_i(illegal_c_insn_id),
+		.pc_id_i(pc_id),
+		.ex_valid_i(valid_id_fpu),
+		.lsu_resp_valid_i(lsu_resp_valid),
+		.alu_operator_ex_o(alu_operator_ex),
+		.alu_operand_a_ex_o(alu_operand_a_ex),
+		.alu_operand_b_ex_o(alu_operand_b_ex),
+		.imd_val_q_ex_o(imd_val_q_ex),
+		.imd_val_d_ex_i(imd_val_d_ex),
+		.imd_val_we_ex_i(imd_val_we_ex),
+		.bt_a_operand_o(bt_a_operand),
+		.bt_b_operand_o(bt_b_operand),
+		.mult_en_ex_o(mult_en_ex),
+		.div_en_ex_o(div_en_ex),
+		.mult_sel_ex_o(mult_sel_ex),
+		.div_sel_ex_o(div_sel_ex),
+		.multdiv_operator_ex_o(multdiv_operator_ex),
+		.multdiv_signed_mode_ex_o(multdiv_signed_mode_ex),
+		.multdiv_operand_a_ex_o(multdiv_operand_a_ex),
+		.multdiv_operand_b_ex_o(multdiv_operand_b_ex),
+		.multdiv_ready_id_o(multdiv_ready_id),
+		.csr_access_o(csr_access),
+		.csr_op_o(csr_op),
+		.csr_op_en_o(csr_op_en),
+		.csr_save_if_o(csr_save_if),
+		.csr_save_id_o(csr_save_id),
+		.csr_save_wb_o(csr_save_wb),
+		.csr_restore_mret_id_o(csr_restore_mret_id),
+		.csr_restore_dret_id_o(csr_restore_dret_id),
+		.csr_save_cause_o(csr_save_cause),
+		.csr_mtval_o(csr_mtval),
+		.priv_mode_i(priv_mode_id),
+		.csr_mstatus_tw_i(csr_mstatus_tw),
+		.illegal_csr_insn_i(illegal_csr_insn_id),
+		.data_ind_timing_i(data_ind_timing),
+		.lsu_req_o(lsu_req),
+		.lsu_we_o(lsu_we),
+		.lsu_type_o(lsu_type),
+		.lsu_sign_ext_o(lsu_sign_ext),
+		.lsu_wdata_o(lsu_wdata),
+		.lsu_req_done_i(lsu_req_done),
+		.lsu_addr_incr_req_i(lsu_addr_incr_req),
+		.lsu_addr_last_i(lsu_addr_last),
+		.lsu_load_err_i(lsu_load_err),
+		.lsu_store_err_i(lsu_store_err),
+		.csr_mstatus_mie_i(csr_mstatus_mie),
+		.irq_pending_i(irq_pending),
+		.irqs_i(irqs),
+		.irq_nm_i(irq_nm_i),
+		.nmi_mode_o(nmi_mode),
+		.debug_mode_o(debug_mode),
+		.debug_cause_o(debug_cause),
+		.debug_csr_save_o(debug_csr_save),
+		.debug_req_i(debug_req_i),
+		.debug_single_step_i(debug_single_step),
+		.debug_ebreakm_i(debug_ebreakm),
+		.debug_ebreaku_i(debug_ebreaku),
+		.trigger_match_i(trigger_match),
+		.result_ex_i(data_wb),
+		.csr_rdata_i(csr_rdata),
+		.rf_raddr_a_o(rf_raddr_a),
+		.rf_rdata_a_i(rf_rdata_a),
+		.rf_raddr_b_o(rf_raddr_b),
+		.rf_rdata_b_i(rf_int_fp_lsu),
+		.rf_ren_a_o(rf_ren_a),
+		.rf_ren_b_o(rf_ren_b),
+		.rf_waddr_id_o(rf_waddr_id),
+		.rf_wdata_id_o(rf_wdata_id),
+		.rf_we_id_o(rf_we_id),
+		.rf_rd_a_wb_match_o(rf_rd_a_wb_match),
+		.rf_rd_b_wb_match_o(rf_rd_b_wb_match),
+		.rf_waddr_wb_i(rf_waddr_wb),
+		.rf_wdata_fwd_wb_i(rf_wdata_fwd_wb),
+		.rf_write_wb_i(rf_write_wb),
+		.en_wb_o(en_wb),
+		.instr_type_wb_o(instr_type_wb),
+		.instr_perf_count_id_o(instr_perf_count_id),
+		.ready_wb_i(ready_wb),
+		.outstanding_load_wb_i(outstanding_load_wb),
+		.outstanding_store_wb_i(outstanding_store_wb),
+		.perf_jump_o(perf_jump),
+		.perf_branch_o(perf_branch),
+		.perf_tbranch_o(perf_tbranch),
+		.perf_dside_wait_o(perf_dside_wait),
+		.perf_mul_wait_o(perf_mul_wait),
+		.perf_div_wait_o(perf_div_wait),
+		.instr_id_done_o(instr_id_done),
+		.fp_rounding_mode_o(fp_rounding_mode),
+		.fp_rf_rdata_a_i(fp_rf_rdata_a),
+		.fp_rf_rdata_b_i(fp_rf_rdata_b),
+		.fp_rf_rdata_c_i(fp_rf_rdata_c),
+		.fp_rf_raddr_a_o(fp_rf_raddr_a),
+		.fp_rf_raddr_b_o(fp_rf_raddr_b),
+		.fp_rf_raddr_c_o(fp_rf_raddr_c),
+		.fp_rf_waddr_o(fp_rf_waddr_id),
+		.fp_rf_we_o(fp_rf_wen_id),
+		.fp_alu_operator_o(fp_alu_operator),
+		.fp_alu_op_mod_o(fp_alu_op_mod),
+		.fp_src_fmt_o(fp_src_fmt),
+		.fp_dst_fmt_o(fp_dst_fmt),
+		.fp_rm_dynamic_o(fp_rm_dynamic),
+		.fp_flush_o(fp_flush),
+		.is_fp_instr_o(is_fp_instr),
+		.use_fp_rs1_o(use_fp_rs1),
+		.use_fp_rs2_o(use_fp_rs2),
+		.use_fp_rs3_o(use_fp_rs3),
+		.use_fp_rd_o(use_fp_rd),
+		.fpu_busy_i(fpu_busy_idu),
+		.fp_rf_write_wb_i(fp_rf_write_wb),
+		.fp_rf_wdata_fwd_wb_i(fp_rf_wdata_wb),
+		.fp_operands_o(fp_operands),
+		.fp_load_o(fp_load)
+	);
+	assign unused_illegal_insn_id = illegal_insn_id;
+	brq_exu #(
+		.RV32M(RV32M),
+		.RV32B(RV32B),
+		.BranchTargetALU(BranchTargetALU)
+	) ex_block_i(
+		.clk_i(clk),
+		.rst_ni(rst_ni),
+		.alu_operator_i(alu_operator_ex),
+		.alu_operand_a_i(alu_operand_a_ex),
+		.alu_operand_b_i(alu_operand_b_ex),
+		.alu_instr_first_cycle_i(instr_first_cycle_id),
+		.bt_a_operand_i(bt_a_operand),
+		.bt_b_operand_i(bt_b_operand),
+		.multdiv_operator_i(multdiv_operator_ex),
+		.mult_en_i(mult_en_ex),
+		.div_en_i(div_en_ex),
+		.mult_sel_i(mult_sel_ex),
+		.div_sel_i(div_sel_ex),
+		.multdiv_signed_mode_i(multdiv_signed_mode_ex),
+		.multdiv_operand_a_i(multdiv_operand_a_ex),
+		.multdiv_operand_b_i(multdiv_operand_b_ex),
+		.multdiv_ready_id_i(multdiv_ready_id),
+		.data_ind_timing_i(data_ind_timing),
+		.imd_val_we_o(imd_val_we_ex),
+		.imd_val_d_o(imd_val_d_ex),
+		.imd_val_q_i(imd_val_q_ex),
+		.alu_adder_result_ex_o(alu_adder_result_ex),
+		.result_ex_o(result_ex),
+		.branch_target_o(branch_target_ex),
+		.branch_decision_o(branch_decision),
+		.ex_valid_o(ex_valid)
+	);
+	localparam [31:0] brq_pkg_PMP_D = 1;
+	assign data_req_o = data_req_out & ~pmp_req_err[brq_pkg_PMP_D];
+	assign lsu_resp_err = lsu_load_err | lsu_store_err;
+	brq_lsu load_store_unit_i(
+		.clk_i(clk),
+		.rst_ni(rst_ni),
+		.data_req_o(data_req_out),
+		.data_gnt_i(data_gnt_i),
+		.data_rvalid_i(data_rvalid_i),
+		.data_err_i(data_err_i),
+		.data_pmp_err_i(pmp_req_err[brq_pkg_PMP_D]),
+		.data_addr_o(data_addr_o),
+		.data_we_o(data_we_o),
+		.data_be_o(data_be_o),
+		.data_wdata_o(data_wdata_o),
+		.data_rdata_i(data_rdata_i),
+		.lsu_we_i(lsu_we),
+		.lsu_type_i(lsu_type),
+		.lsu_wdata_i(lsu_wdata),
+		.lsu_sign_ext_i(lsu_sign_ext),
+		.lsu_rdata_o(rf_wdata_lsu),
+		.lsu_rdata_valid_o(rf_we_lsu),
+		.lsu_req_i(lsu_req),
+		.lsu_req_done_o(lsu_req_done),
+		.adder_result_ex_i(alu_adder_result_ex),
+		.addr_incr_req_o(lsu_addr_incr_req),
+		.addr_last_o(lsu_addr_last),
+		.lsu_resp_valid_o(lsu_resp_valid),
+		.load_err_o(lsu_load_err),
+		.store_err_o(lsu_store_err),
+		.busy_o(lsu_busy),
+		.perf_load_o(perf_load),
+		.perf_store_o(perf_store)
+	);
+	brq_wbu #(.WritebackStage(WritebackStage)) wb_stage_i(
+		.clk_i(clk),
+		.rst_ni(rst_ni),
+		.en_wb_i(en_wb),
+		.instr_type_wb_i(instr_type_wb),
+		.pc_id_i(pc_id),
+		.instr_is_compressed_id_i(instr_is_compressed_id),
+		.instr_perf_count_id_i(instr_perf_count_id),
+		.ready_wb_o(ready_wb),
+		.rf_write_wb_o(rf_write_wb),
+		.outstanding_load_wb_o(outstanding_load_wb),
+		.outstanding_store_wb_o(outstanding_store_wb),
+		.pc_wb_o(pc_wb),
+		.perf_instr_ret_wb_o(perf_instr_ret_wb),
+		.perf_instr_ret_compressed_wb_o(perf_instr_ret_compressed_wb),
+		.rf_waddr_id_i(rf_waddr_id),
+		.rf_wdata_id_i(rf_wdata_id),
+		.rf_we_id_i(rf_we_id),
+		.rf_wdata_lsu_i(rf_wdata_lsu),
+		.rf_we_lsu_i(rf_we_lsu),
+		.rf_wdata_fwd_wb_o(rf_wdata_fwd_wb),
+		.rf_waddr_wb_o(rf_waddr_wb),
+		.rf_wdata_wb_o(rf_wdata_wb),
+		.rf_we_wb_o(rf_we_wb),
+		.lsu_resp_valid_i(lsu_resp_valid),
+		.lsu_resp_err_i(lsu_resp_err),
+		.instr_done_wb_o(instr_done_wb),
+		.fp_rf_write_wb_o(fp_rf_write_wb),
+		.fp_rf_wen_wb_o(fp_rf_wen_wb),
+		.fp_rf_waddr_wb_o(fp_rf_waddr_wb),
+		.fp_rf_wen_id_i(fp_rf_wen_id),
+		.fp_rf_waddr_id_i(fp_rf_waddr_id),
+		.fp_rf_wdata_wb_o(fp_rf_wdata_wb),
+		.fp_load_i(fp_load)
+	);
+	wire [RegFileDataWidth - 1:0] rf_wdata_wb_ecc;
+	wire [RegFileDataWidth - 1:0] rf_rdata_a_ecc;
+	wire [RegFileDataWidth - 1:0] rf_rdata_b_ecc;
+	wire rf_ecc_err_comb;
+	generate
+		if (RegFileECC) begin : gen_regfile_ecc
+			wire [1:0] rf_ecc_err_a;
+			wire [1:0] rf_ecc_err_b;
+			wire rf_ecc_err_a_id;
+			wire rf_ecc_err_b_id;
+			prim_secded_39_32_enc regfile_ecc_enc(
+				.in(rf_wdata_wb),
+				.out(rf_wdata_wb_ecc)
+			);
+			prim_secded_39_32_dec regfile_ecc_dec_a(
+				.in(rf_rdata_a_ecc),
+				.d_o(),
+				.syndrome_o(),
+				.err_o(rf_ecc_err_a)
+			);
+			prim_secded_39_32_dec regfile_ecc_dec_b(
+				.in(rf_rdata_b_ecc),
+				.d_o(),
+				.syndrome_o(),
+				.err_o(rf_ecc_err_b)
+			);
+			assign rf_rdata_a = rf_rdata_a_ecc[31:0];
+			assign rf_rdata_b = rf_rdata_b_ecc[31:0];
+			assign rf_ecc_err_a_id = (|rf_ecc_err_a & rf_ren_a) & ~rf_rd_a_wb_match;
+			assign rf_ecc_err_b_id = (|rf_ecc_err_b & rf_ren_b) & ~rf_rd_b_wb_match;
+			assign rf_ecc_err_comb = instr_valid_id & (rf_ecc_err_a_id | rf_ecc_err_b_id);
+		end
+		else begin : gen_no_regfile_ecc
+			wire unused_rf_ren_a;
+			wire unused_rf_ren_b;
+			wire unused_rf_rd_a_wb_match;
+			wire unused_rf_rd_b_wb_match;
+			assign unused_rf_ren_a = rf_ren_a;
+			assign unused_rf_ren_b = rf_ren_b;
+			assign unused_rf_rd_a_wb_match = rf_rd_a_wb_match;
+			assign unused_rf_rd_b_wb_match = rf_rd_b_wb_match;
+			assign rf_wdata_wb_ecc = rf_wdata_wb;
+			assign rf_rdata_a = rf_rdata_a_ecc;
+			assign rf_rdata_b = rf_rdata_b_ecc;
+			assign rf_ecc_err_comb = 1'b0;
+		end
+	endgenerate
+	assign rf_int_fp_lsu = (is_fp_instr & use_fp_rs2 ? fp_rf_rdata_b : rf_rdata_b);
+	localparam integer brq_pkg_RegFileFPGA = 1;
+	localparam integer brq_pkg_RegFileLatch = 2;
+	generate
+		if (RegFile == brq_pkg_RegFileFF) begin : gen_regfile_ff
+			brq_register_file_ff #(
+				.RV32E(RV32E),
+				.DataWidth(RegFileDataWidth),
+				.DummyInstructions(DummyInstructions)
+			) register_file_i(
+				.clk_i(clk_i),
+				.rst_ni(rst_ni),
+				.dummy_instr_id_i(dummy_instr_id),
+				.raddr_a_i(rf_raddr_a),
+				.rdata_a_o(rf_rdata_a_ecc),
+				.raddr_b_i(rf_raddr_b),
+				.rdata_b_o(rf_rdata_b_ecc),
+				.waddr_a_i(rf_waddr_wb),
+				.wdata_a_i(rf_wdata_wb_ecc),
+				.we_a_i(rf_we_wb)
+			);
+		end
+		else if (RegFile == brq_pkg_RegFileFPGA) begin : gen_regfile_fpga
+			brq_register_file_fpga #(
+				.RV32E(RV32E),
+				.DataWidth(RegFileDataWidth),
+				.DummyInstructions(DummyInstructions)
+			) register_file_i(
+				.clk_i(clk_i),
+				.rst_ni(rst_ni),
+				.test_en_i(test_en_i),
+				.dummy_instr_id_i(dummy_instr_id),
+				.raddr_a_i(rf_raddr_a),
+				.rdata_a_o(rf_rdata_a_ecc),
+				.raddr_b_i(rf_raddr_b),
+				.rdata_b_o(rf_rdata_b_ecc),
+				.waddr_a_i(rf_waddr_wb),
+				.wdata_a_i(rf_wdata_wb_ecc),
+				.we_a_i(rf_we_wb)
+			);
+		end
+		else if (RegFile == brq_pkg_RegFileLatch) begin : gen_regfile_latch
+			brq_register_file_latch #(
+				.RV32E(RV32E),
+				.DataWidth(RegFileDataWidth),
+				.DummyInstructions(DummyInstructions)
+			) register_file_i(
+				.clk_i(clk_i),
+				.rst_ni(rst_ni),
+				.test_en_i(test_en_i),
+				.dummy_instr_id_i(dummy_instr_id),
+				.raddr_a_i(rf_raddr_a),
+				.rdata_a_o(rf_rdata_a_ecc),
+				.raddr_b_i(rf_raddr_b),
+				.rdata_b_o(rf_rdata_b_ecc),
+				.waddr_a_i(rf_waddr_wb),
+				.wdata_a_i(rf_wdata_wb_ecc),
+				.we_a_i(rf_we_wb)
+			);
+		end
+	endgenerate
+	generate
+		if (FloatingPoint) begin : gen_fp_regfile
+			brq_fp_register_file_ff #(
+				.RVF(RVF),
+				.DataWidth(W)
+			) fp_register_file(
+				.clk_i(clk_i),
+				.rst_ni(rst_ni),
+				.raddr_a_i(fp_rf_raddr_a),
+				.rdata_a_o(fp_rf_rdata_a),
+				.raddr_b_i(fp_rf_raddr_b),
+				.rdata_b_o(fp_rf_rdata_b),
+				.raddr_c_i(fp_rf_raddr_c),
+				.rdata_c_o(fp_rf_rdata_c),
+				.waddr_a_i(fp_rf_waddr_wb),
+				.wdata_a_i(fp_rf_wdata_wb),
+				.we_a_i(fp_rf_wen_wb)
+			);
+		end
+	endgenerate
+	assign alert_minor_o = 1'b0;
+	assign alert_major_o = (rf_ecc_err_comb | pc_mismatch_alert) | csr_shadow_err;
+	assign csr_wdata = alu_operand_a_ex;
+	function automatic [11:0] sv2v_cast_12;
+		input reg [11:0] inp;
+		sv2v_cast_12 = inp;
+	endfunction
+	assign csr_addr = sv2v_cast_12((csr_access ? alu_operand_b_ex[11:0] : 12'b000000000000));
+	brq_cs_registers #(
+		.DbgTriggerEn(DbgTriggerEn),
+		.DbgHwBreakNum(DbgHwBreakNum),
+		.DataIndTiming(DataIndTiming),
+		.DummyInstructions(DummyInstructions),
+		.ShadowCSR(ShadowCSR),
+		.ICache(ICache),
+		.MHPMCounterNum(MHPMCounterNum),
+		.MHPMCounterWidth(MHPMCounterWidth),
+		.PMPEnable(PMPEnable),
+		.PMPGranularity(PMPGranularity),
+		.PMPNumRegions(PMPNumRegions),
+		.RV32E(RV32E),
+		.RV32M(RV32M)
+	) cs_registers_i(
+		.clk_i(clk),
+		.rst_ni(rst_ni),
+		.hart_id_i(hart_id_i),
+		.priv_mode_id_o(priv_mode_id),
+		.priv_mode_if_o(priv_mode_if),
+		.priv_mode_lsu_o(priv_mode_lsu),
+		.csr_mtvec_o(csr_mtvec),
+		.csr_mtvec_init_i(csr_mtvec_init),
+		.boot_addr_i(boot_addr_i),
+		.csr_access_i(csr_access),
+		.csr_addr_i(csr_addr),
+		.csr_wdata_i(csr_wdata),
+		.csr_op_i(csr_op),
+		.csr_op_en_i(csr_op_en),
+		.csr_rdata_o(csr_rdata),
+		.irq_software_i(irq_software_i),
+		.irq_timer_i(irq_timer_i),
+		.irq_external_i(irq_external_i),
+		.irq_fast_i(irq_fast_i),
+		.nmi_mode_i(nmi_mode),
+		.irq_pending_o(irq_pending),
+		.irqs_o(irqs),
+		.csr_mstatus_mie_o(csr_mstatus_mie),
+		.csr_mstatus_tw_o(csr_mstatus_tw),
+		.csr_mepc_o(csr_mepc),
+		.csr_pmp_cfg_o(csr_pmp_cfg),
+		.csr_pmp_addr_o(csr_pmp_addr),
+		.csr_depc_o(csr_depc),
+		.debug_mode_i(debug_mode),
+		.debug_cause_i(debug_cause),
+		.debug_csr_save_i(debug_csr_save),
+		.debug_single_step_o(debug_single_step),
+		.debug_ebreakm_o(debug_ebreakm),
+		.debug_ebreaku_o(debug_ebreaku),
+		.trigger_match_o(trigger_match),
+		.pc_if_i(pc_if),
+		.pc_id_i(pc_id),
+		.pc_wb_i(pc_wb),
+		.data_ind_timing_o(data_ind_timing),
+		.csr_shadow_err_o(csr_shadow_err),
+		.csr_save_if_i(csr_save_if),
+		.csr_save_id_i(csr_save_id),
+		.csr_save_wb_i(csr_save_wb),
+		.csr_restore_mret_i(csr_restore_mret_id),
+		.csr_restore_dret_i(csr_restore_dret_id),
+		.csr_save_cause_i(csr_save_cause),
+		.csr_mcause_i(exc_cause),
+		.csr_mtval_i(csr_mtval),
+		.illegal_csr_insn_o(illegal_csr_insn_id),
+		.instr_ret_i(perf_instr_ret_wb),
+		.instr_ret_compressed_i(perf_instr_ret_compressed_wb),
+		.iside_wait_i(perf_iside_wait),
+		.jump_i(perf_jump),
+		.branch_i(perf_branch),
+		.branch_taken_i(perf_tbranch),
+		.mem_load_i(perf_load),
+		.mem_store_i(perf_store),
+		.dside_wait_i(perf_dside_wait),
+		.mul_wait_i(perf_mul_wait),
+		.div_wait_i(perf_div_wait),
+		.fp_rm_dynamic_i(fp_rm_dynamic),
+		.fp_frm_o(fp_frm_csr),
+		.fp_status_i(fp_status),
+		.is_fp_instr_i(is_fp_instr)
+	);
+	assign fp_frm_fpnew = (fp_rm_dynamic ? fp_frm_csr : fp_rounding_mode);
+	assign in_ready_c2fpu = id_in_ready;
+	assign in_valid_c2fpu = instr_valid_id & is_fp_instr;
+	assign valid_id_fpu = (is_fp_instr ? out_valid_fpu2c : ex_valid);
+	localparam [31:0] fpnew_pkg_NUM_OPGROUPS = 4;
+	localparam [1:0] fpnew_pkg_BEFORE = 0;
+	localparam [1:0] fpnew_pkg_MERGED = 2;
+	localparam [1:0] fpnew_pkg_PARALLEL = 1;
+	function automatic [127:0] sv2v_cast_CC116;
+		input reg [127:0] inp;
+		sv2v_cast_CC116 = inp;
+	endfunction
+	function automatic [511:0] sv2v_cast_512;
+		input reg [511:0] inp;
+		sv2v_cast_512 = inp;
+	endfunction
+	function automatic [31:0] sv2v_cast_32;
+		input reg [31:0] inp;
+		sv2v_cast_32 = inp;
+	endfunction
+	localparam [545:0] fpnew_pkg_DEFAULT_NOREGS = {sv2v_cast_512({fpnew_pkg_NUM_OPGROUPS {sv2v_cast_CC116(0)}}), sv2v_cast_32({{fpnew_pkg_NUM_FP_FORMATS {fpnew_pkg_PARALLEL}}, {fpnew_pkg_NUM_FP_FORMATS {fpnew_pkg_MERGED}}, {fpnew_pkg_NUM_FP_FORMATS {fpnew_pkg_PARALLEL}}, {fpnew_pkg_NUM_FP_FORMATS {fpnew_pkg_MERGED}}}), fpnew_pkg_BEFORE};
+	localparam [31:0] fpnew_pkg_NUM_INT_FORMATS = 4;
+	localparam [31:0] fpnew_pkg_INT_FORMAT_BITS = 2;
+	function automatic [3:0] sv2v_cast_4;
+		input reg [3:0] inp;
+		sv2v_cast_4 = inp;
+	endfunction
+	localparam [41:0] fpnew_pkg_RV32F = {34'b0000000000000000000000000010000001, sv2v_cast_4(5'b10000), 4'b0010};
+	localparam [1:0] fpnew_pkg_INT32 = 2;
+	fpnew_top_F1920 #(
+		.Features(fpnew_pkg_RV32F),
+		.Implementation(fpnew_pkg_DEFAULT_NOREGS)
+	) i_fpnew_top(
+		.clk_i(clk),
+		.rst_ni(rst_ni),
+		.operands_i(fp_operands),
+		.rnd_mode_i(fp_frm_fpnew),
+		.op_i(fp_alu_operator),
+		.op_mod_i(fp_alu_op_mod),
+		.src_fmt_i(fp_src_fmt),
+		.dst_fmt_i(fp_dst_fmt),
+		.int_fmt_i(fpnew_pkg_INT32),
+		.vectorial_op_i(1'b0),
+		.tag_i(1'b1),
+		.in_valid_i(in_valid_c2fpu),
+		.in_ready_o(out_ready_fpu2c),
+		.flush_i(fp_flush),
+		.result_o(fp_result),
+		.status_o(fp_status),
+		.tag_o(),
+		.out_valid_o(out_valid_fpu2c),
+		.out_ready_i(in_ready_c2fpu),
+		.busy_o(fp_busy)
+	);
+	assign fpu_busy_idu = fp_busy & ~out_valid_fpu2c;
+	assign data_wb = (is_fp_instr ? fp_result : result_ex);
+	localparam [1:0] brq_pkg_PMP_ACC_EXEC = 2'b00;
+	localparam [1:0] brq_pkg_PMP_ACC_READ = 2'b10;
+	localparam [1:0] brq_pkg_PMP_ACC_WRITE = 2'b01;
+	generate
+		if (PMPEnable) begin : g_pmp
+			wire [67:0] pmp_req_addr;
+			wire [3:0] pmp_req_type;
+			wire [3:0] pmp_priv_lvl;
+			assign pmp_req_addr[34+:34] = {2'b00, instr_addr_o[31:0]};
+			assign pmp_req_type[2+:2] = brq_pkg_PMP_ACC_EXEC;
+			assign pmp_priv_lvl[2+:2] = priv_mode_if;
+			assign pmp_req_addr[0+:34] = {2'b00, data_addr_o[31:0]};
+			assign pmp_req_type[0+:2] = (data_we_o ? brq_pkg_PMP_ACC_WRITE : brq_pkg_PMP_ACC_READ);
+			assign pmp_priv_lvl[0+:2] = priv_mode_lsu;
+			brq_pmp #(
+				.PMPGranularity(PMPGranularity),
+				.PMPNumChan(PMP_NUM_CHAN),
+				.PMPNumRegions(PMPNumRegions)
+			) pmp_i(
+				.clk_i(clk),
+				.rst_ni(rst_ni),
+				.csr_pmp_cfg_i(csr_pmp_cfg),
+				.csr_pmp_addr_i(csr_pmp_addr),
+				.priv_mode_i(pmp_priv_lvl),
+				.pmp_req_addr_i(pmp_req_addr),
+				.pmp_req_type_i(pmp_req_type),
+				.pmp_req_err_o(pmp_req_err)
+			);
+		end
+		else begin : g_no_pmp
+			wire [1:0] unused_priv_lvl_if;
+			wire [1:0] unused_priv_lvl_ls;
+			wire [(0 >= (PMPNumRegions - 1) ? ((2 - PMPNumRegions) * 34) + (((PMPNumRegions - 1) * 34) - 1) : (PMPNumRegions * 34) - 1):(0 >= (PMPNumRegions - 1) ? (PMPNumRegions - 1) * 34 : 0)] unused_csr_pmp_addr;
+			wire [(0 >= (PMPNumRegions - 1) ? ((2 - PMPNumRegions) * 6) + (((PMPNumRegions - 1) * 6) - 1) : (PMPNumRegions * 6) - 1):(0 >= (PMPNumRegions - 1) ? (PMPNumRegions - 1) * 6 : 0)] unused_csr_pmp_cfg;
+			assign unused_priv_lvl_if = priv_mode_if;
+			assign unused_priv_lvl_ls = priv_mode_lsu;
+			assign unused_csr_pmp_addr = csr_pmp_addr;
+			assign unused_csr_pmp_cfg = csr_pmp_cfg;
+			assign pmp_req_err[brq_pkg_PMP_I] = 1'b0;
+			assign pmp_req_err[brq_pkg_PMP_D] = 1'b0;
+		end
+	endgenerate
+	wire unused_instr_new_id;
+	wire unused_instr_done_wb;
+	assign unused_instr_new_id = instr_new_id;
+	assign unused_instr_done_wb = instr_done_wb;
+endmodule
+module brq_core_top (
+	clk_i,
+	rst_ni,
+	tl_i_i,
+	tl_i_o,
+	tl_d_i,
+	tl_d_o,
+	hart_id_i,
+	boot_addr_i,
+	irq_software_i,
+	irq_timer_i,
+	irq_external_i,
+	irq_fast_i,
+	irq_nm_i,
+	debug_req_i,
+	fetch_enable_i,
+	alert_minor_o,
+	alert_major_o,
+	core_sleep_o
+);
+	parameter [0:0] PMPEnable = 1'b0;
+	parameter [31:0] PMPGranularity = 0;
+	parameter [31:0] PMPNumRegions = 4;
+	parameter [31:0] MHPMCounterNum = 0;
+	parameter [31:0] MHPMCounterWidth = 40;
+	parameter [0:0] RV32E = 1'b0;
+	localparam integer brq_pkg_RV32MFast = 2;
+	parameter integer RV32M = brq_pkg_RV32MFast;
+	localparam integer brq_pkg_RV32BNone = 0;
+	parameter integer RV32B = brq_pkg_RV32BNone;
+	localparam integer brq_pkg_RegFileFF = 0;
+	parameter integer RegFile = brq_pkg_RegFileFF;
+	parameter [0:0] BranchTargetALU = 1'b0;
+	parameter [0:0] WritebackStage = 1'b1;
+	parameter [0:0] ICache = 1'b0;
+	parameter [0:0] ICacheECC = 1'b0;
+	parameter [0:0] BranchPredictor = 1'b0;
+	parameter [0:0] DbgTriggerEn = 1'b0;
+	parameter [31:0] DbgHwBreakNum = 1;
+	parameter [0:0] Securebrq = 1'b0;
+	parameter [31:0] DmHaltAddr = 0;
+	parameter [31:0] DmExceptionAddr = 0;
+	input wire clk_i;
+	input wire rst_ni;
+	localparam signed [31:0] tlul_pkg_TL_AIW = 8;
+	localparam signed [31:0] tlul_pkg_TL_DIW = 1;
+	localparam signed [31:0] tlul_pkg_TL_DW = 32;
+	localparam signed [31:0] tlul_pkg_TL_DBW = 4;
+	localparam signed [31:0] tlul_pkg_TL_SZW = 2;
+	input wire [51:0] tl_i_i;
+	localparam signed [31:0] tlul_pkg_TL_AW = 32;
+	output wire [85:0] tl_i_o;
+	input wire [51:0] tl_d_i;
+	output wire [85:0] tl_d_o;
+	input wire [31:0] hart_id_i;
+	input wire [31:0] boot_addr_i;
+	input wire irq_software_i;
+	input wire irq_timer_i;
+	input wire irq_external_i;
+	input wire [14:0] irq_fast_i;
+	input wire irq_nm_i;
+	input wire debug_req_i;
+	input wire fetch_enable_i;
+	output wire alert_minor_o;
+	output wire alert_major_o;
+	output wire core_sleep_o;
+	wire instr_req;
+	wire instr_gnt;
+	wire instr_rvalid;
+	wire [31:0] instr_addr;
+	wire [31:0] instr_rdata;
+	wire instr_err;
+	wire data_req;
+	wire data_gnt;
+	wire data_rvalid;
+	wire data_we;
+	wire [3:0] data_be;
+	wire [31:0] data_addr;
+	wire [31:0] data_wdata;
+	wire [31:0] data_rdata;
+	wire data_err;
+	brq_core #(
+		.PMPEnable(PMPEnable),
+		.PMPGranularity(PMPGranularity),
+		.PMPNumRegions(PMPNumRegions),
+		.MHPMCounterNum(MHPMCounterNum),
+		.MHPMCounterWidth(MHPMCounterWidth),
+		.RV32E(RV32E),
+		.RV32M(RV32M),
+		.RV32B(RV32B),
+		.RegFile(RegFile),
+		.BranchTargetALU(BranchTargetALU),
+		.WritebackStage(WritebackStage),
+		.ICache(ICache),
+		.ICacheECC(ICacheECC),
+		.BranchPredictor(BranchPredictor),
+		.DbgTriggerEn(DbgTriggerEn),
+		.DbgHwBreakNum(DbgHwBreakNum),
+		.Securebrq(Securebrq),
+		.DmHaltAddr(DmHaltAddr),
+		.DmExceptionAddr(DmExceptionAddr)
+	) u_core(
+		.clk_i(clk_i),
+		.rst_ni(rst_ni),
+		.hart_id_i(hart_id_i),
+		.boot_addr_i(boot_addr_i),
+		.instr_req_o(instr_req),
+		.instr_gnt_i(instr_gnt),
+		.instr_rvalid_i(instr_rvalid),
+		.instr_addr_o(instr_addr),
+		.instr_rdata_i(instr_rdata),
+		.instr_err_i(instr_err),
+		.data_req_o(data_req),
+		.data_gnt_i(data_gnt),
+		.data_rvalid_i(data_rvalid),
+		.data_we_o(data_we),
+		.data_be_o(data_be),
+		.data_addr_o(data_addr),
+		.data_wdata_o(data_wdata),
+		.data_rdata_i(data_rdata),
+		.data_err_i(data_err),
+		.irq_software_i(irq_software_i),
+		.irq_timer_i(irq_timer_i),
+		.irq_external_i(irq_external_i),
+		.irq_fast_i(irq_fast_i),
+		.irq_nm_i(irq_nm_i),
+		.debug_req_i(debug_req_i),
+		.fetch_enable_i(fetch_enable_i),
+		.alert_minor_o(alert_minor_o),
+		.alert_major_o(alert_major_o),
+		.core_sleep_o(core_sleep_o)
+	);
+	tlul_host_adapter #(.MAX_REQS(2)) instr_interface(
+		.clk_i(clk_i),
+		.rst_ni(rst_ni),
+		.req_i(instr_req),
+		.gnt_o(instr_gnt),
+		.addr_i(instr_addr),
+		.we_i(1'b0),
+		.wdata_i(32'b00000000000000000000000000000000),
+		.be_i(4'hf),
+		.valid_o(instr_rvalid),
+		.rdata_o(instr_rdata),
+		.err_o(instr_err),
+		.tl_h_c_a(tl_i_o),
+		.tl_h_c_d(tl_i_i)
+	);
+	tlul_host_adapter #(.MAX_REQS(2)) data_interface(
+		.clk_i(clk_i),
+		.rst_ni(rst_ni),
+		.req_i(data_req),
+		.gnt_o(data_gnt),
+		.addr_i(data_addr),
+		.we_i(data_we),
+		.wdata_i(data_wdata),
+		.be_i(data_be),
+		.valid_o(data_rvalid),
+		.rdata_o(data_rdata),
+		.err_o(data_err),
+		.tl_h_c_a(tl_d_o),
+		.tl_h_c_d(tl_d_i)
+	);
+endmodule
+module rstmgr (
+	clk_i,
+	rst_ni,
+	prog_rst_ni,
+	sys_rst_ni
+);
+	input clk_i;
+	input rst_ni;
+	input prog_rst_ni;
+	output reg sys_rst_ni;
+	reg [1:0] rst_fsm_cs;
+	reg [1:0] rst_fsm_ns;
+	reg rst_run_d;
+	reg rst_run_q;
+	localparam [1:0] IDLE = 1;
+	localparam [1:0] PROG = 2;
+	localparam [1:0] RESET = 0;
+	localparam [1:0] RUN = 3;
+	always @(*) begin : comb_part
+		rst_fsm_ns = rst_fsm_cs;
+		sys_rst_ni = 1'b0;
+		case (rst_fsm_cs)
+			RESET: begin
+				sys_rst_ni = 1'b0;
+				rst_fsm_ns = IDLE;
+			end
+			IDLE: begin
+				sys_rst_ni = 1'b0;
+				rst_run_d = 1'b0;
+				if (rst_run_q)
+					rst_fsm_ns = RUN;
+				else if (!prog_rst_ni)
+					rst_fsm_ns = PROG;
+				else
+					rst_fsm_ns = IDLE;
+			end
+			PROG: begin
+				sys_rst_ni = 1'b0;
+				rst_run_d = 1'b0;
+				if (!prog_rst_ni)
+					rst_fsm_ns = PROG;
+				else
+					rst_fsm_ns = RUN;
+			end
+			RUN: begin
+				sys_rst_ni = 1'b1;
+				rst_run_d = 1'b0;
+				if (!rst_ni) begin
+					rst_run_d = 1'b1;
+					rst_fsm_ns = RESET;
+				end
+				else if (!prog_rst_ni)
+					rst_fsm_ns = PROG;
+				else
+					rst_fsm_ns = RUN;
+			end
+			default: begin
+				rst_fsm_ns = rst_fsm_cs;
+				sys_rst_ni = 1'b0;
+				rst_run_d = 1'b0;
+			end
+		endcase
+	end
+	always @(posedge clk_i or negedge rst_ni) begin : seq_part
+		if (!rst_ni) begin
+			rst_fsm_cs <= RESET;
+			rst_run_q <= 1'b0;
+		end
+		else begin
+			rst_fsm_cs <= rst_fsm_ns;
+			rst_run_q <= rst_run_d;
+		end
+	end
+endmodule
+module tl_xbar_main (
+	clk_i,
+	rst_ni,
+	tl_brqif_i,
+	tl_brqif_o,
+	tl_brqlsu_i,
+	tl_brqlsu_o,
+	tl_iccm_o,
+	tl_iccm_i,
+	tl_dccm_o,
+	tl_dccm_i,
+	tl_timer0_o,
+	tl_timer0_i,
+	tl_uart_o,
+	tl_uart_i,
+	tl_spi_o,
+	tl_spi_i,
+	tl_pwm_o,
+	tl_pwm_i,
+	tl_gpio_o,
+	tl_gpio_i,
+	tl_plic_o,
+	tl_plic_i
+);
+	input wire clk_i;
+	input wire rst_ni;
+	localparam signed [31:0] tlul_pkg_TL_AIW = 8;
+	localparam signed [31:0] tlul_pkg_TL_AW = 32;
+	localparam signed [31:0] tlul_pkg_TL_DW = 32;
+	localparam signed [31:0] tlul_pkg_TL_DBW = 4;
+	localparam signed [31:0] tlul_pkg_TL_SZW = 2;
+	input wire [85:0] tl_brqif_i;
+	localparam signed [31:0] tlul_pkg_TL_DIW = 1;
+	output wire [51:0] tl_brqif_o;
+	input wire [85:0] tl_brqlsu_i;
+	output wire [51:0] tl_brqlsu_o;
+	output wire [85:0] tl_iccm_o;
+	input wire [51:0] tl_iccm_i;
+	output wire [85:0] tl_dccm_o;
+	input wire [51:0] tl_dccm_i;
+	output wire [85:0] tl_timer0_o;
+	input wire [51:0] tl_timer0_i;
+	output wire [85:0] tl_uart_o;
+	input wire [51:0] tl_uart_i;
+	output wire [85:0] tl_spi_o;
+	input wire [51:0] tl_spi_i;
+	output wire [85:0] tl_pwm_o;
+	input wire [51:0] tl_pwm_i;
+	output wire [85:0] tl_gpio_o;
+	input wire [51:0] tl_gpio_i;
+	output wire [85:0] tl_plic_o;
+	input wire [51:0] tl_plic_i;
+	wire [85:0] brqlsu_to_s1n;
+	wire [51:0] s1n_to_brqlsu;
+	reg [3:0] device_sel;
+	wire [601:0] h_dv_o;
+	wire [363:0] h_dv_i;
+	assign brqlsu_to_s1n = tl_brqlsu_i;
+	assign tl_brqlsu_o = s1n_to_brqlsu;
+	assign tl_iccm_o = tl_brqif_i;
+	assign tl_brqif_o = tl_iccm_i;
+	assign tl_dccm_o = h_dv_o[516+:86];
+	assign h_dv_i[312+:52] = tl_dccm_i;
+	assign tl_timer0_o = h_dv_o[430+:86];
+	assign h_dv_i[260+:52] = tl_timer0_i;
+	assign tl_uart_o = h_dv_o[344+:86];
+	assign h_dv_i[208+:52] = tl_uart_i;
+	assign tl_spi_o = h_dv_o[258+:86];
+	assign h_dv_i[156+:52] = tl_spi_i;
+	assign tl_pwm_o = h_dv_o[172+:86];
+	assign h_dv_i[104+:52] = tl_pwm_i;
+	assign tl_gpio_o = h_dv_o[86+:86];
+	assign h_dv_i[52+:52] = tl_gpio_i;
+	assign tl_plic_o = h_dv_o[0+:86];
+	assign h_dv_i[0+:52] = tl_plic_i;
+	localparam [31:0] tl_main_pkg_ADDR_MASK_DCCM = 32'h0000ffff;
+	localparam [31:0] tl_main_pkg_ADDR_MASK_GPIO = 32'h0000ffff;
+	localparam [31:0] tl_main_pkg_ADDR_MASK_PLIC = 32'h0000ffff;
+	localparam [31:0] tl_main_pkg_ADDR_MASK_PWM = 32'h0000ffff;
+	localparam [31:0] tl_main_pkg_ADDR_MASK_SPI0 = 32'h0000ffff;
+	localparam [31:0] tl_main_pkg_ADDR_MASK_TIMER0 = 32'h0000ffff;
+	localparam [31:0] tl_main_pkg_ADDR_MASK_UART0 = 32'h0000ffff;
+	localparam [31:0] tl_main_pkg_ADDR_SPACE_DCCM = 32'h10000000;
+	localparam [31:0] tl_main_pkg_ADDR_SPACE_GPIO = 32'h400c0000;
+	localparam [31:0] tl_main_pkg_ADDR_SPACE_PLIC = 32'h40050000;
+	localparam [31:0] tl_main_pkg_ADDR_SPACE_PWM = 32'h400b0000;
+	localparam [31:0] tl_main_pkg_ADDR_SPACE_SPI0 = 32'h40080000;
+	localparam [31:0] tl_main_pkg_ADDR_SPACE_TIMER0 = 32'h40000000;
+	localparam [31:0] tl_main_pkg_ADDR_SPACE_UART0 = 32'h40060000;
+	always @(*) begin
+		device_sel = 4'd9;
+		if ((brqlsu_to_s1n[68-:32] & ~tl_main_pkg_ADDR_MASK_DCCM) == tl_main_pkg_ADDR_SPACE_DCCM)
+			device_sel = 4'd0;
+		else if ((brqlsu_to_s1n[68-:32] & ~tl_main_pkg_ADDR_MASK_TIMER0) == tl_main_pkg_ADDR_SPACE_TIMER0)
+			device_sel = 4'd1;
+		else if ((brqlsu_to_s1n[68-:32] & ~tl_main_pkg_ADDR_MASK_UART0) == tl_main_pkg_ADDR_SPACE_UART0)
+			device_sel = 4'd2;
+		else if ((brqlsu_to_s1n[68-:32] & ~tl_main_pkg_ADDR_MASK_SPI0) == tl_main_pkg_ADDR_SPACE_SPI0)
+			device_sel = 4'd3;
+		else if ((brqlsu_to_s1n[68-:32] & ~tl_main_pkg_ADDR_MASK_PWM) == tl_main_pkg_ADDR_SPACE_PWM)
+			device_sel = 4'd4;
+		else if ((brqlsu_to_s1n[68-:32] & ~tl_main_pkg_ADDR_MASK_GPIO) == tl_main_pkg_ADDR_SPACE_GPIO)
+			device_sel = 4'd5;
+		else if ((brqlsu_to_s1n[68-:32] & ~tl_main_pkg_ADDR_MASK_PLIC) == tl_main_pkg_ADDR_SPACE_PLIC)
+			device_sel = 4'd6;
+	end
+	tlul_socket_1n #(
+		.HReqDepth(4'h0),
+		.HRspDepth(4'h0),
+		.DReqDepth(36'h000000000),
+		.DRspDepth(36'h000000000),
+		.N(7)
+	) host_lsu(
+		.clk_i(clk_i),
+		.rst_ni(rst_ni),
+		.tl_h_i(brqlsu_to_s1n),
+		.tl_h_o(s1n_to_brqlsu),
+		.tl_d_o(h_dv_o),
+		.tl_d_i(h_dv_i),
+		.dev_select_i(device_sel)
+	);
+endmodule
+module brq_counter (
+	clk_i,
+	rst_ni,
+	counter_inc_i,
+	counterh_we_i,
+	counter_we_i,
+	counter_val_i,
+	counter_val_o
+);
+	parameter signed [31:0] CounterWidth = 32;
+	input wire clk_i;
+	input wire rst_ni;
+	input wire counter_inc_i;
+	input wire counterh_we_i;
+	input wire counter_we_i;
+	input wire [31:0] counter_val_i;
+	output wire [63:0] counter_val_o;
+	wire [63:0] counter;
+	reg [CounterWidth - 1:0] counter_upd;
+	reg [63:0] counter_load;
+	reg we;
+	reg [CounterWidth - 1:0] counter_d;
+	always @(*) begin
+		we = counter_we_i | counterh_we_i;
+		counter_load[63:32] = counter[63:32];
+		counter_load[31:0] = counter_val_i;
+		if (counterh_we_i) begin
+			counter_load[63:32] = counter_val_i;
+			counter_load[31:0] = counter[31:0];
+		end
+		counter_upd = counter[CounterWidth - 1:0] + {{CounterWidth - 1 {1'b0}}, 1'b1};
+		if (we)
+			counter_d = counter_load[CounterWidth - 1:0];
+		else if (counter_inc_i)
+			counter_d = counter_upd[CounterWidth - 1:0];
+		else
+			counter_d = counter[CounterWidth - 1:0];
+	end
+	reg [CounterWidth - 1:0] counter_q;
+	always @(posedge clk_i or negedge rst_ni)
+		if (!rst_ni)
+			counter_q <= {CounterWidth {1'sb0}};
+		else
+			counter_q <= counter_d;
+	generate
+		if (CounterWidth < 64) begin : g_counter_narrow
+			wire [63:CounterWidth] unused_counter_load;
+			assign counter[CounterWidth - 1:0] = counter_q;
+			assign counter[63:CounterWidth] = {(63 >= CounterWidth ? 64 - CounterWidth : CounterWidth - 62) {1'sb0}};
+			assign unused_counter_load = counter_load[63:CounterWidth];
+		end
+		else begin : g_counter_full
+			assign counter = counter_q;
+		end
+	endgenerate
+	assign counter_val_o = counter;
+endmodule
+module brq_cs_registers (
+	clk_i,
+	rst_ni,
+	hart_id_i,
+	priv_mode_id_o,
+	priv_mode_if_o,
+	priv_mode_lsu_o,
+	csr_mstatus_tw_o,
+	csr_mtvec_o,
+	csr_mtvec_init_i,
+	boot_addr_i,
+	csr_access_i,
+	csr_addr_i,
+	csr_wdata_i,
+	csr_op_i,
+	csr_op_en_i,
+	csr_rdata_o,
+	irq_software_i,
+	irq_timer_i,
+	irq_external_i,
+	irq_fast_i,
+	nmi_mode_i,
+	irq_pending_o,
+	irqs_o,
+	csr_mstatus_mie_o,
+	csr_mepc_o,
+	csr_pmp_cfg_o,
+	csr_pmp_addr_o,
+	debug_mode_i,
+	debug_cause_i,
+	debug_csr_save_i,
+	csr_depc_o,
+	debug_single_step_o,
+	debug_ebreakm_o,
+	debug_ebreaku_o,
+	trigger_match_o,
+	pc_if_i,
+	pc_id_i,
+	pc_wb_i,
+	data_ind_timing_o,
+	csr_shadow_err_o,
+	csr_save_if_i,
+	csr_save_id_i,
+	csr_save_wb_i,
+	csr_restore_mret_i,
+	csr_restore_dret_i,
+	csr_save_cause_i,
+	csr_mcause_i,
+	csr_mtval_i,
+	illegal_csr_insn_o,
+	instr_ret_i,
+	instr_ret_compressed_i,
+	iside_wait_i,
+	jump_i,
+	branch_i,
+	branch_taken_i,
+	mem_load_i,
+	mem_store_i,
+	dside_wait_i,
+	mul_wait_i,
+	div_wait_i,
+	fp_rm_dynamic_i,
+	fp_frm_o,
+	fp_status_i,
+	is_fp_instr_i
+);
+	parameter [0:0] DbgTriggerEn = 0;
+	parameter [31:0] DbgHwBreakNum = 1;
+	parameter [0:0] DataIndTiming = 1'b0;
+	parameter [0:0] DummyInstructions = 1'b0;
+	parameter [0:0] ShadowCSR = 1'b0;
+	parameter [0:0] ICache = 1'b0;
+	parameter [31:0] MHPMCounterNum = 10;
+	parameter [31:0] MHPMCounterWidth = 40;
+	parameter [0:0] PMPEnable = 0;
+	parameter [31:0] PMPGranularity = 0;
+	parameter [31:0] PMPNumRegions = 4;
+	parameter [0:0] RV32E = 0;
+	localparam integer brq_pkg_RV32MFast = 2;
+	parameter integer RV32M = brq_pkg_RV32MFast;
+	localparam integer brq_pkg_RV64FDouble = 2;
+	parameter integer RVF = brq_pkg_RV64FDouble;
+	input wire clk_i;
+	input wire rst_ni;
+	input wire [31:0] hart_id_i;
+	output wire [1:0] priv_mode_id_o;
+	output wire [1:0] priv_mode_if_o;
+	output wire [1:0] priv_mode_lsu_o;
+	output wire csr_mstatus_tw_o;
+	output wire [31:0] csr_mtvec_o;
+	input wire csr_mtvec_init_i;
+	input wire [31:0] boot_addr_i;
+	input wire csr_access_i;
+	input wire [11:0] csr_addr_i;
+	input wire [31:0] csr_wdata_i;
+	input wire [1:0] csr_op_i;
+	input wire csr_op_en_i;
+	output wire [31:0] csr_rdata_o;
+	input wire irq_software_i;
+	input wire irq_timer_i;
+	input wire irq_external_i;
+	input wire [14:0] irq_fast_i;
+	input wire nmi_mode_i;
+	output wire irq_pending_o;
+	output wire [17:0] irqs_o;
+	output wire csr_mstatus_mie_o;
+	output wire [31:0] csr_mepc_o;
+	output wire [(0 >= (PMPNumRegions - 1) ? ((2 - PMPNumRegions) * 6) + (((PMPNumRegions - 1) * 6) - 1) : (PMPNumRegions * 6) - 1):(0 >= (PMPNumRegions - 1) ? (PMPNumRegions - 1) * 6 : 0)] csr_pmp_cfg_o;
+	output wire [(0 >= (PMPNumRegions - 1) ? ((2 - PMPNumRegions) * 34) + (((PMPNumRegions - 1) * 34) - 1) : (PMPNumRegions * 34) - 1):(0 >= (PMPNumRegions - 1) ? (PMPNumRegions - 1) * 34 : 0)] csr_pmp_addr_o;
+	input wire debug_mode_i;
+	input wire [2:0] debug_cause_i;
+	input wire debug_csr_save_i;
+	output wire [31:0] csr_depc_o;
+	output wire debug_single_step_o;
+	output wire debug_ebreakm_o;
+	output wire debug_ebreaku_o;
+	output wire trigger_match_o;
+	input wire [31:0] pc_if_i;
+	input wire [31:0] pc_id_i;
+	input wire [31:0] pc_wb_i;
+	output wire data_ind_timing_o;
+	output wire csr_shadow_err_o;
+	input wire csr_save_if_i;
+	input wire csr_save_id_i;
+	input wire csr_save_wb_i;
+	input wire csr_restore_mret_i;
+	input wire csr_restore_dret_i;
+	input wire csr_save_cause_i;
+	input wire [5:0] csr_mcause_i;
+	input wire [31:0] csr_mtval_i;
+	output wire illegal_csr_insn_o;
+	input wire instr_ret_i;
+	input wire instr_ret_compressed_i;
+	input wire iside_wait_i;
+	input wire jump_i;
+	input wire branch_i;
+	input wire branch_taken_i;
+	input wire mem_load_i;
+	input wire mem_store_i;
+	input wire dside_wait_i;
+	input wire mul_wait_i;
+	input wire div_wait_i;
+	input wire fp_rm_dynamic_i;
+	output reg [2:0] fp_frm_o;
+	input wire [4:0] fp_status_i;
+	input wire is_fp_instr_i;
+	wire dummy_instr_en_o;
+	wire [2:0] dummy_instr_mask_o;
+	wire dummy_instr_seed_en_o;
+	wire [31:0] dummy_instr_seed_o;
+	wire icache_enable_o;
+	localparam integer brq_pkg_RV32MNone = 0;
+	localparam [31:0] RV32MEnabled = (RV32M == brq_pkg_RV32MNone ? 0 : 1);
+	localparam [31:0] PMPAddrWidth = (PMPGranularity > 0 ? 33 - PMPGranularity : 32);
+	localparam integer brq_pkg_RV32FSingle = 1;
+	localparam [31:0] SinglePrecision = (RVF == brq_pkg_RV32FSingle ? 1 : 0);
+	localparam [31:0] DoublePrecision = (RVF == brq_pkg_RV64FDouble ? 1 : 0);
+	localparam [1:0] brq_pkg_CSR_MISA_MXL = 2'd1;
+	function automatic [31:0] sv2v_cast_32;
+		input reg [31:0] inp;
+		sv2v_cast_32 = inp;
+	endfunction
+	localparam [31:0] MISA_VALUE = ((((((((((0 | 4) | (DoublePrecision << 3)) | (sv2v_cast_32(RV32E) << 4)) | (SinglePrecision << 5)) | (sv2v_cast_32(!RV32E) << 8)) | (RV32MEnabled << 12)) | 0) | 0) | 1048576) | 0) | (sv2v_cast_32(brq_pkg_CSR_MISA_MXL) << 30);
+	reg [31:0] exception_pc;
+	wire [4:0] fflags_q;
+	reg [4:0] fflags_d;
+	wire [4:0] fflag_wdata;
+	reg fflags_en;
+	reg frm_en;
+	wire [2:0] frm_q;
+	reg [2:0] frm_d;
+	reg [1:0] priv_lvl_q;
+	reg [1:0] priv_lvl_d;
+	wire [5:0] mstatus_q;
+	reg [5:0] mstatus_d;
+	wire mstatus_err;
+	reg mstatus_en;
+	wire [17:0] mie_q;
+	wire [17:0] mie_d;
+	reg mie_en;
+	wire [31:0] mscratch_q;
+	reg mscratch_en;
+	wire [31:0] mepc_q;
+	reg [31:0] mepc_d;
+	reg mepc_en;
+	wire [5:0] mcause_q;
+	reg [5:0] mcause_d;
+	reg mcause_en;
+	wire [31:0] mtval_q;
+	reg [31:0] mtval_d;
+	reg mtval_en;
+	wire [31:0] mtvec_q;
+	reg [31:0] mtvec_d;
+	wire mtvec_err;
+	reg mtvec_en;
+	wire [17:0] mip;
+	wire [31:0] dcsr_q;
+	reg [31:0] dcsr_d;
+	reg dcsr_en;
+	wire [31:0] depc_q;
+	reg [31:0] depc_d;
+	reg depc_en;
+	wire [31:0] dscratch0_q;
+	wire [31:0] dscratch1_q;
+	reg dscratch0_en;
+	reg dscratch1_en;
+	wire [2:0] mstack_q;
+	reg [2:0] mstack_d;
+	reg mstack_en;
+	wire [31:0] mstack_epc_q;
+	reg [31:0] mstack_epc_d;
+	wire [5:0] mstack_cause_q;
+	reg [5:0] mstack_cause_d;
+	localparam [31:0] brq_pkg_PMP_MAX_REGIONS = 16;
+	reg [31:0] pmp_addr_rdata [0:15];
+	localparam [31:0] brq_pkg_PMP_CFG_W = 8;
+	wire [7:0] pmp_cfg_rdata [0:15];
+	wire pmp_csr_err;
+	wire [31:0] mcountinhibit;
+	reg [MHPMCounterNum + 2:0] mcountinhibit_d;
+	reg [MHPMCounterNum + 2:0] mcountinhibit_q;
+	reg mcountinhibit_we;
+	wire [63:0] mhpmcounter [0:31];
+	reg [31:0] mhpmcounter_we;
+	reg [31:0] mhpmcounterh_we;
+	reg [31:0] mhpmcounter_incr;
+	reg [31:0] mhpmevent [0:31];
+	wire [4:0] mhpmcounter_idx;
+	wire unused_mhpmcounter_we_1;
+	wire unused_mhpmcounterh_we_1;
+	wire unused_mhpmcounter_incr_1;
+	wire [31:0] tselect_rdata;
+	wire [31:0] tmatch_control_rdata;
+	wire [31:0] tmatch_value_rdata;
+	wire [5:0] cpuctrl_q;
+	wire [5:0] cpuctrl_d;
+	wire [5:0] cpuctrl_wdata;
+	reg cpuctrl_we;
+	wire cpuctrl_err;
+	reg [31:0] csr_wdata_int;
+	reg [31:0] csr_rdata_int;
+	wire csr_we_int;
+	wire csr_wreq;
+	reg illegal_csr;
+	wire illegal_csr_priv;
+	wire illegal_csr_write;
+	wire [7:0] unused_boot_addr;
+	wire [2:0] unused_csr_addr;
+	assign unused_boot_addr = boot_addr_i[7:0];
+	reg illegal_dyn_mod;
+	wire illegal_csr_dyn_mod;
+	wire [11:0] csr_addr;
+	assign csr_addr = {csr_addr_i};
+	assign unused_csr_addr = csr_addr[7:5];
+	assign mhpmcounter_idx = csr_addr[4:0];
+	assign illegal_csr_dyn_mod = illegal_dyn_mod & fp_rm_dynamic_i;
+	assign illegal_csr_priv = csr_addr[9:8] > {priv_lvl_q};
+	assign illegal_csr_write = (csr_addr[11:10] == 2'b11) && csr_wreq;
+	assign illegal_csr_insn_o = (csr_access_i & ((illegal_csr | illegal_csr_write) | illegal_csr_priv)) | illegal_csr_dyn_mod;
+	assign mip[17] = irq_software_i;
+	assign mip[16] = irq_timer_i;
+	assign mip[15] = irq_external_i;
+	assign mip[14-:15] = irq_fast_i;
+	always @(*) begin
+		case (frm_q)
+			3'b000, 3'b001, 3'b010, 3'b011, 3'b100: illegal_dyn_mod = 1'b0;
+			3'b101, 3'b110, 3'b111: illegal_dyn_mod = 1'b1;
+		endcase
+		fp_frm_o = frm_q;
+	end
+	localparam [31:0] brq_pkg_CSR_MEIX_BIT = 11;
+	localparam [31:0] brq_pkg_CSR_MFIX_BIT_HIGH = 30;
+	localparam [31:0] brq_pkg_CSR_MFIX_BIT_LOW = 16;
+	localparam [31:0] brq_pkg_CSR_MSIX_BIT = 3;
+	localparam [31:0] brq_pkg_CSR_MSTATUS_MIE_BIT = 3;
+	localparam [31:0] brq_pkg_CSR_MSTATUS_MPIE_BIT = 7;
+	localparam [31:0] brq_pkg_CSR_MSTATUS_MPP_BIT_HIGH = 12;
+	localparam [31:0] brq_pkg_CSR_MSTATUS_MPP_BIT_LOW = 11;
+	localparam [31:0] brq_pkg_CSR_MSTATUS_MPRV_BIT = 17;
+	localparam [31:0] brq_pkg_CSR_MSTATUS_TW_BIT = 21;
+	localparam [31:0] brq_pkg_CSR_MTIX_BIT = 7;
+	localparam [11:0] brq_pkg_CSR_CPUCTRL = 12'h7c0;
+	localparam [11:0] brq_pkg_CSR_DCSR = 12'h7b0;
+	localparam [11:0] brq_pkg_CSR_DPC = 12'h7b1;
+	localparam [11:0] brq_pkg_CSR_DSCRATCH0 = 12'h7b2;
+	localparam [11:0] brq_pkg_CSR_DSCRATCH1 = 12'h7b3;
+	localparam [11:0] brq_pkg_CSR_FCSR = 12'h003;
+	localparam [11:0] brq_pkg_CSR_FFLAG = 12'h001;
+	localparam [11:0] brq_pkg_CSR_FRM = 12'h002;
+	localparam [11:0] brq_pkg_CSR_MCAUSE = 12'h342;
+	localparam [11:0] brq_pkg_CSR_MCONTEXT = 12'h7a8;
+	localparam [11:0] brq_pkg_CSR_MCOUNTINHIBIT = 12'h320;
+	localparam [11:0] brq_pkg_CSR_MCYCLE = 12'hb00;
+	localparam [11:0] brq_pkg_CSR_MCYCLEH = 12'hb80;
+	localparam [11:0] brq_pkg_CSR_MEPC = 12'h341;
+	localparam [11:0] brq_pkg_CSR_MHARTID = 12'hf14;
+	localparam [11:0] brq_pkg_CSR_MHPMCOUNTER10 = 12'hb0a;
+	localparam [11:0] brq_pkg_CSR_MHPMCOUNTER10H = 12'hb8a;
+	localparam [11:0] brq_pkg_CSR_MHPMCOUNTER11 = 12'hb0b;
+	localparam [11:0] brq_pkg_CSR_MHPMCOUNTER11H = 12'hb8b;
+	localparam [11:0] brq_pkg_CSR_MHPMCOUNTER12 = 12'hb0c;
+	localparam [11:0] brq_pkg_CSR_MHPMCOUNTER12H = 12'hb8c;
+	localparam [11:0] brq_pkg_CSR_MHPMCOUNTER13 = 12'hb0d;
+	localparam [11:0] brq_pkg_CSR_MHPMCOUNTER13H = 12'hb8d;
+	localparam [11:0] brq_pkg_CSR_MHPMCOUNTER14 = 12'hb0e;
+	localparam [11:0] brq_pkg_CSR_MHPMCOUNTER14H = 12'hb8e;
+	localparam [11:0] brq_pkg_CSR_MHPMCOUNTER15 = 12'hb0f;
+	localparam [11:0] brq_pkg_CSR_MHPMCOUNTER15H = 12'hb8f;
+	localparam [11:0] brq_pkg_CSR_MHPMCOUNTER16 = 12'hb10;
+	localparam [11:0] brq_pkg_CSR_MHPMCOUNTER16H = 12'hb90;
+	localparam [11:0] brq_pkg_CSR_MHPMCOUNTER17 = 12'hb11;
+	localparam [11:0] brq_pkg_CSR_MHPMCOUNTER17H = 12'hb91;
+	localparam [11:0] brq_pkg_CSR_MHPMCOUNTER18 = 12'hb12;
+	localparam [11:0] brq_pkg_CSR_MHPMCOUNTER18H = 12'hb92;
+	localparam [11:0] brq_pkg_CSR_MHPMCOUNTER19 = 12'hb13;
+	localparam [11:0] brq_pkg_CSR_MHPMCOUNTER19H = 12'hb93;
+	localparam [11:0] brq_pkg_CSR_MHPMCOUNTER20 = 12'hb14;
+	localparam [11:0] brq_pkg_CSR_MHPMCOUNTER20H = 12'hb94;
+	localparam [11:0] brq_pkg_CSR_MHPMCOUNTER21 = 12'hb15;
+	localparam [11:0] brq_pkg_CSR_MHPMCOUNTER21H = 12'hb95;
+	localparam [11:0] brq_pkg_CSR_MHPMCOUNTER22 = 12'hb16;
+	localparam [11:0] brq_pkg_CSR_MHPMCOUNTER22H = 12'hb96;
+	localparam [11:0] brq_pkg_CSR_MHPMCOUNTER23 = 12'hb17;
+	localparam [11:0] brq_pkg_CSR_MHPMCOUNTER23H = 12'hb97;
+	localparam [11:0] brq_pkg_CSR_MHPMCOUNTER24 = 12'hb18;
+	localparam [11:0] brq_pkg_CSR_MHPMCOUNTER24H = 12'hb98;
+	localparam [11:0] brq_pkg_CSR_MHPMCOUNTER25 = 12'hb19;
+	localparam [11:0] brq_pkg_CSR_MHPMCOUNTER25H = 12'hb99;
+	localparam [11:0] brq_pkg_CSR_MHPMCOUNTER26 = 12'hb1a;
+	localparam [11:0] brq_pkg_CSR_MHPMCOUNTER26H = 12'hb9a;
+	localparam [11:0] brq_pkg_CSR_MHPMCOUNTER27 = 12'hb1b;
+	localparam [11:0] brq_pkg_CSR_MHPMCOUNTER27H = 12'hb9b;
+	localparam [11:0] brq_pkg_CSR_MHPMCOUNTER28 = 12'hb1c;
+	localparam [11:0] brq_pkg_CSR_MHPMCOUNTER28H = 12'hb9c;
+	localparam [11:0] brq_pkg_CSR_MHPMCOUNTER29 = 12'hb1d;
+	localparam [11:0] brq_pkg_CSR_MHPMCOUNTER29H = 12'hb9d;
+	localparam [11:0] brq_pkg_CSR_MHPMCOUNTER3 = 12'hb03;
+	localparam [11:0] brq_pkg_CSR_MHPMCOUNTER30 = 12'hb1e;
+	localparam [11:0] brq_pkg_CSR_MHPMCOUNTER30H = 12'hb9e;
+	localparam [11:0] brq_pkg_CSR_MHPMCOUNTER31 = 12'hb1f;
+	localparam [11:0] brq_pkg_CSR_MHPMCOUNTER31H = 12'hb9f;
+	localparam [11:0] brq_pkg_CSR_MHPMCOUNTER3H = 12'hb83;
+	localparam [11:0] brq_pkg_CSR_MHPMCOUNTER4 = 12'hb04;
+	localparam [11:0] brq_pkg_CSR_MHPMCOUNTER4H = 12'hb84;
+	localparam [11:0] brq_pkg_CSR_MHPMCOUNTER5 = 12'hb05;
+	localparam [11:0] brq_pkg_CSR_MHPMCOUNTER5H = 12'hb85;
+	localparam [11:0] brq_pkg_CSR_MHPMCOUNTER6 = 12'hb06;
+	localparam [11:0] brq_pkg_CSR_MHPMCOUNTER6H = 12'hb86;
+	localparam [11:0] brq_pkg_CSR_MHPMCOUNTER7 = 12'hb07;
+	localparam [11:0] brq_pkg_CSR_MHPMCOUNTER7H = 12'hb87;
+	localparam [11:0] brq_pkg_CSR_MHPMCOUNTER8 = 12'hb08;
+	localparam [11:0] brq_pkg_CSR_MHPMCOUNTER8H = 12'hb88;
+	localparam [11:0] brq_pkg_CSR_MHPMCOUNTER9 = 12'hb09;
+	localparam [11:0] brq_pkg_CSR_MHPMCOUNTER9H = 12'hb89;
+	localparam [11:0] brq_pkg_CSR_MHPMEVENT10 = 12'h32a;
+	localparam [11:0] brq_pkg_CSR_MHPMEVENT11 = 12'h32b;
+	localparam [11:0] brq_pkg_CSR_MHPMEVENT12 = 12'h32c;
+	localparam [11:0] brq_pkg_CSR_MHPMEVENT13 = 12'h32d;
+	localparam [11:0] brq_pkg_CSR_MHPMEVENT14 = 12'h32e;
+	localparam [11:0] brq_pkg_CSR_MHPMEVENT15 = 12'h32f;
+	localparam [11:0] brq_pkg_CSR_MHPMEVENT16 = 12'h330;
+	localparam [11:0] brq_pkg_CSR_MHPMEVENT17 = 12'h331;
+	localparam [11:0] brq_pkg_CSR_MHPMEVENT18 = 12'h332;
+	localparam [11:0] brq_pkg_CSR_MHPMEVENT19 = 12'h333;
+	localparam [11:0] brq_pkg_CSR_MHPMEVENT20 = 12'h334;
+	localparam [11:0] brq_pkg_CSR_MHPMEVENT21 = 12'h335;
+	localparam [11:0] brq_pkg_CSR_MHPMEVENT22 = 12'h336;
+	localparam [11:0] brq_pkg_CSR_MHPMEVENT23 = 12'h337;
+	localparam [11:0] brq_pkg_CSR_MHPMEVENT24 = 12'h338;
+	localparam [11:0] brq_pkg_CSR_MHPMEVENT25 = 12'h339;
+	localparam [11:0] brq_pkg_CSR_MHPMEVENT26 = 12'h33a;
+	localparam [11:0] brq_pkg_CSR_MHPMEVENT27 = 12'h33b;
+	localparam [11:0] brq_pkg_CSR_MHPMEVENT28 = 12'h33c;
+	localparam [11:0] brq_pkg_CSR_MHPMEVENT29 = 12'h33d;
+	localparam [11:0] brq_pkg_CSR_MHPMEVENT3 = 12'h323;
+	localparam [11:0] brq_pkg_CSR_MHPMEVENT30 = 12'h33e;
+	localparam [11:0] brq_pkg_CSR_MHPMEVENT31 = 12'h33f;
+	localparam [11:0] brq_pkg_CSR_MHPMEVENT4 = 12'h324;
+	localparam [11:0] brq_pkg_CSR_MHPMEVENT5 = 12'h325;
+	localparam [11:0] brq_pkg_CSR_MHPMEVENT6 = 12'h326;
+	localparam [11:0] brq_pkg_CSR_MHPMEVENT7 = 12'h327;
+	localparam [11:0] brq_pkg_CSR_MHPMEVENT8 = 12'h328;
+	localparam [11:0] brq_pkg_CSR_MHPMEVENT9 = 12'h329;
+	localparam [11:0] brq_pkg_CSR_MIE = 12'h304;
+	localparam [11:0] brq_pkg_CSR_MINSTRET = 12'hb02;
+	localparam [11:0] brq_pkg_CSR_MINSTRETH = 12'hb82;
+	localparam [11:0] brq_pkg_CSR_MIP = 12'h344;
+	localparam [11:0] brq_pkg_CSR_MISA = 12'h301;
+	localparam [11:0] brq_pkg_CSR_MSCRATCH = 12'h340;
+	localparam [11:0] brq_pkg_CSR_MSTATUS = 12'h300;
+	localparam [11:0] brq_pkg_CSR_MTVAL = 12'h343;
+	localparam [11:0] brq_pkg_CSR_MTVEC = 12'h305;
+	localparam [11:0] brq_pkg_CSR_PMPADDR0 = 12'h3b0;
+	localparam [11:0] brq_pkg_CSR_PMPADDR1 = 12'h3b1;
+	localparam [11:0] brq_pkg_CSR_PMPADDR10 = 12'h3ba;
+	localparam [11:0] brq_pkg_CSR_PMPADDR11 = 12'h3bb;
+	localparam [11:0] brq_pkg_CSR_PMPADDR12 = 12'h3bc;
+	localparam [11:0] brq_pkg_CSR_PMPADDR13 = 12'h3bd;
+	localparam [11:0] brq_pkg_CSR_PMPADDR14 = 12'h3be;
+	localparam [11:0] brq_pkg_CSR_PMPADDR15 = 12'h3bf;
+	localparam [11:0] brq_pkg_CSR_PMPADDR2 = 12'h3b2;
+	localparam [11:0] brq_pkg_CSR_PMPADDR3 = 12'h3b3;
+	localparam [11:0] brq_pkg_CSR_PMPADDR4 = 12'h3b4;
+	localparam [11:0] brq_pkg_CSR_PMPADDR5 = 12'h3b5;
+	localparam [11:0] brq_pkg_CSR_PMPADDR6 = 12'h3b6;
+	localparam [11:0] brq_pkg_CSR_PMPADDR7 = 12'h3b7;
+	localparam [11:0] brq_pkg_CSR_PMPADDR8 = 12'h3b8;
+	localparam [11:0] brq_pkg_CSR_PMPADDR9 = 12'h3b9;
+	localparam [11:0] brq_pkg_CSR_PMPCFG0 = 12'h3a0;
+	localparam [11:0] brq_pkg_CSR_PMPCFG1 = 12'h3a1;
+	localparam [11:0] brq_pkg_CSR_PMPCFG2 = 12'h3a2;
+	localparam [11:0] brq_pkg_CSR_PMPCFG3 = 12'h3a3;
+	localparam [11:0] brq_pkg_CSR_SCONTEXT = 12'h7aa;
+	localparam [11:0] brq_pkg_CSR_SECURESEED = 12'h7c1;
+	localparam [11:0] brq_pkg_CSR_TDATA1 = 12'h7a1;
+	localparam [11:0] brq_pkg_CSR_TDATA2 = 12'h7a2;
+	localparam [11:0] brq_pkg_CSR_TDATA3 = 12'h7a3;
+	localparam [11:0] brq_pkg_CSR_TSELECT = 12'h7a0;
+	always @(*) begin
+		csr_rdata_int = {32 {1'sb0}};
+		illegal_csr = 1'b0;
+		case (csr_addr_i)
+			brq_pkg_CSR_FCSR: csr_rdata_int = {24'b000000000000000000000000, frm_q, fflags_q};
+			brq_pkg_CSR_FFLAG: csr_rdata_int = {27'b000000000000000000000000000, fflags_q};
+			brq_pkg_CSR_FRM: csr_rdata_int = {29'b00000000000000000000000000000, frm_q};
+			brq_pkg_CSR_MHARTID: csr_rdata_int = hart_id_i;
+			brq_pkg_CSR_MSTATUS: begin
+				csr_rdata_int = {32 {1'sb0}};
+				csr_rdata_int[brq_pkg_CSR_MSTATUS_MIE_BIT] = mstatus_q[5];
+				csr_rdata_int[brq_pkg_CSR_MSTATUS_MPIE_BIT] = mstatus_q[4];
+				csr_rdata_int[brq_pkg_CSR_MSTATUS_MPP_BIT_HIGH:brq_pkg_CSR_MSTATUS_MPP_BIT_LOW] = mstatus_q[3-:2];
+				csr_rdata_int[brq_pkg_CSR_MSTATUS_MPRV_BIT] = mstatus_q[1];
+				csr_rdata_int[brq_pkg_CSR_MSTATUS_TW_BIT] = mstatus_q[0];
+			end
+			brq_pkg_CSR_MISA: csr_rdata_int = MISA_VALUE;
+			brq_pkg_CSR_MIE: begin
+				csr_rdata_int = {32 {1'sb0}};
+				csr_rdata_int[brq_pkg_CSR_MSIX_BIT] = mie_q[17];
+				csr_rdata_int[brq_pkg_CSR_MTIX_BIT] = mie_q[16];
+				csr_rdata_int[brq_pkg_CSR_MEIX_BIT] = mie_q[15];
+				csr_rdata_int[brq_pkg_CSR_MFIX_BIT_HIGH:brq_pkg_CSR_MFIX_BIT_LOW] = mie_q[14-:15];
+			end
+			brq_pkg_CSR_MSCRATCH: csr_rdata_int = mscratch_q;
+			brq_pkg_CSR_MTVEC: csr_rdata_int = mtvec_q;
+			brq_pkg_CSR_MEPC: csr_rdata_int = mepc_q;
+			brq_pkg_CSR_MCAUSE: csr_rdata_int = {mcause_q[5], 26'b00000000000000000000000000, mcause_q[4:0]};
+			brq_pkg_CSR_MTVAL: csr_rdata_int = mtval_q;
+			brq_pkg_CSR_MIP: begin
+				csr_rdata_int = {32 {1'sb0}};
+				csr_rdata_int[brq_pkg_CSR_MSIX_BIT] = mip[17];
+				csr_rdata_int[brq_pkg_CSR_MTIX_BIT] = mip[16];
+				csr_rdata_int[brq_pkg_CSR_MEIX_BIT] = mip[15];
+				csr_rdata_int[brq_pkg_CSR_MFIX_BIT_HIGH:brq_pkg_CSR_MFIX_BIT_LOW] = mip[14-:15];
+			end
+			brq_pkg_CSR_PMPCFG0: csr_rdata_int = {pmp_cfg_rdata[3], pmp_cfg_rdata[2], pmp_cfg_rdata[1], pmp_cfg_rdata[0]};
+			brq_pkg_CSR_PMPCFG1: csr_rdata_int = {pmp_cfg_rdata[7], pmp_cfg_rdata[6], pmp_cfg_rdata[5], pmp_cfg_rdata[4]};
+			brq_pkg_CSR_PMPCFG2: csr_rdata_int = {pmp_cfg_rdata[11], pmp_cfg_rdata[10], pmp_cfg_rdata[9], pmp_cfg_rdata[8]};
+			brq_pkg_CSR_PMPCFG3: csr_rdata_int = {pmp_cfg_rdata[15], pmp_cfg_rdata[14], pmp_cfg_rdata[13], pmp_cfg_rdata[12]};
+			brq_pkg_CSR_PMPADDR0: csr_rdata_int = pmp_addr_rdata[0];
+			brq_pkg_CSR_PMPADDR1: csr_rdata_int = pmp_addr_rdata[1];
+			brq_pkg_CSR_PMPADDR2: csr_rdata_int = pmp_addr_rdata[2];
+			brq_pkg_CSR_PMPADDR3: csr_rdata_int = pmp_addr_rdata[3];
+			brq_pkg_CSR_PMPADDR4: csr_rdata_int = pmp_addr_rdata[4];
+			brq_pkg_CSR_PMPADDR5: csr_rdata_int = pmp_addr_rdata[5];
+			brq_pkg_CSR_PMPADDR6: csr_rdata_int = pmp_addr_rdata[6];
+			brq_pkg_CSR_PMPADDR7: csr_rdata_int = pmp_addr_rdata[7];
+			brq_pkg_CSR_PMPADDR8: csr_rdata_int = pmp_addr_rdata[8];
+			brq_pkg_CSR_PMPADDR9: csr_rdata_int = pmp_addr_rdata[9];
+			brq_pkg_CSR_PMPADDR10: csr_rdata_int = pmp_addr_rdata[10];
+			brq_pkg_CSR_PMPADDR11: csr_rdata_int = pmp_addr_rdata[11];
+			brq_pkg_CSR_PMPADDR12: csr_rdata_int = pmp_addr_rdata[12];
+			brq_pkg_CSR_PMPADDR13: csr_rdata_int = pmp_addr_rdata[13];
+			brq_pkg_CSR_PMPADDR14: csr_rdata_int = pmp_addr_rdata[14];
+			brq_pkg_CSR_PMPADDR15: csr_rdata_int = pmp_addr_rdata[15];
+			brq_pkg_CSR_DCSR: begin
+				csr_rdata_int = dcsr_q;
+				illegal_csr = ~debug_mode_i;
+			end
+			brq_pkg_CSR_DPC: begin
+				csr_rdata_int = depc_q;
+				illegal_csr = ~debug_mode_i;
+			end
+			brq_pkg_CSR_DSCRATCH0: begin
+				csr_rdata_int = dscratch0_q;
+				illegal_csr = ~debug_mode_i;
+			end
+			brq_pkg_CSR_DSCRATCH1: begin
+				csr_rdata_int = dscratch1_q;
+				illegal_csr = ~debug_mode_i;
+			end
+			brq_pkg_CSR_MCOUNTINHIBIT: csr_rdata_int = mcountinhibit;
+			brq_pkg_CSR_MHPMEVENT3, brq_pkg_CSR_MHPMEVENT4, brq_pkg_CSR_MHPMEVENT5, brq_pkg_CSR_MHPMEVENT6, brq_pkg_CSR_MHPMEVENT7, brq_pkg_CSR_MHPMEVENT8, brq_pkg_CSR_MHPMEVENT9, brq_pkg_CSR_MHPMEVENT10, brq_pkg_CSR_MHPMEVENT11, brq_pkg_CSR_MHPMEVENT12, brq_pkg_CSR_MHPMEVENT13, brq_pkg_CSR_MHPMEVENT14, brq_pkg_CSR_MHPMEVENT15, brq_pkg_CSR_MHPMEVENT16, brq_pkg_CSR_MHPMEVENT17, brq_pkg_CSR_MHPMEVENT18, brq_pkg_CSR_MHPMEVENT19, brq_pkg_CSR_MHPMEVENT20, brq_pkg_CSR_MHPMEVENT21, brq_pkg_CSR_MHPMEVENT22, brq_pkg_CSR_MHPMEVENT23, brq_pkg_CSR_MHPMEVENT24, brq_pkg_CSR_MHPMEVENT25, brq_pkg_CSR_MHPMEVENT26, brq_pkg_CSR_MHPMEVENT27, brq_pkg_CSR_MHPMEVENT28, brq_pkg_CSR_MHPMEVENT29, brq_pkg_CSR_MHPMEVENT30, brq_pkg_CSR_MHPMEVENT31: csr_rdata_int = mhpmevent[mhpmcounter_idx];
+			brq_pkg_CSR_MCYCLE, brq_pkg_CSR_MINSTRET, brq_pkg_CSR_MHPMCOUNTER3, brq_pkg_CSR_MHPMCOUNTER4, brq_pkg_CSR_MHPMCOUNTER5, brq_pkg_CSR_MHPMCOUNTER6, brq_pkg_CSR_MHPMCOUNTER7, brq_pkg_CSR_MHPMCOUNTER8, brq_pkg_CSR_MHPMCOUNTER9, brq_pkg_CSR_MHPMCOUNTER10, brq_pkg_CSR_MHPMCOUNTER11, brq_pkg_CSR_MHPMCOUNTER12, brq_pkg_CSR_MHPMCOUNTER13, brq_pkg_CSR_MHPMCOUNTER14, brq_pkg_CSR_MHPMCOUNTER15, brq_pkg_CSR_MHPMCOUNTER16, brq_pkg_CSR_MHPMCOUNTER17, brq_pkg_CSR_MHPMCOUNTER18, brq_pkg_CSR_MHPMCOUNTER19, brq_pkg_CSR_MHPMCOUNTER20, brq_pkg_CSR_MHPMCOUNTER21, brq_pkg_CSR_MHPMCOUNTER22, brq_pkg_CSR_MHPMCOUNTER23, brq_pkg_CSR_MHPMCOUNTER24, brq_pkg_CSR_MHPMCOUNTER25, brq_pkg_CSR_MHPMCOUNTER26, brq_pkg_CSR_MHPMCOUNTER27, brq_pkg_CSR_MHPMCOUNTER28, brq_pkg_CSR_MHPMCOUNTER29, brq_pkg_CSR_MHPMCOUNTER30, brq_pkg_CSR_MHPMCOUNTER31: csr_rdata_int = mhpmcounter[mhpmcounter_idx][31:0];
+			brq_pkg_CSR_MCYCLEH, brq_pkg_CSR_MINSTRETH, brq_pkg_CSR_MHPMCOUNTER3H, brq_pkg_CSR_MHPMCOUNTER4H, brq_pkg_CSR_MHPMCOUNTER5H, brq_pkg_CSR_MHPMCOUNTER6H, brq_pkg_CSR_MHPMCOUNTER7H, brq_pkg_CSR_MHPMCOUNTER8H, brq_pkg_CSR_MHPMCOUNTER9H, brq_pkg_CSR_MHPMCOUNTER10H, brq_pkg_CSR_MHPMCOUNTER11H, brq_pkg_CSR_MHPMCOUNTER12H, brq_pkg_CSR_MHPMCOUNTER13H, brq_pkg_CSR_MHPMCOUNTER14H, brq_pkg_CSR_MHPMCOUNTER15H, brq_pkg_CSR_MHPMCOUNTER16H, brq_pkg_CSR_MHPMCOUNTER17H, brq_pkg_CSR_MHPMCOUNTER18H, brq_pkg_CSR_MHPMCOUNTER19H, brq_pkg_CSR_MHPMCOUNTER20H, brq_pkg_CSR_MHPMCOUNTER21H, brq_pkg_CSR_MHPMCOUNTER22H, brq_pkg_CSR_MHPMCOUNTER23H, brq_pkg_CSR_MHPMCOUNTER24H, brq_pkg_CSR_MHPMCOUNTER25H, brq_pkg_CSR_MHPMCOUNTER26H, brq_pkg_CSR_MHPMCOUNTER27H, brq_pkg_CSR_MHPMCOUNTER28H, brq_pkg_CSR_MHPMCOUNTER29H, brq_pkg_CSR_MHPMCOUNTER30H, brq_pkg_CSR_MHPMCOUNTER31H: csr_rdata_int = mhpmcounter[mhpmcounter_idx][63:32];
+			brq_pkg_CSR_TSELECT: begin
+				csr_rdata_int = tselect_rdata;
+				illegal_csr = ~DbgTriggerEn;
+			end
+			brq_pkg_CSR_TDATA1: begin
+				csr_rdata_int = tmatch_control_rdata;
+				illegal_csr = ~DbgTriggerEn;
+			end
+			brq_pkg_CSR_TDATA2: begin
+				csr_rdata_int = tmatch_value_rdata;
+				illegal_csr = ~DbgTriggerEn;
+			end
+			brq_pkg_CSR_TDATA3: begin
+				csr_rdata_int = {32 {1'sb0}};
+				illegal_csr = ~DbgTriggerEn;
+			end
+			brq_pkg_CSR_MCONTEXT: begin
+				csr_rdata_int = {32 {1'sb0}};
+				illegal_csr = ~DbgTriggerEn;
+			end
+			brq_pkg_CSR_SCONTEXT: begin
+				csr_rdata_int = {32 {1'sb0}};
+				illegal_csr = ~DbgTriggerEn;
+			end
+			brq_pkg_CSR_CPUCTRL: csr_rdata_int = {{26 {1'b0}}, cpuctrl_q};
+			brq_pkg_CSR_SECURESEED: csr_rdata_int = {32 {1'sb0}};
+			default: illegal_csr = 1'b1;
+		endcase
+	end
+	localparam [1:0] brq_pkg_PRIV_LVL_M = 2'b11;
+	localparam [1:0] brq_pkg_PRIV_LVL_U = 2'b00;
+	localparam [3:0] brq_pkg_XDEBUGVER_STD = 4'd4;
+	function automatic [1:0] sv2v_cast_2;
+		input reg [1:0] inp;
+		sv2v_cast_2 = inp;
+	endfunction
+	always @(*) begin
+		exception_pc = pc_id_i;
+		fflags_d = fflags_q;
+		fflags_en = 1'b0;
+		frm_d = frm_q;
+		frm_en = 1'b0;
+		priv_lvl_d = priv_lvl_q;
+		mstatus_en = 1'b0;
+		mstatus_d = mstatus_q;
+		mie_en = 1'b0;
+		mscratch_en = 1'b0;
+		mepc_en = 1'b0;
+		mepc_d = {csr_wdata_int[31:1], 1'b0};
+		mcause_en = 1'b0;
+		mcause_d = {csr_wdata_int[31], csr_wdata_int[4:0]};
+		mtval_en = 1'b0;
+		mtval_d = csr_wdata_int;
+		mtvec_en = csr_mtvec_init_i;
+		mtvec_d = (csr_mtvec_init_i ? {boot_addr_i[31:2], 2'b00} : {csr_wdata_int[31:2], 2'b00});
+		dcsr_en = 1'b0;
+		dcsr_d = dcsr_q;
+		depc_d = {csr_wdata_int[31:1], 1'b0};
+		depc_en = 1'b0;
+		dscratch0_en = 1'b0;
+		dscratch1_en = 1'b0;
+		mstack_en = 1'b0;
+		mstack_d[2] = mstatus_q[4];
+		mstack_d[1-:2] = mstatus_q[3-:2];
+		mstack_epc_d = mepc_q;
+		mstack_cause_d = mcause_q;
+		mcountinhibit_we = 1'b0;
+		mhpmcounter_we = {32 {1'sb0}};
+		mhpmcounterh_we = {32 {1'sb0}};
+		cpuctrl_we = 1'b0;
+		if (csr_we_int)
+			case (csr_addr_i)
+				brq_pkg_CSR_FCSR: begin
+					fflags_en = 1'b1;
+					frm_en = 1'b1;
+					fflags_d = csr_wdata_int[4:0];
+					frm_d = csr_wdata_int[7:5];
+				end
+				brq_pkg_CSR_FFLAG: begin
+					fflags_en = 1'b1;
+					fflags_d = csr_wdata_int[4:0];
+				end
+				brq_pkg_CSR_FRM: begin
+					frm_en = 1'b1;
+					frm_d = csr_wdata_int[2:0];
+				end
+				brq_pkg_CSR_MSTATUS: begin
+					mstatus_en = 1'b1;
+					mstatus_d = {csr_wdata_int[brq_pkg_CSR_MSTATUS_MIE_BIT], csr_wdata_int[brq_pkg_CSR_MSTATUS_MPIE_BIT], sv2v_cast_2(csr_wdata_int[brq_pkg_CSR_MSTATUS_MPP_BIT_HIGH:brq_pkg_CSR_MSTATUS_MPP_BIT_LOW]), csr_wdata_int[brq_pkg_CSR_MSTATUS_MPRV_BIT], csr_wdata_int[brq_pkg_CSR_MSTATUS_TW_BIT]};
+					if ((mstatus_d[3-:2] != brq_pkg_PRIV_LVL_M) && (mstatus_d[3-:2] != brq_pkg_PRIV_LVL_U))
+						mstatus_d[3-:2] = brq_pkg_PRIV_LVL_M;
+				end
+				brq_pkg_CSR_MIE: mie_en = 1'b1;
+				brq_pkg_CSR_MSCRATCH: mscratch_en = 1'b1;
+				brq_pkg_CSR_MEPC: mepc_en = 1'b1;
+				brq_pkg_CSR_MCAUSE: mcause_en = 1'b1;
+				brq_pkg_CSR_MTVAL: mtval_en = 1'b1;
+				brq_pkg_CSR_MTVEC: mtvec_en = 1'b1;
+				brq_pkg_CSR_DCSR: begin
+					dcsr_d = csr_wdata_int;
+					dcsr_d[31-:4] = brq_pkg_XDEBUGVER_STD;
+					if ((dcsr_d[1-:2] != brq_pkg_PRIV_LVL_M) && (dcsr_d[1-:2] != brq_pkg_PRIV_LVL_U))
+						dcsr_d[1-:2] = brq_pkg_PRIV_LVL_M;
+					dcsr_d[8-:3] = dcsr_q[8-:3];
+					dcsr_d[3] = 1'b0;
+					dcsr_d[4] = 1'b0;
+					dcsr_d[10] = 1'b0;
+					dcsr_d[9] = 1'b0;
+					dcsr_d[5] = 1'b0;
+					dcsr_d[14] = 1'b0;
+					dcsr_d[27-:12] = 12'h000;
+					dcsr_en = 1'b1;
+				end
+				brq_pkg_CSR_DPC: depc_en = 1'b1;
+				brq_pkg_CSR_DSCRATCH0: dscratch0_en = 1'b1;
+				brq_pkg_CSR_DSCRATCH1: dscratch1_en = 1'b1;
+				brq_pkg_CSR_MCOUNTINHIBIT: mcountinhibit_we = 1'b1;
+				brq_pkg_CSR_MCYCLE, brq_pkg_CSR_MINSTRET, brq_pkg_CSR_MHPMCOUNTER3, brq_pkg_CSR_MHPMCOUNTER4, brq_pkg_CSR_MHPMCOUNTER5, brq_pkg_CSR_MHPMCOUNTER6, brq_pkg_CSR_MHPMCOUNTER7, brq_pkg_CSR_MHPMCOUNTER8, brq_pkg_CSR_MHPMCOUNTER9, brq_pkg_CSR_MHPMCOUNTER10, brq_pkg_CSR_MHPMCOUNTER11, brq_pkg_CSR_MHPMCOUNTER12, brq_pkg_CSR_MHPMCOUNTER13, brq_pkg_CSR_MHPMCOUNTER14, brq_pkg_CSR_MHPMCOUNTER15, brq_pkg_CSR_MHPMCOUNTER16, brq_pkg_CSR_MHPMCOUNTER17, brq_pkg_CSR_MHPMCOUNTER18, brq_pkg_CSR_MHPMCOUNTER19, brq_pkg_CSR_MHPMCOUNTER20, brq_pkg_CSR_MHPMCOUNTER21, brq_pkg_CSR_MHPMCOUNTER22, brq_pkg_CSR_MHPMCOUNTER23, brq_pkg_CSR_MHPMCOUNTER24, brq_pkg_CSR_MHPMCOUNTER25, brq_pkg_CSR_MHPMCOUNTER26, brq_pkg_CSR_MHPMCOUNTER27, brq_pkg_CSR_MHPMCOUNTER28, brq_pkg_CSR_MHPMCOUNTER29, brq_pkg_CSR_MHPMCOUNTER30, brq_pkg_CSR_MHPMCOUNTER31: mhpmcounter_we[mhpmcounter_idx] = 1'b1;
+				brq_pkg_CSR_MCYCLEH, brq_pkg_CSR_MINSTRETH, brq_pkg_CSR_MHPMCOUNTER3H, brq_pkg_CSR_MHPMCOUNTER4H, brq_pkg_CSR_MHPMCOUNTER5H, brq_pkg_CSR_MHPMCOUNTER6H, brq_pkg_CSR_MHPMCOUNTER7H, brq_pkg_CSR_MHPMCOUNTER8H, brq_pkg_CSR_MHPMCOUNTER9H, brq_pkg_CSR_MHPMCOUNTER10H, brq_pkg_CSR_MHPMCOUNTER11H, brq_pkg_CSR_MHPMCOUNTER12H, brq_pkg_CSR_MHPMCOUNTER13H, brq_pkg_CSR_MHPMCOUNTER14H, brq_pkg_CSR_MHPMCOUNTER15H, brq_pkg_CSR_MHPMCOUNTER16H, brq_pkg_CSR_MHPMCOUNTER17H, brq_pkg_CSR_MHPMCOUNTER18H, brq_pkg_CSR_MHPMCOUNTER19H, brq_pkg_CSR_MHPMCOUNTER20H, brq_pkg_CSR_MHPMCOUNTER21H, brq_pkg_CSR_MHPMCOUNTER22H, brq_pkg_CSR_MHPMCOUNTER23H, brq_pkg_CSR_MHPMCOUNTER24H, brq_pkg_CSR_MHPMCOUNTER25H, brq_pkg_CSR_MHPMCOUNTER26H, brq_pkg_CSR_MHPMCOUNTER27H, brq_pkg_CSR_MHPMCOUNTER28H, brq_pkg_CSR_MHPMCOUNTER29H, brq_pkg_CSR_MHPMCOUNTER30H, brq_pkg_CSR_MHPMCOUNTER31H: mhpmcounterh_we[mhpmcounter_idx] = 1'b1;
+				brq_pkg_CSR_CPUCTRL: cpuctrl_we = 1'b1;
+				default:
+					;
+			endcase
+		case (1'b1)
+			csr_save_cause_i: begin
+				case (1'b1)
+					csr_save_if_i: exception_pc = pc_if_i;
+					csr_save_id_i: exception_pc = pc_id_i;
+					csr_save_wb_i: exception_pc = pc_wb_i;
+					default:
+						;
+				endcase
+				priv_lvl_d = brq_pkg_PRIV_LVL_M;
+				if (debug_csr_save_i) begin
+					dcsr_d[1-:2] = priv_lvl_q;
+					dcsr_d[8-:3] = debug_cause_i;
+					dcsr_en = 1'b1;
+					depc_d = exception_pc;
+					depc_en = 1'b1;
+				end
+				else if (!debug_mode_i) begin
+					mtval_en = 1'b1;
+					mtval_d = csr_mtval_i;
+					mstatus_en = 1'b1;
+					mstatus_d[5] = 1'b0;
+					mstatus_d[4] = mstatus_q[5];
+					mstatus_d[3-:2] = priv_lvl_q;
+					mepc_en = 1'b1;
+					mepc_d = exception_pc;
+					mcause_en = 1'b1;
+					mcause_d = {csr_mcause_i};
+					mstack_en = 1'b1;
+				end
+			end
+			csr_restore_dret_i: priv_lvl_d = dcsr_q[1-:2];
+			csr_restore_mret_i: begin
+				priv_lvl_d = mstatus_q[3-:2];
+				mstatus_en = 1'b1;
+				mstatus_d[5] = mstatus_q[4];
+				if (nmi_mode_i) begin
+					mstatus_d[4] = mstack_q[2];
+					mstatus_d[3-:2] = mstack_q[1-:2];
+					mepc_en = 1'b1;
+					mepc_d = mstack_epc_q;
+					mcause_en = 1'b1;
+					mcause_d = mstack_cause_q;
+				end
+				else begin
+					mstatus_d[4] = 1'b1;
+					mstatus_d[3-:2] = brq_pkg_PRIV_LVL_U;
+				end
+			end
+			default:
+				;
+		endcase
+	end
+	always @(posedge clk_i or negedge rst_ni)
+		if (!rst_ni)
+			priv_lvl_q <= brq_pkg_PRIV_LVL_M;
+		else
+			priv_lvl_q <= priv_lvl_d;
+	assign priv_mode_id_o = priv_lvl_q;
+	assign priv_mode_if_o = priv_lvl_d;
+	assign priv_mode_lsu_o = (mstatus_q[1] ? mstatus_q[3-:2] : priv_lvl_q);
+	localparam [1:0] brq_pkg_CSR_OP_CLEAR = 3;
+	localparam [1:0] brq_pkg_CSR_OP_READ = 0;
+	localparam [1:0] brq_pkg_CSR_OP_SET = 2;
+	localparam [1:0] brq_pkg_CSR_OP_WRITE = 1;
+	always @(*)
+		case (csr_op_i)
+			brq_pkg_CSR_OP_WRITE: csr_wdata_int = csr_wdata_i;
+			brq_pkg_CSR_OP_SET: csr_wdata_int = csr_wdata_i | csr_rdata_o;
+			brq_pkg_CSR_OP_CLEAR: csr_wdata_int = ~csr_wdata_i & csr_rdata_o;
+			brq_pkg_CSR_OP_READ: csr_wdata_int = csr_wdata_i;
+		endcase
+	assign csr_wreq = csr_op_en_i & |{csr_op_i == brq_pkg_CSR_OP_WRITE, csr_op_i == brq_pkg_CSR_OP_SET, csr_op_i == brq_pkg_CSR_OP_CLEAR};
+	assign csr_we_int = csr_wreq & ~illegal_csr_insn_o;
+	assign csr_rdata_o = csr_rdata_int;
+	assign csr_mepc_o = mepc_q;
+	assign csr_depc_o = depc_q;
+	assign csr_mtvec_o = mtvec_q;
+	assign csr_mstatus_mie_o = mstatus_q[5];
+	assign csr_mstatus_tw_o = mstatus_q[0];
+	assign debug_single_step_o = dcsr_q[2];
+	assign debug_ebreakm_o = dcsr_q[15];
+	assign debug_ebreaku_o = dcsr_q[12];
+	assign irqs_o = mip & mie_q;
+	assign irq_pending_o = |irqs_o;
+	wire unused_error1;
+	wire unused_error2;
+	wire unused_error3;
+	wire unused_error4;
+	wire unused_error5;
+	wire unused_error6;
+	wire unused_error7;
+	wire unused_error8;
+	wire unused_error9;
+	wire unused_error10;
+	wire unused_error11;
+	wire unused_error12;
+	wire unused_error13;
+	wire unused_error14;
+	wire unused_error15;
+	wire unused_error16;
+	wire unused_error17;
+	localparam [5:0] MSTATUS_RST_VAL = {2'b01, brq_pkg_PRIV_LVL_U, 1'b0, 1'b0};
+	brq_csr #(
+		.Width(6),
+		.ShadowCopy(ShadowCSR),
+		.ResetValue({MSTATUS_RST_VAL})
+	) u_mstatus_csr(
+		.clk_i(clk_i),
+		.rst_ni(rst_ni),
+		.wr_data_i({mstatus_d}),
+		.wr_en_i(mstatus_en),
+		.rd_data_o(mstatus_q),
+		.rd_error_o(mstatus_err)
+	);
+	assign fflag_wdata = (is_fp_instr_i ? fp_status_i : fflags_d);
+	brq_csr #(
+		.Width(5),
+		.ShadowCopy(1'b0),
+		.ResetValue(1'sb0)
+	) fflags_csr(
+		.clk_i(clk_i),
+		.rst_ni(rst_ni),
+		.wr_data_i(fflag_wdata),
+		.wr_en_i(fflags_en | is_fp_instr_i),
+		.rd_data_o(fflags_q),
+		.rd_error_o(unused_error1)
+	);
+	wire [2:0] frmd;
+	wire [2:0] frmq;
+	assign frm_q = frmq;
+	assign frmd = frm_d;
+	brq_csr #(
+		.Width(3),
+		.ShadowCopy(1'b0),
+		.ResetValue(1'sb0)
+	) frm_csr(
+		.clk_i(clk_i),
+		.rst_ni(rst_ni),
+		.wr_data_i(frmd),
+		.wr_en_i(frm_en),
+		.rd_data_o(frmq),
+		.rd_error_o(unused_error2)
+	);
+	brq_csr #(
+		.Width(32),
+		.ShadowCopy(1'b0),
+		.ResetValue(1'sb0)
+	) u_mepc_csr(
+		.clk_i(clk_i),
+		.rst_ni(rst_ni),
+		.wr_data_i(mepc_d),
+		.wr_en_i(mepc_en),
+		.rd_data_o(mepc_q),
+		.rd_error_o(unused_error3)
+	);
+	assign mie_d[17] = csr_wdata_int[brq_pkg_CSR_MSIX_BIT];
+	assign mie_d[16] = csr_wdata_int[brq_pkg_CSR_MTIX_BIT];
+	assign mie_d[15] = csr_wdata_int[brq_pkg_CSR_MEIX_BIT];
+	assign mie_d[14-:15] = csr_wdata_int[brq_pkg_CSR_MFIX_BIT_HIGH:brq_pkg_CSR_MFIX_BIT_LOW];
+	brq_csr #(
+		.Width(18),
+		.ShadowCopy(1'b0),
+		.ResetValue(1'sb0)
+	) u_mie_csr(
+		.clk_i(clk_i),
+		.rst_ni(rst_ni),
+		.wr_data_i({mie_d}),
+		.wr_en_i(mie_en),
+		.rd_data_o(mie_q),
+		.rd_error_o(unused_error4)
+	);
+	brq_csr #(
+		.Width(32),
+		.ShadowCopy(1'b0),
+		.ResetValue(1'sb0)
+	) u_mscratch_csr(
+		.clk_i(clk_i),
+		.rst_ni(rst_ni),
+		.wr_data_i(csr_wdata_int),
+		.wr_en_i(mscratch_en),
+		.rd_data_o(mscratch_q),
+		.rd_error_o(unused_error5)
+	);
+	brq_csr #(
+		.Width(6),
+		.ShadowCopy(1'b0),
+		.ResetValue(1'sb0)
+	) u_mcause_csr(
+		.clk_i(clk_i),
+		.rst_ni(rst_ni),
+		.wr_data_i(mcause_d),
+		.wr_en_i(mcause_en),
+		.rd_data_o(mcause_q),
+		.rd_error_o(unused_error6)
+	);
+	brq_csr #(
+		.Width(32),
+		.ShadowCopy(1'b0),
+		.ResetValue(1'sb0)
+	) u_mtval_csr(
+		.clk_i(clk_i),
+		.rst_ni(rst_ni),
+		.wr_data_i(mtval_d),
+		.wr_en_i(mtval_en),
+		.rd_data_o(mtval_q),
+		.rd_error_o(unused_error7)
+	);
+	brq_csr #(
+		.Width(32),
+		.ShadowCopy(ShadowCSR),
+		.ResetValue(32'd0)
+	) u_mtvec_csr(
+		.clk_i(clk_i),
+		.rst_ni(rst_ni),
+		.wr_data_i(mtvec_d),
+		.wr_en_i(mtvec_en),
+		.rd_data_o(mtvec_q),
+		.rd_error_o(mtvec_err)
+	);
+	localparam [2:0] brq_pkg_DBG_CAUSE_NONE = 3'h0;
+	localparam [31:0] DCSR_RESET_VAL = {brq_pkg_XDEBUGVER_STD, 12'b000000000000, 1'b0, 1'b0, 1'b0, 1'b0, 1'b0, 1'b0, 1'b0, brq_pkg_DBG_CAUSE_NONE, 1'b0, 1'b0, 1'b0, 1'b0, brq_pkg_PRIV_LVL_M};
+	brq_csr #(
+		.Width(32),
+		.ShadowCopy(1'b0),
+		.ResetValue({DCSR_RESET_VAL})
+	) u_dcsr_csr(
+		.clk_i(clk_i),
+		.rst_ni(rst_ni),
+		.wr_data_i({dcsr_d}),
+		.wr_en_i(dcsr_en),
+		.rd_data_o(dcsr_q),
+		.rd_error_o(unused_error8)
+	);
+	brq_csr #(
+		.Width(32),
+		.ShadowCopy(1'b0),
+		.ResetValue(1'sb0)
+	) u_depc_csr(
+		.clk_i(clk_i),
+		.rst_ni(rst_ni),
+		.wr_data_i(depc_d),
+		.wr_en_i(depc_en),
+		.rd_data_o(depc_q),
+		.rd_error_o(unused_error9)
+	);
+	brq_csr #(
+		.Width(32),
+		.ShadowCopy(1'b0),
+		.ResetValue(1'sb0)
+	) u_dscratch0_csr(
+		.clk_i(clk_i),
+		.rst_ni(rst_ni),
+		.wr_data_i(csr_wdata_int),
+		.wr_en_i(dscratch0_en),
+		.rd_data_o(dscratch0_q),
+		.rd_error_o(unused_error10)
+	);
+	brq_csr #(
+		.Width(32),
+		.ShadowCopy(1'b0),
+		.ResetValue(1'sb0)
+	) u_dscratch1_csr(
+		.clk_i(clk_i),
+		.rst_ni(rst_ni),
+		.wr_data_i(csr_wdata_int),
+		.wr_en_i(dscratch1_en),
+		.rd_data_o(dscratch1_q),
+		.rd_error_o(unused_error11)
+	);
+	localparam [2:0] MSTACK_RESET_VAL = {1'b1, brq_pkg_PRIV_LVL_U};
+	brq_csr #(
+		.Width(3),
+		.ShadowCopy(1'b0),
+		.ResetValue({MSTACK_RESET_VAL})
+	) u_mstack_csr(
+		.clk_i(clk_i),
+		.rst_ni(rst_ni),
+		.wr_data_i({mstack_d}),
+		.wr_en_i(mstack_en),
+		.rd_data_o(mstack_q),
+		.rd_error_o(unused_error12)
+	);
+	brq_csr #(
+		.Width(32),
+		.ShadowCopy(1'b0),
+		.ResetValue(1'sb0)
+	) u_mstack_epc_csr(
+		.clk_i(clk_i),
+		.rst_ni(rst_ni),
+		.wr_data_i(mstack_epc_d),
+		.wr_en_i(mstack_en),
+		.rd_data_o(mstack_epc_q),
+		.rd_error_o(unused_error13)
+	);
+	brq_csr #(
+		.Width(6),
+		.ShadowCopy(1'b0),
+		.ResetValue(1'sb0)
+	) u_mstack_cause_csr(
+		.clk_i(clk_i),
+		.rst_ni(rst_ni),
+		.wr_data_i(mstack_cause_d),
+		.wr_en_i(mstack_en),
+		.rd_data_o(mstack_cause_q),
+		.rd_error_o(unused_error14)
+	);
+	localparam [11:0] brq_pkg_CSR_OFF_PMP_ADDR = 12'h3b0;
+	localparam [11:0] brq_pkg_CSR_OFF_PMP_CFG = 12'h3a0;
+	localparam [1:0] brq_pkg_PMP_MODE_NA4 = 2'b10;
+	localparam [1:0] brq_pkg_PMP_MODE_NAPOT = 2'b11;
+	localparam [1:0] brq_pkg_PMP_MODE_OFF = 2'b00;
+	localparam [1:0] brq_pkg_PMP_MODE_TOR = 2'b01;
+	generate
+		if (PMPEnable) begin : g_pmp_registers
+			wire [5:0] pmp_cfg [0:PMPNumRegions - 1];
+			reg [5:0] pmp_cfg_wdata [0:PMPNumRegions - 1];
+			wire [PMPAddrWidth - 1:0] pmp_addr [0:PMPNumRegions - 1];
+			wire [PMPNumRegions - 1:0] pmp_cfg_we;
+			wire [PMPNumRegions - 1:0] pmp_cfg_err;
+			wire [PMPNumRegions - 1:0] pmp_addr_we;
+			wire [PMPNumRegions - 1:0] pmp_addr_err;
+			genvar i;
+			for (i = 0; i < brq_pkg_PMP_MAX_REGIONS; i = i + 1) begin : g_exp_rd_data
+				if (i < PMPNumRegions) begin : g_implemented_regions
+					assign pmp_cfg_rdata[i] = {pmp_cfg[i][5], 2'b00, pmp_cfg[i][4-:2], pmp_cfg[i][2], pmp_cfg[i][1], pmp_cfg[i][0]};
+					if (PMPGranularity == 0) begin : g_pmp_g0
+						wire [32:1] sv2v_tmp_D3A6A;
+						assign sv2v_tmp_D3A6A = pmp_addr[i];
+						always @(*) pmp_addr_rdata[i] = sv2v_tmp_D3A6A;
+					end
+					else if (PMPGranularity == 1) begin : g_pmp_g1
+						always @(*) begin
+							pmp_addr_rdata[i] = pmp_addr[i];
+							if ((pmp_cfg[i][4-:2] == brq_pkg_PMP_MODE_OFF) || (pmp_cfg[i][4-:2] == brq_pkg_PMP_MODE_TOR))
+								pmp_addr_rdata[i][PMPGranularity - 1:0] = {PMPGranularity {1'sb0}};
+						end
+					end
+					else begin : g_pmp_g2
+						always @(*) begin
+							pmp_addr_rdata[i] = {pmp_addr[i], {PMPGranularity - 1 {1'b1}}};
+							if ((pmp_cfg[i][4-:2] == brq_pkg_PMP_MODE_OFF) || (pmp_cfg[i][4-:2] == brq_pkg_PMP_MODE_TOR))
+								pmp_addr_rdata[i][PMPGranularity - 1:0] = {PMPGranularity {1'sb0}};
+						end
+					end
+				end
+				else begin : g_other_regions
+					assign pmp_cfg_rdata[i] = {8 {1'sb0}};
+					wire [32:1] sv2v_tmp_313D8;
+					assign sv2v_tmp_313D8 = {32 {1'sb0}};
+					always @(*) pmp_addr_rdata[i] = sv2v_tmp_313D8;
+				end
+			end
+			for (i = 0; i < PMPNumRegions; i = i + 1) begin : g_pmp_csrs
+				assign pmp_cfg_we[i] = (csr_we_int & ~pmp_cfg[i][5]) & (csr_addr == (brq_pkg_CSR_OFF_PMP_CFG + (i[11:0] >> 2)));
+				wire [1:1] sv2v_tmp_5B5A1;
+				assign sv2v_tmp_5B5A1 = csr_wdata_int[((i % 4) * brq_pkg_PMP_CFG_W) + 7];
+				always @(*) pmp_cfg_wdata[i][5] = sv2v_tmp_5B5A1;
+				always @(*)
+					case (csr_wdata_int[((i % 4) * brq_pkg_PMP_CFG_W) + 3+:2])
+						2'b00: pmp_cfg_wdata[i][4-:2] = brq_pkg_PMP_MODE_OFF;
+						2'b01: pmp_cfg_wdata[i][4-:2] = brq_pkg_PMP_MODE_TOR;
+						2'b10: pmp_cfg_wdata[i][4-:2] = (PMPGranularity == 0 ? brq_pkg_PMP_MODE_NA4 : brq_pkg_PMP_MODE_OFF);
+						2'b11: pmp_cfg_wdata[i][4-:2] = brq_pkg_PMP_MODE_NAPOT;
+						default: pmp_cfg_wdata[i][4-:2] = brq_pkg_PMP_MODE_OFF;
+					endcase
+				wire [1:1] sv2v_tmp_7A6DE;
+				assign sv2v_tmp_7A6DE = csr_wdata_int[((i % 4) * brq_pkg_PMP_CFG_W) + 2];
+				always @(*) pmp_cfg_wdata[i][2] = sv2v_tmp_7A6DE;
+				wire [1:1] sv2v_tmp_65F7E;
+				assign sv2v_tmp_65F7E = &csr_wdata_int[(i % 4) * brq_pkg_PMP_CFG_W+:2];
+				always @(*) pmp_cfg_wdata[i][1] = sv2v_tmp_65F7E;
+				wire [1:1] sv2v_tmp_54FD8;
+				assign sv2v_tmp_54FD8 = csr_wdata_int[(i % 4) * brq_pkg_PMP_CFG_W];
+				always @(*) pmp_cfg_wdata[i][0] = sv2v_tmp_54FD8;
+				brq_csr #(
+					.Width(6),
+					.ShadowCopy(ShadowCSR),
+					.ResetValue(1'sb0)
+				) u_pmp_cfg_csr(
+					.clk_i(clk_i),
+					.rst_ni(rst_ni),
+					.wr_data_i({pmp_cfg_wdata[i]}),
+					.wr_en_i(pmp_cfg_we[i]),
+					.rd_data_o(pmp_cfg[i]),
+					.rd_error_o(pmp_cfg_err[i])
+				);
+				if (i < (PMPNumRegions - 1)) begin : g_lower
+					assign pmp_addr_we[i] = ((csr_we_int & ~pmp_cfg[i][5]) & (~pmp_cfg[i + 1][5] | (pmp_cfg[i + 1][4-:2] != brq_pkg_PMP_MODE_TOR))) & (csr_addr == (brq_pkg_CSR_OFF_PMP_ADDR + i[11:0]));
+				end
+				else begin : g_upper
+					assign pmp_addr_we[i] = (csr_we_int & ~pmp_cfg[i][5]) & (csr_addr == (brq_pkg_CSR_OFF_PMP_ADDR + i[11:0]));
+				end
+				brq_csr #(
+					.Width(PMPAddrWidth),
+					.ShadowCopy(ShadowCSR),
+					.ResetValue(1'sb0)
+				) u_pmp_addr_csr(
+					.clk_i(clk_i),
+					.rst_ni(rst_ni),
+					.wr_data_i(csr_wdata_int[31-:PMPAddrWidth]),
+					.wr_en_i(pmp_addr_we[i]),
+					.rd_data_o(pmp_addr[i]),
+					.rd_error_o(pmp_addr_err[i])
+				);
+				assign csr_pmp_cfg_o[(0 >= (PMPNumRegions - 1) ? i : (PMPNumRegions - 1) - i) * 6+:6] = pmp_cfg[i];
+				assign csr_pmp_addr_o[(0 >= (PMPNumRegions - 1) ? i : (PMPNumRegions - 1) - i) * 34+:34] = {pmp_addr_rdata[i], 2'b00};
+			end
+			assign pmp_csr_err = |pmp_cfg_err | |pmp_addr_err;
+		end
+		else begin : g_no_pmp_tieoffs
+			genvar i;
+			for (i = 0; i < brq_pkg_PMP_MAX_REGIONS; i = i + 1) begin : g_rdata
+				wire [32:1] sv2v_tmp_313D8;
+				assign sv2v_tmp_313D8 = {32 {1'sb0}};
+				always @(*) pmp_addr_rdata[i] = sv2v_tmp_313D8;
+				assign pmp_cfg_rdata[i] = {8 {1'sb0}};
+			end
+			for (i = 0; i < PMPNumRegions; i = i + 1) begin : g_outputs
+				function automatic [5:0] sv2v_cast_6;
+					input reg [5:0] inp;
+					sv2v_cast_6 = inp;
+				endfunction
+				assign csr_pmp_cfg_o[(0 >= (PMPNumRegions - 1) ? i : (PMPNumRegions - 1) - i) * 6+:6] = sv2v_cast_6(1'b0);
+				assign csr_pmp_addr_o[(0 >= (PMPNumRegions - 1) ? i : (PMPNumRegions - 1) - i) * 34+:34] = {34 {1'sb0}};
+			end
+			assign pmp_csr_err = 1'b0;
+		end
+	endgenerate
+	always @(*) begin : mcountinhibit_update
+		if (mcountinhibit_we == 1'b1)
+			mcountinhibit_d = {csr_wdata_int[MHPMCounterNum + 2:2], 1'b0, csr_wdata_int[0]};
+		else
+			mcountinhibit_d = mcountinhibit_q;
+	end
+	always @(*) begin : gen_mhpmcounter_incr
+		begin : sv2v_autoblock_83
+			reg [31:0] i;
+			for (i = 0; i < 32; i = i + 1)
+				begin : gen_mhpmcounter_incr_inactive
+					mhpmcounter_incr[i] = 1'b0;
+				end
+		end
+		mhpmcounter_incr[0] = 1'b1;
+		mhpmcounter_incr[1] = 1'b0;
+		mhpmcounter_incr[2] = instr_ret_i;
+		mhpmcounter_incr[3] = dside_wait_i;
+		mhpmcounter_incr[4] = iside_wait_i;
+		mhpmcounter_incr[5] = mem_load_i;
+		mhpmcounter_incr[6] = mem_store_i;
+		mhpmcounter_incr[7] = jump_i;
+		mhpmcounter_incr[8] = branch_i;
+		mhpmcounter_incr[9] = branch_taken_i;
+		mhpmcounter_incr[10] = instr_ret_compressed_i;
+		mhpmcounter_incr[11] = mul_wait_i;
+		mhpmcounter_incr[12] = div_wait_i;
+	end
+	always @(*) begin : gen_mhpmevent
+		begin : sv2v_autoblock_84
+			reg signed [31:0] i;
+			for (i = 0; i < 32; i = i + 1)
+				begin : gen_mhpmevent_active
+					mhpmevent[i] = {32 {1'sb0}};
+					mhpmevent[i][i] = 1'b1;
+				end
+		end
+		mhpmevent[1] = {32 {1'sb0}};
+		begin : sv2v_autoblock_85
+			reg [31:0] i;
+			for (i = 3 + MHPMCounterNum; i < 32; i = i + 1)
+				begin : gen_mhpmevent_inactive
+					mhpmevent[i] = {32 {1'sb0}};
+				end
+		end
+	end
+	brq_counter #(.CounterWidth(64)) mcycle_counter_i(
+		.clk_i(clk_i),
+		.rst_ni(rst_ni),
+		.counter_inc_i(mhpmcounter_incr[0] & ~mcountinhibit[0]),
+		.counterh_we_i(mhpmcounterh_we[0]),
+		.counter_we_i(mhpmcounter_we[0]),
+		.counter_val_i(csr_wdata_int),
+		.counter_val_o(mhpmcounter[0])
+	);
+	brq_counter #(.CounterWidth(64)) minstret_counter_i(
+		.clk_i(clk_i),
+		.rst_ni(rst_ni),
+		.counter_inc_i(mhpmcounter_incr[2] & ~mcountinhibit[2]),
+		.counterh_we_i(mhpmcounterh_we[2]),
+		.counter_we_i(mhpmcounter_we[2]),
+		.counter_val_i(csr_wdata_int),
+		.counter_val_o(mhpmcounter[2])
+	);
+	assign mhpmcounter[1] = {64 {1'sb0}};
+	assign unused_mhpmcounter_we_1 = mhpmcounter_we[1];
+	assign unused_mhpmcounterh_we_1 = mhpmcounterh_we[1];
+	assign unused_mhpmcounter_incr_1 = mhpmcounter_incr[1];
+	generate
+		genvar cnt;
+		for (cnt = 0; cnt < 29; cnt = cnt + 1) begin : gen_cntrs
+			if (cnt < MHPMCounterNum) begin : gen_imp
+				brq_counter #(.CounterWidth(MHPMCounterWidth)) mcounters_variable_i(
+					.clk_i(clk_i),
+					.rst_ni(rst_ni),
+					.counter_inc_i(mhpmcounter_incr[cnt + 3] & ~mcountinhibit[cnt + 3]),
+					.counterh_we_i(mhpmcounterh_we[cnt + 3]),
+					.counter_we_i(mhpmcounter_we[cnt + 3]),
+					.counter_val_i(csr_wdata_int),
+					.counter_val_o(mhpmcounter[cnt + 3])
+				);
+			end
+			else begin : gen_unimp
+				assign mhpmcounter[cnt + 3] = {64 {1'sb0}};
+			end
+		end
+	endgenerate
+	generate
+		if (MHPMCounterNum < 29) begin : g_mcountinhibit_reduced
+			wire [(29 - MHPMCounterNum) - 1:0] unused_mhphcounter_we;
+			wire [(29 - MHPMCounterNum) - 1:0] unused_mhphcounterh_we;
+			wire [(29 - MHPMCounterNum) - 1:0] unused_mhphcounter_incr;
+			assign mcountinhibit = {{29 - MHPMCounterNum {1'b1}}, mcountinhibit_q};
+			assign unused_mhphcounter_we = mhpmcounter_we[31:MHPMCounterNum + 3];
+			assign unused_mhphcounterh_we = mhpmcounterh_we[31:MHPMCounterNum + 3];
+			assign unused_mhphcounter_incr = mhpmcounter_incr[31:MHPMCounterNum + 3];
+		end
+		else begin : g_mcountinhibit_full
+			assign mcountinhibit = mcountinhibit_q;
+		end
+	endgenerate
+	always @(posedge clk_i or negedge rst_ni)
+		if (!rst_ni)
+			mcountinhibit_q <= {((MHPMCounterNum + 2) >= 0 ? MHPMCounterNum + 3 : 1 - (MHPMCounterNum + 2)) {1'sb0}};
+		else
+			mcountinhibit_q <= mcountinhibit_d;
+	generate
+		if (DbgTriggerEn) begin : gen_trigger_regs
+			localparam [31:0] DbgHwNumLen = (DbgHwBreakNum > 1 ? $clog2(DbgHwBreakNum) : 1);
+			wire [DbgHwNumLen - 1:0] tselect_d;
+			wire [DbgHwNumLen - 1:0] tselect_q;
+			wire tmatch_control_d;
+			wire [DbgHwBreakNum - 1:0] tmatch_control_q;
+			wire [31:0] tmatch_value_d;
+			wire [31:0] tmatch_value_q [0:DbgHwBreakNum - 1];
+			wire tselect_we;
+			wire [DbgHwBreakNum - 1:0] tmatch_control_we;
+			wire [DbgHwBreakNum - 1:0] tmatch_value_we;
+			wire [DbgHwBreakNum - 1:0] trigger_match;
+			assign tselect_we = (csr_we_int & debug_mode_i) & (csr_addr_i == brq_pkg_CSR_TSELECT);
+			genvar i;
+			for (i = 0; i < DbgHwBreakNum; i = i + 1) begin : g_dbg_tmatch_we
+				assign tmatch_control_we[i] = (((i[DbgHwNumLen - 1:0] == tselect_q) & csr_we_int) & debug_mode_i) & (csr_addr_i == brq_pkg_CSR_TDATA1);
+				assign tmatch_value_we[i] = (((i[DbgHwNumLen - 1:0] == tselect_q) & csr_we_int) & debug_mode_i) & (csr_addr_i == brq_pkg_CSR_TDATA2);
+			end
+			assign tselect_d = (csr_wdata_int < DbgHwBreakNum ? csr_wdata_int[DbgHwNumLen - 1:0] : DbgHwBreakNum - 1);
+			assign tmatch_control_d = csr_wdata_int[2];
+			assign tmatch_value_d = csr_wdata_int[31:0];
+			brq_csr #(
+				.Width(DbgHwNumLen),
+				.ShadowCopy(1'b0),
+				.ResetValue(1'sb0)
+			) u_tselect_csr(
+				.clk_i(clk_i),
+				.rst_ni(rst_ni),
+				.wr_data_i(tselect_d),
+				.wr_en_i(tselect_we),
+				.rd_data_o(tselect_q),
+				.rd_error_o(unused_error15)
+			);
+			for (i = 0; i < DbgHwBreakNum; i = i + 1) begin : g_dbg_tmatch_reg
+				brq_csr #(
+					.Width(1),
+					.ShadowCopy(1'b0),
+					.ResetValue(1'sb0)
+				) u_tmatch_control_csr(
+					.clk_i(clk_i),
+					.rst_ni(rst_ni),
+					.wr_data_i(tmatch_control_d),
+					.wr_en_i(tmatch_control_we[i]),
+					.rd_data_o(tmatch_control_q[i]),
+					.rd_error_o(unused_error16)
+				);
+				brq_csr #(
+					.Width(32),
+					.ShadowCopy(1'b0),
+					.ResetValue(1'sb0)
+				) u_tmatch_value_csr(
+					.clk_i(clk_i),
+					.rst_ni(rst_ni),
+					.wr_data_i(tmatch_value_d),
+					.wr_en_i(tmatch_value_we[i]),
+					.rd_data_o(tmatch_value_q[i]),
+					.rd_error_o(unused_error17)
+				);
+			end
+			localparam [31:0] TSelectRdataPadlen = (DbgHwNumLen >= 32 ? 0 : 32 - DbgHwNumLen);
+			assign tselect_rdata = {{TSelectRdataPadlen {1'b0}}, tselect_q};
+			assign tmatch_control_rdata = {29'b00101000000000000001000001001, tmatch_control_q[tselect_q], 1'b0, 1'b0};
+			assign tmatch_value_rdata = tmatch_value_q[tselect_q];
+			for (i = 0; i < DbgHwBreakNum; i = i + 1) begin : g_dbg_trigger_match
+				assign trigger_match[i] = tmatch_control_q[i] & (pc_if_i[31:0] == tmatch_value_q[i]);
+			end
+			assign trigger_match_o = |trigger_match;
+		end
+		else begin : gen_no_trigger_regs
+			assign tselect_rdata = 'b0;
+			assign tmatch_control_rdata = 'b0;
+			assign tmatch_value_rdata = 'b0;
+			assign trigger_match_o = 'b0;
+		end
+	endgenerate
+	assign cpuctrl_wdata = csr_wdata_int[5:0];
+	generate
+		if (DataIndTiming) begin : gen_dit
+			assign cpuctrl_d[1] = cpuctrl_wdata[1];
+		end
+		else begin : gen_no_dit
+			wire unused_dit;
+			assign unused_dit = cpuctrl_wdata[1];
+			assign cpuctrl_d[1] = 1'b0;
+		end
+	endgenerate
+	assign data_ind_timing_o = cpuctrl_q[1];
+	generate
+		if (DummyInstructions) begin : gen_dummy
+			assign cpuctrl_d[2] = cpuctrl_wdata[2];
+			assign cpuctrl_d[5-:3] = cpuctrl_wdata[5-:3];
+			assign dummy_instr_seed_en_o = csr_we_int && (csr_addr == brq_pkg_CSR_SECURESEED);
+			assign dummy_instr_seed_o = csr_wdata_int;
+		end
+		else begin : gen_no_dummy
+			wire unused_dummy_en;
+			wire [2:0] unused_dummy_mask;
+			assign unused_dummy_en = cpuctrl_wdata[2];
+			assign unused_dummy_mask = cpuctrl_wdata[5-:3];
+			assign cpuctrl_d[2] = 1'b0;
+			assign cpuctrl_d[5-:3] = 3'b000;
+			assign dummy_instr_seed_en_o = 1'b0;
+			assign dummy_instr_seed_o = {32 {1'sb0}};
+		end
+	endgenerate
+	assign dummy_instr_en_o = cpuctrl_q[2];
+	assign dummy_instr_mask_o = cpuctrl_q[5-:3];
+	generate
+		if (ICache) begin : gen_icache_enable
+			assign cpuctrl_d[0] = cpuctrl_wdata[0];
+		end
+		else begin : gen_no_icache
+			wire unused_icen;
+			assign unused_icen = cpuctrl_wdata[0];
+			assign cpuctrl_d[0] = 1'b0;
+		end
+	endgenerate
+	assign icache_enable_o = cpuctrl_q[0];
+	brq_csr #(
+		.Width(6),
+		.ShadowCopy(ShadowCSR),
+		.ResetValue(1'sb0)
+	) u_cpuctrl_csr(
+		.clk_i(clk_i),
+		.rst_ni(rst_ni),
+		.wr_data_i({cpuctrl_d}),
+		.wr_en_i(cpuctrl_we),
+		.rd_data_o(cpuctrl_q),
+		.rd_error_o(cpuctrl_err)
+	);
+	assign csr_shadow_err_o = ((mstatus_err | mtvec_err) | pmp_csr_err) | cpuctrl_err;
+endmodule
+module brq_csr (
+	clk_i,
+	rst_ni,
+	wr_data_i,
+	wr_en_i,
+	rd_data_o,
+	rd_error_o
+);
+	parameter [31:0] Width = 32;
+	parameter [0:0] ShadowCopy = 1'b0;
+	parameter [Width - 1:0] ResetValue = 1'sb0;
+	input wire clk_i;
+	input wire rst_ni;
+	input wire [Width - 1:0] wr_data_i;
+	input wire wr_en_i;
+	output wire [Width - 1:0] rd_data_o;
+	output wire rd_error_o;
+	reg [Width - 1:0] rdata_q;
+	always @(posedge clk_i or negedge rst_ni)
+		if (!rst_ni)
+			rdata_q <= ResetValue;
+		else if (wr_en_i)
+			rdata_q <= wr_data_i;
+	assign rd_data_o = rdata_q;
+	generate
+		if (ShadowCopy) begin : gen_shadow
+			reg [Width - 1:0] shadow_q;
+			always @(posedge clk_i or negedge rst_ni)
+				if (!rst_ni)
+					shadow_q <= ~ResetValue;
+				else if (wr_en_i)
+					shadow_q <= ~wr_data_i;
+			assign rd_error_o = rdata_q != ~shadow_q;
+		end
+		else begin : gen_no_shadow
+			assign rd_error_o = 1'b0;
+		end
+	endgenerate
+endmodule
+module brq_exu_alu (
+	operator_i,
+	operand_a_i,
+	operand_b_i,
+	instr_first_cycle_i,
+	multdiv_operand_a_i,
+	multdiv_operand_b_i,
+	multdiv_sel_i,
+	imd_val_q_i,
+	imd_val_d_o,
+	imd_val_we_o,
+	adder_result_o,
+	adder_result_ext_o,
+	result_o,
+	comparison_result_o,
+	is_equal_result_o
+);
+	localparam integer brq_pkg_RV32BNone = 0;
+	parameter integer RV32B = brq_pkg_RV32BNone;
+	input wire [5:0] operator_i;
+	input wire [31:0] operand_a_i;
+	input wire [31:0] operand_b_i;
+	input wire instr_first_cycle_i;
+	input wire [32:0] multdiv_operand_a_i;
+	input wire [32:0] multdiv_operand_b_i;
+	input wire multdiv_sel_i;
+	input wire [63:0] imd_val_q_i;
+	output reg [63:0] imd_val_d_o;
+	output reg [1:0] imd_val_we_o;
+	output wire [31:0] adder_result_o;
+	output wire [33:0] adder_result_ext_o;
+	output reg [31:0] result_o;
+	output wire comparison_result_o;
+	output wire is_equal_result_o;
+	wire [31:0] operand_a_rev;
+	wire [32:0] operand_b_neg;
+	generate
+		genvar k;
+		for (k = 0; k < 32; k = k + 1) begin : gen_rev_operand_a
+			assign operand_a_rev[k] = operand_a_i[31 - k];
+		end
+	endgenerate
+	reg adder_op_b_negate;
+	wire [32:0] adder_in_a;
+	reg [32:0] adder_in_b;
+	wire [31:0] adder_result;
+	localparam [5:0] brq_pkg_ALU_EQ = 23;
+	localparam [5:0] brq_pkg_ALU_GE = 21;
+	localparam [5:0] brq_pkg_ALU_GEU = 22;
+	localparam [5:0] brq_pkg_ALU_LT = 19;
+	localparam [5:0] brq_pkg_ALU_LTU = 20;
+	localparam [5:0] brq_pkg_ALU_MAX = 27;
+	localparam [5:0] brq_pkg_ALU_MAXU = 28;
+	localparam [5:0] brq_pkg_ALU_MIN = 25;
+	localparam [5:0] brq_pkg_ALU_MINU = 26;
+	localparam [5:0] brq_pkg_ALU_NE = 24;
+	localparam [5:0] brq_pkg_ALU_SLT = 37;
+	localparam [5:0] brq_pkg_ALU_SLTU = 38;
+	localparam [5:0] brq_pkg_ALU_SUB = 1;
+	always @(*) begin
+		adder_op_b_negate = 1'b0;
+		case (operator_i)
+			brq_pkg_ALU_SUB, brq_pkg_ALU_EQ, brq_pkg_ALU_NE, brq_pkg_ALU_GE, brq_pkg_ALU_GEU, brq_pkg_ALU_LT, brq_pkg_ALU_LTU, brq_pkg_ALU_SLT, brq_pkg_ALU_SLTU, brq_pkg_ALU_MIN, brq_pkg_ALU_MINU, brq_pkg_ALU_MAX, brq_pkg_ALU_MAXU: adder_op_b_negate = 1'b1;
+			default:
+				;
+		endcase
+	end
+	assign adder_in_a = (multdiv_sel_i ? multdiv_operand_a_i : {operand_a_i, 1'b1});
+	assign operand_b_neg = {operand_b_i, 1'b0} ^ {33 {1'b1}};
+	always @(*)
+		case (1'b1)
+			multdiv_sel_i: adder_in_b = multdiv_operand_b_i;
+			adder_op_b_negate: adder_in_b = operand_b_neg;
+			default: adder_in_b = {operand_b_i, 1'b0};
+		endcase
+	assign adder_result_ext_o = $unsigned(adder_in_a) + $unsigned(adder_in_b);
+	assign adder_result = adder_result_ext_o[32:1];
+	assign adder_result_o = adder_result;
+	wire is_equal;
+	reg is_greater_equal;
+	reg cmp_signed;
+	always @(*)
+		case (operator_i)
+			brq_pkg_ALU_GE, brq_pkg_ALU_LT, brq_pkg_ALU_SLT, brq_pkg_ALU_MIN, brq_pkg_ALU_MAX: cmp_signed = 1'b1;
+			default: cmp_signed = 1'b0;
+		endcase
+	assign is_equal = adder_result == 32'b00000000000000000000000000000000;
+	assign is_equal_result_o = is_equal;
+	always @(*)
+		if ((operand_a_i[31] ^ operand_b_i[31]) == 1'b0)
+			is_greater_equal = adder_result[31] == 1'b0;
+		else
+			is_greater_equal = operand_a_i[31] ^ cmp_signed;
+	reg cmp_result;
+	always @(*)
+		case (operator_i)
+			brq_pkg_ALU_EQ: cmp_result = is_equal;
+			brq_pkg_ALU_NE: cmp_result = ~is_equal;
+			brq_pkg_ALU_GE, brq_pkg_ALU_GEU, brq_pkg_ALU_MAX, brq_pkg_ALU_MAXU: cmp_result = is_greater_equal;
+			brq_pkg_ALU_LT, brq_pkg_ALU_LTU, brq_pkg_ALU_MIN, brq_pkg_ALU_MINU, brq_pkg_ALU_SLT, brq_pkg_ALU_SLTU: cmp_result = ~is_greater_equal;
+			default: cmp_result = is_equal;
+		endcase
+	assign comparison_result_o = cmp_result;
+	reg shift_left;
+	wire shift_ones;
+	wire shift_arith;
+	wire shift_funnel;
+	wire shift_sbmode;
+	reg [5:0] shift_amt;
+	wire [5:0] shift_amt_compl;
+	reg [31:0] shift_operand;
+	reg [32:0] shift_result_ext;
+	reg unused_shift_result_ext;
+	reg [31:0] shift_result;
+	reg [31:0] shift_result_rev;
+	wire bfp_op;
+	wire [4:0] bfp_len;
+	wire [4:0] bfp_off;
+	wire [31:0] bfp_mask;
+	wire [31:0] bfp_mask_rev;
+	wire [31:0] bfp_result;
+	localparam [5:0] brq_pkg_ALU_BFP = 49;
+	assign bfp_op = (RV32B != brq_pkg_RV32BNone ? operator_i == brq_pkg_ALU_BFP : 1'b0);
+	assign bfp_len = {~(|operand_b_i[27:24]), operand_b_i[27:24]};
+	assign bfp_off = operand_b_i[20:16];
+	assign bfp_mask = (RV32B != brq_pkg_RV32BNone ? ~(32'hffffffff << bfp_len) : {32 {1'sb0}});
+	generate
+		genvar i;
+		for (i = 0; i < 32; i = i + 1) begin : gen_rev_bfp_mask
+			assign bfp_mask_rev[i] = bfp_mask[31 - i];
+		end
+	endgenerate
+	assign bfp_result = (RV32B != brq_pkg_RV32BNone ? (~shift_result & operand_a_i) | ((operand_b_i & bfp_mask) << bfp_off) : {32 {1'sb0}});
+	wire [1:1] sv2v_tmp_86907;
+	assign sv2v_tmp_86907 = operand_b_i[5] & shift_funnel;
+	always @(*) shift_amt[5] = sv2v_tmp_86907;
+	assign shift_amt_compl = 32 - operand_b_i[4:0];
+	always @(*)
+		if (bfp_op)
+			shift_amt[4:0] = bfp_off;
+		else
+			shift_amt[4:0] = (instr_first_cycle_i ? (operand_b_i[5] && shift_funnel ? shift_amt_compl[4:0] : operand_b_i[4:0]) : (operand_b_i[5] && shift_funnel ? operand_b_i[4:0] : shift_amt_compl[4:0]));
+	localparam [5:0] brq_pkg_ALU_SBCLR = 44;
+	localparam [5:0] brq_pkg_ALU_SBINV = 45;
+	localparam [5:0] brq_pkg_ALU_SBSET = 43;
+	assign shift_sbmode = (RV32B != brq_pkg_RV32BNone ? ((operator_i == brq_pkg_ALU_SBSET) | (operator_i == brq_pkg_ALU_SBCLR)) | (operator_i == brq_pkg_ALU_SBINV) : 1'b0);
+	localparam [5:0] brq_pkg_ALU_FSL = 41;
+	localparam [5:0] brq_pkg_ALU_FSR = 42;
+	localparam [5:0] brq_pkg_ALU_ROL = 14;
+	localparam [5:0] brq_pkg_ALU_ROR = 13;
+	localparam [5:0] brq_pkg_ALU_SLL = 10;
+	localparam [5:0] brq_pkg_ALU_SLO = 12;
+	always @(*) begin
+		case (operator_i)
+			brq_pkg_ALU_SLL: shift_left = 1'b1;
+			brq_pkg_ALU_SLO, brq_pkg_ALU_BFP: shift_left = (RV32B != brq_pkg_RV32BNone ? 1'b1 : 1'b0);
+			brq_pkg_ALU_ROL: shift_left = (RV32B != brq_pkg_RV32BNone ? instr_first_cycle_i : 0);
+			brq_pkg_ALU_ROR: shift_left = (RV32B != brq_pkg_RV32BNone ? ~instr_first_cycle_i : 0);
+			brq_pkg_ALU_FSL: shift_left = (RV32B != brq_pkg_RV32BNone ? (shift_amt[5] ? ~instr_first_cycle_i : instr_first_cycle_i) : 1'b0);
+			brq_pkg_ALU_FSR: shift_left = (RV32B != brq_pkg_RV32BNone ? (shift_amt[5] ? instr_first_cycle_i : ~instr_first_cycle_i) : 1'b0);
+			default: shift_left = 1'b0;
+		endcase
+		if (shift_sbmode)
+			shift_left = 1'b1;
+	end
+	localparam [5:0] brq_pkg_ALU_SRA = 8;
+	assign shift_arith = operator_i == brq_pkg_ALU_SRA;
+	localparam [5:0] brq_pkg_ALU_SRO = 11;
+	assign shift_ones = (RV32B != brq_pkg_RV32BNone ? (operator_i == brq_pkg_ALU_SLO) | (operator_i == brq_pkg_ALU_SRO) : 1'b0);
+	assign shift_funnel = (RV32B != brq_pkg_RV32BNone ? (operator_i == brq_pkg_ALU_FSL) | (operator_i == brq_pkg_ALU_FSR) : 1'b0);
+	always @(*) begin
+		if (RV32B == brq_pkg_RV32BNone)
+			shift_operand = (shift_left ? operand_a_rev : operand_a_i);
+		else
+			case (1'b1)
+				bfp_op: shift_operand = bfp_mask_rev;
+				shift_sbmode: shift_operand = 32'h80000000;
+				default: shift_operand = (shift_left ? operand_a_rev : operand_a_i);
+			endcase
+		shift_result_ext = $unsigned($signed({shift_ones | (shift_arith & shift_operand[31]), shift_operand}) >>> shift_amt[4:0]);
+		shift_result = shift_result_ext[31:0];
+		unused_shift_result_ext = shift_result_ext[32];
+		begin : sv2v_autoblock_86
+			reg [31:0] i;
+			for (i = 0; i < 32; i = i + 1)
+				shift_result_rev[i] = shift_result[31 - i];
+		end
+		shift_result = (shift_left ? shift_result_rev : shift_result);
+	end
+	wire bwlogic_or;
+	wire bwlogic_and;
+	wire [31:0] bwlogic_operand_b;
+	wire [31:0] bwlogic_or_result;
+	wire [31:0] bwlogic_and_result;
+	wire [31:0] bwlogic_xor_result;
+	reg [31:0] bwlogic_result;
+	reg bwlogic_op_b_negate;
+	localparam [5:0] brq_pkg_ALU_ANDN = 7;
+	localparam [5:0] brq_pkg_ALU_CMIX = 40;
+	localparam [5:0] brq_pkg_ALU_ORN = 6;
+	localparam [5:0] brq_pkg_ALU_XNOR = 5;
+	always @(*)
+		case (operator_i)
+			brq_pkg_ALU_XNOR, brq_pkg_ALU_ORN, brq_pkg_ALU_ANDN: bwlogic_op_b_negate = (RV32B != brq_pkg_RV32BNone ? 1'b1 : 1'b0);
+			brq_pkg_ALU_CMIX: bwlogic_op_b_negate = (RV32B != brq_pkg_RV32BNone ? ~instr_first_cycle_i : 1'b0);
+			default: bwlogic_op_b_negate = 1'b0;
+		endcase
+	assign bwlogic_operand_b = (bwlogic_op_b_negate ? operand_b_neg[32:1] : operand_b_i);
+	assign bwlogic_or_result = operand_a_i | bwlogic_operand_b;
+	assign bwlogic_and_result = operand_a_i & bwlogic_operand_b;
+	assign bwlogic_xor_result = operand_a_i ^ bwlogic_operand_b;
+	localparam [5:0] brq_pkg_ALU_OR = 3;
+	assign bwlogic_or = (operator_i == brq_pkg_ALU_OR) | (operator_i == brq_pkg_ALU_ORN);
+	localparam [5:0] brq_pkg_ALU_AND = 4;
+	assign bwlogic_and = (operator_i == brq_pkg_ALU_AND) | (operator_i == brq_pkg_ALU_ANDN);
+	always @(*)
+		case (1'b1)
+			bwlogic_or: bwlogic_result = bwlogic_or_result;
+			bwlogic_and: bwlogic_result = bwlogic_and_result;
+			default: bwlogic_result = bwlogic_xor_result;
+		endcase
+	wire [5:0] bitcnt_result;
+	wire [31:0] minmax_result;
+	reg [31:0] pack_result;
+	wire [31:0] sext_result;
+	reg [31:0] singlebit_result;
+	reg [31:0] rev_result;
+	reg [31:0] shuffle_result;
+	reg [31:0] butterfly_result;
+	reg [31:0] invbutterfly_result;
+	reg [31:0] clmul_result;
+	reg [31:0] multicycle_result;
+	localparam [5:0] brq_pkg_ALU_BDEP = 48;
+	localparam [5:0] brq_pkg_ALU_BEXT = 47;
+	localparam [5:0] brq_pkg_ALU_CLMULH = 52;
+	localparam [5:0] brq_pkg_ALU_CLMULR = 51;
+	localparam [5:0] brq_pkg_ALU_CLZ = 34;
+	localparam [5:0] brq_pkg_ALU_CMOV = 39;
+	localparam [5:0] brq_pkg_ALU_CRC32C_B = 54;
+	localparam [5:0] brq_pkg_ALU_CRC32C_H = 56;
+	localparam [5:0] brq_pkg_ALU_CRC32C_W = 58;
+	localparam [5:0] brq_pkg_ALU_CRC32_B = 53;
+	localparam [5:0] brq_pkg_ALU_CRC32_H = 55;
+	localparam [5:0] brq_pkg_ALU_CRC32_W = 57;
+	localparam [5:0] brq_pkg_ALU_CTZ = 35;
+	localparam [5:0] brq_pkg_ALU_GORC = 16;
+	localparam [5:0] brq_pkg_ALU_PACKH = 31;
+	localparam [5:0] brq_pkg_ALU_PACKU = 30;
+	localparam [5:0] brq_pkg_ALU_SEXTB = 32;
+	localparam [5:0] brq_pkg_ALU_UNSHFL = 18;
+	localparam integer brq_pkg_RV32BFull = 2;
+	generate
+		if (RV32B != brq_pkg_RV32BNone) begin : g_alu_rvb
+			wire zbe_op;
+			wire bitcnt_ctz;
+			wire bitcnt_clz;
+			wire bitcnt_cz;
+			reg [31:0] bitcnt_bits;
+			wire [31:0] bitcnt_mask_op;
+			reg [31:0] bitcnt_bit_mask;
+			reg [191:0] bitcnt_partial;
+			wire [31:0] bitcnt_partial_lsb_d;
+			wire [31:0] bitcnt_partial_msb_d;
+			assign bitcnt_ctz = operator_i == brq_pkg_ALU_CTZ;
+			assign bitcnt_clz = operator_i == brq_pkg_ALU_CLZ;
+			assign bitcnt_cz = bitcnt_ctz | bitcnt_clz;
+			assign bitcnt_result = bitcnt_partial[0+:6];
+			assign bitcnt_mask_op = (bitcnt_clz ? operand_a_rev : operand_a_i);
+			always @(*) begin
+				bitcnt_bit_mask = bitcnt_mask_op;
+				bitcnt_bit_mask = bitcnt_bit_mask | (bitcnt_bit_mask << 1);
+				bitcnt_bit_mask = bitcnt_bit_mask | (bitcnt_bit_mask << 2);
+				bitcnt_bit_mask = bitcnt_bit_mask | (bitcnt_bit_mask << 4);
+				bitcnt_bit_mask = bitcnt_bit_mask | (bitcnt_bit_mask << 8);
+				bitcnt_bit_mask = bitcnt_bit_mask | (bitcnt_bit_mask << 16);
+				bitcnt_bit_mask = ~bitcnt_bit_mask;
+			end
+			assign zbe_op = (operator_i == brq_pkg_ALU_BEXT) | (operator_i == brq_pkg_ALU_BDEP);
+			always @(*)
+				case (1'b1)
+					zbe_op: bitcnt_bits = operand_b_i;
+					bitcnt_cz: bitcnt_bits = bitcnt_bit_mask & ~bitcnt_mask_op;
+					default: bitcnt_bits = operand_a_i;
+				endcase
+			always @(*) begin
+				bitcnt_partial = {32 {6'b000000}};
+				begin : sv2v_autoblock_87
+					reg [31:0] i;
+					for (i = 1; i < 32; i = i + 2)
+						bitcnt_partial[(31 - i) * 6+:6] = {5'h00, bitcnt_bits[i]} + {5'h00, bitcnt_bits[i - 1]};
+				end
+				begin : sv2v_autoblock_88
+					reg [31:0] i;
+					for (i = 3; i < 32; i = i + 4)
+						bitcnt_partial[(31 - i) * 6+:6] = bitcnt_partial[(33 - i) * 6+:6] + bitcnt_partial[(31 - i) * 6+:6];
+				end
+				begin : sv2v_autoblock_89
+					reg [31:0] i;
+					for (i = 7; i < 32; i = i + 8)
+						bitcnt_partial[(31 - i) * 6+:6] = bitcnt_partial[(35 - i) * 6+:6] + bitcnt_partial[(31 - i) * 6+:6];
+				end
+				begin : sv2v_autoblock_90
+					reg [31:0] i;
+					for (i = 15; i < 32; i = i + 16)
+						bitcnt_partial[(31 - i) * 6+:6] = bitcnt_partial[(39 - i) * 6+:6] + bitcnt_partial[(31 - i) * 6+:6];
+				end
+				bitcnt_partial[0+:6] = bitcnt_partial[96+:6] + bitcnt_partial[0+:6];
+				bitcnt_partial[48+:6] = bitcnt_partial[96+:6] + bitcnt_partial[48+:6];
+				begin : sv2v_autoblock_91
+					reg [31:0] i;
+					for (i = 11; i < 32; i = i + 8)
+						bitcnt_partial[(31 - i) * 6+:6] = bitcnt_partial[(35 - i) * 6+:6] + bitcnt_partial[(31 - i) * 6+:6];
+				end
+				begin : sv2v_autoblock_92
+					reg [31:0] i;
+					for (i = 5; i < 32; i = i + 4)
+						bitcnt_partial[(31 - i) * 6+:6] = bitcnt_partial[(33 - i) * 6+:6] + bitcnt_partial[(31 - i) * 6+:6];
+				end
+				bitcnt_partial[186+:6] = {5'h00, bitcnt_bits[0]};
+				begin : sv2v_autoblock_93
+					reg [31:0] i;
+					for (i = 2; i < 32; i = i + 2)
+						bitcnt_partial[(31 - i) * 6+:6] = bitcnt_partial[(32 - i) * 6+:6] + {5'h00, bitcnt_bits[i]};
+				end
+			end
+			assign minmax_result = (cmp_result ? operand_a_i : operand_b_i);
+			wire packu;
+			wire packh;
+			assign packu = operator_i == brq_pkg_ALU_PACKU;
+			assign packh = operator_i == brq_pkg_ALU_PACKH;
+			always @(*)
+				case (1'b1)
+					packu: pack_result = {operand_b_i[31:16], operand_a_i[31:16]};
+					packh: pack_result = {16'h0000, operand_b_i[7:0], operand_a_i[7:0]};
+					default: pack_result = {operand_b_i[15:0], operand_a_i[15:0]};
+				endcase
+			assign sext_result = (operator_i == brq_pkg_ALU_SEXTB ? {{24 {operand_a_i[7]}}, operand_a_i[7:0]} : {{16 {operand_a_i[15]}}, operand_a_i[15:0]});
+			always @(*)
+				case (operator_i)
+					brq_pkg_ALU_SBSET: singlebit_result = operand_a_i | shift_result;
+					brq_pkg_ALU_SBCLR: singlebit_result = operand_a_i & ~shift_result;
+					brq_pkg_ALU_SBINV: singlebit_result = operand_a_i ^ shift_result;
+					default: singlebit_result = {31'h00000000, shift_result[0]};
+				endcase
+			wire [4:0] zbp_shift_amt;
+			wire gorc_op;
+			assign gorc_op = operator_i == brq_pkg_ALU_GORC;
+			assign zbp_shift_amt[2:0] = (RV32B == brq_pkg_RV32BFull ? shift_amt[2:0] : {3 {&shift_amt[2:0]}});
+			assign zbp_shift_amt[4:3] = (RV32B == brq_pkg_RV32BFull ? shift_amt[4:3] : {2 {&shift_amt[4:3]}});
+			always @(*) begin
+				rev_result = operand_a_i;
+				if (zbp_shift_amt[0])
+					rev_result = ((gorc_op ? rev_result : 32'h00000000) | ((rev_result & 32'h55555555) << 1)) | ((rev_result & 32'haaaaaaaa) >> 1);
+				if (zbp_shift_amt[1])
+					rev_result = ((gorc_op ? rev_result : 32'h00000000) | ((rev_result & 32'h33333333) << 2)) | ((rev_result & 32'hcccccccc) >> 2);
+				if (zbp_shift_amt[2])
+					rev_result = ((gorc_op ? rev_result : 32'h00000000) | ((rev_result & 32'h0f0f0f0f) << 4)) | ((rev_result & 32'hf0f0f0f0) >> 4);
+				if (zbp_shift_amt[3])
+					rev_result = ((gorc_op & (RV32B == brq_pkg_RV32BFull) ? rev_result : 32'h00000000) | ((rev_result & 32'h00ff00ff) << 8)) | ((rev_result & 32'hff00ff00) >> 8);
+				if (zbp_shift_amt[4])
+					rev_result = ((gorc_op & (RV32B == brq_pkg_RV32BFull) ? rev_result : 32'h00000000) | ((rev_result & 32'h0000ffff) << 16)) | ((rev_result & 32'hffff0000) >> 16);
+			end
+			wire crc_hmode;
+			wire crc_bmode;
+			wire [31:0] clmul_result_rev;
+			if (RV32B == brq_pkg_RV32BFull) begin : gen_alu_rvb_full
+				localparam [127:0] SHUFFLE_MASK_L = 128'h00ff00000f000f003030303044444444;
+				localparam [127:0] SHUFFLE_MASK_R = 128'h0000ff0000f000f00c0c0c0c22222222;
+				localparam [127:0] FLIP_MASK_L = 128'h22001100004400004411000011000000;
+				localparam [127:0] FLIP_MASK_R = 128'h00880044000022000000882200000088;
+				wire [31:0] SHUFFLE_MASK_NOT [0:3];
+				for (i = 0; i < 4; i = i + 1) begin : gen_shuffle_mask_not
+					assign SHUFFLE_MASK_NOT[i] = ~(SHUFFLE_MASK_L[(3 - i) * 32+:32] | SHUFFLE_MASK_R[(3 - i) * 32+:32]);
+				end
+				wire shuffle_flip;
+				assign shuffle_flip = operator_i == brq_pkg_ALU_UNSHFL;
+				reg [3:0] shuffle_mode;
+				always @(*) begin
+					shuffle_result = operand_a_i;
+					if (shuffle_flip) begin
+						shuffle_mode[3] = shift_amt[0];
+						shuffle_mode[2] = shift_amt[1];
+						shuffle_mode[1] = shift_amt[2];
+						shuffle_mode[0] = shift_amt[3];
+					end
+					else
+						shuffle_mode = shift_amt[3:0];
+					if (shuffle_flip)
+						shuffle_result = ((((((((shuffle_result & 32'h88224411) | ((shuffle_result << 6) & FLIP_MASK_L[96+:32])) | ((shuffle_result >> 6) & FLIP_MASK_R[96+:32])) | ((shuffle_result << 9) & FLIP_MASK_L[64+:32])) | ((shuffle_result >> 9) & FLIP_MASK_R[64+:32])) | ((shuffle_result << 15) & FLIP_MASK_L[32+:32])) | ((shuffle_result >> 15) & FLIP_MASK_R[32+:32])) | ((shuffle_result << 21) & FLIP_MASK_L[0+:32])) | ((shuffle_result >> 21) & FLIP_MASK_R[0+:32]);
+					if (shuffle_mode[3])
+						shuffle_result = (shuffle_result & SHUFFLE_MASK_NOT[0]) | (((shuffle_result << 8) & SHUFFLE_MASK_L[96+:32]) | ((shuffle_result >> 8) & SHUFFLE_MASK_R[96+:32]));
+					if (shuffle_mode[2])
+						shuffle_result = (shuffle_result & SHUFFLE_MASK_NOT[1]) | (((shuffle_result << 4) & SHUFFLE_MASK_L[64+:32]) | ((shuffle_result >> 4) & SHUFFLE_MASK_R[64+:32]));
+					if (shuffle_mode[1])
+						shuffle_result = (shuffle_result & SHUFFLE_MASK_NOT[2]) | (((shuffle_result << 2) & SHUFFLE_MASK_L[32+:32]) | ((shuffle_result >> 2) & SHUFFLE_MASK_R[32+:32]));
+					if (shuffle_mode[0])
+						shuffle_result = (shuffle_result & SHUFFLE_MASK_NOT[3]) | (((shuffle_result << 1) & SHUFFLE_MASK_L[0+:32]) | ((shuffle_result >> 1) & SHUFFLE_MASK_R[0+:32]));
+					if (shuffle_flip)
+						shuffle_result = ((((((((shuffle_result & 32'h88224411) | ((shuffle_result << 6) & FLIP_MASK_L[96+:32])) | ((shuffle_result >> 6) & FLIP_MASK_R[96+:32])) | ((shuffle_result << 9) & FLIP_MASK_L[64+:32])) | ((shuffle_result >> 9) & FLIP_MASK_R[64+:32])) | ((shuffle_result << 15) & FLIP_MASK_L[32+:32])) | ((shuffle_result >> 15) & FLIP_MASK_R[32+:32])) | ((shuffle_result << 21) & FLIP_MASK_L[0+:32])) | ((shuffle_result >> 21) & FLIP_MASK_R[0+:32]);
+				end
+				reg [191:0] bitcnt_partial_q;
+				for (i = 0; i < 32; i = i + 1) begin : gen_bitcnt_reg_in_lsb
+					assign bitcnt_partial_lsb_d[i] = bitcnt_partial[(31 - i) * 6];
+				end
+				for (i = 0; i < 16; i = i + 1) begin : gen_bitcnt_reg_in_b1
+					assign bitcnt_partial_msb_d[i] = bitcnt_partial[((31 - ((2 * i) + 1)) * 6) + 1];
+				end
+				for (i = 0; i < 8; i = i + 1) begin : gen_bitcnt_reg_in_b2
+					assign bitcnt_partial_msb_d[16 + i] = bitcnt_partial[((31 - ((4 * i) + 3)) * 6) + 2];
+				end
+				for (i = 0; i < 4; i = i + 1) begin : gen_bitcnt_reg_in_b3
+					assign bitcnt_partial_msb_d[24 + i] = bitcnt_partial[((31 - ((8 * i) + 7)) * 6) + 3];
+				end
+				for (i = 0; i < 2; i = i + 1) begin : gen_bitcnt_reg_in_b4
+					assign bitcnt_partial_msb_d[28 + i] = bitcnt_partial[((31 - ((16 * i) + 15)) * 6) + 4];
+				end
+				assign bitcnt_partial_msb_d[30] = bitcnt_partial[5];
+				assign bitcnt_partial_msb_d[31] = 1'b0;
+				always @(*) begin
+					bitcnt_partial_q = {32 {6'b000000}};
+					begin : sv2v_autoblock_94
+						reg [31:0] i;
+						for (i = 0; i < 32; i = i + 1)
+							begin : gen_bitcnt_reg_out_lsb
+								bitcnt_partial_q[(31 - i) * 6] = imd_val_q_i[32 + i];
+							end
+					end
+					begin : sv2v_autoblock_95
+						reg [31:0] i;
+						for (i = 0; i < 16; i = i + 1)
+							begin : gen_bitcnt_reg_out_b1
+								bitcnt_partial_q[((31 - ((2 * i) + 1)) * 6) + 1] = imd_val_q_i[i];
+							end
+					end
+					begin : sv2v_autoblock_96
+						reg [31:0] i;
+						for (i = 0; i < 8; i = i + 1)
+							begin : gen_bitcnt_reg_out_b2
+								bitcnt_partial_q[((31 - ((4 * i) + 3)) * 6) + 2] = imd_val_q_i[16 + i];
+							end
+					end
+					begin : sv2v_autoblock_97
+						reg [31:0] i;
+						for (i = 0; i < 4; i = i + 1)
+							begin : gen_bitcnt_reg_out_b3
+								bitcnt_partial_q[((31 - ((8 * i) + 7)) * 6) + 3] = imd_val_q_i[24 + i];
+							end
+					end
+					begin : sv2v_autoblock_98
+						reg [31:0] i;
+						for (i = 0; i < 2; i = i + 1)
+							begin : gen_bitcnt_reg_out_b4
+								bitcnt_partial_q[((31 - ((16 * i) + 15)) * 6) + 4] = imd_val_q_i[28 + i];
+							end
+					end
+					bitcnt_partial_q[5] = imd_val_q_i[30];
+				end
+				wire [31:0] butterfly_mask_l [0:4];
+				wire [31:0] butterfly_mask_r [0:4];
+				wire [31:0] butterfly_mask_not [0:4];
+				wire [31:0] lrotc_stage [0:4];
+				genvar stg;
+				for (stg = 0; stg < 5; stg = stg + 1) begin : gen_butterfly_ctrl_stage
+					genvar seg;
+					for (seg = 0; seg < (2 ** stg); seg = seg + 1) begin : gen_butterfly_ctrl
+						assign lrotc_stage[stg][((2 * (16 >> stg)) * (seg + 1)) - 1:(2 * (16 >> stg)) * seg] = {{16 >> stg {1'b0}}, {16 >> stg {1'b1}}} << bitcnt_partial_q[((32 - ((16 >> stg) * ((2 * seg) + 1))) * 6) + ($clog2(16 >> stg) >= 0 ? $clog2(16 >> stg) : ($clog2(16 >> stg) + ($clog2(16 >> stg) >= 0 ? $clog2(16 >> stg) + 1 : 1 - $clog2(16 >> stg))) - 1)-:($clog2(16 >> stg) >= 0 ? $clog2(16 >> stg) + 1 : 1 - $clog2(16 >> stg))];
+						assign butterfly_mask_l[stg][((16 >> stg) * ((2 * seg) + 2)) - 1:(16 >> stg) * ((2 * seg) + 1)] = ~lrotc_stage[stg][((16 >> stg) * ((2 * seg) + 2)) - 1:(16 >> stg) * ((2 * seg) + 1)];
+						assign butterfly_mask_r[stg][((16 >> stg) * ((2 * seg) + 1)) - 1:(16 >> stg) * (2 * seg)] = ~lrotc_stage[stg][((16 >> stg) * ((2 * seg) + 2)) - 1:(16 >> stg) * ((2 * seg) + 1)];
+						assign butterfly_mask_l[stg][((16 >> stg) * ((2 * seg) + 1)) - 1:(16 >> stg) * (2 * seg)] = {((((16 >> stg) * ((2 * seg) + 1)) - 1) >= ((16 >> stg) * (2 * seg)) ? ((((16 >> stg) * ((2 * seg) + 1)) - 1) - ((16 >> stg) * (2 * seg))) + 1 : (((16 >> stg) * (2 * seg)) - (((16 >> stg) * ((2 * seg) + 1)) - 1)) + 1) {1'sb0}};
+						assign butterfly_mask_r[stg][((16 >> stg) * ((2 * seg) + 2)) - 1:(16 >> stg) * ((2 * seg) + 1)] = {((((16 >> stg) * ((2 * seg) + 2)) - 1) >= ((16 >> stg) * ((2 * seg) + 1)) ? ((((16 >> stg) * ((2 * seg) + 2)) - 1) - ((16 >> stg) * ((2 * seg) + 1))) + 1 : (((16 >> stg) * ((2 * seg) + 1)) - (((16 >> stg) * ((2 * seg) + 2)) - 1)) + 1) {1'sb0}};
+					end
+				end
+				for (stg = 0; stg < 5; stg = stg + 1) begin : gen_butterfly_not
+					assign butterfly_mask_not[stg] = ~(butterfly_mask_l[stg] | butterfly_mask_r[stg]);
+				end
+				always @(*) begin
+					butterfly_result = operand_a_i;
+					butterfly_result = ((butterfly_result & butterfly_mask_not[0]) | ((butterfly_result & butterfly_mask_l[0]) >> 16)) | ((butterfly_result & butterfly_mask_r[0]) << 16);
+					butterfly_result = ((butterfly_result & butterfly_mask_not[1]) | ((butterfly_result & butterfly_mask_l[1]) >> 8)) | ((butterfly_result & butterfly_mask_r[1]) << 8);
+					butterfly_result = ((butterfly_result & butterfly_mask_not[2]) | ((butterfly_result & butterfly_mask_l[2]) >> 4)) | ((butterfly_result & butterfly_mask_r[2]) << 4);
+					butterfly_result = ((butterfly_result & butterfly_mask_not[3]) | ((butterfly_result & butterfly_mask_l[3]) >> 2)) | ((butterfly_result & butterfly_mask_r[3]) << 2);
+					butterfly_result = ((butterfly_result & butterfly_mask_not[4]) | ((butterfly_result & butterfly_mask_l[4]) >> 1)) | ((butterfly_result & butterfly_mask_r[4]) << 1);
+					butterfly_result = butterfly_result & operand_b_i;
+				end
+				always @(*) begin
+					invbutterfly_result = operand_a_i & operand_b_i;
+					invbutterfly_result = ((invbutterfly_result & butterfly_mask_not[4]) | ((invbutterfly_result & butterfly_mask_l[4]) >> 1)) | ((invbutterfly_result & butterfly_mask_r[4]) << 1);
+					invbutterfly_result = ((invbutterfly_result & butterfly_mask_not[3]) | ((invbutterfly_result & butterfly_mask_l[3]) >> 2)) | ((invbutterfly_result & butterfly_mask_r[3]) << 2);
+					invbutterfly_result = ((invbutterfly_result & butterfly_mask_not[2]) | ((invbutterfly_result & butterfly_mask_l[2]) >> 4)) | ((invbutterfly_result & butterfly_mask_r[2]) << 4);
+					invbutterfly_result = ((invbutterfly_result & butterfly_mask_not[1]) | ((invbutterfly_result & butterfly_mask_l[1]) >> 8)) | ((invbutterfly_result & butterfly_mask_r[1]) << 8);
+					invbutterfly_result = ((invbutterfly_result & butterfly_mask_not[0]) | ((invbutterfly_result & butterfly_mask_l[0]) >> 16)) | ((invbutterfly_result & butterfly_mask_r[0]) << 16);
+				end
+				wire clmul_rmode;
+				wire clmul_hmode;
+				reg [31:0] clmul_op_a;
+				reg [31:0] clmul_op_b;
+				wire [31:0] operand_b_rev;
+				wire [31:0] clmul_and_stage [0:31];
+				wire [31:0] clmul_xor_stage1 [0:15];
+				wire [31:0] clmul_xor_stage2 [0:7];
+				wire [31:0] clmul_xor_stage3 [0:3];
+				wire [31:0] clmul_xor_stage4 [0:1];
+				wire [31:0] clmul_result_raw;
+				for (i = 0; i < 32; i = i + 1) begin : gen_rev_operand_b
+					assign operand_b_rev[i] = operand_b_i[31 - i];
+				end
+				assign clmul_rmode = operator_i == brq_pkg_ALU_CLMULR;
+				assign clmul_hmode = operator_i == brq_pkg_ALU_CLMULH;
+				localparam [31:0] CRC32_POLYNOMIAL = 32'h04c11db7;
+				localparam [31:0] CRC32_MU_REV = 32'hf7011641;
+				localparam [31:0] CRC32C_POLYNOMIAL = 32'h1edc6f41;
+				localparam [31:0] CRC32C_MU_REV = 32'hdea713f1;
+				wire crc_op;
+				wire crc_cpoly;
+				reg [31:0] crc_operand;
+				wire [31:0] crc_poly;
+				wire [31:0] crc_mu_rev;
+				assign crc_op = (((((operator_i == brq_pkg_ALU_CRC32C_W) | (operator_i == brq_pkg_ALU_CRC32_W)) | (operator_i == brq_pkg_ALU_CRC32C_H)) | (operator_i == brq_pkg_ALU_CRC32_H)) | (operator_i == brq_pkg_ALU_CRC32C_B)) | (operator_i == brq_pkg_ALU_CRC32_B);
+				assign crc_cpoly = ((operator_i == brq_pkg_ALU_CRC32C_W) | (operator_i == brq_pkg_ALU_CRC32C_H)) | (operator_i == brq_pkg_ALU_CRC32C_B);
+				assign crc_hmode = (operator_i == brq_pkg_ALU_CRC32_H) | (operator_i == brq_pkg_ALU_CRC32C_H);
+				assign crc_bmode = (operator_i == brq_pkg_ALU_CRC32_B) | (operator_i == brq_pkg_ALU_CRC32C_B);
+				assign crc_poly = (crc_cpoly ? CRC32C_POLYNOMIAL : CRC32_POLYNOMIAL);
+				assign crc_mu_rev = (crc_cpoly ? CRC32C_MU_REV : CRC32_MU_REV);
+				always @(*)
+					case (1'b1)
+						crc_bmode: crc_operand = {operand_a_i[7:0], 24'h000000};
+						crc_hmode: crc_operand = {operand_a_i[15:0], 16'h0000};
+						default: crc_operand = operand_a_i;
+					endcase
+				always @(*)
+					if (crc_op) begin
+						clmul_op_a = (instr_first_cycle_i ? crc_operand : imd_val_q_i[32+:32]);
+						clmul_op_b = (instr_first_cycle_i ? crc_mu_rev : crc_poly);
+					end
+					else begin
+						clmul_op_a = (clmul_rmode | clmul_hmode ? operand_a_rev : operand_a_i);
+						clmul_op_b = (clmul_rmode | clmul_hmode ? operand_b_rev : operand_b_i);
+					end
+				for (i = 0; i < 32; i = i + 1) begin : gen_clmul_and_op
+					assign clmul_and_stage[i] = (clmul_op_b[i] ? clmul_op_a << i : {32 {1'sb0}});
+				end
+				for (i = 0; i < 16; i = i + 1) begin : gen_clmul_xor_op_l1
+					assign clmul_xor_stage1[i] = clmul_and_stage[2 * i] ^ clmul_and_stage[(2 * i) + 1];
+				end
+				for (i = 0; i < 8; i = i + 1) begin : gen_clmul_xor_op_l2
+					assign clmul_xor_stage2[i] = clmul_xor_stage1[2 * i] ^ clmul_xor_stage1[(2 * i) + 1];
+				end
+				for (i = 0; i < 4; i = i + 1) begin : gen_clmul_xor_op_l3
+					assign clmul_xor_stage3[i] = clmul_xor_stage2[2 * i] ^ clmul_xor_stage2[(2 * i) + 1];
+				end
+				for (i = 0; i < 2; i = i + 1) begin : gen_clmul_xor_op_l4
+					assign clmul_xor_stage4[i] = clmul_xor_stage3[2 * i] ^ clmul_xor_stage3[(2 * i) + 1];
+				end
+				assign clmul_result_raw = clmul_xor_stage4[0] ^ clmul_xor_stage4[1];
+				for (i = 0; i < 32; i = i + 1) begin : gen_rev_clmul_result
+					assign clmul_result_rev[i] = clmul_result_raw[31 - i];
+				end
+				always @(*)
+					case (1'b1)
+						clmul_rmode: clmul_result = clmul_result_rev;
+						clmul_hmode: clmul_result = {1'b0, clmul_result_rev[31:1]};
+						default: clmul_result = clmul_result_raw;
+					endcase
+			end
+			else begin : gen_alu_rvb_notfull
+				wire [31:0] unused_imd_val_q_1;
+				assign unused_imd_val_q_1 = imd_val_q_i[0+:32];
+				wire [32:1] sv2v_tmp_8C42B;
+				assign sv2v_tmp_8C42B = {32 {1'sb0}};
+				always @(*) shuffle_result = sv2v_tmp_8C42B;
+				wire [32:1] sv2v_tmp_B0AD4;
+				assign sv2v_tmp_B0AD4 = {32 {1'sb0}};
+				always @(*) butterfly_result = sv2v_tmp_B0AD4;
+				wire [32:1] sv2v_tmp_AFC2C;
+				assign sv2v_tmp_AFC2C = {32 {1'sb0}};
+				always @(*) invbutterfly_result = sv2v_tmp_AFC2C;
+				wire [32:1] sv2v_tmp_3A741;
+				assign sv2v_tmp_3A741 = {32 {1'sb0}};
+				always @(*) clmul_result = sv2v_tmp_3A741;
+				assign bitcnt_partial_lsb_d = {32 {1'sb0}};
+				assign bitcnt_partial_msb_d = {32 {1'sb0}};
+				assign clmul_result_rev = {32 {1'sb0}};
+				assign crc_bmode = 1'b0;
+				assign crc_hmode = 1'b0;
+			end
+			always @(*)
+				case (operator_i)
+					brq_pkg_ALU_CMOV: begin
+						multicycle_result = (operand_b_i == 32'h00000000 ? operand_a_i : imd_val_q_i[32+:32]);
+						imd_val_d_o = {operand_a_i, 32'h00000000};
+						if (instr_first_cycle_i)
+							imd_val_we_o = 2'b01;
+						else
+							imd_val_we_o = 2'b00;
+					end
+					brq_pkg_ALU_CMIX: begin
+						multicycle_result = imd_val_q_i[32+:32] | bwlogic_and_result;
+						imd_val_d_o = {bwlogic_and_result, 32'h00000000};
+						if (instr_first_cycle_i)
+							imd_val_we_o = 2'b01;
+						else
+							imd_val_we_o = 2'b00;
+					end
+					brq_pkg_ALU_FSR, brq_pkg_ALU_FSL, brq_pkg_ALU_ROL, brq_pkg_ALU_ROR: begin
+						if (shift_amt[4:0] == 5'h00)
+							multicycle_result = (shift_amt[5] ? operand_a_i : imd_val_q_i[32+:32]);
+						else
+							multicycle_result = imd_val_q_i[32+:32] | shift_result;
+						imd_val_d_o = {shift_result, 32'h00000000};
+						if (instr_first_cycle_i)
+							imd_val_we_o = 2'b01;
+						else
+							imd_val_we_o = 2'b00;
+					end
+					brq_pkg_ALU_CRC32_W, brq_pkg_ALU_CRC32C_W, brq_pkg_ALU_CRC32_H, brq_pkg_ALU_CRC32C_H, brq_pkg_ALU_CRC32_B, brq_pkg_ALU_CRC32C_B:
+						if (RV32B == brq_pkg_RV32BFull) begin
+							case (1'b1)
+								crc_bmode: multicycle_result = clmul_result_rev ^ (operand_a_i >> 8);
+								crc_hmode: multicycle_result = clmul_result_rev ^ (operand_a_i >> 16);
+								default: multicycle_result = clmul_result_rev;
+							endcase
+							imd_val_d_o = {clmul_result_rev, 32'h00000000};
+							if (instr_first_cycle_i)
+								imd_val_we_o = 2'b01;
+							else
+								imd_val_we_o = 2'b00;
+						end
+						else begin
+							imd_val_d_o = {operand_a_i, 32'h00000000};
+							imd_val_we_o = 2'b00;
+							multicycle_result = {32 {1'sb0}};
+						end
+					brq_pkg_ALU_BEXT, brq_pkg_ALU_BDEP:
+						if (RV32B == brq_pkg_RV32BFull) begin
+							multicycle_result = (operator_i == brq_pkg_ALU_BDEP ? butterfly_result : invbutterfly_result);
+							imd_val_d_o = {bitcnt_partial_lsb_d, bitcnt_partial_msb_d};
+							if (instr_first_cycle_i)
+								imd_val_we_o = 2'b11;
+							else
+								imd_val_we_o = 2'b00;
+						end
+						else begin
+							imd_val_d_o = {operand_a_i, 32'h00000000};
+							imd_val_we_o = 2'b00;
+							multicycle_result = {32 {1'sb0}};
+						end
+					default: begin
+						imd_val_d_o = {operand_a_i, 32'h00000000};
+						imd_val_we_o = 2'b00;
+						multicycle_result = {32 {1'sb0}};
+					end
+				endcase
+		end
+		else begin : g_no_alu_rvb
+			wire [63:0] unused_imd_val_q;
+			assign unused_imd_val_q = imd_val_q_i;
+			wire [31:0] unused_butterfly_result;
+			assign unused_butterfly_result = butterfly_result;
+			wire [31:0] unused_invbutterfly_result;
+			assign unused_invbutterfly_result = invbutterfly_result;
+			assign bitcnt_result = {6 {1'sb0}};
+			assign minmax_result = {32 {1'sb0}};
+			wire [32:1] sv2v_tmp_68181;
+			assign sv2v_tmp_68181 = {32 {1'sb0}};
+			always @(*) pack_result = sv2v_tmp_68181;
+			assign sext_result = {32 {1'sb0}};
+			wire [32:1] sv2v_tmp_D756E;
+			assign sv2v_tmp_D756E = {32 {1'sb0}};
+			always @(*) singlebit_result = sv2v_tmp_D756E;
+			wire [32:1] sv2v_tmp_BAAB3;
+			assign sv2v_tmp_BAAB3 = {32 {1'sb0}};
+			always @(*) rev_result = sv2v_tmp_BAAB3;
+			wire [32:1] sv2v_tmp_8C42B;
+			assign sv2v_tmp_8C42B = {32 {1'sb0}};
+			always @(*) shuffle_result = sv2v_tmp_8C42B;
+			wire [32:1] sv2v_tmp_B0AD4;
+			assign sv2v_tmp_B0AD4 = {32 {1'sb0}};
+			always @(*) butterfly_result = sv2v_tmp_B0AD4;
+			wire [32:1] sv2v_tmp_AFC2C;
+			assign sv2v_tmp_AFC2C = {32 {1'sb0}};
+			always @(*) invbutterfly_result = sv2v_tmp_AFC2C;
+			wire [32:1] sv2v_tmp_3A741;
+			assign sv2v_tmp_3A741 = {32 {1'sb0}};
+			always @(*) clmul_result = sv2v_tmp_3A741;
+			wire [32:1] sv2v_tmp_172E8;
+			assign sv2v_tmp_172E8 = {32 {1'sb0}};
+			always @(*) multicycle_result = sv2v_tmp_172E8;
+			wire [64:1] sv2v_tmp_CAB3F;
+			assign sv2v_tmp_CAB3F = {2 {32'b00000000000000000000000000000000}};
+			always @(*) imd_val_d_o = sv2v_tmp_CAB3F;
+			wire [2:1] sv2v_tmp_B65CC;
+			assign sv2v_tmp_B65CC = {2 {1'b0}};
+			always @(*) imd_val_we_o = sv2v_tmp_B65CC;
+		end
+	endgenerate
+	localparam [5:0] brq_pkg_ALU_ADD = 0;
+	localparam [5:0] brq_pkg_ALU_CLMUL = 50;
+	localparam [5:0] brq_pkg_ALU_GREV = 15;
+	localparam [5:0] brq_pkg_ALU_PACK = 29;
+	localparam [5:0] brq_pkg_ALU_PCNT = 36;
+	localparam [5:0] brq_pkg_ALU_SBEXT = 46;
+	localparam [5:0] brq_pkg_ALU_SEXTH = 33;
+	localparam [5:0] brq_pkg_ALU_SHFL = 17;
+	localparam [5:0] brq_pkg_ALU_SRL = 9;
+	localparam [5:0] brq_pkg_ALU_XOR = 2;
+	always @(*) begin
+		result_o = {32 {1'sb0}};
+		case (operator_i)
+			brq_pkg_ALU_XOR, brq_pkg_ALU_XNOR, brq_pkg_ALU_OR, brq_pkg_ALU_ORN, brq_pkg_ALU_AND, brq_pkg_ALU_ANDN: result_o = bwlogic_result;
+			brq_pkg_ALU_ADD, brq_pkg_ALU_SUB: result_o = adder_result;
+			brq_pkg_ALU_SLL, brq_pkg_ALU_SRL, brq_pkg_ALU_SRA, brq_pkg_ALU_SLO, brq_pkg_ALU_SRO: result_o = shift_result;
+			brq_pkg_ALU_SHFL, brq_pkg_ALU_UNSHFL: result_o = shuffle_result;
+			brq_pkg_ALU_EQ, brq_pkg_ALU_NE, brq_pkg_ALU_GE, brq_pkg_ALU_GEU, brq_pkg_ALU_LT, brq_pkg_ALU_LTU, brq_pkg_ALU_SLT, brq_pkg_ALU_SLTU: result_o = {31'h00000000, cmp_result};
+			brq_pkg_ALU_MIN, brq_pkg_ALU_MAX, brq_pkg_ALU_MINU, brq_pkg_ALU_MAXU: result_o = minmax_result;
+			brq_pkg_ALU_CLZ, brq_pkg_ALU_CTZ, brq_pkg_ALU_PCNT: result_o = {26'h0000000, bitcnt_result};
+			brq_pkg_ALU_PACK, brq_pkg_ALU_PACKH, brq_pkg_ALU_PACKU: result_o = pack_result;
+			brq_pkg_ALU_SEXTB, brq_pkg_ALU_SEXTH: result_o = sext_result;
+			brq_pkg_ALU_CMIX, brq_pkg_ALU_CMOV, brq_pkg_ALU_FSL, brq_pkg_ALU_FSR, brq_pkg_ALU_ROL, brq_pkg_ALU_ROR, brq_pkg_ALU_CRC32_W, brq_pkg_ALU_CRC32C_W, brq_pkg_ALU_CRC32_H, brq_pkg_ALU_CRC32C_H, brq_pkg_ALU_CRC32_B, brq_pkg_ALU_CRC32C_B, brq_pkg_ALU_BEXT, brq_pkg_ALU_BDEP: result_o = multicycle_result;
+			brq_pkg_ALU_SBSET, brq_pkg_ALU_SBCLR, brq_pkg_ALU_SBINV, brq_pkg_ALU_SBEXT: result_o = singlebit_result;
+			brq_pkg_ALU_GREV, brq_pkg_ALU_GORC: result_o = rev_result;
+			brq_pkg_ALU_BFP: result_o = bfp_result;
+			brq_pkg_ALU_CLMUL, brq_pkg_ALU_CLMULR, brq_pkg_ALU_CLMULH: result_o = clmul_result;
+			default:
+				;
+		endcase
+	end
+	wire unused_shift_amt_compl;
+	assign unused_shift_amt_compl = shift_amt_compl[5];
+endmodule
+module brq_exu_multdiv_fast (
+	clk_i,
+	rst_ni,
+	mult_en_i,
+	div_en_i,
+	mult_sel_i,
+	div_sel_i,
+	operator_i,
+	signed_mode_i,
+	op_a_i,
+	op_b_i,
+	alu_adder_ext_i,
+	alu_adder_i,
+	equal_to_zero_i,
+	data_ind_timing_i,
+	alu_operand_a_o,
+	alu_operand_b_o,
+	imd_val_q_i,
+	imd_val_d_o,
+	imd_val_we_o,
+	multdiv_ready_id_i,
+	multdiv_result_o,
+	valid_o
+);
+	localparam integer brq_pkg_RV32MFast = 2;
+	parameter integer RV32M = brq_pkg_RV32MFast;
+	input wire clk_i;
+	input wire rst_ni;
+	input wire mult_en_i;
+	input wire div_en_i;
+	input wire mult_sel_i;
+	input wire div_sel_i;
+	input wire [1:0] operator_i;
+	input wire [1:0] signed_mode_i;
+	input wire [31:0] op_a_i;
+	input wire [31:0] op_b_i;
+	input wire [33:0] alu_adder_ext_i;
+	input wire [31:0] alu_adder_i;
+	input wire equal_to_zero_i;
+	input wire data_ind_timing_i;
+	output reg [32:0] alu_operand_a_o;
+	output reg [32:0] alu_operand_b_o;
+	input wire [67:0] imd_val_q_i;
+	output wire [67:0] imd_val_d_o;
+	output wire [1:0] imd_val_we_o;
+	input wire multdiv_ready_id_i;
+	output wire [31:0] multdiv_result_o;
+	output wire valid_o;
+	wire signed [34:0] mac_res_signed;
+	wire [34:0] mac_res_ext;
+	reg [33:0] accum;
+	reg sign_a;
+	reg sign_b;
+	reg mult_valid;
+	wire signed_mult;
+	reg [33:0] mac_res_d;
+	reg [33:0] op_remainder_d;
+	wire [33:0] mac_res;
+	wire div_sign_a;
+	wire div_sign_b;
+	reg is_greater_equal;
+	wire div_change_sign;
+	wire rem_change_sign;
+	wire [31:0] one_shift;
+	wire [31:0] op_denominator_q;
+	reg [31:0] op_numerator_q;
+	reg [31:0] op_quotient_q;
+	reg [31:0] op_denominator_d;
+	reg [31:0] op_numerator_d;
+	reg [31:0] op_quotient_d;
+	wire [31:0] next_remainder;
+	wire [32:0] next_quotient;
+	wire [31:0] res_adder_h;
+	reg div_valid;
+	reg [4:0] div_counter_q;
+	reg [4:0] div_counter_d;
+	wire multdiv_en;
+	reg mult_hold;
+	reg div_hold;
+	reg div_by_zero_d;
+	reg div_by_zero_q;
+	wire mult_en_internal;
+	wire div_en_internal;
+	reg [2:0] md_state_q;
+	reg [2:0] md_state_d;
+	wire unused_mult_sel_i;
+	assign unused_mult_sel_i = mult_sel_i;
+	assign mult_en_internal = mult_en_i & ~mult_hold;
+	assign div_en_internal = div_en_i & ~div_hold;
+	localparam [2:0] MD_IDLE = 0;
+	always @(posedge clk_i or negedge rst_ni)
+		if (!rst_ni) begin
+			div_counter_q <= {5 {1'sb0}};
+			md_state_q <= MD_IDLE;
+			op_numerator_q <= {32 {1'sb0}};
+			op_quotient_q <= {32 {1'sb0}};
+			div_by_zero_q <= 1'b0;
+		end
+		else if (div_en_internal) begin
+			div_counter_q <= div_counter_d;
+			op_numerator_q <= op_numerator_d;
+			op_quotient_q <= op_quotient_d;
+			md_state_q <= md_state_d;
+			div_by_zero_q <= div_by_zero_d;
+		end
+	assign multdiv_en = mult_en_internal | div_en_internal;
+	assign imd_val_d_o[34+:34] = (div_sel_i ? op_remainder_d : mac_res_d);
+	assign imd_val_we_o[0] = multdiv_en;
+	assign imd_val_d_o[0+:34] = {2'b00, op_denominator_d};
+	assign imd_val_we_o[1] = div_en_internal;
+	assign op_denominator_q = imd_val_q_i[31-:32];
+	wire [1:0] unused_imd_val;
+	assign unused_imd_val = imd_val_q_i[33-:2];
+	wire unused_mac_res_ext;
+	assign unused_mac_res_ext = mac_res_ext[34];
+	assign signed_mult = signed_mode_i != 2'b00;
+	assign multdiv_result_o = (div_sel_i ? imd_val_q_i[65-:32] : mac_res_d[31:0]);
+	localparam [1:0] AHBH = 3;
+	localparam [1:0] AHBL = 2;
+	localparam [1:0] ALBH = 1;
+	localparam [1:0] ALBL = 0;
+	localparam [0:0] MULH = 1;
+	localparam [0:0] MULL = 0;
+	localparam [1:0] brq_pkg_MD_OP_MULL = 0;
+	localparam integer brq_pkg_RV32MSingleCycle = 3;
+	generate
+		if (RV32M == brq_pkg_RV32MSingleCycle) begin : gen_mult_single_cycle
+			reg mult_state_q;
+			reg mult_state_d;
+			wire signed [33:0] mult1_res;
+			wire signed [33:0] mult2_res;
+			wire signed [33:0] mult3_res;
+			wire [33:0] mult1_res_uns;
+			wire [33:32] unused_mult1_res_uns;
+			wire [15:0] mult1_op_a;
+			wire [15:0] mult1_op_b;
+			wire [15:0] mult2_op_a;
+			wire [15:0] mult2_op_b;
+			reg [15:0] mult3_op_a;
+			reg [15:0] mult3_op_b;
+			wire mult1_sign_a;
+			wire mult1_sign_b;
+			wire mult2_sign_a;
+			wire mult2_sign_b;
+			reg mult3_sign_a;
+			reg mult3_sign_b;
+			reg [33:0] summand1;
+			reg [33:0] summand2;
+			reg [33:0] summand3;
+			assign mult1_res = $signed({mult1_sign_a, mult1_op_a}) * $signed({mult1_sign_b, mult1_op_b});
+			assign mult2_res = $signed({mult2_sign_a, mult2_op_a}) * $signed({mult2_sign_b, mult2_op_b});
+			assign mult3_res = $signed({mult3_sign_a, mult3_op_a}) * $signed({mult3_sign_b, mult3_op_b});
+			assign mac_res_signed = ($signed(summand1) + $signed(summand2)) + $signed(summand3);
+			assign mult1_res_uns = $unsigned(mult1_res);
+			assign mac_res_ext = $unsigned(mac_res_signed);
+			assign mac_res = mac_res_ext[33:0];
+			wire [1:1] sv2v_tmp_1E8D3;
+			assign sv2v_tmp_1E8D3 = signed_mode_i[0] & op_a_i[31];
+			always @(*) sign_a = sv2v_tmp_1E8D3;
+			wire [1:1] sv2v_tmp_3B65C;
+			assign sv2v_tmp_3B65C = signed_mode_i[1] & op_b_i[31];
+			always @(*) sign_b = sv2v_tmp_3B65C;
+			assign mult1_sign_a = 1'b0;
+			assign mult1_sign_b = 1'b0;
+			assign mult1_op_a = op_a_i[15:0];
+			assign mult1_op_b = op_b_i[15:0];
+			assign mult2_sign_a = 1'b0;
+			assign mult2_sign_b = sign_b;
+			assign mult2_op_a = op_a_i[15:0];
+			assign mult2_op_b = op_b_i[31:16];
+			wire [18:1] sv2v_tmp_4D45D;
+			assign sv2v_tmp_4D45D = imd_val_q_i[67-:18];
+			always @(*) accum[17:0] = sv2v_tmp_4D45D;
+			wire [16:1] sv2v_tmp_D5F47;
+			assign sv2v_tmp_D5F47 = {16 {signed_mult & imd_val_q_i[67]}};
+			always @(*) accum[33:18] = sv2v_tmp_D5F47;
+			always @(*) begin
+				mult3_sign_a = sign_a;
+				mult3_sign_b = 1'b0;
+				mult3_op_a = op_a_i[31:16];
+				mult3_op_b = op_b_i[15:0];
+				summand1 = {18'h00000, mult1_res_uns[31:16]};
+				summand2 = $unsigned(mult2_res);
+				summand3 = $unsigned(mult3_res);
+				mac_res_d = {2'b00, mac_res[15:0], mult1_res_uns[15:0]};
+				mult_valid = mult_en_i;
+				mult_state_d = MULL;
+				mult_hold = 1'b0;
+				case (mult_state_q)
+					MULL:
+						if (operator_i != brq_pkg_MD_OP_MULL) begin
+							mac_res_d = mac_res;
+							mult_valid = 1'b0;
+							mult_state_d = MULH;
+						end
+						else
+							mult_hold = ~multdiv_ready_id_i;
+					MULH: begin
+						mult3_sign_a = sign_a;
+						mult3_sign_b = sign_b;
+						mult3_op_a = op_a_i[31:16];
+						mult3_op_b = op_b_i[31:16];
+						mac_res_d = mac_res;
+						summand1 = {34 {1'sb0}};
+						summand2 = accum;
+						summand3 = mult3_res;
+						mult_state_d = MULL;
+						mult_valid = 1'b1;
+						mult_hold = ~multdiv_ready_id_i;
+					end
+					default: mult_state_d = MULL;
+				endcase
+			end
+			always @(posedge clk_i or negedge rst_ni)
+				if (!rst_ni)
+					mult_state_q <= MULL;
+				else if (mult_en_internal)
+					mult_state_q <= mult_state_d;
+			assign unused_mult1_res_uns = mult1_res_uns[33:32];
+		end
+		else begin : gen_mult_fast
+			reg [15:0] mult_op_a;
+			reg [15:0] mult_op_b;
+			reg [1:0] mult_state_q;
+			reg [1:0] mult_state_d;
+			assign mac_res_signed = ($signed({sign_a, mult_op_a}) * $signed({sign_b, mult_op_b})) + $signed(accum);
+			assign mac_res_ext = $unsigned(mac_res_signed);
+			assign mac_res = mac_res_ext[33:0];
+			always @(*) begin
+				mult_op_a = op_a_i[15:0];
+				mult_op_b = op_b_i[15:0];
+				sign_a = 1'b0;
+				sign_b = 1'b0;
+				accum = imd_val_q_i[34+:34];
+				mac_res_d = mac_res;
+				mult_state_d = mult_state_q;
+				mult_valid = 1'b0;
+				mult_hold = 1'b0;
+				case (mult_state_q)
+					ALBL: begin
+						mult_op_a = op_a_i[15:0];
+						mult_op_b = op_b_i[15:0];
+						sign_a = 1'b0;
+						sign_b = 1'b0;
+						accum = {34 {1'sb0}};
+						mac_res_d = mac_res;
+						mult_state_d = ALBH;
+					end
+					ALBH: begin
+						mult_op_a = op_a_i[15:0];
+						mult_op_b = op_b_i[31:16];
+						sign_a = 1'b0;
+						sign_b = signed_mode_i[1] & op_b_i[31];
+						accum = {18'b000000000000000000, imd_val_q_i[65-:16]};
+						if (operator_i == brq_pkg_MD_OP_MULL)
+							mac_res_d = {2'b00, mac_res[15:0], imd_val_q_i[49-:16]};
+						else
+							mac_res_d = mac_res;
+						mult_state_d = AHBL;
+					end
+					AHBL: begin
+						mult_op_a = op_a_i[31:16];
+						mult_op_b = op_b_i[15:0];
+						sign_a = signed_mode_i[0] & op_a_i[31];
+						sign_b = 1'b0;
+						if (operator_i == brq_pkg_MD_OP_MULL) begin
+							accum = {18'b000000000000000000, imd_val_q_i[65-:16]};
+							mac_res_d = {2'b00, mac_res[15:0], imd_val_q_i[49-:16]};
+							mult_valid = 1'b1;
+							mult_state_d = ALBL;
+							mult_hold = ~multdiv_ready_id_i;
+						end
+						else begin
+							accum = imd_val_q_i[34+:34];
+							mac_res_d = mac_res;
+							mult_state_d = AHBH;
+						end
+					end
+					AHBH: begin
+						mult_op_a = op_a_i[31:16];
+						mult_op_b = op_b_i[31:16];
+						sign_a = signed_mode_i[0] & op_a_i[31];
+						sign_b = signed_mode_i[1] & op_b_i[31];
+						accum[17:0] = imd_val_q_i[67-:18];
+						accum[33:18] = {16 {signed_mult & imd_val_q_i[67]}};
+						mac_res_d = mac_res;
+						mult_valid = 1'b1;
+						mult_state_d = ALBL;
+						mult_hold = ~multdiv_ready_id_i;
+					end
+					default: mult_state_d = ALBL;
+				endcase
+			end
+			always @(posedge clk_i or negedge rst_ni)
+				if (!rst_ni)
+					mult_state_q <= ALBL;
+				else if (mult_en_internal)
+					mult_state_q <= mult_state_d;
+		end
+	endgenerate
+	assign res_adder_h = alu_adder_ext_i[32:1];
+	wire [1:0] unused_alu_adder_ext;
+	assign unused_alu_adder_ext = {alu_adder_ext_i[33], alu_adder_ext_i[0]};
+	assign next_remainder = (is_greater_equal ? res_adder_h[31:0] : imd_val_q_i[65-:32]);
+	assign next_quotient = (is_greater_equal ? {1'b0, op_quotient_q} | {1'b0, one_shift} : {1'b0, op_quotient_q});
+	assign one_shift = 32'b00000000000000000000000000000001 << div_counter_q;
+	always @(*)
+		if ((imd_val_q_i[65] ^ op_denominator_q[31]) == 1'b0)
+			is_greater_equal = res_adder_h[31] == 1'b0;
+		else
+			is_greater_equal = imd_val_q_i[65];
+	assign div_sign_a = op_a_i[31] & signed_mode_i[0];
+	assign div_sign_b = op_b_i[31] & signed_mode_i[1];
+	assign div_change_sign = (div_sign_a ^ div_sign_b) & ~div_by_zero_q;
+	assign rem_change_sign = div_sign_a;
+	localparam [2:0] MD_ABS_A = 1;
+	localparam [2:0] MD_ABS_B = 2;
+	localparam [2:0] MD_CHANGE_SIGN = 5;
+	localparam [2:0] MD_COMP = 3;
+	localparam [2:0] MD_FINISH = 6;
+	localparam [2:0] MD_LAST = 4;
+	localparam [1:0] brq_pkg_MD_OP_DIV = 2;
+	always @(*) begin
+		div_counter_d = div_counter_q - 5'h01;
+		op_remainder_d = imd_val_q_i[34+:34];
+		op_quotient_d = op_quotient_q;
+		md_state_d = md_state_q;
+		op_numerator_d = op_numerator_q;
+		op_denominator_d = op_denominator_q;
+		alu_operand_a_o = 33'b000000000000000000000000000000001;
+		alu_operand_b_o = {~op_b_i, 1'b1};
+		div_valid = 1'b0;
+		div_hold = 1'b0;
+		div_by_zero_d = div_by_zero_q;
+		case (md_state_q)
+			MD_IDLE: begin
+				if (operator_i == brq_pkg_MD_OP_DIV) begin
+					op_remainder_d = {34 {1'sb1}};
+					md_state_d = (!data_ind_timing_i && equal_to_zero_i ? MD_FINISH : MD_ABS_A);
+					div_by_zero_d = equal_to_zero_i;
+				end
+				else begin
+					op_remainder_d = {2'b00, op_a_i};
+					md_state_d = (!data_ind_timing_i && equal_to_zero_i ? MD_FINISH : MD_ABS_A);
+				end
+				alu_operand_a_o = 33'b000000000000000000000000000000001;
+				alu_operand_b_o = {~op_b_i, 1'b1};
+				div_counter_d = 5'd31;
+			end
+			MD_ABS_A: begin
+				op_quotient_d = {32 {1'sb0}};
+				op_numerator_d = (div_sign_a ? alu_adder_i : op_a_i);
+				md_state_d = MD_ABS_B;
+				div_counter_d = 5'd31;
+				alu_operand_a_o = 33'b000000000000000000000000000000001;
+				alu_operand_b_o = {~op_a_i, 1'b1};
+			end
+			MD_ABS_B: begin
+				op_remainder_d = {33'h000000000, op_numerator_q[31]};
+				op_denominator_d = (div_sign_b ? alu_adder_i : op_b_i);
+				md_state_d = MD_COMP;
+				div_counter_d = 5'd31;
+				alu_operand_a_o = 33'b000000000000000000000000000000001;
+				alu_operand_b_o = {~op_b_i, 1'b1};
+			end
+			MD_COMP: begin
+				op_remainder_d = {1'b0, next_remainder[31:0], op_numerator_q[div_counter_d]};
+				op_quotient_d = next_quotient[31:0];
+				md_state_d = (div_counter_q == 5'd1 ? MD_LAST : MD_COMP);
+				alu_operand_a_o = {imd_val_q_i[65-:32], 1'b1};
+				alu_operand_b_o = {~op_denominator_q[31:0], 1'b1};
+			end
+			MD_LAST: begin
+				if (operator_i == brq_pkg_MD_OP_DIV)
+					op_remainder_d = {1'b0, next_quotient};
+				else
+					op_remainder_d = {2'b00, next_remainder[31:0]};
+				alu_operand_a_o = {imd_val_q_i[65-:32], 1'b1};
+				alu_operand_b_o = {~op_denominator_q[31:0], 1'b1};
+				md_state_d = MD_CHANGE_SIGN;
+			end
+			MD_CHANGE_SIGN: begin
+				md_state_d = MD_FINISH;
+				if (operator_i == brq_pkg_MD_OP_DIV)
+					op_remainder_d = (div_change_sign ? {2'h0, alu_adder_i} : imd_val_q_i[34+:34]);
+				else
+					op_remainder_d = (rem_change_sign ? {2'h0, alu_adder_i} : imd_val_q_i[34+:34]);
+				alu_operand_a_o = 33'b000000000000000000000000000000001;
+				alu_operand_b_o = {~imd_val_q_i[65-:32], 1'b1};
+			end
+			MD_FINISH: begin
+				md_state_d = MD_IDLE;
+				div_hold = ~multdiv_ready_id_i;
+				div_valid = 1'b1;
+			end
+			default: md_state_d = MD_IDLE;
+		endcase
+	end
+	assign valid_o = mult_valid | div_valid;
+endmodule
+module brq_exu_multdiv_slow (
+	clk_i,
+	rst_ni,
+	mult_en_i,
+	div_en_i,
+	mult_sel_i,
+	div_sel_i,
+	operator_i,
+	signed_mode_i,
+	op_a_i,
+	op_b_i,
+	alu_adder_ext_i,
+	alu_adder_i,
+	equal_to_zero_i,
+	data_ind_timing_i,
+	alu_operand_a_o,
+	alu_operand_b_o,
+	imd_val_q_i,
+	imd_val_d_o,
+	imd_val_we_o,
+	multdiv_ready_id_i,
+	multdiv_result_o,
+	valid_o
+);
+	input wire clk_i;
+	input wire rst_ni;
+	input wire mult_en_i;
+	input wire div_en_i;
+	input wire mult_sel_i;
+	input wire div_sel_i;
+	input wire [1:0] operator_i;
+	input wire [1:0] signed_mode_i;
+	input wire [31:0] op_a_i;
+	input wire [31:0] op_b_i;
+	input wire [33:0] alu_adder_ext_i;
+	input wire [31:0] alu_adder_i;
+	input wire equal_to_zero_i;
+	input wire data_ind_timing_i;
+	output reg [32:0] alu_operand_a_o;
+	output reg [32:0] alu_operand_b_o;
+	input wire [67:0] imd_val_q_i;
+	output wire [67:0] imd_val_d_o;
+	output wire [1:0] imd_val_we_o;
+	input wire multdiv_ready_id_i;
+	output wire [31:0] multdiv_result_o;
+	output wire valid_o;
+	reg [2:0] md_state_q;
+	reg [2:0] md_state_d;
+	wire [32:0] accum_window_q;
+	reg [32:0] accum_window_d;
+	wire unused_imd_val0;
+	wire [1:0] unused_imd_val1;
+	wire [32:0] res_adder_l;
+	wire [32:0] res_adder_h;
+	reg [4:0] multdiv_count_q;
+	reg [4:0] multdiv_count_d;
+	reg [32:0] op_b_shift_q;
+	reg [32:0] op_b_shift_d;
+	reg [32:0] op_a_shift_q;
+	reg [32:0] op_a_shift_d;
+	wire [32:0] op_a_ext;
+	wire [32:0] op_b_ext;
+	wire [32:0] one_shift;
+	wire [32:0] op_a_bw_pp;
+	wire [32:0] op_a_bw_last_pp;
+	wire [31:0] b_0;
+	wire sign_a;
+	wire sign_b;
+	wire [32:0] next_quotient;
+	wire [31:0] next_remainder;
+	wire [31:0] op_numerator_q;
+	reg [31:0] op_numerator_d;
+	wire is_greater_equal;
+	wire div_change_sign;
+	wire rem_change_sign;
+	reg div_by_zero_d;
+	reg div_by_zero_q;
+	reg multdiv_hold;
+	wire multdiv_en;
+	assign res_adder_l = alu_adder_ext_i[32:0];
+	assign res_adder_h = alu_adder_ext_i[33:1];
+	assign imd_val_d_o[34+:34] = {1'b0, accum_window_d};
+	assign imd_val_we_o[0] = ~multdiv_hold;
+	assign accum_window_q = imd_val_q_i[66-:33];
+	assign unused_imd_val0 = imd_val_q_i[67];
+	assign imd_val_d_o[0+:34] = {2'b00, op_numerator_d};
+	assign imd_val_we_o[1] = multdiv_en;
+	assign op_numerator_q = imd_val_q_i[31-:32];
+	assign unused_imd_val1 = imd_val_q_i[33-:2];
+	localparam [2:0] MD_ABS_A = 1;
+	localparam [2:0] MD_ABS_B = 2;
+	localparam [2:0] MD_CHANGE_SIGN = 5;
+	localparam [2:0] MD_IDLE = 0;
+	localparam [2:0] MD_LAST = 4;
+	localparam [1:0] brq_pkg_MD_OP_DIV = 2;
+	localparam [1:0] brq_pkg_MD_OP_MULH = 1;
+	localparam [1:0] brq_pkg_MD_OP_MULL = 0;
+	localparam [1:0] brq_pkg_MD_OP_REM = 3;
+	always @(*) begin
+		alu_operand_a_o = accum_window_q;
+		case (operator_i)
+			brq_pkg_MD_OP_MULL: alu_operand_b_o = op_a_bw_pp;
+			brq_pkg_MD_OP_MULH: alu_operand_b_o = (md_state_q == MD_LAST ? op_a_bw_last_pp : op_a_bw_pp);
+			brq_pkg_MD_OP_DIV, brq_pkg_MD_OP_REM:
+				case (md_state_q)
+					MD_IDLE: begin
+						alu_operand_a_o = 33'b000000000000000000000000000000001;
+						alu_operand_b_o = {~op_b_i, 1'b1};
+					end
+					MD_ABS_A: begin
+						alu_operand_a_o = 33'b000000000000000000000000000000001;
+						alu_operand_b_o = {~op_a_i, 1'b1};
+					end
+					MD_ABS_B: begin
+						alu_operand_a_o = 33'b000000000000000000000000000000001;
+						alu_operand_b_o = {~op_b_i, 1'b1};
+					end
+					MD_CHANGE_SIGN: begin
+						alu_operand_a_o = 33'b000000000000000000000000000000001;
+						alu_operand_b_o = {~accum_window_q[31:0], 1'b1};
+					end
+					default: begin
+						alu_operand_a_o = {accum_window_q[31:0], 1'b1};
+						alu_operand_b_o = {~op_b_shift_q[31:0], 1'b1};
+					end
+				endcase
+		endcase
+	end
+	assign b_0 = {32 {op_b_shift_q[0]}};
+	assign op_a_bw_pp = {~(op_a_shift_q[32] & op_b_shift_q[0]), op_a_shift_q[31:0] & b_0};
+	assign op_a_bw_last_pp = {op_a_shift_q[32] & op_b_shift_q[0], ~(op_a_shift_q[31:0] & b_0)};
+	assign sign_a = op_a_i[31] & signed_mode_i[0];
+	assign sign_b = op_b_i[31] & signed_mode_i[1];
+	assign op_a_ext = {sign_a, op_a_i};
+	assign op_b_ext = {sign_b, op_b_i};
+	assign is_greater_equal = (accum_window_q[31] == op_b_shift_q[31] ? ~res_adder_h[31] : accum_window_q[31]);
+	assign one_shift = 33'b000000000000000000000000000000001 << multdiv_count_q;
+	assign next_remainder = (is_greater_equal ? res_adder_h[31:0] : accum_window_q[31:0]);
+	assign next_quotient = (is_greater_equal ? op_a_shift_q | one_shift : op_a_shift_q);
+	assign div_change_sign = (sign_a ^ sign_b) & ~div_by_zero_q;
+	assign rem_change_sign = sign_a;
+	localparam [2:0] MD_COMP = 3;
+	localparam [2:0] MD_FINISH = 6;
+	always @(*) begin
+		multdiv_count_d = multdiv_count_q;
+		accum_window_d = accum_window_q;
+		op_b_shift_d = op_b_shift_q;
+		op_a_shift_d = op_a_shift_q;
+		op_numerator_d = op_numerator_q;
+		md_state_d = md_state_q;
+		multdiv_hold = 1'b0;
+		div_by_zero_d = div_by_zero_q;
+		if (mult_sel_i || div_sel_i)
+			case (md_state_q)
+				MD_IDLE: begin
+					case (operator_i)
+						brq_pkg_MD_OP_MULL: begin
+							op_a_shift_d = op_a_ext << 1;
+							accum_window_d = {~(op_a_ext[32] & op_b_i[0]), op_a_ext[31:0] & {32 {op_b_i[0]}}};
+							op_b_shift_d = op_b_ext >> 1;
+							md_state_d = (!data_ind_timing_i && ((op_b_ext >> 1) == 0) ? MD_LAST : MD_COMP);
+						end
+						brq_pkg_MD_OP_MULH: begin
+							op_a_shift_d = op_a_ext;
+							accum_window_d = {1'b1, ~(op_a_ext[32] & op_b_i[0]), op_a_ext[31:1] & {31 {op_b_i[0]}}};
+							op_b_shift_d = op_b_ext >> 1;
+							md_state_d = MD_COMP;
+						end
+						brq_pkg_MD_OP_DIV: begin
+							accum_window_d = {33 {1'b1}};
+							md_state_d = (!data_ind_timing_i && equal_to_zero_i ? MD_FINISH : MD_ABS_A);
+							div_by_zero_d = equal_to_zero_i;
+						end
+						brq_pkg_MD_OP_REM: begin
+							accum_window_d = op_a_ext;
+							md_state_d = (!data_ind_timing_i && equal_to_zero_i ? MD_FINISH : MD_ABS_A);
+						end
+					endcase
+					multdiv_count_d = 5'd31;
+				end
+				MD_ABS_A: begin
+					op_a_shift_d = {33 {1'sb0}};
+					op_numerator_d = (sign_a ? alu_adder_i : op_a_i);
+					md_state_d = MD_ABS_B;
+				end
+				MD_ABS_B: begin
+					accum_window_d = {32'h00000000, op_numerator_q[31]};
+					op_b_shift_d = (sign_b ? {1'b0, alu_adder_i} : {1'b0, op_b_i});
+					md_state_d = MD_COMP;
+				end
+				MD_COMP: begin
+					multdiv_count_d = multdiv_count_q - 5'h01;
+					case (operator_i)
+						brq_pkg_MD_OP_MULL: begin
+							accum_window_d = res_adder_l;
+							op_a_shift_d = op_a_shift_q << 1;
+							op_b_shift_d = op_b_shift_q >> 1;
+							md_state_d = ((!data_ind_timing_i && (op_b_shift_d == 0)) || (multdiv_count_q == 5'd1) ? MD_LAST : MD_COMP);
+						end
+						brq_pkg_MD_OP_MULH: begin
+							accum_window_d = res_adder_h;
+							op_a_shift_d = op_a_shift_q;
+							op_b_shift_d = op_b_shift_q >> 1;
+							md_state_d = (multdiv_count_q == 5'd1 ? MD_LAST : MD_COMP);
+						end
+						brq_pkg_MD_OP_DIV, brq_pkg_MD_OP_REM: begin
+							accum_window_d = {next_remainder[31:0], op_numerator_q[multdiv_count_d]};
+							op_a_shift_d = next_quotient;
+							md_state_d = (multdiv_count_q == 5'd1 ? MD_LAST : MD_COMP);
+						end
+					endcase
+				end
+				MD_LAST:
+					case (operator_i)
+						brq_pkg_MD_OP_MULL: begin
+							accum_window_d = res_adder_l;
+							md_state_d = MD_IDLE;
+							multdiv_hold = ~multdiv_ready_id_i;
+						end
+						brq_pkg_MD_OP_MULH: begin
+							accum_window_d = res_adder_l;
+							md_state_d = MD_IDLE;
+							md_state_d = MD_IDLE;
+							multdiv_hold = ~multdiv_ready_id_i;
+						end
+						brq_pkg_MD_OP_DIV: begin
+							accum_window_d = next_quotient;
+							md_state_d = MD_CHANGE_SIGN;
+						end
+						brq_pkg_MD_OP_REM: begin
+							accum_window_d = {1'b0, next_remainder[31:0]};
+							md_state_d = MD_CHANGE_SIGN;
+						end
+					endcase
+				MD_CHANGE_SIGN: begin
+					md_state_d = MD_FINISH;
+					case (operator_i)
+						brq_pkg_MD_OP_DIV: accum_window_d = (div_change_sign ? {1'b0, alu_adder_i} : accum_window_q);
+						brq_pkg_MD_OP_REM: accum_window_d = (rem_change_sign ? {1'b0, alu_adder_i} : accum_window_q);
+						default:
+							;
+					endcase
+				end
+				MD_FINISH: begin
+					md_state_d = MD_IDLE;
+					multdiv_hold = ~multdiv_ready_id_i;
+				end
+				default: md_state_d = MD_IDLE;
+			endcase
+	end
+	assign multdiv_en = (mult_en_i | div_en_i) & ~multdiv_hold;
+	always @(posedge clk_i or negedge rst_ni)
+		if (!rst_ni) begin
+			multdiv_count_q <= 5'h00;
+			op_b_shift_q <= 33'h000000000;
+			op_a_shift_q <= 33'h000000000;
+			md_state_q <= MD_IDLE;
+			div_by_zero_q <= 1'b0;
+		end
+		else if (multdiv_en) begin
+			multdiv_count_q <= multdiv_count_d;
+			op_b_shift_q <= op_b_shift_d;
+			op_a_shift_q <= op_a_shift_d;
+			md_state_q <= md_state_d;
+			div_by_zero_q <= div_by_zero_d;
+		end
+	assign valid_o = (md_state_q == MD_FINISH) | ((md_state_q == MD_LAST) & ((operator_i == brq_pkg_MD_OP_MULL) | (operator_i == brq_pkg_MD_OP_MULH)));
+	assign multdiv_result_o = (div_en_i ? accum_window_q[31:0] : res_adder_l[31:0]);
+endmodule
+module brq_exu (
+	clk_i,
+	rst_ni,
+	alu_operator_i,
+	alu_operand_a_i,
+	alu_operand_b_i,
+	alu_instr_first_cycle_i,
+	bt_a_operand_i,
+	bt_b_operand_i,
+	multdiv_operator_i,
+	mult_en_i,
+	div_en_i,
+	mult_sel_i,
+	div_sel_i,
+	multdiv_signed_mode_i,
+	multdiv_operand_a_i,
+	multdiv_operand_b_i,
+	multdiv_ready_id_i,
+	data_ind_timing_i,
+	imd_val_we_o,
+	imd_val_d_o,
+	imd_val_q_i,
+	alu_adder_result_ex_o,
+	result_ex_o,
+	branch_target_o,
+	branch_decision_o,
+	ex_valid_o
+);
+	localparam integer brq_pkg_RV32MFast = 2;
+	parameter integer RV32M = brq_pkg_RV32MFast;
+	localparam integer brq_pkg_RV32BNone = 0;
+	parameter integer RV32B = brq_pkg_RV32BNone;
+	parameter [0:0] BranchTargetALU = 0;
+	input wire clk_i;
+	input wire rst_ni;
+	input wire [5:0] alu_operator_i;
+	input wire [31:0] alu_operand_a_i;
+	input wire [31:0] alu_operand_b_i;
+	input wire alu_instr_first_cycle_i;
+	input wire [31:0] bt_a_operand_i;
+	input wire [31:0] bt_b_operand_i;
+	input wire [1:0] multdiv_operator_i;
+	input wire mult_en_i;
+	input wire div_en_i;
+	input wire mult_sel_i;
+	input wire div_sel_i;
+	input wire [1:0] multdiv_signed_mode_i;
+	input wire [31:0] multdiv_operand_a_i;
+	input wire [31:0] multdiv_operand_b_i;
+	input wire multdiv_ready_id_i;
+	input wire data_ind_timing_i;
+	output wire [1:0] imd_val_we_o;
+	output wire [67:0] imd_val_d_o;
+	input wire [67:0] imd_val_q_i;
+	output wire [31:0] alu_adder_result_ex_o;
+	output wire [31:0] result_ex_o;
+	output wire [31:0] branch_target_o;
+	output wire branch_decision_o;
+	output wire ex_valid_o;
+	wire [31:0] alu_result;
+	wire [31:0] multdiv_result;
+	wire [32:0] multdiv_alu_operand_b;
+	wire [32:0] multdiv_alu_operand_a;
+	wire [33:0] alu_adder_result_ext;
+	wire alu_cmp_result;
+	wire alu_is_equal_result;
+	wire multdiv_valid;
+	wire multdiv_sel;
+	wire [63:0] alu_imd_val_q;
+	wire [63:0] alu_imd_val_d;
+	wire [1:0] alu_imd_val_we;
+	wire [67:0] multdiv_imd_val_d;
+	wire [1:0] multdiv_imd_val_we;
+	localparam integer brq_pkg_RV32MNone = 0;
+	generate
+		if (RV32M != brq_pkg_RV32MNone) begin : gen_multdiv_m
+			assign multdiv_sel = mult_sel_i | div_sel_i;
+		end
+		else begin : gen_multdiv_no_m
+			assign multdiv_sel = 1'b0;
+		end
+	endgenerate
+	assign imd_val_d_o[34+:34] = (multdiv_sel ? multdiv_imd_val_d[34+:34] : {2'b00, alu_imd_val_d[32+:32]});
+	assign imd_val_d_o[0+:34] = (multdiv_sel ? multdiv_imd_val_d[0+:34] : {2'b00, alu_imd_val_d[0+:32]});
+	assign imd_val_we_o = (multdiv_sel ? multdiv_imd_val_we : alu_imd_val_we);
+	assign alu_imd_val_q = {imd_val_q_i[65-:32], imd_val_q_i[31-:32]};
+	assign result_ex_o = (multdiv_sel ? multdiv_result : alu_result);
+	assign branch_decision_o = alu_cmp_result;
+	generate
+		if (BranchTargetALU) begin : g_branch_target_alu
+			wire [32:0] bt_alu_result;
+			wire unused_bt_carry;
+			assign bt_alu_result = bt_a_operand_i + bt_b_operand_i;
+			assign unused_bt_carry = bt_alu_result[32];
+			assign branch_target_o = bt_alu_result[31:0];
+		end
+		else begin : g_no_branch_target_alu
+			wire [31:0] unused_bt_a_operand;
+			wire [31:0] unused_bt_b_operand;
+			assign unused_bt_a_operand = bt_a_operand_i;
+			assign unused_bt_b_operand = bt_b_operand_i;
+			assign branch_target_o = alu_adder_result_ex_o;
+		end
+	endgenerate
+	brq_exu_alu #(.RV32B(RV32B)) alu_i(
+		.operator_i(alu_operator_i),
+		.operand_a_i(alu_operand_a_i),
+		.operand_b_i(alu_operand_b_i),
+		.instr_first_cycle_i(alu_instr_first_cycle_i),
+		.imd_val_q_i(alu_imd_val_q),
+		.imd_val_we_o(alu_imd_val_we),
+		.imd_val_d_o(alu_imd_val_d),
+		.multdiv_operand_a_i(multdiv_alu_operand_a),
+		.multdiv_operand_b_i(multdiv_alu_operand_b),
+		.multdiv_sel_i(multdiv_sel),
+		.adder_result_o(alu_adder_result_ex_o),
+		.adder_result_ext_o(alu_adder_result_ext),
+		.result_o(alu_result),
+		.comparison_result_o(alu_cmp_result),
+		.is_equal_result_o(alu_is_equal_result)
+	);
+	localparam integer brq_pkg_RV32MSingleCycle = 3;
+	localparam integer brq_pkg_RV32MSlow = 1;
+	generate
+		if (RV32M == brq_pkg_RV32MSlow) begin : gen_multdiv_slow
+			brq_exu_multdiv_slow multdiv_i(
+				.clk_i(clk_i),
+				.rst_ni(rst_ni),
+				.mult_en_i(mult_en_i),
+				.div_en_i(div_en_i),
+				.mult_sel_i(mult_sel_i),
+				.div_sel_i(div_sel_i),
+				.operator_i(multdiv_operator_i),
+				.signed_mode_i(multdiv_signed_mode_i),
+				.op_a_i(multdiv_operand_a_i),
+				.op_b_i(multdiv_operand_b_i),
+				.alu_adder_ext_i(alu_adder_result_ext),
+				.alu_adder_i(alu_adder_result_ex_o),
+				.equal_to_zero_i(alu_is_equal_result),
+				.data_ind_timing_i(data_ind_timing_i),
+				.valid_o(multdiv_valid),
+				.alu_operand_a_o(multdiv_alu_operand_a),
+				.alu_operand_b_o(multdiv_alu_operand_b),
+				.imd_val_q_i(imd_val_q_i),
+				.imd_val_d_o(multdiv_imd_val_d),
+				.imd_val_we_o(multdiv_imd_val_we),
+				.multdiv_ready_id_i(multdiv_ready_id_i),
+				.multdiv_result_o(multdiv_result)
+			);
+		end
+		else if ((RV32M == brq_pkg_RV32MFast) || (RV32M == brq_pkg_RV32MSingleCycle)) begin : gen_multdiv_fast
+			brq_exu_multdiv_fast #(.RV32M(RV32M)) multdiv_i(
+				.clk_i(clk_i),
+				.rst_ni(rst_ni),
+				.mult_en_i(mult_en_i),
+				.div_en_i(div_en_i),
+				.mult_sel_i(mult_sel_i),
+				.div_sel_i(div_sel_i),
+				.operator_i(multdiv_operator_i),
+				.signed_mode_i(multdiv_signed_mode_i),
+				.op_a_i(multdiv_operand_a_i),
+				.op_b_i(multdiv_operand_b_i),
+				.alu_operand_a_o(multdiv_alu_operand_a),
+				.alu_operand_b_o(multdiv_alu_operand_b),
+				.alu_adder_ext_i(alu_adder_result_ext),
+				.alu_adder_i(alu_adder_result_ex_o),
+				.equal_to_zero_i(alu_is_equal_result),
+				.data_ind_timing_i(data_ind_timing_i),
+				.imd_val_q_i(imd_val_q_i),
+				.imd_val_d_o(multdiv_imd_val_d),
+				.imd_val_we_o(multdiv_imd_val_we),
+				.multdiv_ready_id_i(multdiv_ready_id_i),
+				.valid_o(multdiv_valid),
+				.multdiv_result_o(multdiv_result)
+			);
+		end
+	endgenerate
+	assign ex_valid_o = (multdiv_sel ? multdiv_valid : ~(|alu_imd_val_we));
+endmodule
+module brq_fp_register_file_ff (
+	clk_i,
+	rst_ni,
+	raddr_a_i,
+	rdata_a_o,
+	raddr_b_i,
+	rdata_b_o,
+	raddr_c_i,
+	rdata_c_o,
+	waddr_a_i,
+	wdata_a_i,
+	we_a_i
+);
+	localparam integer brq_pkg_RV32FSingle = 1;
+	parameter integer RVF = brq_pkg_RV32FSingle;
+	parameter [31:0] DataWidth = 32;
+	input wire clk_i;
+	input wire rst_ni;
+	input wire [4:0] raddr_a_i;
+	output wire [DataWidth - 1:0] rdata_a_o;
+	input wire [4:0] raddr_b_i;
+	output wire [DataWidth - 1:0] rdata_b_o;
+	input wire [4:0] raddr_c_i;
+	output wire [DataWidth - 1:0] rdata_c_o;
+	input wire [4:0] waddr_a_i;
+	input wire [DataWidth - 1:0] wdata_a_i;
+	input wire we_a_i;
+	localparam integer brq_pkg_RV64FDouble = 2;
+	localparam [31:0] ADDR_WIDTH = (RVF == brq_pkg_RV64FDouble ? 6 : 5);
+	localparam [31:0] NUM_WORDS = (RVF == brq_pkg_RV64FDouble ? 64 : 32);
+	wire [(NUM_WORDS * DataWidth) - 1:0] rf_reg;
+	reg [(NUM_WORDS * DataWidth) - 1:0] rf_reg_q;
+	reg [NUM_WORDS - 1:0] we_a_dec;
+	function automatic [4:0] sv2v_cast_5;
+		input reg [4:0] inp;
+		sv2v_cast_5 = inp;
+	endfunction
+	always @(*) begin : we_a_decoder
+		begin : sv2v_autoblock_99
+			reg [31:0] i;
+			for (i = 0; i < NUM_WORDS; i = i + 1)
+				we_a_dec[i] = (waddr_a_i == sv2v_cast_5(i) ? we_a_i : 1'b0);
+		end
+	end
+	generate
+		genvar i;
+		for (i = 0; i < NUM_WORDS; i = i + 1) begin : g_rf_flops
+			always @(posedge clk_i or negedge rst_ni)
+				if (!rst_ni)
+					rf_reg_q[i * DataWidth+:DataWidth] <= {DataWidth {1'sb0}};
+				else if (we_a_dec[i])
+					rf_reg_q[i * DataWidth+:DataWidth] <= wdata_a_i;
+		end
+	endgenerate
+	assign rf_reg[DataWidth * ((NUM_WORDS - 1) - (NUM_WORDS - 1))+:DataWidth * NUM_WORDS] = rf_reg_q[DataWidth * ((NUM_WORDS - 1) - (NUM_WORDS - 1))+:DataWidth * NUM_WORDS];
+	assign rdata_a_o = rf_reg[raddr_a_i * DataWidth+:DataWidth];
+	assign rdata_b_o = rf_reg[raddr_b_i * DataWidth+:DataWidth];
+	assign rdata_c_o = rf_reg[raddr_c_i * DataWidth+:DataWidth];
+endmodule
+module brq_idu_controller (
+	clk_i,
+	rst_ni,
+	ctrl_busy_o,
+	illegal_insn_i,
+	ecall_insn_i,
+	mret_insn_i,
+	dret_insn_i,
+	wfi_insn_i,
+	ebrk_insn_i,
+	csr_pipe_flush_i,
+	instr_valid_i,
+	instr_i,
+	instr_compressed_i,
+	instr_is_compressed_i,
+	instr_fetch_err_i,
+	instr_fetch_err_plus2_i,
+	pc_id_i,
+	instr_valid_clear_o,
+	id_in_ready_o,
+	controller_run_o,
+	instr_req_o,
+	pc_set_o,
+	pc_set_spec_o,
+	pc_mux_o,
+	exc_pc_mux_o,
+	exc_cause_o,
+	lsu_addr_last_i,
+	load_err_i,
+	store_err_i,
+	wb_exception_o,
+	branch_set_i,
+	branch_set_spec_i,
+	jump_set_i,
+	csr_mstatus_mie_i,
+	irq_pending_i,
+	irqs_i,
+	irq_nm_i,
+	nmi_mode_o,
+	debug_req_i,
+	debug_cause_o,
+	debug_csr_save_o,
+	debug_mode_o,
+	debug_single_step_i,
+	debug_ebreakm_i,
+	debug_ebreaku_i,
+	trigger_match_i,
+	csr_save_if_o,
+	csr_save_id_o,
+	csr_save_wb_o,
+	csr_restore_mret_id_o,
+	csr_restore_dret_id_o,
+	csr_save_cause_o,
+	csr_mtval_o,
+	priv_mode_i,
+	csr_mstatus_tw_i,
+	stall_id_i,
+	stall_wb_i,
+	flush_id_o,
+	ready_wb_i,
+	perf_jump_o,
+	perf_tbranch_o,
+	fpu_busy_i
+);
+	parameter [0:0] WritebackStage = 0;
+	parameter [0:0] BranchPredictor = 0;
+	input wire clk_i;
+	input wire rst_ni;
+	output reg ctrl_busy_o;
+	input wire illegal_insn_i;
+	input wire ecall_insn_i;
+	input wire mret_insn_i;
+	input wire dret_insn_i;
+	input wire wfi_insn_i;
+	input wire ebrk_insn_i;
+	input wire csr_pipe_flush_i;
+	input wire instr_valid_i;
+	input wire [31:0] instr_i;
+	input wire [15:0] instr_compressed_i;
+	input wire instr_is_compressed_i;
+	input wire instr_fetch_err_i;
+	input wire instr_fetch_err_plus2_i;
+	input wire [31:0] pc_id_i;
+	output wire instr_valid_clear_o;
+	output wire id_in_ready_o;
+	output reg controller_run_o;
+	output reg instr_req_o;
+	output reg pc_set_o;
+	output reg pc_set_spec_o;
+	output reg [2:0] pc_mux_o;
+	output reg [1:0] exc_pc_mux_o;
+	output reg [5:0] exc_cause_o;
+	input wire [31:0] lsu_addr_last_i;
+	input wire load_err_i;
+	input wire store_err_i;
+	output wire wb_exception_o;
+	input wire branch_set_i;
+	input wire branch_set_spec_i;
+	input wire jump_set_i;
+	input wire csr_mstatus_mie_i;
+	input wire irq_pending_i;
+	input wire [17:0] irqs_i;
+	input wire irq_nm_i;
+	output wire nmi_mode_o;
+	input wire debug_req_i;
+	output reg [2:0] debug_cause_o;
+	output reg debug_csr_save_o;
+	output wire debug_mode_o;
+	input wire debug_single_step_i;
+	input wire debug_ebreakm_i;
+	input wire debug_ebreaku_i;
+	input wire trigger_match_i;
+	output reg csr_save_if_o;
+	output reg csr_save_id_o;
+	output reg csr_save_wb_o;
+	output reg csr_restore_mret_id_o;
+	output reg csr_restore_dret_id_o;
+	output reg csr_save_cause_o;
+	output reg [31:0] csr_mtval_o;
+	input wire [1:0] priv_mode_i;
+	input wire csr_mstatus_tw_i;
+	input wire stall_id_i;
+	input wire stall_wb_i;
+	output wire flush_id_o;
+	input wire ready_wb_i;
+	output reg perf_jump_o;
+	output reg perf_tbranch_o;
+	input wire fpu_busy_i;
+	wire instr_bp_taken_i;
+	assign instr_bp_taken_i = 1'b0;
+	reg [3:0] ctrl_fsm_cs;
+	reg [3:0] ctrl_fsm_ns;
+	reg nmi_mode_q;
+	reg nmi_mode_d;
+	reg debug_mode_q;
+	reg debug_mode_d;
+	reg load_err_q;
+	wire load_err_d;
+	reg store_err_q;
+	wire store_err_d;
+	reg exc_req_q;
+	wire exc_req_d;
+	reg illegal_insn_q;
+	wire illegal_insn_d;
+	reg instr_fetch_err_prio;
+	reg illegal_insn_prio;
+	reg ecall_insn_prio;
+	reg ebrk_insn_prio;
+	reg store_err_prio;
+	reg load_err_prio;
+	wire stall;
+	reg halt_if;
+	reg retain_id;
+	reg flush_id;
+	wire illegal_dret;
+	wire illegal_umode;
+	wire exc_req_lsu;
+	wire special_req_all;
+	wire special_req_branch;
+	wire enter_debug_mode;
+	wire ebreak_into_debug;
+	wire handle_irq;
+	reg [3:0] mfip_id;
+	wire unused_irq_timer;
+	wire ecall_insn;
+	wire mret_insn;
+	wire dret_insn;
+	wire wfi_insn;
+	wire ebrk_insn;
+	wire csr_pipe_flush;
+	wire instr_fetch_err;
+	assign load_err_d = load_err_i;
+	assign store_err_d = store_err_i;
+	assign ecall_insn = ecall_insn_i & instr_valid_i;
+	assign mret_insn = mret_insn_i & instr_valid_i;
+	assign dret_insn = dret_insn_i & instr_valid_i;
+	assign wfi_insn = wfi_insn_i & instr_valid_i;
+	assign ebrk_insn = ebrk_insn_i & instr_valid_i;
+	assign csr_pipe_flush = csr_pipe_flush_i & instr_valid_i;
+	assign instr_fetch_err = instr_fetch_err_i & instr_valid_i;
+	assign illegal_dret = dret_insn & ~debug_mode_q;
+	localparam [1:0] brq_pkg_PRIV_LVL_M = 2'b11;
+	assign illegal_umode = (priv_mode_i != brq_pkg_PRIV_LVL_M) & (mret_insn | (csr_mstatus_tw_i & wfi_insn));
+	localparam [3:0] FLUSH = 6;
+	assign illegal_insn_d = ((illegal_insn_i | illegal_dret) | illegal_umode) & (ctrl_fsm_cs != FLUSH);
+	assign exc_req_d = (((ecall_insn | ebrk_insn) | illegal_insn_d) | instr_fetch_err) & (ctrl_fsm_cs != FLUSH);
+	assign exc_req_lsu = store_err_i | load_err_i;
+	assign special_req_all = ((((mret_insn | dret_insn) | wfi_insn) | csr_pipe_flush) | exc_req_d) | exc_req_lsu;
+	assign special_req_branch = instr_fetch_err & (ctrl_fsm_cs != FLUSH);
+	generate
+		if (WritebackStage) begin : g_wb_exceptions
+			always @(*) begin
+				instr_fetch_err_prio = 0;
+				illegal_insn_prio = 0;
+				ecall_insn_prio = 0;
+				ebrk_insn_prio = 0;
+				store_err_prio = 0;
+				load_err_prio = 0;
+				if (store_err_q)
+					store_err_prio = 1'b1;
+				else if (load_err_q)
+					load_err_prio = 1'b1;
+				else if (instr_fetch_err)
+					instr_fetch_err_prio = 1'b1;
+				else if (illegal_insn_q)
+					illegal_insn_prio = 1'b1;
+				else if (ecall_insn)
+					ecall_insn_prio = 1'b1;
+				else if (ebrk_insn)
+					ebrk_insn_prio = 1'b1;
+			end
+			assign wb_exception_o = ((load_err_q | store_err_q) | load_err_i) | store_err_i;
+		end
+		else begin : g_no_wb_exceptions
+			always @(*) begin
+				instr_fetch_err_prio = 0;
+				illegal_insn_prio = 0;
+				ecall_insn_prio = 0;
+				ebrk_insn_prio = 0;
+				store_err_prio = 0;
+				load_err_prio = 0;
+				if (instr_fetch_err)
+					instr_fetch_err_prio = 1'b1;
+				else if (illegal_insn_q)
+					illegal_insn_prio = 1'b1;
+				else if (ecall_insn)
+					ecall_insn_prio = 1'b1;
+				else if (ebrk_insn)
+					ebrk_insn_prio = 1'b1;
+				else if (store_err_q)
+					store_err_prio = 1'b1;
+				else if (load_err_q)
+					load_err_prio = 1'b1;
+			end
+			assign wb_exception_o = 1'b0;
+		end
+	endgenerate
+	assign enter_debug_mode = ((debug_req_i | (debug_single_step_i & instr_valid_i)) | trigger_match_i) & ~debug_mode_q;
+	localparam [1:0] brq_pkg_PRIV_LVL_U = 2'b00;
+	assign ebreak_into_debug = (priv_mode_i == brq_pkg_PRIV_LVL_M ? debug_ebreakm_i : (priv_mode_i == brq_pkg_PRIV_LVL_U ? debug_ebreaku_i : 1'b0));
+	assign handle_irq = (~debug_mode_q & ~nmi_mode_q) & (irq_nm_i | (irq_pending_i & csr_mstatus_mie_i));
+	always @(*) begin : gen_mfip_id
+		if (irqs_i[14])
+			mfip_id = 4'd14;
+		else if (irqs_i[13])
+			mfip_id = 4'd13;
+		else if (irqs_i[12])
+			mfip_id = 4'd12;
+		else if (irqs_i[11])
+			mfip_id = 4'd11;
+		else if (irqs_i[10])
+			mfip_id = 4'd10;
+		else if (irqs_i[9])
+			mfip_id = 4'd9;
+		else if (irqs_i[8])
+			mfip_id = 4'd8;
+		else if (irqs_i[7])
+			mfip_id = 4'd7;
+		else if (irqs_i[6])
+			mfip_id = 4'd6;
+		else if (irqs_i[5])
+			mfip_id = 4'd5;
+		else if (irqs_i[4])
+			mfip_id = 4'd4;
+		else if (irqs_i[3])
+			mfip_id = 4'd3;
+		else if (irqs_i[2])
+			mfip_id = 4'd2;
+		else if (irqs_i[1])
+			mfip_id = 4'd1;
+		else
+			mfip_id = 4'd0;
+	end
+	assign unused_irq_timer = irqs_i[16];
+	localparam [3:0] BOOT_SET = 1;
+	localparam [3:0] DBG_TAKEN_ID = 9;
+	localparam [3:0] DBG_TAKEN_IF = 8;
+	localparam [3:0] DECODE = 5;
+	localparam [3:0] FIRST_FETCH = 4;
+	localparam [3:0] IRQ_TAKEN = 7;
+	localparam [3:0] RESET = 0;
+	localparam [3:0] SLEEP = 3;
+	localparam [3:0] WAIT_SLEEP = 2;
+	localparam [2:0] brq_pkg_DBG_CAUSE_EBREAK = 3'h1;
+	localparam [2:0] brq_pkg_DBG_CAUSE_HALTREQ = 3'h3;
+	localparam [2:0] brq_pkg_DBG_CAUSE_STEP = 3'h4;
+	localparam [2:0] brq_pkg_DBG_CAUSE_TRIGGER = 3'h2;
+	localparam [5:0] brq_pkg_EXC_CAUSE_BREAKPOINT = 6'b000011;
+	localparam [5:0] brq_pkg_EXC_CAUSE_ECALL_MMODE = 6'b001011;
+	localparam [5:0] brq_pkg_EXC_CAUSE_ECALL_UMODE = 6'b001000;
+	localparam [5:0] brq_pkg_EXC_CAUSE_ILLEGAL_INSN = 6'b000010;
+	localparam [5:0] brq_pkg_EXC_CAUSE_INSN_ADDR_MISA = 6'b000000;
+	localparam [5:0] brq_pkg_EXC_CAUSE_INSTR_ACCESS_FAULT = 6'b000001;
+	localparam [5:0] brq_pkg_EXC_CAUSE_IRQ_EXTERNAL_M = 6'b101011;
+	localparam [5:0] brq_pkg_EXC_CAUSE_IRQ_NM = 6'b111111;
+	localparam [5:0] brq_pkg_EXC_CAUSE_IRQ_SOFTWARE_M = 6'b100011;
+	localparam [5:0] brq_pkg_EXC_CAUSE_IRQ_TIMER_M = 6'b100111;
+	localparam [5:0] brq_pkg_EXC_CAUSE_LOAD_ACCESS_FAULT = 6'b000101;
+	localparam [5:0] brq_pkg_EXC_CAUSE_STORE_ACCESS_FAULT = 6'b000111;
+	localparam [1:0] brq_pkg_EXC_PC_DBD = 2;
+	localparam [1:0] brq_pkg_EXC_PC_DBG_EXC = 3;
+	localparam [1:0] brq_pkg_EXC_PC_EXC = 0;
+	localparam [1:0] brq_pkg_EXC_PC_IRQ = 1;
+	localparam [2:0] brq_pkg_PC_BOOT = 0;
+	localparam [2:0] brq_pkg_PC_DRET = 4;
+	localparam [2:0] brq_pkg_PC_ERET = 3;
+	localparam [2:0] brq_pkg_PC_EXC = 2;
+	localparam [2:0] brq_pkg_PC_JUMP = 1;
+	function automatic [5:0] sv2v_cast_6;
+		input reg [5:0] inp;
+		sv2v_cast_6 = inp;
+	endfunction
+	always @(*) begin
+		instr_req_o = 1'b1;
+		csr_save_if_o = 1'b0;
+		csr_save_id_o = 1'b0;
+		csr_save_wb_o = 1'b0;
+		csr_restore_mret_id_o = 1'b0;
+		csr_restore_dret_id_o = 1'b0;
+		csr_save_cause_o = 1'b0;
+		csr_mtval_o = {32 {1'sb0}};
+		pc_mux_o = brq_pkg_PC_BOOT;
+		pc_set_o = 1'b0;
+		pc_set_spec_o = 1'b0;
+		exc_pc_mux_o = brq_pkg_EXC_PC_IRQ;
+		exc_cause_o = brq_pkg_EXC_CAUSE_INSN_ADDR_MISA;
+		ctrl_fsm_ns = ctrl_fsm_cs;
+		ctrl_busy_o = 1'b1;
+		halt_if = 1'b0;
+		retain_id = 1'b0;
+		flush_id = 1'b0;
+		debug_csr_save_o = 1'b0;
+		debug_cause_o = brq_pkg_DBG_CAUSE_EBREAK;
+		debug_mode_d = debug_mode_q;
+		nmi_mode_d = nmi_mode_q;
+		perf_tbranch_o = 1'b0;
+		perf_jump_o = 1'b0;
+		controller_run_o = 1'b0;
+		case (ctrl_fsm_cs)
+			RESET: begin
+				instr_req_o = 1'b0;
+				pc_mux_o = brq_pkg_PC_BOOT;
+				pc_set_o = 1'b1;
+				pc_set_spec_o = 1'b1;
+				ctrl_fsm_ns = BOOT_SET;
+			end
+			BOOT_SET: begin
+				instr_req_o = 1'b1;
+				pc_mux_o = brq_pkg_PC_BOOT;
+				pc_set_o = 1'b1;
+				pc_set_spec_o = 1'b1;
+				ctrl_fsm_ns = FIRST_FETCH;
+			end
+			WAIT_SLEEP: begin
+				ctrl_busy_o = 1'b0;
+				instr_req_o = 1'b0;
+				halt_if = 1'b1;
+				flush_id = 1'b1;
+				ctrl_fsm_ns = SLEEP;
+			end
+			SLEEP: begin
+				instr_req_o = 1'b0;
+				halt_if = 1'b1;
+				flush_id = 1'b1;
+				if ((((irq_nm_i || irq_pending_i) || debug_req_i) || debug_mode_q) || debug_single_step_i)
+					ctrl_fsm_ns = FIRST_FETCH;
+				else
+					ctrl_busy_o = 1'b0;
+			end
+			FIRST_FETCH: begin
+				if (id_in_ready_o)
+					ctrl_fsm_ns = DECODE;
+				if (handle_irq) begin
+					ctrl_fsm_ns = IRQ_TAKEN;
+					halt_if = 1'b1;
+				end
+				if (enter_debug_mode) begin
+					ctrl_fsm_ns = DBG_TAKEN_IF;
+					halt_if = 1'b1;
+				end
+			end
+			DECODE: begin
+				controller_run_o = 1'b1;
+				pc_mux_o = brq_pkg_PC_JUMP;
+				if (special_req_all) begin
+					retain_id = 1'b1;
+					if (ready_wb_i | wb_exception_o)
+						ctrl_fsm_ns = FLUSH;
+				end
+				if (!special_req_branch)
+					if (branch_set_i || jump_set_i) begin
+						pc_set_o = (BranchPredictor ? ~instr_bp_taken_i : 1'b1);
+						perf_tbranch_o = branch_set_i;
+						perf_jump_o = jump_set_i;
+					end
+				if ((branch_set_spec_i || jump_set_i) && !special_req_branch)
+					pc_set_spec_o = 1'b1;
+				if ((enter_debug_mode || handle_irq) && stall)
+					halt_if = 1'b1;
+				if (!stall && !special_req_all)
+					if (enter_debug_mode) begin
+						ctrl_fsm_ns = DBG_TAKEN_IF;
+						halt_if = 1'b1;
+					end
+					else if (handle_irq) begin
+						ctrl_fsm_ns = IRQ_TAKEN;
+						halt_if = 1'b1;
+					end
+			end
+			IRQ_TAKEN: begin
+				pc_mux_o = brq_pkg_PC_EXC;
+				exc_pc_mux_o = brq_pkg_EXC_PC_IRQ;
+				if (handle_irq) begin
+					pc_set_o = 1'b1;
+					pc_set_spec_o = 1'b1;
+					csr_save_if_o = 1'b1;
+					csr_save_cause_o = 1'b1;
+					if (irq_nm_i && !nmi_mode_q) begin
+						exc_cause_o = brq_pkg_EXC_CAUSE_IRQ_NM;
+						nmi_mode_d = 1'b1;
+					end
+					else if (irqs_i[14-:15] != 15'b000000000000000)
+						exc_cause_o = sv2v_cast_6({2'b11, mfip_id});
+					else if (irqs_i[15])
+						exc_cause_o = brq_pkg_EXC_CAUSE_IRQ_EXTERNAL_M;
+					else if (irqs_i[17])
+						exc_cause_o = brq_pkg_EXC_CAUSE_IRQ_SOFTWARE_M;
+					else if (irqs_i[16])
+						exc_cause_o = brq_pkg_EXC_CAUSE_IRQ_TIMER_M;
+				end
+				ctrl_fsm_ns = DECODE;
+			end
+			DBG_TAKEN_IF: begin
+				pc_mux_o = brq_pkg_PC_EXC;
+				exc_pc_mux_o = brq_pkg_EXC_PC_DBD;
+				if ((debug_single_step_i || debug_req_i) || trigger_match_i) begin
+					flush_id = 1'b1;
+					pc_set_o = 1'b1;
+					pc_set_spec_o = 1'b1;
+					csr_save_if_o = 1'b1;
+					debug_csr_save_o = 1'b1;
+					csr_save_cause_o = 1'b1;
+					if (trigger_match_i)
+						debug_cause_o = brq_pkg_DBG_CAUSE_TRIGGER;
+					else if (debug_single_step_i)
+						debug_cause_o = brq_pkg_DBG_CAUSE_STEP;
+					else
+						debug_cause_o = brq_pkg_DBG_CAUSE_HALTREQ;
+					debug_mode_d = 1'b1;
+				end
+				ctrl_fsm_ns = DECODE;
+			end
+			DBG_TAKEN_ID: begin
+				flush_id = 1'b1;
+				pc_mux_o = brq_pkg_PC_EXC;
+				pc_set_o = 1'b1;
+				pc_set_spec_o = 1'b1;
+				exc_pc_mux_o = brq_pkg_EXC_PC_DBD;
+				if (ebreak_into_debug && !debug_mode_q) begin
+					csr_save_cause_o = 1'b1;
+					csr_save_id_o = 1'b1;
+					debug_csr_save_o = 1'b1;
+					debug_cause_o = brq_pkg_DBG_CAUSE_EBREAK;
+				end
+				debug_mode_d = 1'b1;
+				ctrl_fsm_ns = DECODE;
+			end
+			FLUSH: begin
+				halt_if = 1'b1;
+				flush_id = 1'b1;
+				ctrl_fsm_ns = DECODE;
+				if ((exc_req_q || store_err_q) || load_err_q) begin
+					pc_set_o = 1'b1;
+					pc_set_spec_o = 1'b1;
+					pc_mux_o = brq_pkg_PC_EXC;
+					exc_pc_mux_o = (debug_mode_q ? brq_pkg_EXC_PC_DBG_EXC : brq_pkg_EXC_PC_EXC);
+					if (WritebackStage) begin : g_writeback_mepc_save
+						csr_save_id_o = ~(store_err_q | load_err_q);
+						csr_save_wb_o = store_err_q | load_err_q;
+					end
+					else begin : g_no_writeback_mepc_save
+						csr_save_id_o = 1'b0;
+					end
+					csr_save_cause_o = 1'b1;
+					case (1'b1)
+						instr_fetch_err_prio: begin
+							exc_cause_o = brq_pkg_EXC_CAUSE_INSTR_ACCESS_FAULT;
+							csr_mtval_o = (instr_fetch_err_plus2_i ? pc_id_i + 32'd2 : pc_id_i);
+						end
+						illegal_insn_prio: begin
+							exc_cause_o = brq_pkg_EXC_CAUSE_ILLEGAL_INSN;
+							csr_mtval_o = (instr_is_compressed_i ? {16'b0000000000000000, instr_compressed_i} : instr_i);
+						end
+						ecall_insn_prio: exc_cause_o = (priv_mode_i == brq_pkg_PRIV_LVL_M ? brq_pkg_EXC_CAUSE_ECALL_MMODE : brq_pkg_EXC_CAUSE_ECALL_UMODE);
+						ebrk_insn_prio:
+							if (debug_mode_q | ebreak_into_debug) begin
+								pc_set_o = 1'b0;
+								pc_set_spec_o = 1'b0;
+								csr_save_id_o = 1'b0;
+								csr_save_cause_o = 1'b0;
+								ctrl_fsm_ns = DBG_TAKEN_ID;
+								flush_id = 1'b0;
+							end
+							else
+								exc_cause_o = brq_pkg_EXC_CAUSE_BREAKPOINT;
+						store_err_prio: begin
+							exc_cause_o = brq_pkg_EXC_CAUSE_STORE_ACCESS_FAULT;
+							csr_mtval_o = lsu_addr_last_i;
+						end
+						load_err_prio: begin
+							exc_cause_o = brq_pkg_EXC_CAUSE_LOAD_ACCESS_FAULT;
+							csr_mtval_o = lsu_addr_last_i;
+						end
+						default:
+							;
+					endcase
+				end
+				else if (mret_insn) begin
+					pc_mux_o = brq_pkg_PC_ERET;
+					pc_set_o = 1'b1;
+					pc_set_spec_o = 1'b1;
+					csr_restore_mret_id_o = 1'b1;
+					if (nmi_mode_q)
+						nmi_mode_d = 1'b0;
+				end
+				else if (dret_insn) begin
+					pc_mux_o = brq_pkg_PC_DRET;
+					pc_set_o = 1'b1;
+					pc_set_spec_o = 1'b1;
+					debug_mode_d = 1'b0;
+					csr_restore_dret_id_o = 1'b1;
+				end
+				else if (wfi_insn)
+					ctrl_fsm_ns = WAIT_SLEEP;
+				else if (csr_pipe_flush && handle_irq)
+					ctrl_fsm_ns = IRQ_TAKEN;
+				if (enter_debug_mode && !(ebrk_insn_prio && ebreak_into_debug))
+					ctrl_fsm_ns = DBG_TAKEN_IF;
+			end
+			default: begin
+				instr_req_o = 1'b0;
+				ctrl_fsm_ns = RESET;
+			end
+		endcase
+	end
+	assign flush_id_o = flush_id;
+	assign debug_mode_o = debug_mode_q;
+	assign nmi_mode_o = nmi_mode_q;
+	assign stall = (stall_id_i | stall_wb_i) | fpu_busy_i;
+	assign id_in_ready_o = (~stall & ~halt_if) & ~retain_id;
+	assign instr_valid_clear_o = ~(stall | retain_id) | flush_id;
+	always @(posedge clk_i or negedge rst_ni) begin : update_regs
+		if (!rst_ni) begin
+			ctrl_fsm_cs <= RESET;
+			nmi_mode_q <= 1'b0;
+			debug_mode_q <= 1'b0;
+			load_err_q <= 1'b0;
+			store_err_q <= 1'b0;
+			exc_req_q <= 1'b0;
+			illegal_insn_q <= 1'b0;
+		end
+		else begin
+			ctrl_fsm_cs <= ctrl_fsm_ns;
+			nmi_mode_q <= nmi_mode_d;
+			debug_mode_q <= debug_mode_d;
+			load_err_q <= load_err_d;
+			store_err_q <= store_err_d;
+			exc_req_q <= exc_req_d;
+			illegal_insn_q <= illegal_insn_d;
+		end
+	end
+endmodule
+module brq_idu_decoder (
+	clk_i,
+	rst_ni,
+	illegal_insn_o,
+	ebrk_insn_o,
+	mret_insn_o,
+	dret_insn_o,
+	ecall_insn_o,
+	wfi_insn_o,
+	jump_set_o,
+	branch_taken_i,
+	icache_inval_o,
+	instr_first_cycle_i,
+	instr_rdata_i,
+	instr_rdata_alu_i,
+	illegal_c_insn_i,
+	imm_a_mux_sel_o,
+	imm_b_mux_sel_o,
+	bt_a_mux_sel_o,
+	bt_b_mux_sel_o,
+	imm_i_type_o,
+	imm_s_type_o,
+	imm_b_type_o,
+	imm_u_type_o,
+	imm_j_type_o,
+	zimm_rs1_type_o,
+	rf_wdata_sel_o,
+	rf_we_o,
+	rf_raddr_a_o,
+	rf_raddr_b_o,
+	rf_waddr_o,
+	rf_ren_a_o,
+	rf_ren_b_o,
+	alu_operator_o,
+	alu_op_a_mux_sel_o,
+	alu_op_b_mux_sel_o,
+	alu_multicycle_o,
+	mult_en_o,
+	div_en_o,
+	mult_sel_o,
+	div_sel_o,
+	multdiv_operator_o,
+	multdiv_signed_mode_o,
+	csr_access_o,
+	csr_op_o,
+	data_req_o,
+	data_we_o,
+	data_type_o,
+	data_sign_extension_o,
+	jump_in_dec_o,
+	branch_in_dec_o,
+	fp_rounding_mode_o,
+	fp_rf_raddr_a_o,
+	fp_rf_raddr_b_o,
+	fp_rf_raddr_c_o,
+	fp_rf_waddr_o,
+	fp_rf_we_o,
+	fp_alu_operator_o,
+	fp_alu_op_mod_o,
+	fp_rm_dynamic_o,
+	fp_src_fmt_o,
+	fp_dst_fmt_o,
+	is_fp_instr_o,
+	use_fp_rs1_o,
+	use_fp_rs2_o,
+	use_fp_rs3_o,
+	use_fp_rd_o,
+	fp_swap_oprnds_o,
+	fp_load_o,
+	mv_instr_o
+);
+	parameter [0:0] RV32E = 0;
+	localparam integer brq_pkg_RV32MFast = 2;
+	parameter integer RV32M = brq_pkg_RV32MFast;
+	localparam integer brq_pkg_RV32BNone = 0;
+	parameter integer RV32B = brq_pkg_RV32BNone;
+	localparam integer brq_pkg_RV64FDouble = 2;
+	parameter integer RVF = brq_pkg_RV64FDouble;
+	parameter [0:0] BranchTargetALU = 0;
+	input wire clk_i;
+	input wire rst_ni;
+	output wire illegal_insn_o;
+	output reg ebrk_insn_o;
+	output reg mret_insn_o;
+	output reg dret_insn_o;
+	output reg ecall_insn_o;
+	output reg wfi_insn_o;
+	output reg jump_set_o;
+	input wire branch_taken_i;
+	output reg icache_inval_o;
+	input wire instr_first_cycle_i;
+	input wire [31:0] instr_rdata_i;
+	input wire [31:0] instr_rdata_alu_i;
+	input wire illegal_c_insn_i;
+	output reg imm_a_mux_sel_o;
+	output reg [2:0] imm_b_mux_sel_o;
+	output reg [1:0] bt_a_mux_sel_o;
+	output reg [2:0] bt_b_mux_sel_o;
+	output wire [31:0] imm_i_type_o;
+	output wire [31:0] imm_s_type_o;
+	output wire [31:0] imm_b_type_o;
+	output wire [31:0] imm_u_type_o;
+	output wire [31:0] imm_j_type_o;
+	output wire [31:0] zimm_rs1_type_o;
+	output reg rf_wdata_sel_o;
+	output wire rf_we_o;
+	output wire [4:0] rf_raddr_a_o;
+	output wire [4:0] rf_raddr_b_o;
+	output wire [4:0] rf_waddr_o;
+	output reg rf_ren_a_o;
+	output reg rf_ren_b_o;
+	output reg [5:0] alu_operator_o;
+	output reg [1:0] alu_op_a_mux_sel_o;
+	output reg alu_op_b_mux_sel_o;
+	output reg alu_multicycle_o;
+	output wire mult_en_o;
+	output wire div_en_o;
+	output reg mult_sel_o;
+	output reg div_sel_o;
+	output reg [1:0] multdiv_operator_o;
+	output reg [1:0] multdiv_signed_mode_o;
+	output reg csr_access_o;
+	output reg [1:0] csr_op_o;
+	output reg data_req_o;
+	output reg data_we_o;
+	output reg [1:0] data_type_o;
+	output reg data_sign_extension_o;
+	output reg jump_in_dec_o;
+	output reg branch_in_dec_o;
+	output wire [2:0] fp_rounding_mode_o;
+	output wire [4:0] fp_rf_raddr_a_o;
+	output wire [4:0] fp_rf_raddr_b_o;
+	output wire [4:0] fp_rf_raddr_c_o;
+	output wire [4:0] fp_rf_waddr_o;
+	output reg fp_rf_we_o;
+	localparam [31:0] fpnew_pkg_OP_BITS = 4;
+	output reg [3:0] fp_alu_operator_o;
+	output reg fp_alu_op_mod_o;
+	output wire fp_rm_dynamic_o;
+	localparam [31:0] fpnew_pkg_NUM_FP_FORMATS = 4;
+	localparam [31:0] fpnew_pkg_FP_FORMAT_BITS = 2;
+	output reg [1:0] fp_src_fmt_o;
+	output reg [1:0] fp_dst_fmt_o;
+	output reg is_fp_instr_o;
+	output reg use_fp_rs1_o;
+	output reg use_fp_rs2_o;
+	output reg use_fp_rs3_o;
+	output reg use_fp_rd_o;
+	output reg fp_swap_oprnds_o;
+	output reg fp_load_o;
+	output reg mv_instr_o;
+	wire fp_invalid_rm;
+	reg illegal_insn;
+	wire illegal_reg_rv32e;
+	reg csr_illegal;
+	reg rf_we;
+	wire [31:0] instr;
+	wire [31:0] instr_alu;
+	wire [4:0] instr_rs1;
+	wire [4:0] instr_rs2;
+	wire [4:0] instr_rs3;
+	wire [4:0] instr_rd;
+	reg use_rs3_d;
+	reg use_rs3_q;
+	reg [1:0] csr_op;
+	reg [6:0] opcode;
+	reg [6:0] opcode_alu;
+	assign instr = instr_rdata_alu_i;
+	assign instr_alu = instr_rdata_alu_i;
+	assign imm_i_type_o = {{20 {instr[31]}}, instr[31:20]};
+	assign imm_s_type_o = {{20 {instr[31]}}, instr[31:25], instr[11:7]};
+	assign imm_b_type_o = {{19 {instr[31]}}, instr[31], instr[7], instr[30:25], instr[11:8], 1'b0};
+	assign imm_u_type_o = {instr[31:12], 12'b000000000000};
+	assign imm_j_type_o = {{12 {instr[31]}}, instr[19:12], instr[20], instr[30:21], 1'b0};
+	assign zimm_rs1_type_o = {27'b000000000000000000000000000, instr_rs1};
+	always @(posedge clk_i or negedge rst_ni)
+		if (!rst_ni)
+			use_rs3_q <= 1'b0;
+		else
+			use_rs3_q <= use_rs3_d;
+	assign instr_rs1 = instr[19:15];
+	assign instr_rs2 = instr[24:20];
+	assign instr_rs3 = instr[31:27];
+	assign rf_raddr_a_o = (use_rs3_q & ~instr_first_cycle_i ? instr_rs3 : instr_rs1);
+	assign rf_raddr_b_o = instr_rs2;
+	assign instr_rd = instr[11:7];
+	assign rf_waddr_o = instr_rd;
+	assign fp_rf_raddr_a_o = instr_rs1;
+	assign fp_rf_raddr_b_o = instr_rs2;
+	assign fp_rf_raddr_c_o = instr_rs3;
+	assign fp_rf_waddr_o = instr_rd;
+	assign fp_rounding_mode_o = instr[14:12];
+	assign fp_invalid_rm = (instr[14:12] == 3'b101 ? 1'b1 : (instr[14:12] == 3'b110 ? 1'b1 : 1'b0));
+	assign fp_rm_dynamic_o = (instr[14:12] == 3'b111 ? 1'b1 : 1'b0);
+	localparam [1:0] brq_pkg_OP_A_REG_A = 0;
+	localparam [0:0] brq_pkg_OP_B_REG_B = 0;
+	generate
+		if (RV32E) begin : gen_rv32e_reg_check_active
+			assign illegal_reg_rv32e = ((rf_raddr_a_o[4] & (alu_op_a_mux_sel_o == brq_pkg_OP_A_REG_A)) | (rf_raddr_b_o[4] & (alu_op_b_mux_sel_o == brq_pkg_OP_B_REG_B))) | (rf_waddr_o[4] & rf_we);
+		end
+		else begin : gen_rv32e_reg_check_inactive
+			assign illegal_reg_rv32e = 1'b0;
+		end
+	endgenerate
+	localparam [1:0] brq_pkg_CSR_OP_CLEAR = 3;
+	localparam [1:0] brq_pkg_CSR_OP_READ = 0;
+	localparam [1:0] brq_pkg_CSR_OP_SET = 2;
+	always @(*) begin : csr_operand_check
+		csr_op_o = csr_op;
+		if (((csr_op == brq_pkg_CSR_OP_SET) || (csr_op == brq_pkg_CSR_OP_CLEAR)) && (instr_rs1 == {5 {1'sb0}}))
+			csr_op_o = brq_pkg_CSR_OP_READ;
+	end
+	localparam [1:0] brq_pkg_CSR_OP_WRITE = 1;
+	localparam [1:0] brq_pkg_MD_OP_DIV = 2;
+	localparam [1:0] brq_pkg_MD_OP_MULH = 1;
+	localparam [1:0] brq_pkg_MD_OP_MULL = 0;
+	localparam [1:0] brq_pkg_MD_OP_REM = 3;
+	localparam [6:0] brq_pkg_OPCODE_AUIPC = 7'h17;
+	localparam [6:0] brq_pkg_OPCODE_BRANCH = 7'h63;
+	localparam [6:0] brq_pkg_OPCODE_JAL = 7'h6f;
+	localparam [6:0] brq_pkg_OPCODE_JALR = 7'h67;
+	localparam [6:0] brq_pkg_OPCODE_LOAD = 7'h03;
+	localparam [6:0] brq_pkg_OPCODE_LOAD_FP = 7'h07;
+	localparam [6:0] brq_pkg_OPCODE_LUI = 7'h37;
+	localparam [6:0] brq_pkg_OPCODE_MADD_FP = 7'h43;
+	localparam [6:0] brq_pkg_OPCODE_MISC_MEM = 7'h0f;
+	localparam [6:0] brq_pkg_OPCODE_MSUB_FP = 7'h47;
+	localparam [6:0] brq_pkg_OPCODE_NMADD_FP = 7'h4f;
+	localparam [6:0] brq_pkg_OPCODE_NMSUB_FP = 7'h4b;
+	localparam [6:0] brq_pkg_OPCODE_OP = 7'h33;
+	localparam [6:0] brq_pkg_OPCODE_OP_FP = 7'h53;
+	localparam [6:0] brq_pkg_OPCODE_OP_IMM = 7'h13;
+	localparam [6:0] brq_pkg_OPCODE_STORE = 7'h23;
+	localparam [6:0] brq_pkg_OPCODE_STORE_FP = 7'h27;
+	localparam [6:0] brq_pkg_OPCODE_SYSTEM = 7'h73;
+	localparam [0:0] brq_pkg_RF_WD_CSR = 1;
+	localparam [0:0] brq_pkg_RF_WD_EX = 0;
+	localparam integer brq_pkg_RV32BBalanced = 1;
+	localparam integer brq_pkg_RV32BFull = 2;
+	localparam integer brq_pkg_RV32FNone = 0;
+	localparam integer brq_pkg_RV32MNone = 0;
+	localparam [1:0] fpnew_pkg_FP32 = 'd0;
+	always @(*) begin
+		jump_in_dec_o = 1'b0;
+		jump_set_o = 1'b0;
+		branch_in_dec_o = 1'b0;
+		icache_inval_o = 1'b0;
+		multdiv_operator_o = brq_pkg_MD_OP_MULL;
+		multdiv_signed_mode_o = 2'b00;
+		rf_wdata_sel_o = brq_pkg_RF_WD_EX;
+		rf_we = 1'b0;
+		rf_ren_a_o = 1'b0;
+		rf_ren_b_o = 1'b0;
+		csr_access_o = 1'b0;
+		csr_illegal = 1'b0;
+		csr_op = brq_pkg_CSR_OP_READ;
+		data_we_o = 1'b0;
+		data_type_o = 2'b00;
+		data_sign_extension_o = 1'b0;
+		data_req_o = 1'b0;
+		illegal_insn = 1'b0;
+		ebrk_insn_o = 1'b0;
+		mret_insn_o = 1'b0;
+		dret_insn_o = 1'b0;
+		ecall_insn_o = 1'b0;
+		wfi_insn_o = 1'b0;
+		fp_rf_we_o = 1'b0;
+		is_fp_instr_o = 1'b0;
+		use_fp_rs1_o = 1'b0;
+		use_fp_rs2_o = 1'b0;
+		use_fp_rs3_o = 1'b0;
+		use_fp_rd_o = 1'b0;
+		fp_load_o = 1'b0;
+		fp_src_fmt_o = fpnew_pkg_FP32;
+		fp_dst_fmt_o = fpnew_pkg_FP32;
+		fp_swap_oprnds_o = 1'b0;
+		mv_instr_o = 1'b0;
+		opcode = instr[6:0];
+		case (opcode)
+			brq_pkg_OPCODE_JAL: begin
+				jump_in_dec_o = 1'b1;
+				if (instr_first_cycle_i) begin
+					rf_we = BranchTargetALU;
+					jump_set_o = 1'b1;
+				end
+				else
+					rf_we = 1'b1;
+			end
+			brq_pkg_OPCODE_JALR: begin
+				jump_in_dec_o = 1'b1;
+				if (instr_first_cycle_i) begin
+					rf_we = BranchTargetALU;
+					jump_set_o = 1'b1;
+				end
+				else
+					rf_we = 1'b1;
+				if (instr[14:12] != 3'b000)
+					illegal_insn = 1'b1;
+				rf_ren_a_o = 1'b1;
+			end
+			brq_pkg_OPCODE_BRANCH: begin
+				branch_in_dec_o = 1'b1;
+				case (instr[14:12])
+					3'b000, 3'b001, 3'b100, 3'b101, 3'b110, 3'b111: illegal_insn = 1'b0;
+					default: illegal_insn = 1'b1;
+				endcase
+				rf_ren_a_o = 1'b1;
+				rf_ren_b_o = 1'b1;
+			end
+			brq_pkg_OPCODE_STORE: begin
+				rf_ren_a_o = 1'b1;
+				rf_ren_b_o = 1'b1;
+				data_req_o = 1'b1;
+				data_we_o = 1'b1;
+				if (instr[14])
+					illegal_insn = 1'b1;
+				case (instr[13:12])
+					2'b00: data_type_o = 2'b10;
+					2'b01: data_type_o = 2'b01;
+					2'b10: data_type_o = 2'b00;
+					default: illegal_insn = 1'b1;
+				endcase
+			end
+			brq_pkg_OPCODE_LOAD: begin
+				rf_ren_a_o = 1'b1;
+				data_req_o = 1'b1;
+				data_type_o = 2'b00;
+				data_sign_extension_o = ~instr[14];
+				case (instr[13:12])
+					2'b00: data_type_o = 2'b10;
+					2'b01: data_type_o = 2'b01;
+					2'b10: begin
+						data_type_o = 2'b00;
+						if (instr[14])
+							illegal_insn = 1'b1;
+					end
+					default: illegal_insn = 1'b1;
+				endcase
+			end
+			brq_pkg_OPCODE_LUI: rf_we = 1'b1;
+			brq_pkg_OPCODE_AUIPC: rf_we = 1'b1;
+			brq_pkg_OPCODE_OP_IMM: begin
+				rf_ren_a_o = 1'b1;
+				rf_we = 1'b1;
+				case (instr[14:12])
+					3'b000, 3'b010, 3'b011, 3'b100, 3'b110, 3'b111: illegal_insn = 1'b0;
+					3'b001:
+						case (instr[31:27])
+							5'b00000: illegal_insn = (instr[26:25] == 2'b00 ? 1'b0 : 1'b1);
+							5'b00100, 5'b01001, 5'b00101, 5'b01101: illegal_insn = (RV32B != brq_pkg_RV32BNone ? 1'b0 : 1'b1);
+							5'b00001:
+								if (instr[26] == 1'b0)
+									illegal_insn = (RV32B == brq_pkg_RV32BFull ? 1'b0 : 1'b1);
+								else
+									illegal_insn = 1'b1;
+							5'b01100:
+								case (instr[26:20])
+									7'b0000000, 7'b0000001, 7'b0000010, 7'b0000100, 7'b0000101: illegal_insn = (RV32B != brq_pkg_RV32BNone ? 1'b0 : 1'b1);
+									7'b0010000, 7'b0010001, 7'b0010010, 7'b0011000, 7'b0011001, 7'b0011010: illegal_insn = (RV32B == brq_pkg_RV32BFull ? 1'b0 : 1'b1);
+									default: illegal_insn = 1'b1;
+								endcase
+							default: illegal_insn = 1'b1;
+						endcase
+					3'b101:
+						if (instr[26])
+							illegal_insn = (RV32B != brq_pkg_RV32BNone ? 1'b0 : 1'b1);
+						else
+							case (instr[31:27])
+								5'b00000, 5'b01000: illegal_insn = (instr[26:25] == 2'b00 ? 1'b0 : 1'b1);
+								5'b00100, 5'b01100, 5'b01001: illegal_insn = (RV32B != brq_pkg_RV32BNone ? 1'b0 : 1'b1);
+								5'b01101:
+									if (RV32B == brq_pkg_RV32BFull)
+										illegal_insn = 1'b0;
+									else
+										case (instr[24:20])
+											5'b11111, 5'b11000: illegal_insn = (RV32B == brq_pkg_RV32BBalanced ? 1'b0 : 1'b1);
+											default: illegal_insn = 1'b1;
+										endcase
+								5'b00101:
+									if (RV32B == brq_pkg_RV32BFull)
+										illegal_insn = 1'b0;
+									else if (instr[24:20] == 5'b00111)
+										illegal_insn = (RV32B == brq_pkg_RV32BBalanced ? 1'b0 : 1'b1);
+								5'b00001:
+									if (instr[26] == 1'b0)
+										illegal_insn = (RV32B == brq_pkg_RV32BFull ? 1'b0 : 1'b1);
+									else
+										illegal_insn = 1'b1;
+								default: illegal_insn = 1'b1;
+							endcase
+				endcase
+			end
+			brq_pkg_OPCODE_OP: begin
+				rf_ren_a_o = 1'b1;
+				rf_ren_b_o = 1'b1;
+				rf_we = 1'b1;
+				if ({instr[26], instr[13:12]} == 3'b101)
+					illegal_insn = (RV32B != brq_pkg_RV32BNone ? 1'b0 : 1'b1);
+				else
+					case ({instr[31:25], instr[14:12]})
+						10'b0000000000, 10'b0100000000, 10'b0000000010, 10'b0000000011, 10'b0000000100, 10'b0000000110, 10'b0000000111, 10'b0000000001, 10'b0000000101, 10'b0100000101: illegal_insn = 1'b0;
+						10'b0100000111, 10'b0100000110, 10'b0100000100, 10'b0010000001, 10'b0010000101, 10'b0110000001, 10'b0110000101, 10'b0000101100, 10'b0000101101, 10'b0000101110, 10'b0000101111, 10'b0000100100, 10'b0100100100, 10'b0000100111, 10'b0100100001, 10'b0010100001, 10'b0110100001, 10'b0100100101, 10'b0100100111: illegal_insn = (RV32B != brq_pkg_RV32BNone ? 1'b0 : 1'b1);
+						10'b0100100110, 10'b0000100110, 10'b0110100101, 10'b0010100101, 10'b0000100001, 10'b0000100101, 10'b0000101001, 10'b0000101010, 10'b0000101011: illegal_insn = (RV32B == brq_pkg_RV32BFull ? 1'b0 : 1'b1);
+						10'b0000001000: begin
+							multdiv_operator_o = brq_pkg_MD_OP_MULL;
+							multdiv_signed_mode_o = 2'b00;
+							illegal_insn = (RV32M == brq_pkg_RV32MNone ? 1'b1 : 1'b0);
+						end
+						10'b0000001001: begin
+							multdiv_operator_o = brq_pkg_MD_OP_MULH;
+							multdiv_signed_mode_o = 2'b11;
+							illegal_insn = (RV32M == brq_pkg_RV32MNone ? 1'b1 : 1'b0);
+						end
+						10'b0000001010: begin
+							multdiv_operator_o = brq_pkg_MD_OP_MULH;
+							multdiv_signed_mode_o = 2'b01;
+							illegal_insn = (RV32M == brq_pkg_RV32MNone ? 1'b1 : 1'b0);
+						end
+						10'b0000001011: begin
+							multdiv_operator_o = brq_pkg_MD_OP_MULH;
+							multdiv_signed_mode_o = 2'b00;
+							illegal_insn = (RV32M == brq_pkg_RV32MNone ? 1'b1 : 1'b0);
+						end
+						10'b0000001100: begin
+							multdiv_operator_o = brq_pkg_MD_OP_DIV;
+							multdiv_signed_mode_o = 2'b11;
+							illegal_insn = (RV32M == brq_pkg_RV32MNone ? 1'b1 : 1'b0);
+						end
+						10'b0000001101: begin
+							multdiv_operator_o = brq_pkg_MD_OP_DIV;
+							multdiv_signed_mode_o = 2'b00;
+							illegal_insn = (RV32M == brq_pkg_RV32MNone ? 1'b1 : 1'b0);
+						end
+						10'b0000001110: begin
+							multdiv_operator_o = brq_pkg_MD_OP_REM;
+							multdiv_signed_mode_o = 2'b11;
+							illegal_insn = (RV32M == brq_pkg_RV32MNone ? 1'b1 : 1'b0);
+						end
+						10'b0000001111: begin
+							multdiv_operator_o = brq_pkg_MD_OP_REM;
+							multdiv_signed_mode_o = 2'b00;
+							illegal_insn = (RV32M == brq_pkg_RV32MNone ? 1'b1 : 1'b0);
+						end
+						default: illegal_insn = 1'b1;
+					endcase
+			end
+			brq_pkg_OPCODE_MISC_MEM:
+				case (instr[14:12])
+					3'b000: rf_we = 1'b0;
+					3'b001: begin
+						jump_in_dec_o = 1'b1;
+						rf_we = 1'b0;
+						if (instr_first_cycle_i) begin
+							jump_set_o = 1'b1;
+							icache_inval_o = 1'b1;
+						end
+					end
+					default: illegal_insn = 1'b1;
+				endcase
+			brq_pkg_OPCODE_SYSTEM:
+				if (instr[14:12] == 3'b000) begin
+					case (instr[31:20])
+						12'h000: ecall_insn_o = 1'b1;
+						12'h001: ebrk_insn_o = 1'b1;
+						12'h302: mret_insn_o = 1'b1;
+						12'h7b2: dret_insn_o = 1'b1;
+						12'h105: wfi_insn_o = 1'b1;
+						default: illegal_insn = 1'b1;
+					endcase
+					if ((instr_rs1 != 5'b00000) || (instr_rd != 5'b00000))
+						illegal_insn = 1'b1;
+				end
+				else begin
+					csr_access_o = 1'b1;
+					rf_wdata_sel_o = brq_pkg_RF_WD_CSR;
+					rf_we = 1'b1;
+					if (~instr[14])
+						rf_ren_a_o = 1'b1;
+					case (instr[13:12])
+						2'b01: csr_op = brq_pkg_CSR_OP_WRITE;
+						2'b10: csr_op = brq_pkg_CSR_OP_SET;
+						2'b11: csr_op = brq_pkg_CSR_OP_CLEAR;
+						default: csr_illegal = 1'b1;
+					endcase
+					illegal_insn = csr_illegal;
+				end
+			brq_pkg_OPCODE_STORE_FP: begin
+				data_req_o = 1'b1;
+				data_we_o = 1'b1;
+				data_type_o = 2'b00;
+				use_fp_rs2_o = 1'b1;
+				case (instr[14:12])
+					3'b011: illegal_insn = (RVF == brq_pkg_RV64FDouble ? 1'b0 : 1'b1);
+					3'b010: begin
+						illegal_insn = (RVF == brq_pkg_RV32FNone ? 1'b1 : 1'b0);
+						fp_src_fmt_o = fpnew_pkg_FP32;
+					end
+					default: illegal_insn = 1'b1;
+				endcase
+			end
+			brq_pkg_OPCODE_LOAD_FP: begin
+				data_req_o = 1'b1;
+				data_type_o = 2'b00;
+				fp_load_o = 1'b1;
+				use_fp_rd_o = 1'b1;
+				case (instr[14:12])
+					3'b011: illegal_insn = (RVF == brq_pkg_RV64FDouble ? 1'b0 : 1'b1);
+					3'b010: begin
+						illegal_insn = (RVF == brq_pkg_RV32FNone ? 1'b1 : 1'b0);
+						fp_src_fmt_o = fpnew_pkg_FP32;
+					end
+					default: illegal_insn = 1'b1;
+				endcase
+			end
+			brq_pkg_OPCODE_MADD_FP, brq_pkg_OPCODE_MSUB_FP, brq_pkg_OPCODE_NMSUB_FP, brq_pkg_OPCODE_NMADD_FP: begin
+				fp_rf_we_o = 1'b1;
+				fp_src_fmt_o = fpnew_pkg_FP32;
+				is_fp_instr_o = 1'b1;
+				use_fp_rs1_o = 1'b1;
+				use_fp_rs2_o = 1'b1;
+				use_fp_rs3_o = 1'b1;
+				use_fp_rd_o = 1'b1;
+				case (instr[26:25])
+					1: illegal_insn = ((RVF == brq_pkg_RV64FDouble) & fp_invalid_rm ? 1'b0 : 1'b1);
+					0: begin
+						illegal_insn = ((RVF == brq_pkg_RV32FNone) & ~fp_invalid_rm ? 1'b1 : 1'b0);
+						fp_src_fmt_o = fpnew_pkg_FP32;
+					end
+					default: illegal_insn = 1'b1;
+				endcase
+			end
+			brq_pkg_OPCODE_OP_FP: begin
+				fp_src_fmt_o = fpnew_pkg_FP32;
+				is_fp_instr_o = 1'b1;
+				case (instr[31:25])
+					7'b0000001, 7'b0000101: begin
+						fp_rf_we_o = 1'b1;
+						use_fp_rs1_o = 1'b1;
+						use_fp_rs2_o = 1'b1;
+						use_fp_rd_o = 1'b1;
+						fp_swap_oprnds_o = 1'b1;
+						illegal_insn = ((RVF == brq_pkg_RV64FDouble) & fp_invalid_rm ? 1'b0 : 1'b1);
+					end
+					7'b0001001, 7'b0001101: begin
+						fp_rf_we_o = 1'b1;
+						use_fp_rs1_o = 1'b1;
+						use_fp_rs2_o = 1'b1;
+						use_fp_rd_o = 1'b1;
+						illegal_insn = ((RVF == brq_pkg_RV64FDouble) & fp_invalid_rm ? 1'b0 : 1'b1);
+					end
+					7'b0000000, 7'b0000100: begin
+						fp_rf_we_o = 1'b1;
+						use_fp_rs1_o = 1'b1;
+						use_fp_rs2_o = 1'b1;
+						use_fp_rd_o = 1'b1;
+						fp_swap_oprnds_o = 1'b1;
+						illegal_insn = ((RVF == brq_pkg_RV32FNone) & ~fp_invalid_rm ? 1'b1 : 1'b0);
+						fp_src_fmt_o = fpnew_pkg_FP32;
+					end
+					7'b0001000, 7'b0001100: begin
+						fp_rf_we_o = 1'b1;
+						use_fp_rs1_o = 1'b1;
+						use_fp_rs2_o = 1'b1;
+						use_fp_rd_o = 1'b1;
+						illegal_insn = ((RVF == brq_pkg_RV32FNone) & ~fp_invalid_rm ? 1'b1 : 1'b0);
+						fp_src_fmt_o = fpnew_pkg_FP32;
+					end
+					7'b0101101: begin
+						fp_rf_we_o = 1'b1;
+						use_fp_rs1_o = 1'b1;
+						use_fp_rd_o = 1'b1;
+						if (~|instr[24:20])
+							illegal_insn = ((RVF == brq_pkg_RV64FDouble) & fp_invalid_rm ? 1'b0 : 1'b1);
+					end
+					7'b0101100: begin
+						fp_rf_we_o = 1'b1;
+						use_fp_rs1_o = 1'b1;
+						use_fp_rd_o = 1'b1;
+						if (~|instr[24:20]) begin
+							illegal_insn = ((RVF == brq_pkg_RV32FNone) & ~fp_invalid_rm ? 1'b1 : 1'b0);
+							fp_src_fmt_o = fpnew_pkg_FP32;
+						end
+					end
+					7'b0010001: begin
+						fp_rf_we_o = 1'b1;
+						use_fp_rs1_o = 1'b1;
+						use_fp_rs2_o = 1'b1;
+						use_fp_rd_o = 1'b1;
+						if (~(instr[14] | &instr[13:12]))
+							illegal_insn = ((RVF == brq_pkg_RV64FDouble) & fp_invalid_rm ? 1'b0 : 1'b1);
+					end
+					7'b0010000: begin
+						fp_rf_we_o = 1'b1;
+						use_fp_rs1_o = 1'b1;
+						use_fp_rs2_o = 1'b1;
+						use_fp_rd_o = 1'b1;
+						if (~(instr[14] | &instr[13:12])) begin
+							illegal_insn = ((RVF == brq_pkg_RV32FNone) & ~fp_invalid_rm ? 1'b1 : 1'b0);
+							fp_src_fmt_o = fpnew_pkg_FP32;
+						end
+					end
+					7'b0010101: begin
+						fp_rf_we_o = 1'b1;
+						use_fp_rs1_o = 1'b1;
+						use_fp_rs2_o = 1'b1;
+						use_fp_rd_o = 1'b1;
+						if (~|instr[14:13])
+							illegal_insn = ((RVF == brq_pkg_RV64FDouble) & fp_invalid_rm ? 1'b0 : 1'b1);
+					end
+					7'b0010100: begin
+						fp_rf_we_o = 1'b1;
+						use_fp_rs1_o = 1'b1;
+						use_fp_rs2_o = 1'b1;
+						use_fp_rd_o = 1'b1;
+						if (~|instr[14:13]) begin
+							illegal_insn = ((RVF == brq_pkg_RV32FNone) & ~fp_invalid_rm ? 1'b1 : 1'b0);
+							fp_src_fmt_o = fpnew_pkg_FP32;
+						end
+					end
+					7'b0100000: begin
+						fp_rf_we_o = 1'b1;
+						use_fp_rs1_o = 1'b1;
+						use_fp_rd_o = 1'b1;
+						if (~(|instr[24:21] | ~instr[20]))
+							illegal_insn = ((RVF == brq_pkg_RV64FDouble) & fp_invalid_rm ? 1'b0 : 1'b1);
+					end
+					7'b1100000: begin
+						rf_we = 1'b1;
+						use_fp_rs1_o = 1'b1;
+						if (~|instr[24:21]) begin
+							illegal_insn = ((RVF == brq_pkg_RV32FNone) & ~fp_invalid_rm ? 1'b1 : 1'b0);
+							fp_src_fmt_o = fpnew_pkg_FP32;
+						end
+					end
+					7'b0100001: begin
+						fp_rf_we_o = 1'b1;
+						use_fp_rs1_o = 1'b1;
+						use_fp_rd_o = 1'b1;
+						if (~|instr[24:20])
+							illegal_insn = ((RVF == brq_pkg_RV64FDouble) & fp_invalid_rm ? 1'b0 : 1'b1);
+					end
+					7'b1110000: begin
+						rf_we = 1'b1;
+						case ({instr[24:20], instr[14:12]})
+							8'b00000000: begin
+								use_fp_rs1_o = 1'b1;
+								illegal_insn = ((RVF == brq_pkg_RV32FNone) & ~fp_invalid_rm ? 1'b1 : 1'b0);
+								fp_src_fmt_o = fpnew_pkg_FP32;
+								mv_instr_o = 1'b1;
+							end
+							8'b00000001: begin
+								use_fp_rs1_o = 1'b1;
+								illegal_insn = ((RVF == brq_pkg_RV32FNone) & ~fp_invalid_rm ? 1'b1 : 1'b0);
+								fp_src_fmt_o = fpnew_pkg_FP32;
+							end
+							default: illegal_insn = 1'b1;
+						endcase
+					end
+					7'b1010001: begin
+						rf_we = 1'b1;
+						use_fp_rs1_o = 1'b1;
+						use_fp_rs2_o = 1'b1;
+						if (~instr[14] | &instr[13:12])
+							illegal_insn = ((RVF == brq_pkg_RV64FDouble) & fp_invalid_rm ? 1'b0 : 1'b1);
+					end
+					7'b1010000: begin
+						rf_we = 1'b1;
+						use_fp_rs1_o = 1'b1;
+						use_fp_rs2_o = 1'b1;
+						if (~instr[14] | &instr[13:12]) begin
+							illegal_insn = ((RVF == brq_pkg_RV32FNone) & ~fp_invalid_rm ? 1'b1 : 1'b0);
+							fp_src_fmt_o = fpnew_pkg_FP32;
+						end
+					end
+					7'b1110001: begin
+						rf_we = 1'b1;
+						use_fp_rs1_o = 1'b1;
+						case ({instr[24:20], instr[14:12]})
+							8'b00000001: illegal_insn = ((RVF == brq_pkg_RV64FDouble) & fp_invalid_rm ? 1'b0 : 1'b1);
+							default: illegal_insn = 1'b1;
+						endcase
+					end
+					7'b1100001: begin
+						rf_we = 1'b1;
+						use_fp_rs1_o = 1'b1;
+						if (~|instr[24:21])
+							illegal_insn = ((RVF == brq_pkg_RV64FDouble) & fp_invalid_rm ? 1'b0 : 1'b1);
+					end
+					7'b1101000: begin
+						fp_rf_we_o = 1'b1;
+						use_fp_rd_o = 1'b1;
+						if (~|instr[24:21]) begin
+							illegal_insn = ((RVF == brq_pkg_RV32FNone) & ~fp_invalid_rm ? 1'b1 : 1'b0);
+							fp_src_fmt_o = fpnew_pkg_FP32;
+						end
+					end
+					7'b1111001: begin
+						rf_we = 1'b1;
+						use_fp_rd_o = 1'b1;
+						if (~|instr[24:21])
+							illegal_insn = ((RVF == brq_pkg_RV64FDouble) & fp_invalid_rm ? 1'b0 : 1'b1);
+					end
+					7'b1111000: begin
+						fp_rf_we_o = 1'b1;
+						use_fp_rd_o = 1'b1;
+						mv_instr_o = 1'b1;
+						if (~(|instr[24:20]) | |instr[14:12]) begin
+							illegal_insn = ((RVF == brq_pkg_RV32FNone) & ~fp_invalid_rm ? 1'b1 : 1'b0);
+							fp_src_fmt_o = fpnew_pkg_FP32;
+						end
+					end
+					default: illegal_insn = 1'b1;
+				endcase
+			end
+			default: illegal_insn = 1'b1;
+		endcase
+		if (illegal_c_insn_i)
+			illegal_insn = 1'b1;
+		if (illegal_insn) begin
+			rf_we = 1'b0;
+			data_req_o = 1'b0;
+			data_we_o = 1'b0;
+			jump_in_dec_o = 1'b0;
+			jump_set_o = 1'b0;
+			branch_in_dec_o = 1'b0;
+			csr_access_o = 1'b0;
+			fp_rf_we_o = 1'b0;
+		end
+	end
+	localparam [5:0] brq_pkg_ALU_ADD = 0;
+	localparam [5:0] brq_pkg_ALU_AND = 4;
+	localparam [5:0] brq_pkg_ALU_ANDN = 7;
+	localparam [5:0] brq_pkg_ALU_BDEP = 48;
+	localparam [5:0] brq_pkg_ALU_BEXT = 47;
+	localparam [5:0] brq_pkg_ALU_BFP = 49;
+	localparam [5:0] brq_pkg_ALU_CLMUL = 50;
+	localparam [5:0] brq_pkg_ALU_CLMULH = 52;
+	localparam [5:0] brq_pkg_ALU_CLMULR = 51;
+	localparam [5:0] brq_pkg_ALU_CLZ = 34;
+	localparam [5:0] brq_pkg_ALU_CMIX = 40;
+	localparam [5:0] brq_pkg_ALU_CMOV = 39;
+	localparam [5:0] brq_pkg_ALU_CRC32C_B = 54;
+	localparam [5:0] brq_pkg_ALU_CRC32C_H = 56;
+	localparam [5:0] brq_pkg_ALU_CRC32C_W = 58;
+	localparam [5:0] brq_pkg_ALU_CRC32_B = 53;
+	localparam [5:0] brq_pkg_ALU_CRC32_H = 55;
+	localparam [5:0] brq_pkg_ALU_CRC32_W = 57;
+	localparam [5:0] brq_pkg_ALU_CTZ = 35;
+	localparam [5:0] brq_pkg_ALU_EQ = 23;
+	localparam [5:0] brq_pkg_ALU_FSL = 41;
+	localparam [5:0] brq_pkg_ALU_FSR = 42;
+	localparam [5:0] brq_pkg_ALU_GE = 21;
+	localparam [5:0] brq_pkg_ALU_GEU = 22;
+	localparam [5:0] brq_pkg_ALU_GORC = 16;
+	localparam [5:0] brq_pkg_ALU_GREV = 15;
+	localparam [5:0] brq_pkg_ALU_LT = 19;
+	localparam [5:0] brq_pkg_ALU_LTU = 20;
+	localparam [5:0] brq_pkg_ALU_MAX = 27;
+	localparam [5:0] brq_pkg_ALU_MAXU = 28;
+	localparam [5:0] brq_pkg_ALU_MIN = 25;
+	localparam [5:0] brq_pkg_ALU_MINU = 26;
+	localparam [5:0] brq_pkg_ALU_NE = 24;
+	localparam [5:0] brq_pkg_ALU_OR = 3;
+	localparam [5:0] brq_pkg_ALU_ORN = 6;
+	localparam [5:0] brq_pkg_ALU_PACK = 29;
+	localparam [5:0] brq_pkg_ALU_PACKH = 31;
+	localparam [5:0] brq_pkg_ALU_PACKU = 30;
+	localparam [5:0] brq_pkg_ALU_PCNT = 36;
+	localparam [5:0] brq_pkg_ALU_ROL = 14;
+	localparam [5:0] brq_pkg_ALU_ROR = 13;
+	localparam [5:0] brq_pkg_ALU_SBCLR = 44;
+	localparam [5:0] brq_pkg_ALU_SBEXT = 46;
+	localparam [5:0] brq_pkg_ALU_SBINV = 45;
+	localparam [5:0] brq_pkg_ALU_SBSET = 43;
+	localparam [5:0] brq_pkg_ALU_SEXTB = 32;
+	localparam [5:0] brq_pkg_ALU_SEXTH = 33;
+	localparam [5:0] brq_pkg_ALU_SHFL = 17;
+	localparam [5:0] brq_pkg_ALU_SLL = 10;
+	localparam [5:0] brq_pkg_ALU_SLO = 12;
+	localparam [5:0] brq_pkg_ALU_SLT = 37;
+	localparam [5:0] brq_pkg_ALU_SLTU = 38;
+	localparam [5:0] brq_pkg_ALU_SRA = 8;
+	localparam [5:0] brq_pkg_ALU_SRL = 9;
+	localparam [5:0] brq_pkg_ALU_SRO = 11;
+	localparam [5:0] brq_pkg_ALU_SUB = 1;
+	localparam [5:0] brq_pkg_ALU_UNSHFL = 18;
+	localparam [5:0] brq_pkg_ALU_XNOR = 5;
+	localparam [5:0] brq_pkg_ALU_XOR = 2;
+	localparam [0:0] brq_pkg_IMM_A_Z = 0;
+	localparam [0:0] brq_pkg_IMM_A_ZERO = 1;
+	localparam [2:0] brq_pkg_IMM_B_B = 2;
+	localparam [2:0] brq_pkg_IMM_B_I = 0;
+	localparam [2:0] brq_pkg_IMM_B_INCR_PC = 5;
+	localparam [2:0] brq_pkg_IMM_B_J = 4;
+	localparam [2:0] brq_pkg_IMM_B_S = 1;
+	localparam [2:0] brq_pkg_IMM_B_U = 3;
+	localparam [1:0] brq_pkg_OP_A_CURRPC = 2;
+	localparam [1:0] brq_pkg_OP_A_IMM = 3;
+	localparam [0:0] brq_pkg_OP_B_IMM = 1;
+	localparam [3:0] fpnew_pkg_ADD = 2;
+	localparam [3:0] fpnew_pkg_CLASSIFY = 9;
+	localparam [3:0] fpnew_pkg_CMP = 8;
+	localparam [3:0] fpnew_pkg_DIV = 4;
+	localparam [3:0] fpnew_pkg_F2F = 10;
+	localparam [3:0] fpnew_pkg_F2I = 11;
+	localparam [3:0] fpnew_pkg_FMADD = 0;
+	localparam [3:0] fpnew_pkg_FNMSUB = 1;
+	localparam [3:0] fpnew_pkg_I2F = 12;
+	localparam [3:0] fpnew_pkg_MINMAX = 7;
+	localparam [3:0] fpnew_pkg_MUL = 3;
+	localparam [3:0] fpnew_pkg_SGNJ = 6;
+	localparam [3:0] fpnew_pkg_SQRT = 5;
+	always @(*) begin
+		alu_operator_o = brq_pkg_ALU_SLTU;
+		alu_op_a_mux_sel_o = brq_pkg_OP_A_IMM;
+		alu_op_b_mux_sel_o = brq_pkg_OP_B_IMM;
+		imm_a_mux_sel_o = brq_pkg_IMM_A_ZERO;
+		imm_b_mux_sel_o = brq_pkg_IMM_B_I;
+		bt_a_mux_sel_o = brq_pkg_OP_A_CURRPC;
+		bt_b_mux_sel_o = brq_pkg_IMM_B_I;
+		opcode_alu = instr_alu[6:0];
+		use_rs3_d = 1'b0;
+		alu_multicycle_o = 1'b0;
+		mult_sel_o = 1'b0;
+		div_sel_o = 1'b0;
+		fp_alu_op_mod_o = 1'b0;
+		fp_alu_operator_o = fpnew_pkg_FMADD;
+		case (opcode_alu)
+			brq_pkg_OPCODE_JAL: begin
+				if (BranchTargetALU) begin
+					bt_a_mux_sel_o = brq_pkg_OP_A_CURRPC;
+					bt_b_mux_sel_o = brq_pkg_IMM_B_J;
+				end
+				if (instr_first_cycle_i && !BranchTargetALU) begin
+					alu_op_a_mux_sel_o = brq_pkg_OP_A_CURRPC;
+					alu_op_b_mux_sel_o = brq_pkg_OP_B_IMM;
+					imm_b_mux_sel_o = brq_pkg_IMM_B_J;
+					alu_operator_o = brq_pkg_ALU_ADD;
+				end
+				else begin
+					alu_op_a_mux_sel_o = brq_pkg_OP_A_CURRPC;
+					alu_op_b_mux_sel_o = brq_pkg_OP_B_IMM;
+					imm_b_mux_sel_o = brq_pkg_IMM_B_INCR_PC;
+					alu_operator_o = brq_pkg_ALU_ADD;
+				end
+			end
+			brq_pkg_OPCODE_JALR: begin
+				if (BranchTargetALU) begin
+					bt_a_mux_sel_o = brq_pkg_OP_A_REG_A;
+					bt_b_mux_sel_o = brq_pkg_IMM_B_I;
+				end
+				if (instr_first_cycle_i && !BranchTargetALU) begin
+					alu_op_a_mux_sel_o = brq_pkg_OP_A_REG_A;
+					alu_op_b_mux_sel_o = brq_pkg_OP_B_IMM;
+					imm_b_mux_sel_o = brq_pkg_IMM_B_I;
+					alu_operator_o = brq_pkg_ALU_ADD;
+				end
+				else begin
+					alu_op_a_mux_sel_o = brq_pkg_OP_A_CURRPC;
+					alu_op_b_mux_sel_o = brq_pkg_OP_B_IMM;
+					imm_b_mux_sel_o = brq_pkg_IMM_B_INCR_PC;
+					alu_operator_o = brq_pkg_ALU_ADD;
+				end
+			end
+			brq_pkg_OPCODE_BRANCH: begin
+				case (instr_alu[14:12])
+					3'b000: alu_operator_o = brq_pkg_ALU_EQ;
+					3'b001: alu_operator_o = brq_pkg_ALU_NE;
+					3'b100: alu_operator_o = brq_pkg_ALU_LT;
+					3'b101: alu_operator_o = brq_pkg_ALU_GE;
+					3'b110: alu_operator_o = brq_pkg_ALU_LTU;
+					3'b111: alu_operator_o = brq_pkg_ALU_GEU;
+					default:
+						;
+				endcase
+				if (BranchTargetALU) begin
+					bt_a_mux_sel_o = brq_pkg_OP_A_CURRPC;
+					bt_b_mux_sel_o = (branch_taken_i ? brq_pkg_IMM_B_B : brq_pkg_IMM_B_INCR_PC);
+				end
+				if (instr_first_cycle_i) begin
+					alu_op_a_mux_sel_o = brq_pkg_OP_A_REG_A;
+					alu_op_b_mux_sel_o = brq_pkg_OP_B_REG_B;
+				end
+				else begin
+					alu_op_a_mux_sel_o = brq_pkg_OP_A_CURRPC;
+					alu_op_b_mux_sel_o = brq_pkg_OP_B_IMM;
+					imm_b_mux_sel_o = (branch_taken_i ? brq_pkg_IMM_B_B : brq_pkg_IMM_B_INCR_PC);
+					alu_operator_o = brq_pkg_ALU_ADD;
+				end
+			end
+			brq_pkg_OPCODE_STORE: begin
+				alu_op_a_mux_sel_o = brq_pkg_OP_A_REG_A;
+				alu_op_b_mux_sel_o = brq_pkg_OP_B_REG_B;
+				alu_operator_o = brq_pkg_ALU_ADD;
+				if (!instr_alu[14]) begin
+					imm_b_mux_sel_o = brq_pkg_IMM_B_S;
+					alu_op_b_mux_sel_o = brq_pkg_OP_B_IMM;
+				end
+			end
+			brq_pkg_OPCODE_LOAD: begin
+				alu_op_a_mux_sel_o = brq_pkg_OP_A_REG_A;
+				alu_operator_o = brq_pkg_ALU_ADD;
+				alu_op_b_mux_sel_o = brq_pkg_OP_B_IMM;
+				imm_b_mux_sel_o = brq_pkg_IMM_B_I;
+			end
+			brq_pkg_OPCODE_LUI: begin
+				alu_op_a_mux_sel_o = brq_pkg_OP_A_IMM;
+				alu_op_b_mux_sel_o = brq_pkg_OP_B_IMM;
+				imm_a_mux_sel_o = brq_pkg_IMM_A_ZERO;
+				imm_b_mux_sel_o = brq_pkg_IMM_B_U;
+				alu_operator_o = brq_pkg_ALU_ADD;
+			end
+			brq_pkg_OPCODE_AUIPC: begin
+				alu_op_a_mux_sel_o = brq_pkg_OP_A_CURRPC;
+				alu_op_b_mux_sel_o = brq_pkg_OP_B_IMM;
+				imm_b_mux_sel_o = brq_pkg_IMM_B_U;
+				alu_operator_o = brq_pkg_ALU_ADD;
+			end
+			brq_pkg_OPCODE_OP_IMM: begin
+				alu_op_a_mux_sel_o = brq_pkg_OP_A_REG_A;
+				alu_op_b_mux_sel_o = brq_pkg_OP_B_IMM;
+				imm_b_mux_sel_o = brq_pkg_IMM_B_I;
+				case (instr_alu[14:12])
+					3'b000: alu_operator_o = brq_pkg_ALU_ADD;
+					3'b010: alu_operator_o = brq_pkg_ALU_SLT;
+					3'b011: alu_operator_o = brq_pkg_ALU_SLTU;
+					3'b100: alu_operator_o = brq_pkg_ALU_XOR;
+					3'b110: alu_operator_o = brq_pkg_ALU_OR;
+					3'b111: alu_operator_o = brq_pkg_ALU_AND;
+					3'b001:
+						if (RV32B != brq_pkg_RV32BNone)
+							case (instr_alu[31:27])
+								5'b00000: alu_operator_o = brq_pkg_ALU_SLL;
+								5'b00100: alu_operator_o = brq_pkg_ALU_SLO;
+								5'b01001: alu_operator_o = brq_pkg_ALU_SBCLR;
+								5'b00101: alu_operator_o = brq_pkg_ALU_SBSET;
+								5'b01101: alu_operator_o = brq_pkg_ALU_SBINV;
+								5'b00001:
+									if (instr_alu[26] == 0)
+										alu_operator_o = brq_pkg_ALU_SHFL;
+								5'b01100:
+									case (instr_alu[26:20])
+										7'b0000000: alu_operator_o = brq_pkg_ALU_CLZ;
+										7'b0000001: alu_operator_o = brq_pkg_ALU_CTZ;
+										7'b0000010: alu_operator_o = brq_pkg_ALU_PCNT;
+										7'b0000100: alu_operator_o = brq_pkg_ALU_SEXTB;
+										7'b0000101: alu_operator_o = brq_pkg_ALU_SEXTH;
+										7'b0010000:
+											if (RV32B == brq_pkg_RV32BFull) begin
+												alu_operator_o = brq_pkg_ALU_CRC32_B;
+												alu_multicycle_o = 1'b1;
+											end
+										7'b0010001:
+											if (RV32B == brq_pkg_RV32BFull) begin
+												alu_operator_o = brq_pkg_ALU_CRC32_H;
+												alu_multicycle_o = 1'b1;
+											end
+										7'b0010010:
+											if (RV32B == brq_pkg_RV32BFull) begin
+												alu_operator_o = brq_pkg_ALU_CRC32_W;
+												alu_multicycle_o = 1'b1;
+											end
+										7'b0011000:
+											if (RV32B == brq_pkg_RV32BFull) begin
+												alu_operator_o = brq_pkg_ALU_CRC32C_B;
+												alu_multicycle_o = 1'b1;
+											end
+										7'b0011001:
+											if (RV32B == brq_pkg_RV32BFull) begin
+												alu_operator_o = brq_pkg_ALU_CRC32C_H;
+												alu_multicycle_o = 1'b1;
+											end
+										7'b0011010:
+											if (RV32B == brq_pkg_RV32BFull) begin
+												alu_operator_o = brq_pkg_ALU_CRC32C_W;
+												alu_multicycle_o = 1'b1;
+											end
+										default:
+											;
+									endcase
+								default:
+									;
+							endcase
+						else
+							alu_operator_o = brq_pkg_ALU_SLL;
+					3'b101:
+						if (RV32B != brq_pkg_RV32BNone) begin
+							if (instr_alu[26] == 1'b1) begin
+								alu_operator_o = brq_pkg_ALU_FSR;
+								alu_multicycle_o = 1'b1;
+								if (instr_first_cycle_i)
+									use_rs3_d = 1'b1;
+								else
+									use_rs3_d = 1'b0;
+							end
+							else
+								case (instr_alu[31:27])
+									5'b00000: alu_operator_o = brq_pkg_ALU_SRL;
+									5'b01000: alu_operator_o = brq_pkg_ALU_SRA;
+									5'b00100: alu_operator_o = brq_pkg_ALU_SRO;
+									5'b01001: alu_operator_o = brq_pkg_ALU_SBEXT;
+									5'b01100: begin
+										alu_operator_o = brq_pkg_ALU_ROR;
+										alu_multicycle_o = 1'b1;
+									end
+									5'b01101: alu_operator_o = brq_pkg_ALU_GREV;
+									5'b00101: alu_operator_o = brq_pkg_ALU_GORC;
+									5'b00001:
+										if (RV32B == brq_pkg_RV32BFull)
+											if (instr_alu[26] == 1'b0)
+												alu_operator_o = brq_pkg_ALU_UNSHFL;
+									default:
+										;
+								endcase
+						end
+						else if (instr_alu[31:27] == 5'b00000)
+							alu_operator_o = brq_pkg_ALU_SRL;
+						else if (instr_alu[31:27] == 5'b01000)
+							alu_operator_o = brq_pkg_ALU_SRA;
+				endcase
+			end
+			brq_pkg_OPCODE_OP: begin
+				alu_op_a_mux_sel_o = brq_pkg_OP_A_REG_A;
+				alu_op_b_mux_sel_o = brq_pkg_OP_B_REG_B;
+				if (instr_alu[26]) begin
+					if (RV32B != brq_pkg_RV32BNone)
+						case ({instr_alu[26:25], instr_alu[14:12]})
+							5'b11001: begin
+								alu_operator_o = brq_pkg_ALU_CMIX;
+								alu_multicycle_o = 1'b1;
+								if (instr_first_cycle_i)
+									use_rs3_d = 1'b1;
+								else
+									use_rs3_d = 1'b0;
+							end
+							5'b11101: begin
+								alu_operator_o = brq_pkg_ALU_CMOV;
+								alu_multicycle_o = 1'b1;
+								if (instr_first_cycle_i)
+									use_rs3_d = 1'b1;
+								else
+									use_rs3_d = 1'b0;
+							end
+							5'b10001: begin
+								alu_operator_o = brq_pkg_ALU_FSL;
+								alu_multicycle_o = 1'b1;
+								if (instr_first_cycle_i)
+									use_rs3_d = 1'b1;
+								else
+									use_rs3_d = 1'b0;
+							end
+							5'b10101: begin
+								alu_operator_o = brq_pkg_ALU_FSR;
+								alu_multicycle_o = 1'b1;
+								if (instr_first_cycle_i)
+									use_rs3_d = 1'b1;
+								else
+									use_rs3_d = 1'b0;
+							end
+							default:
+								;
+						endcase
+				end
+				else
+					case ({instr_alu[31:25], instr_alu[14:12]})
+						10'b0000000000: alu_operator_o = brq_pkg_ALU_ADD;
+						10'b0100000000: alu_operator_o = brq_pkg_ALU_SUB;
+						10'b0000000010: alu_operator_o = brq_pkg_ALU_SLT;
+						10'b0000000011: alu_operator_o = brq_pkg_ALU_SLTU;
+						10'b0000000100: alu_operator_o = brq_pkg_ALU_XOR;
+						10'b0000000110: alu_operator_o = brq_pkg_ALU_OR;
+						10'b0000000111: alu_operator_o = brq_pkg_ALU_AND;
+						10'b0000000001: alu_operator_o = brq_pkg_ALU_SLL;
+						10'b0000000101: alu_operator_o = brq_pkg_ALU_SRL;
+						10'b0100000101: alu_operator_o = brq_pkg_ALU_SRA;
+						10'b0010000001:
+							if (RV32B != brq_pkg_RV32BNone)
+								alu_operator_o = brq_pkg_ALU_SLO;
+						10'b0010000101:
+							if (RV32B != brq_pkg_RV32BNone)
+								alu_operator_o = brq_pkg_ALU_SRO;
+						10'b0110000001:
+							if (RV32B != brq_pkg_RV32BNone) begin
+								alu_operator_o = brq_pkg_ALU_ROL;
+								alu_multicycle_o = 1'b1;
+							end
+						10'b0110000101:
+							if (RV32B != brq_pkg_RV32BNone) begin
+								alu_operator_o = brq_pkg_ALU_ROR;
+								alu_multicycle_o = 1'b1;
+							end
+						10'b0000101100:
+							if (RV32B != brq_pkg_RV32BNone)
+								alu_operator_o = brq_pkg_ALU_MIN;
+						10'b0000101101:
+							if (RV32B != brq_pkg_RV32BNone)
+								alu_operator_o = brq_pkg_ALU_MAX;
+						10'b0000101110:
+							if (RV32B != brq_pkg_RV32BNone)
+								alu_operator_o = brq_pkg_ALU_MINU;
+						10'b0000101111:
+							if (RV32B != brq_pkg_RV32BNone)
+								alu_operator_o = brq_pkg_ALU_MAXU;
+						10'b0000100100:
+							if (RV32B != brq_pkg_RV32BNone)
+								alu_operator_o = brq_pkg_ALU_PACK;
+						10'b0100100100:
+							if (RV32B != brq_pkg_RV32BNone)
+								alu_operator_o = brq_pkg_ALU_PACKU;
+						10'b0000100111:
+							if (RV32B != brq_pkg_RV32BNone)
+								alu_operator_o = brq_pkg_ALU_PACKH;
+						10'b0100000100:
+							if (RV32B != brq_pkg_RV32BNone)
+								alu_operator_o = brq_pkg_ALU_XNOR;
+						10'b0100000110:
+							if (RV32B != brq_pkg_RV32BNone)
+								alu_operator_o = brq_pkg_ALU_ORN;
+						10'b0100000111:
+							if (RV32B != brq_pkg_RV32BNone)
+								alu_operator_o = brq_pkg_ALU_ANDN;
+						10'b0100100001:
+							if (RV32B != brq_pkg_RV32BNone)
+								alu_operator_o = brq_pkg_ALU_SBCLR;
+						10'b0010100001:
+							if (RV32B != brq_pkg_RV32BNone)
+								alu_operator_o = brq_pkg_ALU_SBSET;
+						10'b0110100001:
+							if (RV32B != brq_pkg_RV32BNone)
+								alu_operator_o = brq_pkg_ALU_SBINV;
+						10'b0100100101:
+							if (RV32B != brq_pkg_RV32BNone)
+								alu_operator_o = brq_pkg_ALU_SBEXT;
+						10'b0100100111:
+							if (RV32B != brq_pkg_RV32BNone)
+								alu_operator_o = brq_pkg_ALU_BFP;
+						10'b0110100101:
+							if (RV32B != brq_pkg_RV32BNone)
+								alu_operator_o = brq_pkg_ALU_GREV;
+						10'b0010100101:
+							if (RV32B != brq_pkg_RV32BNone)
+								alu_operator_o = brq_pkg_ALU_GORC;
+						10'b0000100001:
+							if (RV32B == brq_pkg_RV32BFull)
+								alu_operator_o = brq_pkg_ALU_SHFL;
+						10'b0000100101:
+							if (RV32B == brq_pkg_RV32BFull)
+								alu_operator_o = brq_pkg_ALU_UNSHFL;
+						10'b0000101001:
+							if (RV32B == brq_pkg_RV32BFull)
+								alu_operator_o = brq_pkg_ALU_CLMUL;
+						10'b0000101010:
+							if (RV32B == brq_pkg_RV32BFull)
+								alu_operator_o = brq_pkg_ALU_CLMULR;
+						10'b0000101011:
+							if (RV32B == brq_pkg_RV32BFull)
+								alu_operator_o = brq_pkg_ALU_CLMULH;
+						10'b0100100110:
+							if (RV32B == brq_pkg_RV32BFull) begin
+								alu_operator_o = brq_pkg_ALU_BDEP;
+								alu_multicycle_o = 1'b1;
+							end
+						10'b0000100110:
+							if (RV32B == brq_pkg_RV32BFull) begin
+								alu_operator_o = brq_pkg_ALU_BEXT;
+								alu_multicycle_o = 1'b1;
+							end
+						10'b0000001000: begin
+							alu_operator_o = brq_pkg_ALU_ADD;
+							mult_sel_o = (RV32M == brq_pkg_RV32MNone ? 1'b0 : 1'b1);
+						end
+						10'b0000001001: begin
+							alu_operator_o = brq_pkg_ALU_ADD;
+							mult_sel_o = (RV32M == brq_pkg_RV32MNone ? 1'b0 : 1'b1);
+						end
+						10'b0000001010: begin
+							alu_operator_o = brq_pkg_ALU_ADD;
+							mult_sel_o = (RV32M == brq_pkg_RV32MNone ? 1'b0 : 1'b1);
+						end
+						10'b0000001011: begin
+							alu_operator_o = brq_pkg_ALU_ADD;
+							mult_sel_o = (RV32M == brq_pkg_RV32MNone ? 1'b0 : 1'b1);
+						end
+						10'b0000001100: begin
+							alu_operator_o = brq_pkg_ALU_ADD;
+							div_sel_o = (RV32M == brq_pkg_RV32MNone ? 1'b0 : 1'b1);
+						end
+						10'b0000001101: begin
+							alu_operator_o = brq_pkg_ALU_ADD;
+							div_sel_o = (RV32M == brq_pkg_RV32MNone ? 1'b0 : 1'b1);
+						end
+						10'b0000001110: begin
+							alu_operator_o = brq_pkg_ALU_ADD;
+							div_sel_o = (RV32M == brq_pkg_RV32MNone ? 1'b0 : 1'b1);
+						end
+						10'b0000001111: begin
+							alu_operator_o = brq_pkg_ALU_ADD;
+							div_sel_o = (RV32M == brq_pkg_RV32MNone ? 1'b0 : 1'b1);
+						end
+						default:
+							;
+					endcase
+			end
+			brq_pkg_OPCODE_MISC_MEM:
+				case (instr_alu[14:12])
+					3'b000: begin
+						alu_operator_o = brq_pkg_ALU_ADD;
+						alu_op_a_mux_sel_o = brq_pkg_OP_A_REG_A;
+						alu_op_b_mux_sel_o = brq_pkg_OP_B_IMM;
+					end
+					3'b001:
+						if (BranchTargetALU) begin
+							bt_a_mux_sel_o = brq_pkg_OP_A_CURRPC;
+							bt_b_mux_sel_o = brq_pkg_IMM_B_INCR_PC;
+						end
+						else begin
+							alu_op_a_mux_sel_o = brq_pkg_OP_A_CURRPC;
+							alu_op_b_mux_sel_o = brq_pkg_OP_B_IMM;
+							imm_b_mux_sel_o = brq_pkg_IMM_B_INCR_PC;
+							alu_operator_o = brq_pkg_ALU_ADD;
+						end
+					default:
+						;
+				endcase
+			brq_pkg_OPCODE_SYSTEM:
+				if (instr_alu[14:12] == 3'b000) begin
+					alu_op_a_mux_sel_o = brq_pkg_OP_A_REG_A;
+					alu_op_b_mux_sel_o = brq_pkg_OP_B_IMM;
+				end
+				else begin
+					alu_op_b_mux_sel_o = brq_pkg_OP_B_IMM;
+					imm_a_mux_sel_o = brq_pkg_IMM_A_Z;
+					imm_b_mux_sel_o = brq_pkg_IMM_B_I;
+					if (instr_alu[14])
+						alu_op_a_mux_sel_o = brq_pkg_OP_A_IMM;
+					else
+						alu_op_a_mux_sel_o = brq_pkg_OP_A_REG_A;
+				end
+			brq_pkg_OPCODE_STORE_FP: begin
+				alu_op_a_mux_sel_o = brq_pkg_OP_A_REG_A;
+				alu_op_b_mux_sel_o = brq_pkg_OP_B_REG_B;
+				alu_operator_o = brq_pkg_ALU_ADD;
+				case (instr[14:12])
+					3'b011: begin
+						imm_b_mux_sel_o = brq_pkg_IMM_B_S;
+						alu_op_b_mux_sel_o = brq_pkg_OP_B_IMM;
+					end
+					3'b010: begin
+						imm_b_mux_sel_o = brq_pkg_IMM_B_S;
+						alu_op_b_mux_sel_o = brq_pkg_OP_B_IMM;
+					end
+					default:
+						;
+				endcase
+			end
+			brq_pkg_OPCODE_LOAD_FP:
+				case (instr[14:12])
+					3'b011: begin
+						alu_op_a_mux_sel_o = brq_pkg_OP_A_REG_A;
+						alu_operator_o = brq_pkg_ALU_ADD;
+						alu_op_b_mux_sel_o = brq_pkg_OP_B_IMM;
+						imm_b_mux_sel_o = brq_pkg_IMM_B_I;
+					end
+					3'b010: begin
+						alu_op_a_mux_sel_o = brq_pkg_OP_A_REG_A;
+						alu_operator_o = brq_pkg_ALU_ADD;
+						alu_op_b_mux_sel_o = brq_pkg_OP_B_IMM;
+						imm_b_mux_sel_o = brq_pkg_IMM_B_I;
+					end
+					default:
+						;
+				endcase
+			brq_pkg_OPCODE_MADD_FP:
+				case (instr[26:25])
+					1: begin
+						fp_alu_operator_o = fpnew_pkg_FMADD;
+						fp_alu_op_mod_o = 1'b0;
+					end
+					0: begin
+						fp_alu_operator_o = fpnew_pkg_FMADD;
+						fp_alu_op_mod_o = 1'b0;
+					end
+					default:
+						;
+				endcase
+			brq_pkg_OPCODE_MSUB_FP:
+				case (instr[26:25])
+					1: begin
+						fp_alu_operator_o = fpnew_pkg_FMADD;
+						fp_alu_op_mod_o = 1'b1;
+					end
+					0: begin
+						fp_alu_operator_o = fpnew_pkg_FMADD;
+						fp_alu_op_mod_o = 1'b1;
+					end
+					default:
+						;
+				endcase
+			brq_pkg_OPCODE_NMSUB_FP:
+				case (instr[26:25])
+					1: fp_alu_operator_o = fpnew_pkg_FNMSUB;
+					0: fp_alu_operator_o = fpnew_pkg_FNMSUB;
+					default:
+						;
+				endcase
+			brq_pkg_OPCODE_NMADD_FP:
+				case (instr[26:25])
+					1: begin
+						fp_alu_operator_o = fpnew_pkg_FNMSUB;
+						fp_alu_op_mod_o = 1'b1;
+					end
+					0: begin
+						fp_alu_operator_o = fpnew_pkg_FNMSUB;
+						fp_alu_op_mod_o = 1'b1;
+					end
+					default:
+						;
+				endcase
+			brq_pkg_OPCODE_OP_FP:
+				case (instr[31:25])
+					7'b0000001: fp_alu_operator_o = fpnew_pkg_ADD;
+					7'b0000101: begin
+						fp_alu_operator_o = fpnew_pkg_ADD;
+						fp_alu_op_mod_o = 1'b1;
+					end
+					7'b0001001: fp_alu_operator_o = fpnew_pkg_MUL;
+					7'b0001101: fp_alu_operator_o = fpnew_pkg_DIV;
+					7'b0000000: fp_alu_operator_o = fpnew_pkg_ADD;
+					7'b0000100: begin
+						fp_alu_operator_o = fpnew_pkg_ADD;
+						fp_alu_op_mod_o = 1'b1;
+					end
+					7'b0001000: fp_alu_operator_o = fpnew_pkg_MUL;
+					7'b0001100: fp_alu_operator_o = fpnew_pkg_DIV;
+					7'b0101101:
+						if (~|instr[24:20])
+							fp_alu_operator_o = fpnew_pkg_SQRT;
+					7'b0101100:
+						if (~|instr[24:20])
+							fp_alu_operator_o = fpnew_pkg_SQRT;
+					7'b0010001:
+						if (~(instr[14] | &instr[13:12]))
+							fp_alu_operator_o = fpnew_pkg_SGNJ;
+					7'b0010000:
+						if (~(instr[14] | &instr[13:12]))
+							fp_alu_operator_o = fpnew_pkg_SGNJ;
+					7'b0010101:
+						if (~|instr[14:13])
+							fp_alu_operator_o = fpnew_pkg_MINMAX;
+					7'b0010100:
+						if (~|instr[14:13])
+							fp_alu_operator_o = fpnew_pkg_MINMAX;
+					7'b0100000:
+						if (~(|instr[24:21] | ~instr[20]))
+							fp_alu_operator_o = fpnew_pkg_F2F;
+					7'b1100000:
+						if (~|instr[24:21]) begin
+							fp_alu_operator_o = fpnew_pkg_F2I;
+							if (instr[20])
+								fp_alu_op_mod_o = 1'b1;
+						end
+					7'b0100001:
+						if (~|instr[24:20])
+							fp_alu_operator_o = fpnew_pkg_F2F;
+					7'b1110000:
+						case ({instr[24:20], instr[14:12]})
+							6'b000001: fp_alu_operator_o = fpnew_pkg_CLASSIFY;
+							default:
+								;
+						endcase
+					7'b1010001:
+						if (~instr[14] | &instr[13:12])
+							fp_alu_operator_o = fpnew_pkg_CMP;
+					7'b1010000:
+						if (~instr[14] | &instr[13:12])
+							fp_alu_operator_o = fpnew_pkg_CMP;
+					7'b1110001:
+						case ({instr[24:20], instr[14:12]})
+							6'b000001: fp_alu_operator_o = fpnew_pkg_CLASSIFY;
+							default:
+								;
+						endcase
+					7'b1100001:
+						if (~|instr[24:21]) begin
+							fp_alu_operator_o = fpnew_pkg_F2I;
+							if (instr[20])
+								fp_alu_op_mod_o = 1'b1;
+						end
+					7'b1101000:
+						if (~(|instr[24:21])) begin
+							fp_alu_operator_o = fpnew_pkg_I2F;
+							if (instr[20])
+								fp_alu_op_mod_o = 1'b1;
+						end
+					7'b1111001:
+						if (~|instr[24:21]) begin
+							fp_alu_operator_o = fpnew_pkg_I2F;
+							if (instr[20])
+								fp_alu_op_mod_o = 1'b1;
+						end
+					default:
+						;
+				endcase
+			default:
+				;
+		endcase
+	end
+	assign mult_en_o = (illegal_insn ? 1'b0 : mult_sel_o);
+	assign div_en_o = (illegal_insn ? 1'b0 : div_sel_o);
+	assign illegal_insn_o = illegal_insn | illegal_reg_rv32e;
+	assign rf_we_o = rf_we & ~illegal_reg_rv32e;
+endmodule
+module brq_idu (
+	clk_i,
+	rst_ni,
+	ctrl_busy_o,
+	illegal_insn_o,
+	instr_valid_i,
+	instr_rdata_i,
+	instr_rdata_alu_i,
+	instr_rdata_c_i,
+	instr_is_compressed_i,
+	instr_req_o,
+	instr_first_cycle_id_o,
+	instr_valid_clear_o,
+	id_in_ready_o,
+	icache_inval_o,
+	branch_decision_i,
+	pc_set_o,
+	pc_set_spec_o,
+	pc_mux_o,
+	exc_pc_mux_o,
+	exc_cause_o,
+	illegal_c_insn_i,
+	instr_fetch_err_i,
+	instr_fetch_err_plus2_i,
+	pc_id_i,
+	ex_valid_i,
+	lsu_resp_valid_i,
+	alu_operator_ex_o,
+	alu_operand_a_ex_o,
+	alu_operand_b_ex_o,
+	imd_val_we_ex_i,
+	imd_val_d_ex_i,
+	imd_val_q_ex_o,
+	bt_a_operand_o,
+	bt_b_operand_o,
+	mult_en_ex_o,
+	div_en_ex_o,
+	mult_sel_ex_o,
+	div_sel_ex_o,
+	multdiv_operator_ex_o,
+	multdiv_signed_mode_ex_o,
+	multdiv_operand_a_ex_o,
+	multdiv_operand_b_ex_o,
+	multdiv_ready_id_o,
+	csr_access_o,
+	csr_op_o,
+	csr_op_en_o,
+	csr_save_if_o,
+	csr_save_id_o,
+	csr_save_wb_o,
+	csr_restore_mret_id_o,
+	csr_restore_dret_id_o,
+	csr_save_cause_o,
+	csr_mtval_o,
+	priv_mode_i,
+	csr_mstatus_tw_i,
+	illegal_csr_insn_i,
+	data_ind_timing_i,
+	lsu_req_o,
+	lsu_we_o,
+	lsu_type_o,
+	lsu_sign_ext_o,
+	lsu_wdata_o,
+	lsu_req_done_i,
+	lsu_addr_incr_req_i,
+	lsu_addr_last_i,
+	csr_mstatus_mie_i,
+	irq_pending_i,
+	irqs_i,
+	irq_nm_i,
+	nmi_mode_o,
+	lsu_load_err_i,
+	lsu_store_err_i,
+	debug_mode_o,
+	debug_cause_o,
+	debug_csr_save_o,
+	debug_req_i,
+	debug_single_step_i,
+	debug_ebreakm_i,
+	debug_ebreaku_i,
+	trigger_match_i,
+	result_ex_i,
+	csr_rdata_i,
+	rf_raddr_a_o,
+	rf_rdata_a_i,
+	rf_raddr_b_o,
+	rf_rdata_b_i,
+	rf_ren_a_o,
+	rf_ren_b_o,
+	rf_waddr_id_o,
+	rf_wdata_id_o,
+	rf_we_id_o,
+	rf_rd_a_wb_match_o,
+	rf_rd_b_wb_match_o,
+	rf_waddr_wb_i,
+	rf_wdata_fwd_wb_i,
+	rf_write_wb_i,
+	en_wb_o,
+	instr_type_wb_o,
+	instr_perf_count_id_o,
+	ready_wb_i,
+	outstanding_load_wb_i,
+	outstanding_store_wb_i,
+	perf_jump_o,
+	perf_branch_o,
+	perf_tbranch_o,
+	perf_dside_wait_o,
+	perf_mul_wait_o,
+	perf_div_wait_o,
+	instr_id_done_o,
+	fp_rounding_mode_o,
+	fp_rf_rdata_a_i,
+	fp_rf_rdata_b_i,
+	fp_rf_rdata_c_i,
+	fp_rf_raddr_a_o,
+	fp_rf_raddr_b_o,
+	fp_rf_raddr_c_o,
+	fp_rf_waddr_o,
+	fp_rf_we_o,
+	fp_alu_operator_o,
+	fp_alu_op_mod_o,
+	fp_src_fmt_o,
+	fp_dst_fmt_o,
+	fp_rm_dynamic_o,
+	fp_flush_o,
+	is_fp_instr_o,
+	use_fp_rs1_o,
+	use_fp_rs2_o,
+	use_fp_rs3_o,
+	use_fp_rd_o,
+	fpu_busy_i,
+	fp_rf_write_wb_i,
+	fp_rf_wdata_fwd_wb_i,
+	fp_operands_o,
+	fp_load_o
+);
+	parameter [0:0] RV32E = 0;
+	localparam integer brq_pkg_RV32MFast = 2;
+	parameter integer RV32M = brq_pkg_RV32MFast;
+	localparam integer brq_pkg_RV32BNone = 0;
+	parameter integer RV32B = brq_pkg_RV32BNone;
+	localparam integer brq_pkg_RV64FDouble = 2;
+	parameter integer RVF = brq_pkg_RV64FDouble;
+	parameter [0:0] DataIndTiming = 1'b0;
+	parameter [0:0] BranchTargetALU = 0;
+	parameter [0:0] SpecBranch = 0;
+	parameter [0:0] WritebackStage = 0;
+	parameter [0:0] BranchPredictor = 0;
+	input wire clk_i;
+	input wire rst_ni;
+	output wire ctrl_busy_o;
+	output wire illegal_insn_o;
+	input wire instr_valid_i;
+	input wire [31:0] instr_rdata_i;
+	input wire [31:0] instr_rdata_alu_i;
+	input wire [15:0] instr_rdata_c_i;
+	input wire instr_is_compressed_i;
+	output wire instr_req_o;
+	output wire instr_first_cycle_id_o;
+	output wire instr_valid_clear_o;
+	output wire id_in_ready_o;
+	output wire icache_inval_o;
+	input wire branch_decision_i;
+	output wire pc_set_o;
+	output wire pc_set_spec_o;
+	output wire [2:0] pc_mux_o;
+	output wire [1:0] exc_pc_mux_o;
+	output wire [5:0] exc_cause_o;
+	input wire illegal_c_insn_i;
+	input wire instr_fetch_err_i;
+	input wire instr_fetch_err_plus2_i;
+	input wire [31:0] pc_id_i;
+	input wire ex_valid_i;
+	input wire lsu_resp_valid_i;
+	output wire [5:0] alu_operator_ex_o;
+	output wire [31:0] alu_operand_a_ex_o;
+	output wire [31:0] alu_operand_b_ex_o;
+	input wire [1:0] imd_val_we_ex_i;
+	input wire [67:0] imd_val_d_ex_i;
+	output wire [67:0] imd_val_q_ex_o;
+	output reg [31:0] bt_a_operand_o;
+	output reg [31:0] bt_b_operand_o;
+	output wire mult_en_ex_o;
+	output wire div_en_ex_o;
+	output wire mult_sel_ex_o;
+	output wire div_sel_ex_o;
+	output wire [1:0] multdiv_operator_ex_o;
+	output wire [1:0] multdiv_signed_mode_ex_o;
+	output wire [31:0] multdiv_operand_a_ex_o;
+	output wire [31:0] multdiv_operand_b_ex_o;
+	output wire multdiv_ready_id_o;
+	output wire csr_access_o;
+	output wire [1:0] csr_op_o;
+	output wire csr_op_en_o;
+	output wire csr_save_if_o;
+	output wire csr_save_id_o;
+	output wire csr_save_wb_o;
+	output wire csr_restore_mret_id_o;
+	output wire csr_restore_dret_id_o;
+	output wire csr_save_cause_o;
+	output wire [31:0] csr_mtval_o;
+	input wire [1:0] priv_mode_i;
+	input wire csr_mstatus_tw_i;
+	input wire illegal_csr_insn_i;
+	input wire data_ind_timing_i;
+	output wire lsu_req_o;
+	output wire lsu_we_o;
+	output wire [1:0] lsu_type_o;
+	output wire lsu_sign_ext_o;
+	output wire [31:0] lsu_wdata_o;
+	input wire lsu_req_done_i;
+	input wire lsu_addr_incr_req_i;
+	input wire [31:0] lsu_addr_last_i;
+	input wire csr_mstatus_mie_i;
+	input wire irq_pending_i;
+	input wire [17:0] irqs_i;
+	input wire irq_nm_i;
+	output wire nmi_mode_o;
+	input wire lsu_load_err_i;
+	input wire lsu_store_err_i;
+	output wire debug_mode_o;
+	output wire [2:0] debug_cause_o;
+	output wire debug_csr_save_o;
+	input wire debug_req_i;
+	input wire debug_single_step_i;
+	input wire debug_ebreakm_i;
+	input wire debug_ebreaku_i;
+	input wire trigger_match_i;
+	input wire [31:0] result_ex_i;
+	input wire [31:0] csr_rdata_i;
+	output wire [4:0] rf_raddr_a_o;
+	input wire [31:0] rf_rdata_a_i;
+	output wire [4:0] rf_raddr_b_o;
+	input wire [31:0] rf_rdata_b_i;
+	output wire rf_ren_a_o;
+	output wire rf_ren_b_o;
+	output wire [4:0] rf_waddr_id_o;
+	output reg [31:0] rf_wdata_id_o;
+	output wire rf_we_id_o;
+	output wire rf_rd_a_wb_match_o;
+	output wire rf_rd_b_wb_match_o;
+	input wire [4:0] rf_waddr_wb_i;
+	input wire [31:0] rf_wdata_fwd_wb_i;
+	input wire rf_write_wb_i;
+	output wire en_wb_o;
+	output wire [1:0] instr_type_wb_o;
+	output wire instr_perf_count_id_o;
+	input wire ready_wb_i;
+	input wire outstanding_load_wb_i;
+	input wire outstanding_store_wb_i;
+	output wire perf_jump_o;
+	output reg perf_branch_o;
+	output wire perf_tbranch_o;
+	output wire perf_dside_wait_o;
+	output wire perf_mul_wait_o;
+	output wire perf_div_wait_o;
+	output wire instr_id_done_o;
+	output wire [2:0] fp_rounding_mode_o;
+	input wire [31:0] fp_rf_rdata_a_i;
+	input wire [31:0] fp_rf_rdata_b_i;
+	input wire [31:0] fp_rf_rdata_c_i;
+	output wire [4:0] fp_rf_raddr_a_o;
+	output wire [4:0] fp_rf_raddr_b_o;
+	output wire [4:0] fp_rf_raddr_c_o;
+	output wire [4:0] fp_rf_waddr_o;
+	output wire fp_rf_we_o;
+	localparam [31:0] fpnew_pkg_OP_BITS = 4;
+	output wire [3:0] fp_alu_operator_o;
+	output wire fp_alu_op_mod_o;
+	localparam [31:0] fpnew_pkg_NUM_FP_FORMATS = 4;
+	localparam [31:0] fpnew_pkg_FP_FORMAT_BITS = 2;
+	output wire [1:0] fp_src_fmt_o;
+	output wire [1:0] fp_dst_fmt_o;
+	output wire fp_rm_dynamic_o;
+	output wire fp_flush_o;
+	output wire is_fp_instr_o;
+	output wire use_fp_rs1_o;
+	output wire use_fp_rs2_o;
+	output wire use_fp_rs3_o;
+	output wire use_fp_rd_o;
+	input wire fpu_busy_i;
+	input wire fp_rf_write_wb_i;
+	input wire [31:0] fp_rf_wdata_fwd_wb_i;
+	output reg [95:0] fp_operands_o;
+	output wire fp_load_o;
+	wire illegal_insn_dec;
+	wire ebrk_insn;
+	wire mret_insn_dec;
+	wire dret_insn_dec;
+	wire ecall_insn_dec;
+	wire wfi_insn_dec;
+	wire wb_exception;
+	wire branch_in_dec;
+	reg branch_spec;
+	wire branch_set_spec;
+	wire branch_set;
+	reg branch_set_d;
+	reg branch_not_set;
+	wire branch_taken;
+	wire jump_in_dec;
+	wire jump_set_dec;
+	reg jump_set;
+	wire instr_first_cycle;
+	wire instr_executing;
+	wire instr_done;
+	wire controller_run;
+	wire stall_ld_hz;
+	wire stall_mem;
+	reg stall_multdiv;
+	reg stall_branch;
+	reg stall_jump;
+	wire stall_id;
+	wire stall_wb;
+	wire flush_id;
+	wire multicycle_done;
+	wire [31:0] imm_i_type;
+	wire [31:0] imm_s_type;
+	wire [31:0] imm_b_type;
+	wire [31:0] imm_u_type;
+	wire [31:0] imm_j_type;
+	wire [31:0] zimm_rs1_type;
+	wire [31:0] imm_a;
+	reg [31:0] imm_b;
+	wire rf_wdata_sel;
+	wire rf_we_dec;
+	reg rf_we_raw;
+	wire rf_ren_a;
+	wire rf_ren_b;
+	assign rf_ren_a_o = rf_ren_a;
+	assign rf_ren_b_o = rf_ren_b;
+	wire [31:0] rf_rdata_a_fwd;
+	wire [31:0] rf_rdata_b_fwd;
+	wire [5:0] alu_operator;
+	wire [1:0] alu_op_a_mux_sel;
+	wire [1:0] alu_op_a_mux_sel_dec;
+	wire alu_op_b_mux_sel;
+	wire alu_op_b_mux_sel_dec;
+	wire alu_multicycle_dec;
+	reg stall_alu;
+	reg [67:0] imd_val_q;
+	wire [1:0] bt_a_mux_sel;
+	wire [2:0] bt_b_mux_sel;
+	wire imm_a_mux_sel;
+	wire [2:0] imm_b_mux_sel;
+	wire [2:0] imm_b_mux_sel_dec;
+	wire mult_en_id;
+	wire mult_en_dec;
+	wire div_en_id;
+	wire div_en_dec;
+	wire multdiv_en_dec;
+	wire [1:0] multdiv_operator;
+	wire [1:0] multdiv_signed_mode;
+	wire lsu_we;
+	wire [1:0] lsu_type;
+	wire lsu_sign_ext;
+	wire lsu_req;
+	wire lsu_req_dec;
+	wire data_req_allowed;
+	reg csr_pipe_flush;
+	reg [31:0] alu_operand_a;
+	wire [31:0] alu_operand_b;
+	wire fp_swap_oprnds;
+	wire [31:0] fp_rf_rdata_a_fwd;
+	wire [31:0] fp_rf_rdata_b_fwd;
+	wire [31:0] fp_rf_rdata_c_fwd;
+	wire [31:0] temp;
+	reg [31:0] fpu_op_a;
+	reg [31:0] fpu_op_b;
+	reg [31:0] fpu_op_c;
+	wire mv_instr;
+	wire [31:0] result_wb;
+	localparam [1:0] brq_pkg_OP_A_FWD = 1;
+	assign alu_op_a_mux_sel = (lsu_addr_incr_req_i ? brq_pkg_OP_A_FWD : alu_op_a_mux_sel_dec);
+	localparam [0:0] brq_pkg_OP_B_IMM = 1;
+	assign alu_op_b_mux_sel = (lsu_addr_incr_req_i ? brq_pkg_OP_B_IMM : alu_op_b_mux_sel_dec);
+	localparam [2:0] brq_pkg_IMM_B_INCR_ADDR = 6;
+	assign imm_b_mux_sel = (lsu_addr_incr_req_i ? brq_pkg_IMM_B_INCR_ADDR : imm_b_mux_sel_dec);
+	localparam [0:0] brq_pkg_IMM_A_Z = 0;
+	assign imm_a = (imm_a_mux_sel == brq_pkg_IMM_A_Z ? zimm_rs1_type : {32 {1'sb0}});
+	localparam [1:0] brq_pkg_OP_A_CURRPC = 2;
+	localparam [1:0] brq_pkg_OP_A_IMM = 3;
+	localparam [1:0] brq_pkg_OP_A_REG_A = 0;
+	always @(*) begin : alu_operand_a_mux
+		case (alu_op_a_mux_sel)
+			brq_pkg_OP_A_REG_A: alu_operand_a = rf_rdata_a_fwd;
+			brq_pkg_OP_A_FWD: alu_operand_a = lsu_addr_last_i;
+			brq_pkg_OP_A_CURRPC: alu_operand_a = pc_id_i;
+			brq_pkg_OP_A_IMM: alu_operand_a = imm_a;
+		endcase
+	end
+	localparam [2:0] brq_pkg_IMM_B_B = 2;
+	localparam [2:0] brq_pkg_IMM_B_I = 0;
+	localparam [2:0] brq_pkg_IMM_B_INCR_PC = 5;
+	localparam [2:0] brq_pkg_IMM_B_J = 4;
+	localparam [2:0] brq_pkg_IMM_B_S = 1;
+	localparam [2:0] brq_pkg_IMM_B_U = 3;
+	generate
+		if (BranchTargetALU) begin : g_btalu_muxes
+			always @(*) begin : bt_operand_a_mux
+				case (bt_a_mux_sel)
+					brq_pkg_OP_A_REG_A: bt_a_operand_o = rf_rdata_a_fwd;
+					brq_pkg_OP_A_CURRPC: bt_a_operand_o = pc_id_i;
+					default: bt_a_operand_o = pc_id_i;
+				endcase
+			end
+			always @(*) begin : bt_immediate_b_mux
+				case (bt_b_mux_sel)
+					brq_pkg_IMM_B_I: bt_b_operand_o = imm_i_type;
+					brq_pkg_IMM_B_B: bt_b_operand_o = imm_b_type;
+					brq_pkg_IMM_B_J: bt_b_operand_o = imm_j_type;
+					brq_pkg_IMM_B_INCR_PC: bt_b_operand_o = (instr_is_compressed_i ? 32'h00000002 : 32'h00000004);
+					default: bt_b_operand_o = (instr_is_compressed_i ? 32'h00000002 : 32'h00000004);
+				endcase
+			end
+			always @(*) begin : immediate_b_mux
+				case (imm_b_mux_sel)
+					brq_pkg_IMM_B_I: imm_b = imm_i_type;
+					brq_pkg_IMM_B_S: imm_b = imm_s_type;
+					brq_pkg_IMM_B_U: imm_b = imm_u_type;
+					brq_pkg_IMM_B_INCR_PC: imm_b = (instr_is_compressed_i ? 32'h00000002 : 32'h00000004);
+					brq_pkg_IMM_B_INCR_ADDR: imm_b = 32'h00000004;
+					default: imm_b = 32'h00000004;
+				endcase
+			end
+		end
+		else begin : g_nobtalu
+			wire [1:0] unused_a_mux_sel;
+			wire [2:0] unused_b_mux_sel;
+			assign unused_a_mux_sel = bt_a_mux_sel;
+			assign unused_b_mux_sel = bt_b_mux_sel;
+			wire [32:1] sv2v_tmp_456A8;
+			assign sv2v_tmp_456A8 = {32 {1'sb0}};
+			always @(*) bt_a_operand_o = sv2v_tmp_456A8;
+			wire [32:1] sv2v_tmp_EDBFD;
+			assign sv2v_tmp_EDBFD = {32 {1'sb0}};
+			always @(*) bt_b_operand_o = sv2v_tmp_EDBFD;
+			always @(*) begin : immediate_b_mux
+				case (imm_b_mux_sel)
+					brq_pkg_IMM_B_I: imm_b = imm_i_type;
+					brq_pkg_IMM_B_S: imm_b = imm_s_type;
+					brq_pkg_IMM_B_B: imm_b = imm_b_type;
+					brq_pkg_IMM_B_U: imm_b = imm_u_type;
+					brq_pkg_IMM_B_J: imm_b = imm_j_type;
+					brq_pkg_IMM_B_INCR_PC: imm_b = (instr_is_compressed_i ? 32'h00000002 : 32'h00000004);
+					brq_pkg_IMM_B_INCR_ADDR: imm_b = 32'h00000004;
+					default: imm_b = 32'h00000004;
+				endcase
+			end
+		end
+	endgenerate
+	assign alu_operand_b = (alu_op_b_mux_sel == brq_pkg_OP_B_IMM ? imm_b : rf_rdata_b_fwd);
+	generate
+		genvar i;
+		for (i = 0; i < 2; i = i + 1) begin : gen_intermediate_val_reg
+			always @(posedge clk_i or negedge rst_ni) begin : intermediate_val_reg
+				if (!rst_ni)
+					imd_val_q[(1 - i) * 34+:34] <= {34 {1'sb0}};
+				else if (imd_val_we_ex_i[i])
+					imd_val_q[(1 - i) * 34+:34] <= imd_val_d_ex_i[(1 - i) * 34+:34];
+			end
+		end
+	endgenerate
+	assign imd_val_q_ex_o = imd_val_q;
+	brq_idu_decoder #(
+		.RV32E(RV32E),
+		.RV32M(RV32M),
+		.RV32B(RV32B),
+		.BranchTargetALU(BranchTargetALU)
+	) decoder_i(
+		.clk_i(clk_i),
+		.rst_ni(rst_ni),
+		.illegal_insn_o(illegal_insn_dec),
+		.ebrk_insn_o(ebrk_insn),
+		.mret_insn_o(mret_insn_dec),
+		.dret_insn_o(dret_insn_dec),
+		.ecall_insn_o(ecall_insn_dec),
+		.wfi_insn_o(wfi_insn_dec),
+		.jump_set_o(jump_set_dec),
+		.branch_taken_i(branch_taken),
+		.icache_inval_o(icache_inval_o),
+		.instr_first_cycle_i(instr_first_cycle),
+		.instr_rdata_i(instr_rdata_i),
+		.instr_rdata_alu_i(instr_rdata_alu_i),
+		.illegal_c_insn_i(illegal_c_insn_i),
+		.imm_a_mux_sel_o(imm_a_mux_sel),
+		.imm_b_mux_sel_o(imm_b_mux_sel_dec),
+		.bt_a_mux_sel_o(bt_a_mux_sel),
+		.bt_b_mux_sel_o(bt_b_mux_sel),
+		.imm_i_type_o(imm_i_type),
+		.imm_s_type_o(imm_s_type),
+		.imm_b_type_o(imm_b_type),
+		.imm_u_type_o(imm_u_type),
+		.imm_j_type_o(imm_j_type),
+		.zimm_rs1_type_o(zimm_rs1_type),
+		.rf_wdata_sel_o(rf_wdata_sel),
+		.rf_we_o(rf_we_dec),
+		.rf_raddr_a_o(rf_raddr_a_o),
+		.rf_raddr_b_o(rf_raddr_b_o),
+		.rf_waddr_o(rf_waddr_id_o),
+		.rf_ren_a_o(rf_ren_a),
+		.rf_ren_b_o(rf_ren_b),
+		.alu_operator_o(alu_operator),
+		.alu_op_a_mux_sel_o(alu_op_a_mux_sel_dec),
+		.alu_op_b_mux_sel_o(alu_op_b_mux_sel_dec),
+		.alu_multicycle_o(alu_multicycle_dec),
+		.mult_en_o(mult_en_dec),
+		.div_en_o(div_en_dec),
+		.mult_sel_o(mult_sel_ex_o),
+		.div_sel_o(div_sel_ex_o),
+		.multdiv_operator_o(multdiv_operator),
+		.multdiv_signed_mode_o(multdiv_signed_mode),
+		.csr_access_o(csr_access_o),
+		.csr_op_o(csr_op_o),
+		.data_req_o(lsu_req_dec),
+		.data_we_o(lsu_we),
+		.data_type_o(lsu_type),
+		.data_sign_extension_o(lsu_sign_ext),
+		.jump_in_dec_o(jump_in_dec),
+		.branch_in_dec_o(branch_in_dec),
+		.fp_rounding_mode_o(fp_rounding_mode_o),
+		.fp_rf_raddr_a_o(fp_rf_raddr_a_o),
+		.fp_rf_raddr_b_o(fp_rf_raddr_b_o),
+		.fp_rf_raddr_c_o(fp_rf_raddr_c_o),
+		.fp_rf_waddr_o(fp_rf_waddr_o),
+		.fp_rf_we_o(fp_rf_we_o),
+		.fp_alu_operator_o(fp_alu_operator_o),
+		.fp_alu_op_mod_o(fp_alu_op_mod_o),
+		.fp_src_fmt_o(fp_src_fmt_o),
+		.fp_dst_fmt_o(fp_dst_fmt_o),
+		.fp_rm_dynamic_o(fp_rm_dynamic_o),
+		.is_fp_instr_o(is_fp_instr_o),
+		.use_fp_rs1_o(use_fp_rs1_o),
+		.use_fp_rs2_o(use_fp_rs2_o),
+		.use_fp_rs3_o(use_fp_rs3_o),
+		.use_fp_rd_o(use_fp_rd_o),
+		.fp_swap_oprnds_o(fp_swap_oprnds),
+		.fp_load_o(fp_load_o),
+		.mv_instr_o(mv_instr)
+	);
+	assign rf_we_id_o = (rf_we_raw & instr_executing) & ~illegal_csr_insn_i;
+	localparam [0:0] brq_pkg_RF_WD_CSR = 1;
+	localparam [0:0] brq_pkg_RF_WD_EX = 0;
+	always @(*) begin : rf_wdata_id_mux
+		case (rf_wdata_sel)
+			brq_pkg_RF_WD_EX: rf_wdata_id_o = result_wb;
+			brq_pkg_RF_WD_CSR: rf_wdata_id_o = csr_rdata_i;
+		endcase
+	end
+	localparam [11:0] brq_pkg_CSR_DCSR = 12'h7b0;
+	localparam [11:0] brq_pkg_CSR_DPC = 12'h7b1;
+	localparam [11:0] brq_pkg_CSR_DSCRATCH0 = 12'h7b2;
+	localparam [11:0] brq_pkg_CSR_DSCRATCH1 = 12'h7b3;
+	localparam [11:0] brq_pkg_CSR_MIE = 12'h304;
+	localparam [11:0] brq_pkg_CSR_MSTATUS = 12'h300;
+	localparam [1:0] brq_pkg_CSR_OP_READ = 0;
+	localparam [1:0] brq_pkg_CSR_OP_SET = 2;
+	localparam [1:0] brq_pkg_CSR_OP_WRITE = 1;
+	always @(*) begin : csr_pipeline_flushes
+		csr_pipe_flush = 1'b0;
+		if ((csr_op_en_o == 1'b1) && ((csr_op_o == brq_pkg_CSR_OP_WRITE) || (csr_op_o == brq_pkg_CSR_OP_SET))) begin
+			if ((instr_rdata_i[31:20] == brq_pkg_CSR_MSTATUS) || (instr_rdata_i[31:20] == brq_pkg_CSR_MIE))
+				csr_pipe_flush = 1'b1;
+		end
+		else if ((csr_op_en_o == 1'b1) && (csr_op_o != brq_pkg_CSR_OP_READ))
+			if ((((instr_rdata_i[31:20] == brq_pkg_CSR_DCSR) || (instr_rdata_i[31:20] == brq_pkg_CSR_DPC)) || (instr_rdata_i[31:20] == brq_pkg_CSR_DSCRATCH0)) || (instr_rdata_i[31:20] == brq_pkg_CSR_DSCRATCH1))
+				csr_pipe_flush = 1'b1;
+	end
+	assign illegal_insn_o = instr_valid_i & (illegal_insn_dec | illegal_csr_insn_i);
+	brq_idu_controller #(
+		.WritebackStage(WritebackStage),
+		.BranchPredictor(BranchPredictor)
+	) controller_i(
+		.clk_i(clk_i),
+		.rst_ni(rst_ni),
+		.ctrl_busy_o(ctrl_busy_o),
+		.illegal_insn_i(illegal_insn_o),
+		.ecall_insn_i(ecall_insn_dec),
+		.mret_insn_i(mret_insn_dec),
+		.dret_insn_i(dret_insn_dec),
+		.wfi_insn_i(wfi_insn_dec),
+		.ebrk_insn_i(ebrk_insn),
+		.csr_pipe_flush_i(csr_pipe_flush),
+		.instr_valid_i(instr_valid_i),
+		.instr_i(instr_rdata_i),
+		.instr_compressed_i(instr_rdata_c_i),
+		.instr_is_compressed_i(instr_is_compressed_i),
+		.instr_fetch_err_i(instr_fetch_err_i),
+		.instr_fetch_err_plus2_i(instr_fetch_err_plus2_i),
+		.pc_id_i(pc_id_i),
+		.instr_valid_clear_o(instr_valid_clear_o),
+		.id_in_ready_o(id_in_ready_o),
+		.controller_run_o(controller_run),
+		.instr_req_o(instr_req_o),
+		.pc_set_o(pc_set_o),
+		.pc_set_spec_o(pc_set_spec_o),
+		.pc_mux_o(pc_mux_o),
+		.exc_pc_mux_o(exc_pc_mux_o),
+		.exc_cause_o(exc_cause_o),
+		.lsu_addr_last_i(lsu_addr_last_i),
+		.load_err_i(lsu_load_err_i),
+		.store_err_i(lsu_store_err_i),
+		.wb_exception_o(wb_exception),
+		.branch_set_i(branch_set),
+		.branch_set_spec_i(branch_set_spec),
+		.jump_set_i(jump_set),
+		.csr_mstatus_mie_i(csr_mstatus_mie_i),
+		.irq_pending_i(irq_pending_i),
+		.irqs_i(irqs_i),
+		.irq_nm_i(irq_nm_i),
+		.nmi_mode_o(nmi_mode_o),
+		.csr_save_if_o(csr_save_if_o),
+		.csr_save_id_o(csr_save_id_o),
+		.csr_save_wb_o(csr_save_wb_o),
+		.csr_restore_mret_id_o(csr_restore_mret_id_o),
+		.csr_restore_dret_id_o(csr_restore_dret_id_o),
+		.csr_save_cause_o(csr_save_cause_o),
+		.csr_mtval_o(csr_mtval_o),
+		.priv_mode_i(priv_mode_i),
+		.csr_mstatus_tw_i(csr_mstatus_tw_i),
+		.debug_mode_o(debug_mode_o),
+		.debug_cause_o(debug_cause_o),
+		.debug_csr_save_o(debug_csr_save_o),
+		.debug_req_i(debug_req_i),
+		.debug_single_step_i(debug_single_step_i),
+		.debug_ebreakm_i(debug_ebreakm_i),
+		.debug_ebreaku_i(debug_ebreaku_i),
+		.trigger_match_i(trigger_match_i),
+		.stall_id_i(stall_id),
+		.stall_wb_i(stall_wb),
+		.flush_id_o(flush_id),
+		.ready_wb_i(ready_wb_i),
+		.perf_jump_o(perf_jump_o),
+		.perf_tbranch_o(perf_tbranch_o),
+		.fpu_busy_i(fpu_busy_i)
+	);
+	assign fp_flush_o = flush_id;
+	assign multdiv_en_dec = mult_en_dec | div_en_dec;
+	assign lsu_req = (instr_executing ? data_req_allowed & lsu_req_dec : 1'b0);
+	assign mult_en_id = (instr_executing ? mult_en_dec : 1'b0);
+	assign div_en_id = (instr_executing ? div_en_dec : 1'b0);
+	assign lsu_req_o = lsu_req;
+	assign lsu_we_o = lsu_we;
+	assign lsu_type_o = lsu_type;
+	assign lsu_sign_ext_o = lsu_sign_ext;
+	assign lsu_wdata_o = fpu_op_b;
+	assign csr_op_en_o = (csr_access_o & instr_executing) & instr_id_done_o;
+	assign alu_operator_ex_o = alu_operator;
+	assign alu_operand_a_ex_o = alu_operand_a;
+	assign alu_operand_b_ex_o = alu_operand_b;
+	assign mult_en_ex_o = mult_en_id;
+	assign div_en_ex_o = div_en_id;
+	assign multdiv_operator_ex_o = multdiv_operator;
+	assign multdiv_signed_mode_ex_o = multdiv_signed_mode;
+	assign multdiv_operand_a_ex_o = rf_rdata_a_fwd;
+	assign multdiv_operand_b_ex_o = rf_rdata_b_fwd;
+	generate
+		if (BranchTargetALU && !DataIndTiming) begin : g_branch_set_direct
+			assign branch_set = branch_set_d;
+			assign branch_set_spec = branch_spec;
+		end
+		else begin : g_branch_set_flop
+			reg branch_set_q;
+			always @(posedge clk_i or negedge rst_ni)
+				if (!rst_ni)
+					branch_set_q <= 1'b0;
+				else
+					branch_set_q <= branch_set_d;
+			assign branch_set = (BranchTargetALU && !data_ind_timing_i ? branch_set_d : branch_set_q);
+			assign branch_set_spec = (BranchTargetALU && !data_ind_timing_i ? branch_spec : branch_set_q);
+		end
+	endgenerate
+	generate
+		if (DataIndTiming) begin : g_sec_branch_taken
+			reg branch_taken_q;
+			always @(posedge clk_i or negedge rst_ni)
+				if (!rst_ni)
+					branch_taken_q <= 1'b0;
+				else
+					branch_taken_q <= branch_decision_i;
+			assign branch_taken = ~data_ind_timing_i | branch_taken_q;
+		end
+		else begin : g_nosec_branch_taken
+			assign branch_taken = 1'b1;
+		end
+	endgenerate
+	reg id_fsm_q;
+	reg id_fsm_d;
+	localparam [0:0] FIRST_CYCLE = 0;
+	always @(posedge clk_i or negedge rst_ni) begin : id_pipeline_reg
+		if (!rst_ni)
+			id_fsm_q <= FIRST_CYCLE;
+		else
+			id_fsm_q <= id_fsm_d;
+	end
+	localparam [0:0] MULTI_CYCLE = 1;
+	always @(*) begin
+		id_fsm_d = id_fsm_q;
+		rf_we_raw = rf_we_dec;
+		stall_multdiv = 1'b0;
+		stall_jump = 1'b0;
+		stall_branch = 1'b0;
+		stall_alu = 1'b0;
+		branch_set_d = 1'b0;
+		branch_spec = 1'b0;
+		branch_not_set = 1'b0;
+		jump_set = 1'b0;
+		perf_branch_o = 1'b0;
+		if (instr_executing)
+			case (id_fsm_q)
+				FIRST_CYCLE:
+					case (1'b1)
+						lsu_req_dec:
+							if (!WritebackStage)
+								id_fsm_d = MULTI_CYCLE;
+							else if (~lsu_req_done_i)
+								id_fsm_d = MULTI_CYCLE;
+						multdiv_en_dec:
+							if (~ex_valid_i) begin
+								id_fsm_d = MULTI_CYCLE;
+								rf_we_raw = 1'b0;
+								stall_multdiv = 1'b1;
+							end
+						branch_in_dec: begin
+							id_fsm_d = (data_ind_timing_i || (!BranchTargetALU && branch_decision_i) ? MULTI_CYCLE : FIRST_CYCLE);
+							stall_branch = (~BranchTargetALU & branch_decision_i) | data_ind_timing_i;
+							branch_set_d = branch_decision_i | data_ind_timing_i;
+							if (BranchPredictor)
+								branch_not_set = ~branch_decision_i;
+							branch_spec = (SpecBranch ? 1'b1 : branch_decision_i);
+							perf_branch_o = 1'b1;
+						end
+						jump_in_dec: begin
+							id_fsm_d = (BranchTargetALU ? FIRST_CYCLE : MULTI_CYCLE);
+							stall_jump = ~BranchTargetALU;
+							jump_set = jump_set_dec;
+						end
+						alu_multicycle_dec: begin
+							stall_alu = 1'b1;
+							id_fsm_d = MULTI_CYCLE;
+							rf_we_raw = 1'b0;
+						end
+						default: id_fsm_d = FIRST_CYCLE;
+					endcase
+				MULTI_CYCLE: begin
+					if (multdiv_en_dec)
+						rf_we_raw = rf_we_dec & ex_valid_i;
+					if (multicycle_done & ready_wb_i)
+						id_fsm_d = FIRST_CYCLE;
+					else begin
+						stall_multdiv = multdiv_en_dec;
+						stall_branch = branch_in_dec;
+						stall_jump = jump_in_dec;
+					end
+				end
+			endcase
+	end
+	assign multdiv_ready_id_o = ready_wb_i;
+	assign stall_id = ((((stall_ld_hz | stall_mem) | stall_multdiv) | stall_jump) | stall_branch) | stall_alu;
+	assign instr_done = (~stall_id & ~flush_id) & instr_executing;
+	assign instr_first_cycle = instr_valid_i & (id_fsm_q == FIRST_CYCLE);
+	assign instr_first_cycle_id_o = instr_first_cycle;
+	localparam [1:0] brq_pkg_WB_INSTR_LOAD = 0;
+	localparam [1:0] brq_pkg_WB_INSTR_OTHER = 2;
+	localparam [1:0] brq_pkg_WB_INSTR_STORE = 1;
+	generate
+		if (WritebackStage) begin : gen_stall_mem
+			wire rf_rd_a_wb_match;
+			wire rf_rd_b_wb_match;
+			wire fp_rf_rd_a_wb_match;
+			wire fp_rf_rd_b_wb_match;
+			wire fp_rf_rd_c_wb_match;
+			wire rf_rd_a_hz;
+			wire rf_rd_b_hz;
+			wire rf_rd_c_hz;
+			wire outstanding_memory_access;
+			wire instr_kill;
+			assign multicycle_done = (lsu_req_dec ? ~stall_mem : ex_valid_i);
+			assign outstanding_memory_access = (outstanding_load_wb_i | outstanding_store_wb_i) & ~lsu_resp_valid_i;
+			assign data_req_allowed = ~outstanding_memory_access;
+			assign instr_kill = (instr_fetch_err_i | wb_exception) | ~controller_run;
+			assign instr_executing = ((instr_valid_i & ~instr_kill) & ~stall_ld_hz) & ~outstanding_memory_access;
+			assign stall_mem = instr_valid_i & (outstanding_memory_access | (lsu_req_dec & ~lsu_req_done_i));
+			assign rf_rd_a_wb_match = (rf_waddr_wb_i == rf_raddr_a_o) & |rf_raddr_a_o;
+			assign rf_rd_b_wb_match = (rf_waddr_wb_i == rf_raddr_b_o) & |rf_raddr_b_o;
+			assign fp_rf_rd_a_wb_match = rf_waddr_wb_i == rf_raddr_a_o;
+			assign fp_rf_rd_b_wb_match = rf_waddr_wb_i == rf_raddr_b_o;
+			assign fp_rf_rd_c_wb_match = rf_waddr_wb_i == fp_rf_raddr_c_o;
+			assign rf_rd_a_wb_match_o = rf_rd_a_wb_match;
+			assign rf_rd_b_wb_match_o = rf_rd_b_wb_match;
+			assign rf_rd_a_hz = rf_rd_a_wb_match & (rf_ren_a | use_fp_rs1_o);
+			assign rf_rd_b_hz = rf_rd_b_wb_match & (rf_ren_b | use_fp_rs2_o);
+			assign rf_rd_c_hz = rf_rd_b_wb_match & use_fp_rs3_o;
+			assign rf_rdata_a_fwd = (rf_rd_a_wb_match & rf_write_wb_i ? rf_wdata_fwd_wb_i : rf_rdata_a_i);
+			assign rf_rdata_b_fwd = (rf_rd_b_wb_match & rf_write_wb_i ? rf_wdata_fwd_wb_i : rf_rdata_b_i);
+			assign fp_rf_rdata_a_fwd = (fp_rf_rd_a_wb_match & fp_rf_write_wb_i ? fp_rf_wdata_fwd_wb_i : fp_rf_rdata_a_i);
+			assign fp_rf_rdata_b_fwd = (fp_rf_rd_b_wb_match & fp_rf_write_wb_i ? fp_rf_wdata_fwd_wb_i : fp_rf_rdata_b_i);
+			assign fp_rf_rdata_c_fwd = (fp_rf_rd_c_wb_match & fp_rf_write_wb_i ? fp_rf_wdata_fwd_wb_i : fp_rf_rdata_c_i);
+			assign stall_ld_hz = outstanding_load_wb_i & ((rf_rd_a_hz | rf_rd_b_hz) | rf_rd_c_hz);
+			assign instr_type_wb_o = (~lsu_req_dec ? brq_pkg_WB_INSTR_OTHER : (lsu_we ? brq_pkg_WB_INSTR_STORE : brq_pkg_WB_INSTR_LOAD));
+			assign instr_id_done_o = en_wb_o & ready_wb_i;
+			assign stall_wb = en_wb_o & ~ready_wb_i;
+			assign perf_dside_wait_o = (instr_valid_i & ~instr_kill) & (outstanding_memory_access | stall_ld_hz);
+		end
+		else begin : gen_no_stall_mem
+			assign multicycle_done = (lsu_req_dec ? lsu_resp_valid_i : ex_valid_i);
+			assign data_req_allowed = instr_first_cycle;
+			assign stall_mem = instr_valid_i & (lsu_req_dec & (~lsu_resp_valid_i | instr_first_cycle));
+			assign stall_ld_hz = 1'b0;
+			assign instr_executing = (instr_valid_i & ~instr_fetch_err_i) & controller_run;
+			assign rf_rdata_a_fwd = rf_rdata_a_i;
+			assign rf_rdata_b_fwd = rf_rdata_b_i;
+			assign fp_rf_rdata_a_fwd = fp_rf_rdata_a_i;
+			assign fp_rf_rdata_b_fwd = fp_rf_rdata_b_i;
+			assign fp_rf_rdata_c_fwd = fp_rf_rdata_c_i;
+			assign rf_rd_a_wb_match_o = 1'b0;
+			assign rf_rd_b_wb_match_o = 1'b0;
+			wire unused_data_req_done_ex;
+			wire [4:0] unused_rf_waddr_wb;
+			wire unused_rf_write_wb;
+			wire unused_outstanding_load_wb;
+			wire unused_outstanding_store_wb;
+			wire unused_wb_exception;
+			wire [31:0] unused_rf_wdata_fwd_wb;
+			assign unused_data_req_done_ex = lsu_req_done_i;
+			assign unused_rf_waddr_wb = rf_waddr_wb_i;
+			assign unused_rf_write_wb = rf_write_wb_i;
+			assign unused_outstanding_load_wb = outstanding_load_wb_i;
+			assign unused_outstanding_store_wb = outstanding_store_wb_i;
+			assign unused_wb_exception = wb_exception;
+			assign unused_rf_wdata_fwd_wb = rf_wdata_fwd_wb_i;
+			assign instr_type_wb_o = brq_pkg_WB_INSTR_OTHER;
+			assign stall_wb = 1'b0;
+			assign perf_dside_wait_o = (instr_executing & lsu_req_dec) & ~lsu_resp_valid_i;
+			assign instr_id_done_o = instr_done;
+		end
+	endgenerate
+	always @(*) begin : swapping
+		fpu_op_a = (use_fp_rs1_o ? fp_rf_rdata_a_fwd : rf_rdata_a_fwd);
+		fpu_op_b = (use_fp_rs2_o ? fp_rf_rdata_b_fwd : rf_rdata_b_fwd);
+		if (fp_swap_oprnds)
+			fpu_op_c = fpu_op_a;
+		else
+			fpu_op_c = fp_rf_rdata_c_fwd;
+		fp_operands_o = {fpu_op_c, fpu_op_b, fpu_op_a};
+	end
+	assign result_wb = (mv_instr ? fpu_op_a : result_ex_i);
+	assign instr_perf_count_id_o = (((~ebrk_insn & ~ecall_insn_dec) & ~illegal_insn_dec) & ~illegal_csr_insn_i) & ~instr_fetch_err_i;
+	assign en_wb_o = instr_done;
+	assign perf_mul_wait_o = stall_multdiv & mult_en_dec;
+	assign perf_div_wait_o = stall_multdiv & div_en_dec;
+endmodule
+module brq_ifu_compressed_decoder (
+	instr_i,
+	instr_o,
+	is_compressed_o,
+	illegal_instr_o
+);
+	input wire [31:0] instr_i;
+	output reg [31:0] instr_o;
+	output wire is_compressed_o;
+	output reg illegal_instr_o;
+	localparam [6:0] brq_pkg_OPCODE_BRANCH = 7'h63;
+	localparam [6:0] brq_pkg_OPCODE_JAL = 7'h6f;
+	localparam [6:0] brq_pkg_OPCODE_JALR = 7'h67;
+	localparam [6:0] brq_pkg_OPCODE_LOAD = 7'h03;
+	localparam [6:0] brq_pkg_OPCODE_LUI = 7'h37;
+	localparam [6:0] brq_pkg_OPCODE_OP = 7'h33;
+	localparam [6:0] brq_pkg_OPCODE_OP_IMM = 7'h13;
+	localparam [6:0] brq_pkg_OPCODE_STORE = 7'h23;
+	always @(*) begin
+		instr_o = instr_i;
+		illegal_instr_o = 1'b0;
+		case (instr_i[1:0])
+			2'b00:
+				case (instr_i[15:13])
+					3'b000: begin
+						instr_o = {2'b00, instr_i[10:7], instr_i[12:11], instr_i[5], instr_i[6], 2'b00, 5'h02, 3'b000, 2'b01, instr_i[4:2], {brq_pkg_OPCODE_OP_IMM}};
+						if (instr_i[12:5] == 8'b00000000)
+							illegal_instr_o = 1'b1;
+					end
+					3'b010: instr_o = {5'b00000, instr_i[5], instr_i[12:10], instr_i[6], 2'b00, 2'b01, instr_i[9:7], 3'b010, 2'b01, instr_i[4:2], {brq_pkg_OPCODE_LOAD}};
+					3'b110: instr_o = {5'b00000, instr_i[5], instr_i[12], 2'b01, instr_i[4:2], 2'b01, instr_i[9:7], 3'b010, instr_i[11:10], instr_i[6], 2'b00, {brq_pkg_OPCODE_STORE}};
+					3'b001, 3'b011, 3'b100, 3'b101, 3'b111: illegal_instr_o = 1'b1;
+				endcase
+			2'b01:
+				case (instr_i[15:13])
+					3'b000: instr_o = {{6 {instr_i[12]}}, instr_i[12], instr_i[6:2], instr_i[11:7], 3'b000, instr_i[11:7], {brq_pkg_OPCODE_OP_IMM}};
+					3'b001, 3'b101: instr_o = {instr_i[12], instr_i[8], instr_i[10:9], instr_i[6], instr_i[7], instr_i[2], instr_i[11], instr_i[5:3], {9 {instr_i[12]}}, 4'b0000, ~instr_i[15], {brq_pkg_OPCODE_JAL}};
+					3'b010: instr_o = {{6 {instr_i[12]}}, instr_i[12], instr_i[6:2], 5'b00000, 3'b000, instr_i[11:7], {brq_pkg_OPCODE_OP_IMM}};
+					3'b011: begin
+						instr_o = {{15 {instr_i[12]}}, instr_i[6:2], instr_i[11:7], {brq_pkg_OPCODE_LUI}};
+						if (instr_i[11:7] == 5'h02)
+							instr_o = {{3 {instr_i[12]}}, instr_i[4:3], instr_i[5], instr_i[2], instr_i[6], 4'b0000, 5'h02, 3'b000, 5'h02, {brq_pkg_OPCODE_OP_IMM}};
+						if ({instr_i[12], instr_i[6:2]} == 6'b000000)
+							illegal_instr_o = 1'b1;
+					end
+					3'b100:
+						case (instr_i[11:10])
+							2'b00, 2'b01: begin
+								instr_o = {1'b0, instr_i[10], 5'b00000, instr_i[6:2], 2'b01, instr_i[9:7], 3'b101, 2'b01, instr_i[9:7], {brq_pkg_OPCODE_OP_IMM}};
+								if (instr_i[12] == 1'b1)
+									illegal_instr_o = 1'b1;
+							end
+							2'b10: instr_o = {{6 {instr_i[12]}}, instr_i[12], instr_i[6:2], 2'b01, instr_i[9:7], 3'b111, 2'b01, instr_i[9:7], {brq_pkg_OPCODE_OP_IMM}};
+							2'b11:
+								case ({instr_i[12], instr_i[6:5]})
+									3'b000: instr_o = {9'b010000001, instr_i[4:2], 2'b01, instr_i[9:7], 3'b000, 2'b01, instr_i[9:7], {brq_pkg_OPCODE_OP}};
+									3'b001: instr_o = {9'b000000001, instr_i[4:2], 2'b01, instr_i[9:7], 3'b100, 2'b01, instr_i[9:7], {brq_pkg_OPCODE_OP}};
+									3'b010: instr_o = {9'b000000001, instr_i[4:2], 2'b01, instr_i[9:7], 3'b110, 2'b01, instr_i[9:7], {brq_pkg_OPCODE_OP}};
+									3'b011: instr_o = {9'b000000001, instr_i[4:2], 2'b01, instr_i[9:7], 3'b111, 2'b01, instr_i[9:7], {brq_pkg_OPCODE_OP}};
+									3'b100, 3'b101, 3'b110, 3'b111: illegal_instr_o = 1'b1;
+								endcase
+						endcase
+					3'b110, 3'b111: instr_o = {{4 {instr_i[12]}}, instr_i[6:5], instr_i[2], 5'b00000, 2'b01, instr_i[9:7], 2'b00, instr_i[13], instr_i[11:10], instr_i[4:3], instr_i[12], {brq_pkg_OPCODE_BRANCH}};
+				endcase
+			2'b10:
+				case (instr_i[15:13])
+					3'b000: begin
+						instr_o = {7'b0000000, instr_i[6:2], instr_i[11:7], 3'b001, instr_i[11:7], {brq_pkg_OPCODE_OP_IMM}};
+						if (instr_i[12] == 1'b1)
+							illegal_instr_o = 1'b1;
+					end
+					3'b010: begin
+						instr_o = {4'b0000, instr_i[3:2], instr_i[12], instr_i[6:4], 2'b00, 5'h02, 3'b010, instr_i[11:7], brq_pkg_OPCODE_LOAD};
+						if (instr_i[11:7] == 5'b00000)
+							illegal_instr_o = 1'b1;
+					end
+					3'b100:
+						if (instr_i[12] == 1'b0) begin
+							if (instr_i[6:2] != 5'b00000)
+								instr_o = {7'b0000000, instr_i[6:2], 5'b00000, 3'b000, instr_i[11:7], {brq_pkg_OPCODE_OP}};
+							else begin
+								instr_o = {12'b000000000000, instr_i[11:7], 3'b000, 5'b00000, {brq_pkg_OPCODE_JALR}};
+								if (instr_i[11:7] == 5'b00000)
+									illegal_instr_o = 1'b1;
+							end
+						end
+						else if (instr_i[6:2] != 5'b00000)
+							instr_o = {7'b0000000, instr_i[6:2], instr_i[11:7], 3'b000, instr_i[11:7], {brq_pkg_OPCODE_OP}};
+						else if (instr_i[11:7] == 5'b00000)
+							instr_o = 32'h00100073;
+						else
+							instr_o = {12'b000000000000, instr_i[11:7], 3'b000, 5'b00001, {brq_pkg_OPCODE_JALR}};
+					3'b110: instr_o = {4'b0000, instr_i[8:7], instr_i[12], instr_i[6:2], 5'h02, 3'b010, instr_i[11:9], 2'b00, {brq_pkg_OPCODE_STORE}};
+					3'b001, 3'b011, 3'b101, 3'b111: illegal_instr_o = 1'b1;
+				endcase
+			2'b11:
+				;
+		endcase
+	end
+	assign is_compressed_o = instr_i[1:0] != 2'b11;
+endmodule
+module brq_ifu_fifo (
+	clk_i,
+	rst_ni,
+	clear_i,
+	busy_o,
+	in_valid_i,
+	in_addr_i,
+	in_rdata_i,
+	in_err_i,
+	out_valid_o,
+	out_ready_i,
+	out_addr_o,
+	out_addr_next_o,
+	out_rdata_o,
+	out_err_o,
+	out_err_plus2_o
+);
+	parameter [31:0] NUM_REQS = 2;
+	input wire clk_i;
+	input wire rst_ni;
+	input wire clear_i;
+	output wire [NUM_REQS - 1:0] busy_o;
+	input wire in_valid_i;
+	input wire [31:0] in_addr_i;
+	input wire [31:0] in_rdata_i;
+	input wire in_err_i;
+	output reg out_valid_o;
+	input wire out_ready_i;
+	output wire [31:0] out_addr_o;
+	output wire [31:0] out_addr_next_o;
+	output reg [31:0] out_rdata_o;
+	output reg out_err_o;
+	output reg out_err_plus2_o;
+	localparam [31:0] DEPTH = NUM_REQS + 1;
+	wire [(DEPTH * 32) - 1:0] rdata_d;
+	reg [(DEPTH * 32) - 1:0] rdata_q;
+	wire [DEPTH - 1:0] err_d;
+	reg [DEPTH - 1:0] err_q;
+	wire [DEPTH - 1:0] valid_d;
+	reg [DEPTH - 1:0] valid_q;
+	wire [DEPTH - 1:0] lowest_free_entry;
+	wire [DEPTH - 1:0] valid_pushed;
+	wire [DEPTH - 1:0] valid_popped;
+	wire [DEPTH - 1:0] entry_en;
+	wire pop_fifo;
+	wire [31:0] rdata;
+	wire [31:0] rdata_unaligned;
+	wire err;
+	wire err_unaligned;
+	wire err_plus2;
+	wire valid;
+	wire valid_unaligned;
+	wire aligned_is_compressed;
+	wire unaligned_is_compressed;
+	wire addr_incr_two;
+	wire [31:1] instr_addr_next;
+	wire [31:1] instr_addr_d;
+	reg [31:1] instr_addr_q;
+	wire instr_addr_en;
+	wire unused_addr_in;
+	assign rdata = (valid_q[0] ? rdata_q[0+:32] : in_rdata_i);
+	assign err = (valid_q[0] ? err_q[0] : in_err_i);
+	assign valid = valid_q[0] | in_valid_i;
+	assign rdata_unaligned = (valid_q[1] ? {rdata_q[47-:16], rdata[31:16]} : {in_rdata_i[15:0], rdata[31:16]});
+	assign err_unaligned = (valid_q[1] ? (err_q[1] & ~unaligned_is_compressed) | err_q[0] : (valid_q[0] & err_q[0]) | (in_err_i & (~valid_q[0] | ~unaligned_is_compressed)));
+	assign err_plus2 = (valid_q[1] ? err_q[1] & ~err_q[0] : (in_err_i & valid_q[0]) & ~err_q[0]);
+	assign valid_unaligned = (valid_q[1] ? 1'b1 : valid_q[0] & in_valid_i);
+	assign unaligned_is_compressed = (rdata[17:16] != 2'b11) & ~err;
+	assign aligned_is_compressed = (rdata[1:0] != 2'b11) & ~err;
+	always @(*)
+		if (out_addr_o[1]) begin
+			out_rdata_o = rdata_unaligned;
+			out_err_o = err_unaligned;
+			out_err_plus2_o = err_plus2;
+			if (unaligned_is_compressed)
+				out_valid_o = valid;
+			else
+				out_valid_o = valid_unaligned;
+		end
+		else begin
+			out_rdata_o = rdata;
+			out_err_o = err;
+			out_err_plus2_o = 1'b0;
+			out_valid_o = valid;
+		end
+	assign instr_addr_en = clear_i | (out_ready_i & out_valid_o);
+	assign addr_incr_two = (instr_addr_q[1] ? unaligned_is_compressed : aligned_is_compressed);
+	assign instr_addr_next = instr_addr_q[31:1] + {29'd0, ~addr_incr_two, addr_incr_two};
+	assign instr_addr_d = (clear_i ? in_addr_i[31:1] : instr_addr_next);
+	always @(posedge clk_i)
+		if (~rst_ni)
+			instr_addr_q <= {31 {1'sb0}};
+		else if (instr_addr_en)
+			instr_addr_q <= instr_addr_d;
+	assign out_addr_next_o = {instr_addr_next, 1'b0};
+	assign out_addr_o = {instr_addr_q, 1'b0};
+	assign unused_addr_in = in_addr_i[0];
+	assign busy_o = valid_q[DEPTH - 1:DEPTH - NUM_REQS];
+	assign pop_fifo = (out_ready_i & out_valid_o) & (~aligned_is_compressed | out_addr_o[1]);
+	generate
+		genvar i;
+		for (i = 0; i < (DEPTH - 1); i = i + 1) begin : g_fifo_next
+			if (i == 0) begin : g_ent0
+				assign lowest_free_entry[i] = ~valid_q[i];
+			end
+			else begin : g_ent_others
+				assign lowest_free_entry[i] = ~valid_q[i] & valid_q[i - 1];
+			end
+			assign valid_pushed[i] = (in_valid_i & lowest_free_entry[i]) | valid_q[i];
+			assign valid_popped[i] = (pop_fifo ? valid_pushed[i + 1] : valid_pushed[i]);
+			assign valid_d[i] = valid_popped[i] & ~clear_i;
+			assign entry_en[i] = (valid_pushed[i + 1] & pop_fifo) | ((in_valid_i & lowest_free_entry[i]) & ~pop_fifo);
+			assign rdata_d[i * 32+:32] = (valid_q[i + 1] ? rdata_q[(i + 1) * 32+:32] : in_rdata_i);
+			assign err_d[i] = (valid_q[i + 1] ? err_q[i + 1] : in_err_i);
+		end
+	endgenerate
+	assign lowest_free_entry[DEPTH - 1] = ~valid_q[DEPTH - 1] & valid_q[DEPTH - 2];
+	assign valid_pushed[DEPTH - 1] = valid_q[DEPTH - 1] | (in_valid_i & lowest_free_entry[DEPTH - 1]);
+	assign valid_popped[DEPTH - 1] = (pop_fifo ? 1'b0 : valid_pushed[DEPTH - 1]);
+	assign valid_d[DEPTH - 1] = valid_popped[DEPTH - 1] & ~clear_i;
+	assign entry_en[DEPTH - 1] = in_valid_i & lowest_free_entry[DEPTH - 1];
+	assign rdata_d[(DEPTH - 1) * 32+:32] = in_rdata_i;
+	assign err_d[DEPTH - 1] = in_err_i;
+	always @(posedge clk_i or negedge rst_ni)
+		if (!rst_ni)
+			valid_q <= {DEPTH {1'sb0}};
+		else
+			valid_q <= valid_d;
+	generate
+		for (i = 0; i < DEPTH; i = i + 1) begin : g_fifo_regs
+			always @(posedge clk_i)
+				if (~rst_ni) begin
+					rdata_q[i * 32+:32] <= {32 {1'sb0}};
+					err_q[i] <= 1'b0;
+				end
+				else if (entry_en[i]) begin
+					rdata_q[i * 32+:32] <= rdata_d[i * 32+:32];
+					err_q[i] <= err_d[i];
+				end
+		end
+	endgenerate
+endmodule
+module brq_ifu_prefetch_buffer (
+	clk_i,
+	rst_ni,
+	req_i,
+	branch_i,
+	branch_spec_i,
+	predicted_branch_i,
+	addr_i,
+	ready_i,
+	valid_o,
+	rdata_o,
+	addr_o,
+	err_o,
+	err_plus2_o,
+	instr_req_o,
+	instr_gnt_i,
+	instr_addr_o,
+	instr_rdata_i,
+	instr_err_i,
+	instr_pmp_err_i,
+	instr_rvalid_i,
+	busy_o
+);
+	parameter [0:0] BranchPredictor = 1'b0;
+	input wire clk_i;
+	input wire rst_ni;
+	input wire req_i;
+	input wire branch_i;
+	input wire branch_spec_i;
+	input wire predicted_branch_i;
+	input wire [31:0] addr_i;
+	input wire ready_i;
+	output wire valid_o;
+	output wire [31:0] rdata_o;
+	output wire [31:0] addr_o;
+	output wire err_o;
+	output wire err_plus2_o;
+	output wire instr_req_o;
+	input wire instr_gnt_i;
+	output wire [31:0] instr_addr_o;
+	input wire [31:0] instr_rdata_i;
+	input wire instr_err_i;
+	input wire instr_pmp_err_i;
+	input wire instr_rvalid_i;
+	output wire busy_o;
+	wire branch_mispredict_i;
+	assign branch_mispredict_i = 1'b0;
+	localparam [31:0] NUM_REQS = 2;
+	wire branch_suppress;
+	wire valid_new_req;
+	wire valid_req;
+	wire valid_req_d;
+	reg valid_req_q;
+	wire discard_req_d;
+	reg discard_req_q;
+	wire gnt_or_pmp_err;
+	wire rvalid_or_pmp_err;
+	wire [1:0] rdata_outstanding_n;
+	wire [1:0] rdata_outstanding_s;
+	reg [1:0] rdata_outstanding_q;
+	wire [1:0] branch_discard_n;
+	wire [1:0] branch_discard_s;
+	reg [1:0] branch_discard_q;
+	wire [1:0] rdata_pmp_err_n;
+	wire [1:0] rdata_pmp_err_s;
+	reg [1:0] rdata_pmp_err_q;
+	wire [1:0] rdata_outstanding_rev;
+	wire [31:0] stored_addr_d;
+	reg [31:0] stored_addr_q;
+	wire stored_addr_en;
+	wire [31:0] fetch_addr_d;
+	reg [31:0] fetch_addr_q;
+	wire fetch_addr_en;
+	wire [31:0] branch_mispredict_addr;
+	wire [31:0] instr_addr;
+	wire [31:0] instr_addr_w_aligned;
+	wire instr_or_pmp_err;
+	wire fifo_valid;
+	wire [31:0] fifo_addr;
+	wire fifo_ready;
+	wire fifo_clear;
+	wire [1:0] fifo_busy;
+	wire valid_raw;
+	wire [31:0] addr_next;
+	wire branch_or_mispredict;
+	assign busy_o = |rdata_outstanding_q | instr_req_o;
+	assign branch_or_mispredict = branch_i | branch_mispredict_i;
+	assign instr_or_pmp_err = instr_err_i | rdata_pmp_err_q[0];
+	assign fifo_clear = branch_or_mispredict;
+	generate
+		genvar i;
+		for (i = 0; i < NUM_REQS; i = i + 1) begin : gen_rd_rev
+			assign rdata_outstanding_rev[i] = rdata_outstanding_q[1 - i];
+		end
+	endgenerate
+	assign fifo_ready = ~&(fifo_busy | rdata_outstanding_rev);
+	brq_ifu_fifo #(.NUM_REQS(NUM_REQS)) fifo_i(
+		.clk_i(clk_i),
+		.rst_ni(rst_ni),
+		.clear_i(fifo_clear),
+		.busy_o(fifo_busy),
+		.in_valid_i(fifo_valid),
+		.in_addr_i(fifo_addr),
+		.in_rdata_i(instr_rdata_i),
+		.in_err_i(instr_or_pmp_err),
+		.out_valid_o(valid_raw),
+		.out_ready_i(ready_i),
+		.out_rdata_o(rdata_o),
+		.out_addr_o(addr_o),
+		.out_addr_next_o(addr_next),
+		.out_err_o(err_o),
+		.out_err_plus2_o(err_plus2_o)
+	);
+	assign branch_suppress = branch_spec_i & ~branch_i;
+	assign valid_new_req = ((~branch_suppress & req_i) & (fifo_ready | branch_or_mispredict)) & ~rdata_outstanding_q[1];
+	assign valid_req = valid_req_q | valid_new_req;
+	assign gnt_or_pmp_err = instr_gnt_i | instr_pmp_err_i;
+	assign rvalid_or_pmp_err = rdata_outstanding_q[0] & (instr_rvalid_i | rdata_pmp_err_q[0]);
+	assign valid_req_d = valid_req & ~gnt_or_pmp_err;
+	assign discard_req_d = valid_req_q & (branch_or_mispredict | discard_req_q);
+	assign stored_addr_en = (valid_new_req & ~valid_req_q) & ~gnt_or_pmp_err;
+	assign stored_addr_d = instr_addr;
+	always @(posedge clk_i)
+		if (~rst_ni)
+			stored_addr_q <= {32 {1'sb0}};
+		else if (stored_addr_en)
+			stored_addr_q <= stored_addr_d;
+	generate
+		if (BranchPredictor) begin : g_branch_predictor
+			reg [31:0] branch_mispredict_addr_q;
+			wire branch_mispredict_addr_en;
+			assign branch_mispredict_addr_en = branch_i & predicted_branch_i;
+			always @(posedge clk_i)
+				if (~rst_ni)
+					branch_mispredict_addr_q <= {32 {1'sb0}};
+				else if (branch_mispredict_addr_en)
+					branch_mispredict_addr_q <= addr_next;
+			assign branch_mispredict_addr = branch_mispredict_addr_q;
+		end
+		else begin : g_no_branch_predictor
+			wire unused_predicted_branch;
+			wire [31:0] unused_addr_next;
+			assign unused_predicted_branch = predicted_branch_i;
+			assign unused_addr_next = addr_next;
+			assign branch_mispredict_addr = {32 {1'sb0}};
+		end
+	endgenerate
+	assign fetch_addr_en = branch_or_mispredict | (valid_new_req & ~valid_req_q);
+	assign fetch_addr_d = (branch_i ? addr_i : (branch_mispredict_i ? {branch_mispredict_addr[31:2], 2'b00} : {fetch_addr_q[31:2], 2'b00})) + {{29 {1'b0}}, valid_new_req & ~valid_req_q, 2'b00};
+	always @(posedge clk_i)
+		if (~rst_ni)
+			fetch_addr_q <= {32 {1'sb0}};
+		else if (fetch_addr_en)
+			fetch_addr_q <= fetch_addr_d;
+	assign instr_addr = (valid_req_q ? stored_addr_q : (branch_spec_i ? addr_i : (branch_mispredict_i ? branch_mispredict_addr : fetch_addr_q)));
+	assign instr_addr_w_aligned = {instr_addr[31:2], 2'b00};
+	generate
+		for (i = 0; i < NUM_REQS; i = i + 1) begin : g_outstanding_reqs
+			if (i == 0) begin : g_req0
+				assign rdata_outstanding_n[i] = (valid_req & gnt_or_pmp_err) | rdata_outstanding_q[i];
+				assign branch_discard_n[i] = (((valid_req & gnt_or_pmp_err) & discard_req_d) | (branch_or_mispredict & rdata_outstanding_q[i])) | branch_discard_q[i];
+				assign rdata_pmp_err_n[i] = ((valid_req & ~rdata_outstanding_q[i]) & instr_pmp_err_i) | rdata_pmp_err_q[i];
+			end
+			else begin : g_reqtop
+				assign rdata_outstanding_n[i] = ((valid_req & gnt_or_pmp_err) & rdata_outstanding_q[i - 1]) | rdata_outstanding_q[i];
+				assign branch_discard_n[i] = ((((valid_req & gnt_or_pmp_err) & discard_req_d) & rdata_outstanding_q[i - 1]) | (branch_or_mispredict & rdata_outstanding_q[i])) | branch_discard_q[i];
+				assign rdata_pmp_err_n[i] = (((valid_req & ~rdata_outstanding_q[i]) & instr_pmp_err_i) & rdata_outstanding_q[i - 1]) | rdata_pmp_err_q[i];
+			end
+		end
+	endgenerate
+	assign rdata_outstanding_s = (rvalid_or_pmp_err ? {1'b0, rdata_outstanding_n[1:1]} : rdata_outstanding_n);
+	assign branch_discard_s = (rvalid_or_pmp_err ? {1'b0, branch_discard_n[1:1]} : branch_discard_n);
+	assign rdata_pmp_err_s = (rvalid_or_pmp_err ? {1'b0, rdata_pmp_err_n[1:1]} : rdata_pmp_err_n);
+	assign fifo_valid = rvalid_or_pmp_err & ~branch_discard_q[0];
+	assign fifo_addr = (branch_i ? addr_i : branch_mispredict_addr);
+	always @(posedge clk_i or negedge rst_ni)
+		if (!rst_ni) begin
+			valid_req_q <= 1'b0;
+			discard_req_q <= 1'b0;
+			rdata_outstanding_q <= {2 {1'sb0}};
+			branch_discard_q <= {2 {1'sb0}};
+			rdata_pmp_err_q <= {2 {1'sb0}};
+		end
+		else begin
+			valid_req_q <= valid_req_d;
+			discard_req_q <= discard_req_d;
+			rdata_outstanding_q <= rdata_outstanding_s;
+			branch_discard_q <= branch_discard_s;
+			rdata_pmp_err_q <= rdata_pmp_err_s;
+		end
+	assign instr_req_o = valid_req;
+	assign instr_addr_o = instr_addr_w_aligned;
+	assign valid_o = valid_raw & ~branch_mispredict_i;
+endmodule
+module brq_ifu (
+	clk_i,
+	rst_ni,
+	boot_addr_i,
+	req_i,
+	instr_req_o,
+	instr_addr_o,
+	instr_gnt_i,
+	instr_rvalid_i,
+	instr_rdata_i,
+	instr_err_i,
+	instr_pmp_err_i,
+	instr_valid_id_o,
+	instr_new_id_o,
+	instr_rdata_id_o,
+	instr_rdata_alu_id_o,
+	instr_rdata_c_id_o,
+	instr_is_compressed_id_o,
+	instr_fetch_err_o,
+	instr_fetch_err_plus2_o,
+	illegal_c_insn_id_o,
+	pc_if_o,
+	pc_id_o,
+	instr_valid_clear_i,
+	pc_set_i,
+	pc_set_spec_i,
+	pc_mux_i,
+	exc_pc_mux_i,
+	branch_target_ex_i,
+	csr_mepc_i,
+	csr_depc_i,
+	csr_mtvec_i,
+	csr_mtvec_init_o,
+	id_in_ready_i,
+	pc_mismatch_alert_o,
+	if_busy_o
+);
+	parameter [31:0] DmHaltAddr = 32'h1a110800;
+	parameter [31:0] DmExceptionAddr = 32'h1a110808;
+	parameter [0:0] DummyInstructions = 1'b0;
+	parameter [0:0] ICache = 1'b0;
+	parameter [0:0] ICacheECC = 1'b0;
+	parameter [0:0] PCIncrCheck = 1'b0;
+	parameter [0:0] BranchPredictor = 1'b0;
+	input wire clk_i;
+	input wire rst_ni;
+	input wire [31:0] boot_addr_i;
+	input wire req_i;
+	output wire instr_req_o;
+	output wire [31:0] instr_addr_o;
+	input wire instr_gnt_i;
+	input wire instr_rvalid_i;
+	input wire [31:0] instr_rdata_i;
+	input wire instr_err_i;
+	input wire instr_pmp_err_i;
+	output wire instr_valid_id_o;
+	output wire instr_new_id_o;
+	output reg [31:0] instr_rdata_id_o;
+	output reg [31:0] instr_rdata_alu_id_o;
+	output reg [15:0] instr_rdata_c_id_o;
+	output reg instr_is_compressed_id_o;
+	output reg instr_fetch_err_o;
+	output reg instr_fetch_err_plus2_o;
+	output reg illegal_c_insn_id_o;
+	output wire [31:0] pc_if_o;
+	output reg [31:0] pc_id_o;
+	input wire instr_valid_clear_i;
+	input wire pc_set_i;
+	input wire pc_set_spec_i;
+	input wire [2:0] pc_mux_i;
+	input wire [1:0] exc_pc_mux_i;
+	input wire [31:0] branch_target_ex_i;
+	input wire [31:0] csr_mepc_i;
+	input wire [31:0] csr_depc_i;
+	input wire [31:0] csr_mtvec_i;
+	output wire csr_mtvec_init_o;
+	input wire id_in_ready_i;
+	output wire pc_mismatch_alert_o;
+	output wire if_busy_o;
+	wire instr_valid_id_d;
+	reg instr_valid_id_q;
+	wire instr_new_id_d;
+	reg instr_new_id_q;
+	wire prefetch_busy;
+	wire branch_req;
+	wire branch_spec;
+	wire predicted_branch;
+	reg [31:0] fetch_addr_n;
+	wire fetch_valid;
+	wire fetch_ready;
+	wire [31:0] fetch_rdata;
+	wire [31:0] fetch_addr;
+	wire fetch_err;
+	wire fetch_err_plus2;
+	wire if_instr_valid;
+	wire [31:0] if_instr_rdata;
+	wire [31:0] if_instr_addr;
+	wire if_instr_err;
+	reg [31:0] exc_pc;
+	wire if_id_pipe_reg_we;
+	wire [31:0] instr_out;
+	wire instr_is_compressed_out;
+	wire illegal_c_instr_out;
+	wire instr_err_out;
+	wire predict_branch_taken;
+	wire [31:0] predict_branch_pc;
+	wire [2:0] pc_mux_internal;
+	localparam [1:0] brq_pkg_EXC_PC_DBD = 2;
+	localparam [1:0] brq_pkg_EXC_PC_DBG_EXC = 3;
+	localparam [1:0] brq_pkg_EXC_PC_EXC = 0;
+	localparam [1:0] brq_pkg_EXC_PC_IRQ = 1;
+	always @(*) begin : exc_pc_mux
+		case (exc_pc_mux_i)
+			brq_pkg_EXC_PC_EXC: exc_pc = {csr_mtvec_i[31:2], 2'b00};
+			brq_pkg_EXC_PC_IRQ: exc_pc = {csr_mtvec_i[31:2], 2'b00};
+			brq_pkg_EXC_PC_DBD: exc_pc = DmHaltAddr;
+			brq_pkg_EXC_PC_DBG_EXC: exc_pc = DmExceptionAddr;
+		endcase
+	end
+	localparam [2:0] brq_pkg_PC_BP = 5;
+	assign pc_mux_internal = ((BranchPredictor && predict_branch_taken) && !pc_set_i ? brq_pkg_PC_BP : pc_mux_i);
+	localparam [2:0] brq_pkg_PC_BOOT = 0;
+	localparam [2:0] brq_pkg_PC_DRET = 4;
+	localparam [2:0] brq_pkg_PC_ERET = 3;
+	localparam [2:0] brq_pkg_PC_EXC = 2;
+	localparam [2:0] brq_pkg_PC_JUMP = 1;
+	always @(*) begin : fetch_addr_mux
+		case (pc_mux_internal)
+			brq_pkg_PC_BOOT: fetch_addr_n = {boot_addr_i[31:2], 2'b00};
+			brq_pkg_PC_JUMP: fetch_addr_n = branch_target_ex_i;
+			brq_pkg_PC_EXC: fetch_addr_n = exc_pc;
+			brq_pkg_PC_ERET: fetch_addr_n = csr_mepc_i;
+			brq_pkg_PC_DRET: fetch_addr_n = csr_depc_i;
+			brq_pkg_PC_BP: fetch_addr_n = (BranchPredictor ? predict_branch_pc : {boot_addr_i[31:2], 2'b00});
+			default: fetch_addr_n = {boot_addr_i[31:2], 2'b00};
+		endcase
+	end
+	assign csr_mtvec_init_o = (pc_mux_i == brq_pkg_PC_BOOT) & pc_set_i;
+	brq_ifu_prefetch_buffer #(.BranchPredictor(BranchPredictor)) ifu_prefetch_buffer_i(
+		.clk_i(clk_i),
+		.rst_ni(rst_ni),
+		.req_i(req_i),
+		.branch_i(branch_req),
+		.branch_spec_i(branch_spec),
+		.predicted_branch_i(predicted_branch),
+		.addr_i({fetch_addr_n[31:1], 1'b0}),
+		.ready_i(fetch_ready),
+		.valid_o(fetch_valid),
+		.rdata_o(fetch_rdata),
+		.addr_o(fetch_addr),
+		.err_o(fetch_err),
+		.err_plus2_o(fetch_err_plus2),
+		.instr_req_o(instr_req_o),
+		.instr_addr_o(instr_addr_o),
+		.instr_gnt_i(instr_gnt_i),
+		.instr_rvalid_i(instr_rvalid_i),
+		.instr_rdata_i(instr_rdata_i),
+		.instr_err_i(instr_err_i),
+		.instr_pmp_err_i(instr_pmp_err_i),
+		.busy_o(prefetch_busy)
+	);
+	assign branch_req = pc_set_i | predict_branch_taken;
+	assign branch_spec = pc_set_spec_i | predict_branch_taken;
+	assign pc_if_o = if_instr_addr;
+	assign if_busy_o = prefetch_busy;
+	wire [31:0] instr_decompressed;
+	wire illegal_c_insn;
+	wire instr_is_compressed;
+	brq_ifu_compressed_decoder ifu_compressed_decoder_i(
+		.instr_i(if_instr_rdata),
+		.instr_o(instr_decompressed),
+		.is_compressed_o(instr_is_compressed),
+		.illegal_instr_o(illegal_c_insn)
+	);
+	assign instr_out = instr_decompressed;
+	assign instr_is_compressed_out = instr_is_compressed;
+	assign illegal_c_instr_out = illegal_c_insn;
+	assign instr_err_out = if_instr_err;
+	assign instr_valid_id_d = ((if_instr_valid & id_in_ready_i) & ~pc_set_i) | (instr_valid_id_q & ~instr_valid_clear_i);
+	assign instr_new_id_d = if_instr_valid & id_in_ready_i;
+	always @(posedge clk_i or negedge rst_ni)
+		if (!rst_ni) begin
+			instr_valid_id_q <= 1'b0;
+			instr_new_id_q <= 1'b0;
+		end
+		else begin
+			instr_valid_id_q <= instr_valid_id_d;
+			instr_new_id_q <= instr_new_id_d;
+		end
+	assign instr_valid_id_o = instr_valid_id_q;
+	assign instr_new_id_o = instr_new_id_q;
+	assign if_id_pipe_reg_we = instr_new_id_d;
+	always @(posedge clk_i)
+		if (~rst_ni) begin
+			instr_rdata_id_o <= {32 {1'sb0}};
+			instr_rdata_alu_id_o <= {32 {1'sb0}};
+			instr_fetch_err_o <= 1'b0;
+			instr_fetch_err_plus2_o <= 1'b0;
+			instr_rdata_c_id_o <= {16 {1'sb0}};
+			instr_is_compressed_id_o <= 1'b0;
+			illegal_c_insn_id_o <= 1'b0;
+			pc_id_o <= {32 {1'sb0}};
+		end
+		else if (if_id_pipe_reg_we) begin
+			instr_rdata_id_o <= instr_out;
+			instr_rdata_alu_id_o <= instr_out;
+			instr_fetch_err_o <= instr_err_out;
+			instr_fetch_err_plus2_o <= fetch_err_plus2;
+			instr_rdata_c_id_o <= if_instr_rdata[15:0];
+			instr_is_compressed_id_o <= instr_is_compressed_out;
+			illegal_c_insn_id_o <= illegal_c_instr_out;
+			pc_id_o <= pc_if_o;
+		end
+	assign pc_mismatch_alert_o = 1'b0;
+	assign predict_branch_taken = 1'b0;
+	assign predicted_branch = 1'b0;
+	assign predict_branch_pc = 32'b00000000000000000000000000000000;
+	assign if_instr_valid = fetch_valid;
+	assign if_instr_rdata = fetch_rdata;
+	assign if_instr_addr = fetch_addr;
+	assign if_instr_err = fetch_err;
+	assign fetch_ready = id_in_ready_i;
+endmodule
+module brq_lsu (
+	clk_i,
+	rst_ni,
+	data_req_o,
+	data_gnt_i,
+	data_rvalid_i,
+	data_err_i,
+	data_pmp_err_i,
+	data_addr_o,
+	data_we_o,
+	data_be_o,
+	data_wdata_o,
+	data_rdata_i,
+	lsu_we_i,
+	lsu_type_i,
+	lsu_wdata_i,
+	lsu_sign_ext_i,
+	lsu_rdata_o,
+	lsu_rdata_valid_o,
+	lsu_req_i,
+	adder_result_ex_i,
+	addr_incr_req_o,
+	addr_last_o,
+	lsu_req_done_o,
+	lsu_resp_valid_o,
+	load_err_o,
+	store_err_o,
+	busy_o,
+	perf_load_o,
+	perf_store_o
+);
+	input wire clk_i;
+	input wire rst_ni;
+	output reg data_req_o;
+	input wire data_gnt_i;
+	input wire data_rvalid_i;
+	input wire data_err_i;
+	input wire data_pmp_err_i;
+	output wire [31:0] data_addr_o;
+	output wire data_we_o;
+	output wire [3:0] data_be_o;
+	output wire [31:0] data_wdata_o;
+	input wire [31:0] data_rdata_i;
+	input wire lsu_we_i;
+	input wire [1:0] lsu_type_i;
+	input wire [31:0] lsu_wdata_i;
+	input wire lsu_sign_ext_i;
+	output wire [31:0] lsu_rdata_o;
+	output wire lsu_rdata_valid_o;
+	input wire lsu_req_i;
+	input wire [31:0] adder_result_ex_i;
+	output reg addr_incr_req_o;
+	output wire [31:0] addr_last_o;
+	output wire lsu_req_done_o;
+	output wire lsu_resp_valid_o;
+	output wire load_err_o;
+	output wire store_err_o;
+	output wire busy_o;
+	output reg perf_load_o;
+	output reg perf_store_o;
+	wire [31:0] data_addr;
+	wire [31:0] data_addr_w_aligned;
+	reg [31:0] addr_last_q;
+	reg addr_update;
+	reg ctrl_update;
+	reg rdata_update;
+	reg [31:8] rdata_q;
+	reg [1:0] rdata_offset_q;
+	reg [1:0] data_type_q;
+	reg data_sign_ext_q;
+	reg data_we_q;
+	wire [1:0] data_offset;
+	reg [3:0] data_be;
+	reg [31:0] data_wdata;
+	reg [31:0] data_rdata_ext;
+	reg [31:0] rdata_w_ext;
+	reg [31:0] rdata_h_ext;
+	reg [31:0] rdata_b_ext;
+	wire split_misaligned_access;
+	reg handle_misaligned_q;
+	reg handle_misaligned_d;
+	reg pmp_err_q;
+	reg pmp_err_d;
+	reg lsu_err_q;
+	reg lsu_err_d;
+	wire data_or_pmp_err;
+	reg [2:0] ls_fsm_cs;
+	reg [2:0] ls_fsm_ns;
+	assign data_addr = adder_result_ex_i;
+	assign data_offset = data_addr[1:0];
+	always @(*)
+		case (lsu_type_i)
+			2'b00:
+				if (!handle_misaligned_q)
+					case (data_offset)
+						2'b00: data_be = 4'b1111;
+						2'b01: data_be = 4'b1110;
+						2'b10: data_be = 4'b1100;
+						2'b11: data_be = 4'b1000;
+					endcase
+				else
+					case (data_offset)
+						2'b00: data_be = 4'b0000;
+						2'b01: data_be = 4'b0001;
+						2'b10: data_be = 4'b0011;
+						2'b11: data_be = 4'b0111;
+					endcase
+			2'b01:
+				if (!handle_misaligned_q)
+					case (data_offset)
+						2'b00: data_be = 4'b0011;
+						2'b01: data_be = 4'b0110;
+						2'b10: data_be = 4'b1100;
+						2'b11: data_be = 4'b1000;
+					endcase
+				else
+					data_be = 4'b0001;
+			2'b10, 2'b11:
+				case (data_offset)
+					2'b00: data_be = 4'b0001;
+					2'b01: data_be = 4'b0010;
+					2'b10: data_be = 4'b0100;
+					2'b11: data_be = 4'b1000;
+				endcase
+		endcase
+	always @(*)
+		case (data_offset)
+			2'b00: data_wdata = lsu_wdata_i[31:0];
+			2'b01: data_wdata = {lsu_wdata_i[23:0], lsu_wdata_i[31:24]};
+			2'b10: data_wdata = {lsu_wdata_i[15:0], lsu_wdata_i[31:16]};
+			2'b11: data_wdata = {lsu_wdata_i[7:0], lsu_wdata_i[31:8]};
+		endcase
+	always @(posedge clk_i or negedge rst_ni)
+		if (!rst_ni)
+			rdata_q <= {24 {1'sb0}};
+		else if (rdata_update)
+			rdata_q <= data_rdata_i[31:8];
+	always @(posedge clk_i or negedge rst_ni)
+		if (!rst_ni) begin
+			rdata_offset_q <= 2'h0;
+			data_type_q <= 2'h0;
+			data_sign_ext_q <= 1'b0;
+			data_we_q <= 1'b0;
+		end
+		else if (ctrl_update) begin
+			rdata_offset_q <= data_offset;
+			data_type_q <= lsu_type_i;
+			data_sign_ext_q <= lsu_sign_ext_i;
+			data_we_q <= lsu_we_i;
+		end
+	always @(posedge clk_i or negedge rst_ni)
+		if (!rst_ni)
+			addr_last_q <= {32 {1'sb0}};
+		else if (addr_update)
+			addr_last_q <= data_addr;
+	always @(*)
+		case (rdata_offset_q)
+			2'b00: rdata_w_ext = data_rdata_i[31:0];
+			2'b01: rdata_w_ext = {data_rdata_i[7:0], rdata_q[31:8]};
+			2'b10: rdata_w_ext = {data_rdata_i[15:0], rdata_q[31:16]};
+			2'b11: rdata_w_ext = {data_rdata_i[23:0], rdata_q[31:24]};
+		endcase
+	always @(*)
+		case (rdata_offset_q)
+			2'b00:
+				if (!data_sign_ext_q)
+					rdata_h_ext = {16'h0000, data_rdata_i[15:0]};
+				else
+					rdata_h_ext = {{16 {data_rdata_i[15]}}, data_rdata_i[15:0]};
+			2'b01:
+				if (!data_sign_ext_q)
+					rdata_h_ext = {16'h0000, data_rdata_i[23:8]};
+				else
+					rdata_h_ext = {{16 {data_rdata_i[23]}}, data_rdata_i[23:8]};
+			2'b10:
+				if (!data_sign_ext_q)
+					rdata_h_ext = {16'h0000, data_rdata_i[31:16]};
+				else
+					rdata_h_ext = {{16 {data_rdata_i[31]}}, data_rdata_i[31:16]};
+			2'b11:
+				if (!data_sign_ext_q)
+					rdata_h_ext = {16'h0000, data_rdata_i[7:0], rdata_q[31:24]};
+				else
+					rdata_h_ext = {{16 {data_rdata_i[7]}}, data_rdata_i[7:0], rdata_q[31:24]};
+		endcase
+	always @(*)
+		case (rdata_offset_q)
+			2'b00:
+				if (!data_sign_ext_q)
+					rdata_b_ext = {24'h000000, data_rdata_i[7:0]};
+				else
+					rdata_b_ext = {{24 {data_rdata_i[7]}}, data_rdata_i[7:0]};
+			2'b01:
+				if (!data_sign_ext_q)
+					rdata_b_ext = {24'h000000, data_rdata_i[15:8]};
+				else
+					rdata_b_ext = {{24 {data_rdata_i[15]}}, data_rdata_i[15:8]};
+			2'b10:
+				if (!data_sign_ext_q)
+					rdata_b_ext = {24'h000000, data_rdata_i[23:16]};
+				else
+					rdata_b_ext = {{24 {data_rdata_i[23]}}, data_rdata_i[23:16]};
+			2'b11:
+				if (!data_sign_ext_q)
+					rdata_b_ext = {24'h000000, data_rdata_i[31:24]};
+				else
+					rdata_b_ext = {{24 {data_rdata_i[31]}}, data_rdata_i[31:24]};
+		endcase
+	always @(*)
+		case (data_type_q)
+			2'b00: data_rdata_ext = rdata_w_ext;
+			2'b01: data_rdata_ext = rdata_h_ext;
+			2'b10, 2'b11: data_rdata_ext = rdata_b_ext;
+		endcase
+	assign split_misaligned_access = ((lsu_type_i == 2'b00) && (data_offset != 2'b00)) || ((lsu_type_i == 2'b01) && (data_offset == 2'b11));
+	localparam [2:0] IDLE = 0;
+	localparam [2:0] WAIT_GNT = 3;
+	localparam [2:0] WAIT_GNT_MIS = 1;
+	localparam [2:0] WAIT_RVALID_MIS = 2;
+	localparam [2:0] WAIT_RVALID_MIS_GNTS_DONE = 4;
+	always @(*) begin
+		ls_fsm_ns = ls_fsm_cs;
+		data_req_o = 1'b0;
+		addr_incr_req_o = 1'b0;
+		handle_misaligned_d = handle_misaligned_q;
+		pmp_err_d = pmp_err_q;
+		lsu_err_d = lsu_err_q;
+		addr_update = 1'b0;
+		ctrl_update = 1'b0;
+		rdata_update = 1'b0;
+		perf_load_o = 1'b0;
+		perf_store_o = 1'b0;
+		case (ls_fsm_cs)
+			IDLE: begin
+				pmp_err_d = 1'b0;
+				if (lsu_req_i) begin
+					data_req_o = 1'b1;
+					pmp_err_d = data_pmp_err_i;
+					lsu_err_d = 1'b0;
+					perf_load_o = ~lsu_we_i;
+					perf_store_o = lsu_we_i;
+					if (data_gnt_i) begin
+						ctrl_update = 1'b1;
+						addr_update = 1'b1;
+						handle_misaligned_d = split_misaligned_access;
+						ls_fsm_ns = (split_misaligned_access ? WAIT_RVALID_MIS : IDLE);
+					end
+					else
+						ls_fsm_ns = (split_misaligned_access ? WAIT_GNT_MIS : WAIT_GNT);
+				end
+			end
+			WAIT_GNT_MIS: begin
+				data_req_o = 1'b1;
+				if (data_gnt_i || pmp_err_q) begin
+					addr_update = 1'b1;
+					ctrl_update = 1'b1;
+					handle_misaligned_d = 1'b1;
+					ls_fsm_ns = WAIT_RVALID_MIS;
+				end
+			end
+			WAIT_RVALID_MIS: begin
+				data_req_o = 1'b1;
+				addr_incr_req_o = 1'b1;
+				if (data_rvalid_i || pmp_err_q) begin
+					pmp_err_d = data_pmp_err_i;
+					lsu_err_d = data_err_i | pmp_err_q;
+					rdata_update = ~data_we_q;
+					ls_fsm_ns = (data_gnt_i ? IDLE : WAIT_GNT);
+					addr_update = data_gnt_i & ~(data_err_i | pmp_err_q);
+					handle_misaligned_d = ~data_gnt_i;
+				end
+				else if (data_gnt_i) begin
+					ls_fsm_ns = WAIT_RVALID_MIS_GNTS_DONE;
+					handle_misaligned_d = 1'b0;
+				end
+			end
+			WAIT_GNT: begin
+				addr_incr_req_o = handle_misaligned_q;
+				data_req_o = 1'b1;
+				if (data_gnt_i || pmp_err_q) begin
+					ctrl_update = 1'b1;
+					addr_update = ~lsu_err_q;
+					ls_fsm_ns = IDLE;
+					handle_misaligned_d = 1'b0;
+				end
+			end
+			WAIT_RVALID_MIS_GNTS_DONE: begin
+				addr_incr_req_o = 1'b1;
+				if (data_rvalid_i) begin
+					pmp_err_d = data_pmp_err_i;
+					lsu_err_d = data_err_i;
+					addr_update = ~data_err_i;
+					rdata_update = ~data_we_q;
+					ls_fsm_ns = IDLE;
+				end
+			end
+			default: ls_fsm_ns = IDLE;
+		endcase
+	end
+	assign lsu_req_done_o = (lsu_req_i | (ls_fsm_cs != IDLE)) & (ls_fsm_ns == IDLE);
+	always @(posedge clk_i or negedge rst_ni)
+		if (!rst_ni) begin
+			ls_fsm_cs <= IDLE;
+			handle_misaligned_q <= 1'b0;
+			pmp_err_q <= 1'b0;
+			lsu_err_q <= 1'b0;
+		end
+		else begin
+			ls_fsm_cs <= ls_fsm_ns;
+			handle_misaligned_q <= handle_misaligned_d;
+			pmp_err_q <= pmp_err_d;
+			lsu_err_q <= lsu_err_d;
+		end
+	assign data_or_pmp_err = (lsu_err_q | data_err_i) | pmp_err_q;
+	assign lsu_resp_valid_o = (data_rvalid_i | pmp_err_q) & (ls_fsm_cs == IDLE);
+	assign lsu_rdata_valid_o = (((ls_fsm_cs == IDLE) & data_rvalid_i) & ~data_or_pmp_err) & ~data_we_q;
+	assign lsu_rdata_o = data_rdata_ext;
+	assign data_addr_w_aligned = {data_addr[31:2], 2'b00};
+	assign data_addr_o = data_addr_w_aligned;
+	assign data_wdata_o = data_wdata;
+	assign data_we_o = lsu_we_i;
+	assign data_be_o = data_be;
+	assign addr_last_o = addr_last_q;
+	assign load_err_o = (data_or_pmp_err & ~data_we_q) & lsu_resp_valid_o;
+	assign store_err_o = (data_or_pmp_err & data_we_q) & lsu_resp_valid_o;
+	assign busy_o = ls_fsm_cs != IDLE;
+endmodule
+module brq_pmp (
+	clk_i,
+	rst_ni,
+	csr_pmp_cfg_i,
+	csr_pmp_addr_i,
+	priv_mode_i,
+	pmp_req_addr_i,
+	pmp_req_type_i,
+	pmp_req_err_o
+);
+	parameter [31:0] PMPGranularity = 0;
+	parameter [31:0] PMPNumChan = 2;
+	parameter [31:0] PMPNumRegions = 4;
+	input wire clk_i;
+	input wire rst_ni;
+	input wire [(0 >= (PMPNumRegions - 1) ? ((2 - PMPNumRegions) * 6) + (((PMPNumRegions - 1) * 6) - 1) : (PMPNumRegions * 6) - 1):(0 >= (PMPNumRegions - 1) ? (PMPNumRegions - 1) * 6 : 0)] csr_pmp_cfg_i;
+	input wire [(0 >= (PMPNumRegions - 1) ? ((2 - PMPNumRegions) * 34) + (((PMPNumRegions - 1) * 34) - 1) : (PMPNumRegions * 34) - 1):(0 >= (PMPNumRegions - 1) ? (PMPNumRegions - 1) * 34 : 0)] csr_pmp_addr_i;
+	input wire [(0 >= (PMPNumChan - 1) ? ((2 - PMPNumChan) * 2) + (((PMPNumChan - 1) * 2) - 1) : (PMPNumChan * 2) - 1):(0 >= (PMPNumChan - 1) ? (PMPNumChan - 1) * 2 : 0)] priv_mode_i;
+	input wire [(0 >= (PMPNumChan - 1) ? ((2 - PMPNumChan) * 34) + (((PMPNumChan - 1) * 34) - 1) : (PMPNumChan * 34) - 1):(0 >= (PMPNumChan - 1) ? (PMPNumChan - 1) * 34 : 0)] pmp_req_addr_i;
+	input wire [(0 >= (PMPNumChan - 1) ? ((2 - PMPNumChan) * 2) + (((PMPNumChan - 1) * 2) - 1) : (PMPNumChan * 2) - 1):(0 >= (PMPNumChan - 1) ? (PMPNumChan - 1) * 2 : 0)] pmp_req_type_i;
+	output wire [0:PMPNumChan - 1] pmp_req_err_o;
+	wire [33:0] region_start_addr [0:PMPNumRegions - 1];
+	wire [33:PMPGranularity + 2] region_addr_mask [0:PMPNumRegions - 1];
+	wire [(PMPNumChan * PMPNumRegions) - 1:0] region_match_gt;
+	wire [(PMPNumChan * PMPNumRegions) - 1:0] region_match_lt;
+	wire [(PMPNumChan * PMPNumRegions) - 1:0] region_match_eq;
+	reg [(PMPNumChan * PMPNumRegions) - 1:0] region_match_all;
+	wire [(PMPNumChan * PMPNumRegions) - 1:0] region_perm_check;
+	reg [PMPNumChan - 1:0] access_fault;
+	localparam [1:0] brq_pkg_PMP_MODE_NAPOT = 2'b11;
+	localparam [1:0] brq_pkg_PMP_MODE_TOR = 2'b01;
+	generate
+		genvar r;
+		for (r = 0; r < PMPNumRegions; r = r + 1) begin : g_addr_exp
+			if (r == 0) begin : g_entry0
+				assign region_start_addr[r] = (csr_pmp_cfg_i[((0 >= (PMPNumRegions - 1) ? r : (PMPNumRegions - 1) - r) * 6) + 4-:2] == brq_pkg_PMP_MODE_TOR ? 34'h000000000 : csr_pmp_addr_i[(0 >= (PMPNumRegions - 1) ? r : (PMPNumRegions - 1) - r) * 34+:34]);
+			end
+			else begin : g_oth
+				assign region_start_addr[r] = (csr_pmp_cfg_i[((0 >= (PMPNumRegions - 1) ? r : (PMPNumRegions - 1) - r) * 6) + 4-:2] == brq_pkg_PMP_MODE_TOR ? csr_pmp_addr_i[(0 >= (PMPNumRegions - 1) ? r - 1 : (PMPNumRegions - 1) - (r - 1)) * 34+:34] : csr_pmp_addr_i[(0 >= (PMPNumRegions - 1) ? r : (PMPNumRegions - 1) - r) * 34+:34]);
+			end
+			genvar b;
+			for (b = PMPGranularity + 2; b < 34; b = b + 1) begin : g_bitmask
+				if (b == 2) begin : g_bit0
+					assign region_addr_mask[r][b] = csr_pmp_cfg_i[((0 >= (PMPNumRegions - 1) ? r : (PMPNumRegions - 1) - r) * 6) + 4-:2] != brq_pkg_PMP_MODE_NAPOT;
+				end
+				else begin : g_others
+					assign region_addr_mask[r][b] = (csr_pmp_cfg_i[((0 >= (PMPNumRegions - 1) ? r : (PMPNumRegions - 1) - r) * 6) + 4-:2] != brq_pkg_PMP_MODE_NAPOT) | ~&csr_pmp_addr_i[((0 >= (PMPNumRegions - 1) ? r : (PMPNumRegions - 1) - r) * 34) + ((b - 1) >= (PMPGranularity + 1) ? b - 1 : ((b - 1) + ((b - 1) >= (PMPGranularity + 1) ? ((b - 1) - (PMPGranularity + 1)) + 1 : ((PMPGranularity + 1) - (b - 1)) + 1)) - 1)-:((b - 1) >= (PMPGranularity + 1) ? ((b - 1) - (PMPGranularity + 1)) + 1 : ((PMPGranularity + 1) - (b - 1)) + 1)];
+				end
+			end
+		end
+	endgenerate
+	localparam [1:0] brq_pkg_PMP_ACC_EXEC = 2'b00;
+	localparam [1:0] brq_pkg_PMP_ACC_READ = 2'b10;
+	localparam [1:0] brq_pkg_PMP_ACC_WRITE = 2'b01;
+	localparam [1:0] brq_pkg_PMP_MODE_NA4 = 2'b10;
+	localparam [1:0] brq_pkg_PMP_MODE_OFF = 2'b00;
+	localparam [1:0] brq_pkg_PRIV_LVL_M = 2'b11;
+	generate
+		genvar c;
+		for (c = 0; c < PMPNumChan; c = c + 1) begin : g_access_check
+			for (r = 0; r < PMPNumRegions; r = r + 1) begin : g_regions
+				assign region_match_eq[(c * PMPNumRegions) + r] = (pmp_req_addr_i[((0 >= (PMPNumChan - 1) ? c : (PMPNumChan - 1) - c) * 34) + (33 >= (PMPGranularity + 2) ? 33 : (33 + (33 >= (PMPGranularity + 2) ? 34 - (PMPGranularity + 2) : PMPGranularity - 30)) - 1)-:(33 >= (PMPGranularity + 2) ? 34 - (PMPGranularity + 2) : PMPGranularity - 30)] & region_addr_mask[r]) == (region_start_addr[r][33:PMPGranularity + 2] & region_addr_mask[r]);
+				assign region_match_gt[(c * PMPNumRegions) + r] = pmp_req_addr_i[((0 >= (PMPNumChan - 1) ? c : (PMPNumChan - 1) - c) * 34) + (33 >= (PMPGranularity + 2) ? 33 : (33 + (33 >= (PMPGranularity + 2) ? 34 - (PMPGranularity + 2) : PMPGranularity - 30)) - 1)-:(33 >= (PMPGranularity + 2) ? 34 - (PMPGranularity + 2) : PMPGranularity - 30)] > region_start_addr[r][33:PMPGranularity + 2];
+				assign region_match_lt[(c * PMPNumRegions) + r] = pmp_req_addr_i[((0 >= (PMPNumChan - 1) ? c : (PMPNumChan - 1) - c) * 34) + (33 >= (PMPGranularity + 2) ? 33 : (33 + (33 >= (PMPGranularity + 2) ? 34 - (PMPGranularity + 2) : PMPGranularity - 30)) - 1)-:(33 >= (PMPGranularity + 2) ? 34 - (PMPGranularity + 2) : PMPGranularity - 30)] < csr_pmp_addr_i[((0 >= (PMPNumRegions - 1) ? r : (PMPNumRegions - 1) - r) * 34) + (33 >= (PMPGranularity + 2) ? 33 : (33 + (33 >= (PMPGranularity + 2) ? 34 - (PMPGranularity + 2) : PMPGranularity - 30)) - 1)-:(33 >= (PMPGranularity + 2) ? 34 - (PMPGranularity + 2) : PMPGranularity - 30)];
+				always @(*) begin
+					region_match_all[(c * PMPNumRegions) + r] = 1'b0;
+					case (csr_pmp_cfg_i[((0 >= (PMPNumRegions - 1) ? r : (PMPNumRegions - 1) - r) * 6) + 4-:2])
+						brq_pkg_PMP_MODE_OFF: region_match_all[(c * PMPNumRegions) + r] = 1'b0;
+						brq_pkg_PMP_MODE_NA4: region_match_all[(c * PMPNumRegions) + r] = region_match_eq[(c * PMPNumRegions) + r];
+						brq_pkg_PMP_MODE_NAPOT: region_match_all[(c * PMPNumRegions) + r] = region_match_eq[(c * PMPNumRegions) + r];
+						brq_pkg_PMP_MODE_TOR: region_match_all[(c * PMPNumRegions) + r] = (region_match_eq[(c * PMPNumRegions) + r] | region_match_gt[(c * PMPNumRegions) + r]) & region_match_lt[(c * PMPNumRegions) + r];
+						default: region_match_all[(c * PMPNumRegions) + r] = 1'b0;
+					endcase
+				end
+				assign region_perm_check[(c * PMPNumRegions) + r] = (((pmp_req_type_i[(0 >= (PMPNumChan - 1) ? c : (PMPNumChan - 1) - c) * 2+:2] == brq_pkg_PMP_ACC_EXEC) & csr_pmp_cfg_i[((0 >= (PMPNumRegions - 1) ? r : (PMPNumRegions - 1) - r) * 6) + 2]) | ((pmp_req_type_i[(0 >= (PMPNumChan - 1) ? c : (PMPNumChan - 1) - c) * 2+:2] == brq_pkg_PMP_ACC_WRITE) & csr_pmp_cfg_i[((0 >= (PMPNumRegions - 1) ? r : (PMPNumRegions - 1) - r) * 6) + 1])) | ((pmp_req_type_i[(0 >= (PMPNumChan - 1) ? c : (PMPNumChan - 1) - c) * 2+:2] == brq_pkg_PMP_ACC_READ) & csr_pmp_cfg_i[(0 >= (PMPNumRegions - 1) ? r : (PMPNumRegions - 1) - r) * 6]);
+			end
+			always @(*) begin
+				access_fault[c] = priv_mode_i[(0 >= (PMPNumChan - 1) ? c : (PMPNumChan - 1) - c) * 2+:2] != brq_pkg_PRIV_LVL_M;
+				begin : sv2v_autoblock_100
+					reg signed [31:0] r;
+					for (r = PMPNumRegions - 1; r >= 0; r = r - 1)
+						if (region_match_all[(c * PMPNumRegions) + r])
+							access_fault[c] = (priv_mode_i[(0 >= (PMPNumChan - 1) ? c : (PMPNumChan - 1) - c) * 2+:2] == brq_pkg_PRIV_LVL_M ? csr_pmp_cfg_i[((0 >= (PMPNumRegions - 1) ? r : (PMPNumRegions - 1) - r) * 6) + 5] & ~region_perm_check[(c * PMPNumRegions) + r] : ~region_perm_check[(c * PMPNumRegions) + r]);
+				end
+			end
+			assign pmp_req_err_o[c] = access_fault[c];
+		end
+	endgenerate
+endmodule
+module brq_register_file_ff (
+	clk_i,
+	rst_ni,
+	dummy_instr_id_i,
+	raddr_a_i,
+	rdata_a_o,
+	raddr_b_i,
+	rdata_b_o,
+	waddr_a_i,
+	wdata_a_i,
+	we_a_i
+);
+	parameter [0:0] RV32E = 0;
+	parameter [31:0] DataWidth = 32;
+	parameter [0:0] DummyInstructions = 0;
+	input wire clk_i;
+	input wire rst_ni;
+	input wire dummy_instr_id_i;
+	input wire [4:0] raddr_a_i;
+	output wire [DataWidth - 1:0] rdata_a_o;
+	input wire [4:0] raddr_b_i;
+	output wire [DataWidth - 1:0] rdata_b_o;
+	input wire [4:0] waddr_a_i;
+	input wire [DataWidth - 1:0] wdata_a_i;
+	input wire we_a_i;
+	localparam [31:0] ADDR_WIDTH = (RV32E ? 4 : 5);
+	localparam [31:0] NUM_WORDS = 2 ** ADDR_WIDTH;
+	wire [(NUM_WORDS * DataWidth) - 1:0] rf_reg;
+	reg [((NUM_WORDS - 1) >= 1 ? ((NUM_WORDS - 1) * DataWidth) + (DataWidth - 1) : ((3 - NUM_WORDS) * DataWidth) + (((NUM_WORDS - 1) * DataWidth) - 1)):((NUM_WORDS - 1) >= 1 ? DataWidth : (NUM_WORDS - 1) * DataWidth)] rf_reg_q;
+	reg [NUM_WORDS - 1:1] we_a_dec;
+	function automatic [4:0] sv2v_cast_5;
+		input reg [4:0] inp;
+		sv2v_cast_5 = inp;
+	endfunction
+	always @(*) begin : we_a_decoder
+		begin : sv2v_autoblock_101
+			reg [31:0] i;
+			for (i = 1; i < NUM_WORDS; i = i + 1)
+				we_a_dec[i] = (waddr_a_i == sv2v_cast_5(i) ? we_a_i : 1'b0);
+		end
+	end
+	generate
+		genvar i;
+		for (i = 1; i < NUM_WORDS; i = i + 1) begin : g_rf_flops
+			always @(posedge clk_i or negedge rst_ni)
+				if (!rst_ni)
+					rf_reg_q[((NUM_WORDS - 1) >= 1 ? i : 1 - (i - (NUM_WORDS - 1))) * DataWidth+:DataWidth] <= {DataWidth {1'sb0}};
+				else if (we_a_dec[i])
+					rf_reg_q[((NUM_WORDS - 1) >= 1 ? i : 1 - (i - (NUM_WORDS - 1))) * DataWidth+:DataWidth] <= wdata_a_i;
+		end
+	endgenerate
+	generate
+		if (DummyInstructions) begin : g_dummy_r0
+			wire we_r0_dummy;
+			reg [DataWidth - 1:0] rf_r0_q;
+			assign we_r0_dummy = we_a_i & dummy_instr_id_i;
+			always @(posedge clk_i or negedge rst_ni)
+				if (!rst_ni)
+					rf_r0_q <= {DataWidth {1'sb0}};
+				else if (we_r0_dummy)
+					rf_r0_q <= wdata_a_i;
+			assign rf_reg[0+:DataWidth] = (dummy_instr_id_i ? rf_r0_q : {DataWidth {1'sb0}});
+		end
+		else begin : g_normal_r0
+			wire unused_dummy_instr_id;
+			assign unused_dummy_instr_id = dummy_instr_id_i;
+			assign rf_reg[0+:DataWidth] = {DataWidth {1'sb0}};
+		end
+	endgenerate
+	assign rf_reg[DataWidth * (((NUM_WORDS - 1) >= 1 ? NUM_WORDS - 1 : ((NUM_WORDS - 1) + ((NUM_WORDS - 1) >= 1 ? NUM_WORDS - 1 : 3 - NUM_WORDS)) - 1) - (((NUM_WORDS - 1) >= 1 ? NUM_WORDS - 1 : 3 - NUM_WORDS) - 1))+:DataWidth * ((NUM_WORDS - 1) >= 1 ? NUM_WORDS - 1 : 3 - NUM_WORDS)] = rf_reg_q[DataWidth * ((NUM_WORDS - 1) >= 1 ? ((NUM_WORDS - 1) >= 1 ? ((NUM_WORDS - 1) >= 1 ? NUM_WORDS - 1 : ((NUM_WORDS - 1) + ((NUM_WORDS - 1) >= 1 ? NUM_WORDS - 1 : 3 - NUM_WORDS)) - 1) - (((NUM_WORDS - 1) >= 1 ? NUM_WORDS - 1 : 3 - NUM_WORDS) - 1) : ((NUM_WORDS - 1) >= 1 ? NUM_WORDS - 1 : ((NUM_WORDS - 1) + ((NUM_WORDS - 1) >= 1 ? NUM_WORDS - 1 : 3 - NUM_WORDS)) - 1)) : 1 - (((NUM_WORDS - 1) >= 1 ? ((NUM_WORDS - 1) >= 1 ? NUM_WORDS - 1 : ((NUM_WORDS - 1) + ((NUM_WORDS - 1) >= 1 ? NUM_WORDS - 1 : 3 - NUM_WORDS)) - 1) - (((NUM_WORDS - 1) >= 1 ? NUM_WORDS - 1 : 3 - NUM_WORDS) - 1) : ((NUM_WORDS - 1) >= 1 ? NUM_WORDS - 1 : ((NUM_WORDS - 1) + ((NUM_WORDS - 1) >= 1 ? NUM_WORDS - 1 : 3 - NUM_WORDS)) - 1)) - (NUM_WORDS - 1)))+:DataWidth * ((NUM_WORDS - 1) >= 1 ? NUM_WORDS - 1 : 3 - NUM_WORDS)];
+	assign rdata_a_o = rf_reg[raddr_a_i * DataWidth+:DataWidth];
+	assign rdata_b_o = rf_reg[raddr_b_i * DataWidth+:DataWidth];
+endmodule
+module brq_wbu (
+	clk_i,
+	rst_ni,
+	en_wb_i,
+	instr_type_wb_i,
+	pc_id_i,
+	instr_is_compressed_id_i,
+	instr_perf_count_id_i,
+	ready_wb_o,
+	rf_write_wb_o,
+	outstanding_load_wb_o,
+	outstanding_store_wb_o,
+	pc_wb_o,
+	perf_instr_ret_wb_o,
+	perf_instr_ret_compressed_wb_o,
+	rf_waddr_id_i,
+	rf_wdata_id_i,
+	rf_we_id_i,
+	rf_wdata_lsu_i,
+	rf_we_lsu_i,
+	rf_wdata_fwd_wb_o,
+	rf_waddr_wb_o,
+	rf_wdata_wb_o,
+	rf_we_wb_o,
+	lsu_resp_valid_i,
+	lsu_resp_err_i,
+	instr_done_wb_o,
+	fp_rf_write_wb_o,
+	fp_rf_wen_wb_o,
+	fp_rf_waddr_wb_o,
+	fp_rf_waddr_id_i,
+	fp_rf_wen_id_i,
+	fp_rf_wdata_wb_o,
+	fp_load_i
+);
+	parameter [0:0] WritebackStage = 1'b0;
+	input wire clk_i;
+	input wire rst_ni;
+	input wire en_wb_i;
+	input wire [1:0] instr_type_wb_i;
+	input wire [31:0] pc_id_i;
+	input wire instr_is_compressed_id_i;
+	input wire instr_perf_count_id_i;
+	output wire ready_wb_o;
+	output wire rf_write_wb_o;
+	output wire outstanding_load_wb_o;
+	output wire outstanding_store_wb_o;
+	output wire [31:0] pc_wb_o;
+	output wire perf_instr_ret_wb_o;
+	output wire perf_instr_ret_compressed_wb_o;
+	input wire [4:0] rf_waddr_id_i;
+	input wire [31:0] rf_wdata_id_i;
+	input wire rf_we_id_i;
+	input wire [31:0] rf_wdata_lsu_i;
+	input wire rf_we_lsu_i;
+	output wire [31:0] rf_wdata_fwd_wb_o;
+	output wire [4:0] rf_waddr_wb_o;
+	output wire [31:0] rf_wdata_wb_o;
+	output wire rf_we_wb_o;
+	input wire lsu_resp_valid_i;
+	input wire lsu_resp_err_i;
+	output wire instr_done_wb_o;
+	output wire fp_rf_write_wb_o;
+	output wire fp_rf_wen_wb_o;
+	output wire [4:0] fp_rf_waddr_wb_o;
+	input wire [4:0] fp_rf_waddr_id_i;
+	input wire fp_rf_wen_id_i;
+	output wire [31:0] fp_rf_wdata_wb_o;
+	input wire fp_load_i;
+	wire [31:0] rf_wdata_wb_mux [0:1];
+	wire [1:0] rf_wdata_wb_mux_we;
+	wire [31:0] fp_rf_wdata_wb_mux [0:1];
+	wire [1:0] fp_rf_wdata_wb_mux_we;
+	localparam [1:0] brq_pkg_WB_INSTR_LOAD = 0;
+	localparam [1:0] brq_pkg_WB_INSTR_OTHER = 2;
+	localparam [1:0] brq_pkg_WB_INSTR_STORE = 1;
+	generate
+		if (WritebackStage) begin : g_writeback_stage
+			reg [31:0] rf_wdata_wb_q;
+			reg rf_we_wb_q;
+			reg [4:0] rf_waddr_wb_q;
+			wire wb_done;
+			reg wb_valid_q;
+			reg [31:0] wb_pc_q;
+			reg wb_compressed_q;
+			reg wb_count_q;
+			reg [1:0] wb_instr_type_q;
+			wire wb_valid_d;
+			reg fp_rf_we_wb_q;
+			reg fp_load_q;
+			assign wb_valid_d = (en_wb_i & ready_wb_o) | (wb_valid_q & ~wb_done);
+			assign wb_done = (wb_instr_type_q == brq_pkg_WB_INSTR_OTHER) | lsu_resp_valid_i;
+			always @(posedge clk_i or negedge rst_ni)
+				if (~rst_ni)
+					wb_valid_q <= 1'b0;
+				else
+					wb_valid_q <= wb_valid_d;
+			always @(posedge clk_i)
+				if (~rst_ni) begin
+					rf_we_wb_q <= 1'b0;
+					rf_waddr_wb_q <= {5 {1'sb0}};
+					rf_wdata_wb_q <= {32 {1'sb0}};
+					wb_instr_type_q <= {2 {1'sb0}};
+					wb_pc_q <= {32 {1'sb0}};
+					wb_compressed_q <= 1'b0;
+					wb_count_q <= 1'b0;
+					fp_rf_we_wb_q <= 1'b0;
+					fp_load_q <= 1'b0;
+				end
+				else if (en_wb_i) begin
+					rf_we_wb_q <= rf_we_id_i;
+					rf_waddr_wb_q <= rf_waddr_id_i;
+					rf_wdata_wb_q <= rf_wdata_id_i;
+					wb_instr_type_q <= instr_type_wb_i;
+					wb_pc_q <= pc_id_i;
+					wb_compressed_q <= instr_is_compressed_id_i;
+					wb_count_q <= instr_perf_count_id_i;
+					fp_rf_we_wb_q <= fp_rf_wen_id_i;
+					fp_load_q <= fp_load_i;
+				end
+			assign rf_waddr_wb_o = rf_waddr_wb_q;
+			assign rf_wdata_wb_mux[0] = rf_wdata_wb_q;
+			assign rf_wdata_wb_mux_we[0] = rf_we_wb_q & wb_valid_q;
+			assign fp_rf_waddr_wb_o = rf_waddr_wb_q;
+			assign fp_rf_wdata_wb_mux[0] = rf_wdata_wb_q;
+			assign fp_rf_wdata_wb_mux_we[0] = fp_rf_we_wb_q & wb_valid_q;
+			assign ready_wb_o = ~wb_valid_q | wb_done;
+			assign rf_write_wb_o = wb_valid_q & (rf_we_wb_q | (wb_instr_type_q == brq_pkg_WB_INSTR_LOAD));
+			assign fp_rf_write_wb_o = wb_valid_q & (fp_rf_we_wb_q | (wb_instr_type_q == brq_pkg_WB_INSTR_LOAD));
+			assign outstanding_load_wb_o = wb_valid_q & (wb_instr_type_q == brq_pkg_WB_INSTR_LOAD);
+			assign outstanding_store_wb_o = wb_valid_q & (wb_instr_type_q == brq_pkg_WB_INSTR_STORE);
+			assign pc_wb_o = wb_pc_q;
+			assign instr_done_wb_o = wb_valid_q & wb_done;
+			assign perf_instr_ret_wb_o = (instr_done_wb_o & wb_count_q) & ~(lsu_resp_valid_i & lsu_resp_err_i);
+			assign perf_instr_ret_compressed_wb_o = perf_instr_ret_wb_o & wb_compressed_q;
+			assign rf_wdata_fwd_wb_o = rf_wdata_wb_q;
+			assign rf_wdata_wb_mux[1] = rf_wdata_lsu_i;
+			assign rf_wdata_wb_mux_we[1] = rf_we_lsu_i & ~fp_load_q;
+			assign fp_rf_wdata_wb_mux[1] = rf_wdata_lsu_i;
+			assign fp_rf_wdata_wb_mux_we[1] = rf_we_lsu_i & fp_load_q;
+		end
+		else begin : g_bypass_wb
+			assign rf_waddr_wb_o = rf_waddr_id_i;
+			assign rf_wdata_wb_mux[0] = rf_wdata_id_i;
+			assign rf_wdata_wb_mux_we[0] = rf_we_id_i;
+			assign fp_rf_waddr_wb_o = rf_waddr_id_i;
+			assign fp_rf_wdata_wb_mux[0] = rf_wdata_id_i;
+			assign fp_rf_wdata_wb_mux_we[0] = fp_rf_wen_id_i;
+			assign perf_instr_ret_wb_o = (instr_perf_count_id_i & en_wb_i) & ~(lsu_resp_valid_i & lsu_resp_err_i);
+			assign perf_instr_ret_compressed_wb_o = perf_instr_ret_wb_o & instr_is_compressed_id_i;
+			assign ready_wb_o = 1'b1;
+			wire unused_clk;
+			wire unused_rst;
+			wire [1:0] unused_instr_type_wb;
+			wire [31:0] unused_pc_id;
+			assign unused_clk = clk_i;
+			assign unused_rst = rst_ni;
+			assign unused_instr_type_wb = instr_type_wb_i;
+			assign unused_pc_id = pc_id_i;
+			assign outstanding_load_wb_o = 1'b0;
+			assign outstanding_store_wb_o = 1'b0;
+			assign pc_wb_o = {32 {1'sb0}};
+			assign rf_write_wb_o = 1'b0;
+			assign rf_wdata_fwd_wb_o = 32'b00000000000000000000000000000000;
+			assign instr_done_wb_o = 1'b0;
+			assign rf_wdata_wb_mux[1] = rf_wdata_lsu_i;
+			assign rf_wdata_wb_mux_we[1] = rf_we_lsu_i & ~fp_load_i;
+			assign fp_rf_wdata_wb_mux[1] = rf_wdata_lsu_i;
+			assign fp_rf_wdata_wb_mux_we[1] = rf_we_lsu_i & fp_load_i;
+		end
+	endgenerate
+	assign rf_wdata_wb_o = (rf_wdata_wb_mux_we[0] ? rf_wdata_wb_mux[0] : rf_wdata_wb_mux[1]);
+	assign rf_we_wb_o = |rf_wdata_wb_mux_we;
+	assign fp_rf_wdata_wb_o = (fp_rf_wdata_wb_mux_we[0] ? fp_rf_wdata_wb_mux[0] : fp_rf_wdata_wb_mux[1]);
+	assign fp_rf_wen_wb_o = |fp_rf_wdata_wb_mux_we;
+endmodule
+module control_mvp (
+	Clk_CI,
+	Rst_RBI,
+	Div_start_SI,
+	Sqrt_start_SI,
+	Start_SI,
+	Kill_SI,
+	Special_case_SBI,
+	Special_case_dly_SBI,
+	Precision_ctl_SI,
+	Format_sel_SI,
+	Numerator_DI,
+	Exp_num_DI,
+	Denominator_DI,
+	Exp_den_DI,
+	Div_start_dly_SO,
+	Sqrt_start_dly_SO,
+	Div_enable_SO,
+	Sqrt_enable_SO,
+	Full_precision_SO,
+	FP32_SO,
+	FP64_SO,
+	FP16_SO,
+	FP16ALT_SO,
+	Ready_SO,
+	Done_SO,
+	Mant_result_prenorm_DO,
+	Exp_result_prenorm_DO
+);
+	input wire Clk_CI;
+	input wire Rst_RBI;
+	input wire Div_start_SI;
+	input wire Sqrt_start_SI;
+	input wire Start_SI;
+	input wire Kill_SI;
+	input wire Special_case_SBI;
+	input wire Special_case_dly_SBI;
+	localparam defs_div_sqrt_mvp_C_PC = 6;
+	input wire [5:0] Precision_ctl_SI;
+	input wire [1:0] Format_sel_SI;
+	localparam defs_div_sqrt_mvp_C_MANT_FP64 = 52;
+	input wire [defs_div_sqrt_mvp_C_MANT_FP64:0] Numerator_DI;
+	localparam defs_div_sqrt_mvp_C_EXP_FP64 = 11;
+	input wire [defs_div_sqrt_mvp_C_EXP_FP64:0] Exp_num_DI;
+	input wire [defs_div_sqrt_mvp_C_MANT_FP64:0] Denominator_DI;
+	input wire [defs_div_sqrt_mvp_C_EXP_FP64:0] Exp_den_DI;
+	output wire Div_start_dly_SO;
+	output wire Sqrt_start_dly_SO;
+	output reg Div_enable_SO;
+	output reg Sqrt_enable_SO;
+	output wire Full_precision_SO;
+	output wire FP32_SO;
+	output wire FP64_SO;
+	output wire FP16_SO;
+	output wire FP16ALT_SO;
+	output reg Ready_SO;
+	output reg Done_SO;
+	output reg [56:0] Mant_result_prenorm_DO;
+	output wire [12:0] Exp_result_prenorm_DO;
+	reg [57:0] Partial_remainder_DN;
+	reg [57:0] Partial_remainder_DP;
+	reg [56:0] Quotient_DP;
+	wire [53:0] Numerator_se_D;
+	wire [53:0] Denominator_se_D;
+	reg [53:0] Denominator_se_DB;
+	assign Numerator_se_D = {1'b0, Numerator_DI};
+	assign Denominator_se_D = {1'b0, Denominator_DI};
+	localparam defs_div_sqrt_mvp_C_MANT_FP16 = 10;
+	localparam defs_div_sqrt_mvp_C_MANT_FP16ALT = 7;
+	localparam defs_div_sqrt_mvp_C_MANT_FP32 = 23;
+	always @(*)
+		if (FP32_SO)
+			Denominator_se_DB = {~Denominator_se_D[53:29], {29 {1'b0}}};
+		else if (FP64_SO)
+			Denominator_se_DB = ~Denominator_se_D;
+		else if (FP16_SO)
+			Denominator_se_DB = {~Denominator_se_D[53:42], {42 {1'b0}}};
+		else
+			Denominator_se_DB = {~Denominator_se_D[53:45], {45 {1'b0}}};
+	wire [53:0] Mant_D_sqrt_Norm;
+	assign Mant_D_sqrt_Norm = (Exp_num_DI[0] ? {1'b0, Numerator_DI} : {Numerator_DI, 1'b0});
+	reg [1:0] Format_sel_S;
+	always @(posedge Clk_CI or negedge Rst_RBI)
+		if (~Rst_RBI)
+			Format_sel_S <= 'b0;
+		else if (Start_SI && Ready_SO)
+			Format_sel_S <= Format_sel_SI;
+		else
+			Format_sel_S <= Format_sel_S;
+	assign FP32_SO = Format_sel_S == 2'b00;
+	assign FP64_SO = Format_sel_S == 2'b01;
+	assign FP16_SO = Format_sel_S == 2'b10;
+	assign FP16ALT_SO = Format_sel_S == 2'b11;
+	reg [5:0] Precision_ctl_S;
+	always @(posedge Clk_CI or negedge Rst_RBI)
+		if (~Rst_RBI)
+			Precision_ctl_S <= 'b0;
+		else if (Start_SI && Ready_SO)
+			Precision_ctl_S <= Precision_ctl_SI;
+		else
+			Precision_ctl_S <= Precision_ctl_S;
+	assign Full_precision_SO = Precision_ctl_S == 6'h00;
+	reg [5:0] State_ctl_S;
+	wire [5:0] State_Two_iteration_unit_S;
+	wire [5:0] State_Four_iteration_unit_S;
+	assign State_Two_iteration_unit_S = Precision_ctl_S[5:1];
+	assign State_Four_iteration_unit_S = Precision_ctl_S[5:2];
+	localparam defs_div_sqrt_mvp_Iteration_unit_num_S = 2'b10;
+	always @(*)
+		case (defs_div_sqrt_mvp_Iteration_unit_num_S)
+			2'b00:
+				case (Format_sel_S)
+					2'b00:
+						if (Full_precision_SO)
+							State_ctl_S = 6'h1b;
+						else
+							State_ctl_S = Precision_ctl_S;
+					2'b01:
+						if (Full_precision_SO)
+							State_ctl_S = 6'h38;
+						else
+							State_ctl_S = Precision_ctl_S;
+					2'b10:
+						if (Full_precision_SO)
+							State_ctl_S = 6'h0e;
+						else
+							State_ctl_S = Precision_ctl_S;
+					2'b11:
+						if (Full_precision_SO)
+							State_ctl_S = 6'h0b;
+						else
+							State_ctl_S = Precision_ctl_S;
+				endcase
+			2'b01:
+				case (Format_sel_S)
+					2'b00:
+						if (Full_precision_SO)
+							State_ctl_S = 6'h0d;
+						else
+							State_ctl_S = State_Two_iteration_unit_S;
+					2'b01:
+						if (Full_precision_SO)
+							State_ctl_S = 6'h1b;
+						else
+							State_ctl_S = State_Two_iteration_unit_S;
+					2'b10:
+						if (Full_precision_SO)
+							State_ctl_S = 6'h06;
+						else
+							State_ctl_S = State_Two_iteration_unit_S;
+					2'b11:
+						if (Full_precision_SO)
+							State_ctl_S = 6'h05;
+						else
+							State_ctl_S = State_Two_iteration_unit_S;
+				endcase
+			2'b10:
+				case (Format_sel_S)
+					2'b00:
+						case (Precision_ctl_S)
+							6'h00: State_ctl_S = 6'h08;
+							6'h06, 6'h07, 6'h08: State_ctl_S = 6'h02;
+							6'h09, 6'h0a, 6'h0b: State_ctl_S = 6'h03;
+							6'h0c, 6'h0d, 6'h0e: State_ctl_S = 6'h04;
+							6'h0f, 6'h10, 6'h11: State_ctl_S = 6'h05;
+							6'h12, 6'h13, 6'h14: State_ctl_S = 6'h06;
+							6'h15, 6'h16, 6'h17: State_ctl_S = 6'h07;
+							default: State_ctl_S = 6'h08;
+						endcase
+					2'b01:
+						case (Precision_ctl_S)
+							6'h00: State_ctl_S = 6'h12;
+							6'h06, 6'h07, 6'h08: State_ctl_S = 6'h02;
+							6'h09, 6'h0a, 6'h0b: State_ctl_S = 6'h03;
+							6'h0c, 6'h0d, 6'h0e: State_ctl_S = 6'h04;
+							6'h0f, 6'h10, 6'h11: State_ctl_S = 6'h05;
+							6'h12, 6'h13, 6'h14: State_ctl_S = 6'h06;
+							6'h15, 6'h16, 6'h17: State_ctl_S = 6'h07;
+							6'h18, 6'h19, 6'h1a: State_ctl_S = 6'h08;
+							6'h1b, 6'h1c, 6'h1d: State_ctl_S = 6'h09;
+							6'h1e, 6'h1f, 6'h20: State_ctl_S = 6'h0a;
+							6'h21, 6'h22, 6'h23: State_ctl_S = 6'h0b;
+							6'h24, 6'h25, 6'h26: State_ctl_S = 6'h0c;
+							6'h27, 6'h28, 6'h29: State_ctl_S = 6'h0d;
+							6'h2a, 6'h2b, 6'h2c: State_ctl_S = 6'h0e;
+							6'h2d, 6'h2e, 6'h2f: State_ctl_S = 6'h0f;
+							6'h30, 6'h31, 6'h32: State_ctl_S = 6'h10;
+							6'h33, 6'h34, 6'h35: State_ctl_S = 6'h11;
+							default: State_ctl_S = 6'h12;
+						endcase
+					2'b10:
+						case (Precision_ctl_S)
+							6'h00: State_ctl_S = 6'h04;
+							6'h06, 6'h07, 6'h08: State_ctl_S = 6'h02;
+							6'h09, 6'h0a, 6'h0b: State_ctl_S = 6'h03;
+							default: State_ctl_S = 6'h04;
+						endcase
+					2'b11:
+						case (Precision_ctl_S)
+							6'h00: State_ctl_S = 6'h03;
+							6'h06, 6'h07, 6'h08: State_ctl_S = 6'h02;
+							default: State_ctl_S = 6'h03;
+						endcase
+				endcase
+			2'b11:
+				case (Format_sel_S)
+					2'b00:
+						if (Full_precision_SO)
+							State_ctl_S = 6'h06;
+						else
+							State_ctl_S = State_Four_iteration_unit_S;
+					2'b01:
+						if (Full_precision_SO)
+							State_ctl_S = 6'h0d;
+						else
+							State_ctl_S = State_Four_iteration_unit_S;
+					2'b10:
+						if (Full_precision_SO)
+							State_ctl_S = 6'h03;
+						else
+							State_ctl_S = State_Four_iteration_unit_S;
+					2'b11:
+						if (Full_precision_SO)
+							State_ctl_S = 6'h02;
+						else
+							State_ctl_S = State_Four_iteration_unit_S;
+				endcase
+		endcase
+	reg Div_start_dly_S;
+	always @(posedge Clk_CI or negedge Rst_RBI)
+		if (~Rst_RBI)
+			Div_start_dly_S <= 1'b0;
+		else if (Div_start_SI && Ready_SO)
+			Div_start_dly_S <= 1'b1;
+		else
+			Div_start_dly_S <= 1'b0;
+	assign Div_start_dly_SO = Div_start_dly_S;
+	always @(posedge Clk_CI or negedge Rst_RBI)
+		if (~Rst_RBI)
+			Div_enable_SO <= 1'b0;
+		else if (Kill_SI)
+			Div_enable_SO <= 1'b0;
+		else if (Div_start_SI && Ready_SO)
+			Div_enable_SO <= 1'b1;
+		else if (Done_SO)
+			Div_enable_SO <= 1'b0;
+		else
+			Div_enable_SO <= Div_enable_SO;
+	reg Sqrt_start_dly_S;
+	always @(posedge Clk_CI or negedge Rst_RBI)
+		if (~Rst_RBI)
+			Sqrt_start_dly_S <= 1'b0;
+		else if (Sqrt_start_SI && Ready_SO)
+			Sqrt_start_dly_S <= 1'b1;
+		else
+			Sqrt_start_dly_S <= 1'b0;
+	assign Sqrt_start_dly_SO = Sqrt_start_dly_S;
+	always @(posedge Clk_CI or negedge Rst_RBI)
+		if (~Rst_RBI)
+			Sqrt_enable_SO <= 1'b0;
+		else if (Kill_SI)
+			Sqrt_enable_SO <= 1'b0;
+		else if (Sqrt_start_SI && Ready_SO)
+			Sqrt_enable_SO <= 1'b1;
+		else if (Done_SO)
+			Sqrt_enable_SO <= 1'b0;
+		else
+			Sqrt_enable_SO <= Sqrt_enable_SO;
+	reg [5:0] Crtl_cnt_S;
+	wire Start_dly_S;
+	assign Start_dly_S = Div_start_dly_S | Sqrt_start_dly_S;
+	wire Fsm_enable_S;
+	assign Fsm_enable_S = ((Start_dly_S | |Crtl_cnt_S) && ~Kill_SI) && Special_case_dly_SBI;
+	wire Final_state_S;
+	assign Final_state_S = Crtl_cnt_S == State_ctl_S;
+	always @(posedge Clk_CI or negedge Rst_RBI)
+		if (~Rst_RBI)
+			Crtl_cnt_S <= {6 {1'sb0}};
+		else if (Final_state_S | Kill_SI)
+			Crtl_cnt_S <= {6 {1'sb0}};
+		else if (Fsm_enable_S)
+			Crtl_cnt_S <= Crtl_cnt_S + 1;
+		else
+			Crtl_cnt_S <= {6 {1'sb0}};
+	always @(posedge Clk_CI or negedge Rst_RBI)
+		if (~Rst_RBI)
+			Done_SO <= 1'b0;
+		else if (Start_SI && Ready_SO) begin
+			if (~Special_case_SBI)
+				Done_SO <= 1'b1;
+			else
+				Done_SO <= 1'b0;
+		end
+		else if (Final_state_S)
+			Done_SO <= 1'b1;
+		else
+			Done_SO <= 1'b0;
+	always @(posedge Clk_CI or negedge Rst_RBI)
+		if (~Rst_RBI)
+			Ready_SO <= 1'b1;
+		else if (Start_SI && Ready_SO) begin
+			if (~Special_case_SBI)
+				Ready_SO <= 1'b1;
+			else
+				Ready_SO <= 1'b0;
+		end
+		else if (Final_state_S | Kill_SI)
+			Ready_SO <= 1'b1;
+		else
+			Ready_SO <= Ready_SO;
+	wire Qcnt_one_0;
+	wire Qcnt_one_1;
+	wire [1:0] Qcnt_one_2;
+	wire [2:0] Qcnt_one_3;
+	wire [3:0] Qcnt_one_4;
+	wire [4:0] Qcnt_one_5;
+	wire [5:0] Qcnt_one_6;
+	wire [6:0] Qcnt_one_7;
+	wire [7:0] Qcnt_one_8;
+	wire [8:0] Qcnt_one_9;
+	wire [9:0] Qcnt_one_10;
+	wire [10:0] Qcnt_one_11;
+	wire [11:0] Qcnt_one_12;
+	wire [12:0] Qcnt_one_13;
+	wire [13:0] Qcnt_one_14;
+	wire [14:0] Qcnt_one_15;
+	wire [15:0] Qcnt_one_16;
+	wire [16:0] Qcnt_one_17;
+	wire [17:0] Qcnt_one_18;
+	wire [18:0] Qcnt_one_19;
+	wire [19:0] Qcnt_one_20;
+	wire [20:0] Qcnt_one_21;
+	wire [21:0] Qcnt_one_22;
+	wire [22:0] Qcnt_one_23;
+	wire [23:0] Qcnt_one_24;
+	wire [24:0] Qcnt_one_25;
+	wire [25:0] Qcnt_one_26;
+	wire [26:0] Qcnt_one_27;
+	wire [27:0] Qcnt_one_28;
+	wire [28:0] Qcnt_one_29;
+	wire [29:0] Qcnt_one_30;
+	wire [30:0] Qcnt_one_31;
+	wire [31:0] Qcnt_one_32;
+	wire [32:0] Qcnt_one_33;
+	wire [33:0] Qcnt_one_34;
+	wire [34:0] Qcnt_one_35;
+	wire [35:0] Qcnt_one_36;
+	wire [36:0] Qcnt_one_37;
+	wire [37:0] Qcnt_one_38;
+	wire [38:0] Qcnt_one_39;
+	wire [39:0] Qcnt_one_40;
+	wire [40:0] Qcnt_one_41;
+	wire [41:0] Qcnt_one_42;
+	wire [42:0] Qcnt_one_43;
+	wire [43:0] Qcnt_one_44;
+	wire [44:0] Qcnt_one_45;
+	wire [45:0] Qcnt_one_46;
+	wire [46:0] Qcnt_one_47;
+	wire [47:0] Qcnt_one_48;
+	wire [48:0] Qcnt_one_49;
+	wire [49:0] Qcnt_one_50;
+	wire [50:0] Qcnt_one_51;
+	wire [51:0] Qcnt_one_52;
+	wire [52:0] Qcnt_one_53;
+	wire [53:0] Qcnt_one_54;
+	wire [54:0] Qcnt_one_55;
+	wire [55:0] Qcnt_one_56;
+	wire [56:0] Qcnt_one_57;
+	wire [57:0] Qcnt_one_58;
+	wire [58:0] Qcnt_one_59;
+	wire [59:0] Qcnt_one_60;
+	wire [1:0] Qcnt_two_0;
+	wire [2:0] Qcnt_two_1;
+	wire [4:0] Qcnt_two_2;
+	wire [6:0] Qcnt_two_3;
+	wire [8:0] Qcnt_two_4;
+	wire [10:0] Qcnt_two_5;
+	wire [12:0] Qcnt_two_6;
+	wire [14:0] Qcnt_two_7;
+	wire [16:0] Qcnt_two_8;
+	wire [18:0] Qcnt_two_9;
+	wire [20:0] Qcnt_two_10;
+	wire [22:0] Qcnt_two_11;
+	wire [24:0] Qcnt_two_12;
+	wire [26:0] Qcnt_two_13;
+	wire [28:0] Qcnt_two_14;
+	wire [30:0] Qcnt_two_15;
+	wire [32:0] Qcnt_two_16;
+	wire [34:0] Qcnt_two_17;
+	wire [36:0] Qcnt_two_18;
+	wire [38:0] Qcnt_two_19;
+	wire [40:0] Qcnt_two_20;
+	wire [42:0] Qcnt_two_21;
+	wire [44:0] Qcnt_two_22;
+	wire [46:0] Qcnt_two_23;
+	wire [48:0] Qcnt_two_24;
+	wire [50:0] Qcnt_two_25;
+	wire [52:0] Qcnt_two_26;
+	wire [54:0] Qcnt_two_27;
+	wire [56:0] Qcnt_two_28;
+	wire [2:0] Qcnt_three_0;
+	wire [4:0] Qcnt_three_1;
+	wire [7:0] Qcnt_three_2;
+	wire [10:0] Qcnt_three_3;
+	wire [13:0] Qcnt_three_4;
+	wire [16:0] Qcnt_three_5;
+	wire [19:0] Qcnt_three_6;
+	wire [22:0] Qcnt_three_7;
+	wire [25:0] Qcnt_three_8;
+	wire [28:0] Qcnt_three_9;
+	wire [31:0] Qcnt_three_10;
+	wire [34:0] Qcnt_three_11;
+	wire [37:0] Qcnt_three_12;
+	wire [40:0] Qcnt_three_13;
+	wire [43:0] Qcnt_three_14;
+	wire [46:0] Qcnt_three_15;
+	wire [49:0] Qcnt_three_16;
+	wire [52:0] Qcnt_three_17;
+	wire [55:0] Qcnt_three_18;
+	wire [58:0] Qcnt_three_19;
+	wire [61:0] Qcnt_three_20;
+	wire [3:0] Qcnt_four_0;
+	wire [6:0] Qcnt_four_1;
+	wire [10:0] Qcnt_four_2;
+	wire [14:0] Qcnt_four_3;
+	wire [18:0] Qcnt_four_4;
+	wire [22:0] Qcnt_four_5;
+	wire [26:0] Qcnt_four_6;
+	wire [30:0] Qcnt_four_7;
+	wire [34:0] Qcnt_four_8;
+	wire [38:0] Qcnt_four_9;
+	wire [42:0] Qcnt_four_10;
+	wire [46:0] Qcnt_four_11;
+	wire [50:0] Qcnt_four_12;
+	wire [54:0] Qcnt_four_13;
+	wire [58:0] Qcnt_four_14;
+	wire [57:0] Sqrt_R0;
+	reg [57:0] Sqrt_Q0;
+	reg [57:0] Q_sqrt0;
+	reg [57:0] Q_sqrt_com_0;
+	wire [57:0] Sqrt_R1;
+	reg [57:0] Sqrt_Q1;
+	reg [57:0] Q_sqrt1;
+	reg [57:0] Q_sqrt_com_1;
+	wire [57:0] Sqrt_R2;
+	reg [57:0] Sqrt_Q2;
+	reg [57:0] Q_sqrt2;
+	reg [57:0] Q_sqrt_com_2;
+	wire [57:0] Sqrt_R3;
+	reg [57:0] Sqrt_Q3;
+	reg [57:0] Q_sqrt3;
+	reg [57:0] Q_sqrt_com_3;
+	wire [57:0] Sqrt_R4;
+	reg [1:0] Sqrt_DI [3:0];
+	wire [1:0] Sqrt_DO [3:0];
+	wire Sqrt_carry_DO;
+	wire [57:0] Iteration_cell_a_D [3:0];
+	wire [57:0] Iteration_cell_b_D [3:0];
+	wire [57:0] Iteration_cell_a_BMASK_D [3:0];
+	wire [57:0] Iteration_cell_b_BMASK_D [3:0];
+	wire Iteration_cell_carry_D [3:0];
+	wire [57:0] Iteration_cell_sum_D [3:0];
+	wire [57:0] Iteration_cell_sum_AMASK_D [3:0];
+	reg [3:0] Sqrt_quotinent_S;
+	always @(*)
+		case (Format_sel_S)
+			2'b00: begin
+				Sqrt_quotinent_S = {~Iteration_cell_sum_AMASK_D[0][28], ~Iteration_cell_sum_AMASK_D[1][28], ~Iteration_cell_sum_AMASK_D[2][28], ~Iteration_cell_sum_AMASK_D[3][28]};
+				Q_sqrt_com_0 = {{29 {1'b0}}, ~Q_sqrt0[28:0]};
+				Q_sqrt_com_1 = {{29 {1'b0}}, ~Q_sqrt1[28:0]};
+				Q_sqrt_com_2 = {{29 {1'b0}}, ~Q_sqrt2[28:0]};
+				Q_sqrt_com_3 = {{29 {1'b0}}, ~Q_sqrt3[28:0]};
+			end
+			2'b01: begin
+				Sqrt_quotinent_S = {Iteration_cell_carry_D[0], Iteration_cell_carry_D[1], Iteration_cell_carry_D[2], Iteration_cell_carry_D[3]};
+				Q_sqrt_com_0 = ~Q_sqrt0;
+				Q_sqrt_com_1 = ~Q_sqrt1;
+				Q_sqrt_com_2 = ~Q_sqrt2;
+				Q_sqrt_com_3 = ~Q_sqrt3;
+			end
+			2'b10: begin
+				Sqrt_quotinent_S = {~Iteration_cell_sum_AMASK_D[0][15], ~Iteration_cell_sum_AMASK_D[1][15], ~Iteration_cell_sum_AMASK_D[2][15], ~Iteration_cell_sum_AMASK_D[3][15]};
+				Q_sqrt_com_0 = {{42 {1'b0}}, ~Q_sqrt0[15:0]};
+				Q_sqrt_com_1 = {{42 {1'b0}}, ~Q_sqrt1[15:0]};
+				Q_sqrt_com_2 = {{42 {1'b0}}, ~Q_sqrt2[15:0]};
+				Q_sqrt_com_3 = {{42 {1'b0}}, ~Q_sqrt3[15:0]};
+			end
+			2'b11: begin
+				Sqrt_quotinent_S = {~Iteration_cell_sum_AMASK_D[0][12], ~Iteration_cell_sum_AMASK_D[1][12], ~Iteration_cell_sum_AMASK_D[2][12], ~Iteration_cell_sum_AMASK_D[3][12]};
+				Q_sqrt_com_0 = {{45 {1'b0}}, ~Q_sqrt0[12:0]};
+				Q_sqrt_com_1 = {{45 {1'b0}}, ~Q_sqrt1[12:0]};
+				Q_sqrt_com_2 = {{45 {1'b0}}, ~Q_sqrt2[12:0]};
+				Q_sqrt_com_3 = {{45 {1'b0}}, ~Q_sqrt3[12:0]};
+			end
+		endcase
+	assign Qcnt_one_0 = 1'b0;
+	assign Qcnt_one_1 = {Quotient_DP[0]};
+	assign Qcnt_one_2 = {Quotient_DP[1:0]};
+	assign Qcnt_one_3 = {Quotient_DP[2:0]};
+	assign Qcnt_one_4 = {Quotient_DP[3:0]};
+	assign Qcnt_one_5 = {Quotient_DP[4:0]};
+	assign Qcnt_one_6 = {Quotient_DP[5:0]};
+	assign Qcnt_one_7 = {Quotient_DP[6:0]};
+	assign Qcnt_one_8 = {Quotient_DP[7:0]};
+	assign Qcnt_one_9 = {Quotient_DP[8:0]};
+	assign Qcnt_one_10 = {Quotient_DP[9:0]};
+	assign Qcnt_one_11 = {Quotient_DP[10:0]};
+	assign Qcnt_one_12 = {Quotient_DP[11:0]};
+	assign Qcnt_one_13 = {Quotient_DP[12:0]};
+	assign Qcnt_one_14 = {Quotient_DP[13:0]};
+	assign Qcnt_one_15 = {Quotient_DP[14:0]};
+	assign Qcnt_one_16 = {Quotient_DP[15:0]};
+	assign Qcnt_one_17 = {Quotient_DP[16:0]};
+	assign Qcnt_one_18 = {Quotient_DP[17:0]};
+	assign Qcnt_one_19 = {Quotient_DP[18:0]};
+	assign Qcnt_one_20 = {Quotient_DP[19:0]};
+	assign Qcnt_one_21 = {Quotient_DP[20:0]};
+	assign Qcnt_one_22 = {Quotient_DP[21:0]};
+	assign Qcnt_one_23 = {Quotient_DP[22:0]};
+	assign Qcnt_one_24 = {Quotient_DP[23:0]};
+	assign Qcnt_one_25 = {Quotient_DP[24:0]};
+	assign Qcnt_one_26 = {Quotient_DP[25:0]};
+	assign Qcnt_one_27 = {Quotient_DP[26:0]};
+	assign Qcnt_one_28 = {Quotient_DP[27:0]};
+	assign Qcnt_one_29 = {Quotient_DP[28:0]};
+	assign Qcnt_one_30 = {Quotient_DP[29:0]};
+	assign Qcnt_one_31 = {Quotient_DP[30:0]};
+	assign Qcnt_one_32 = {Quotient_DP[31:0]};
+	assign Qcnt_one_33 = {Quotient_DP[32:0]};
+	assign Qcnt_one_34 = {Quotient_DP[33:0]};
+	assign Qcnt_one_35 = {Quotient_DP[34:0]};
+	assign Qcnt_one_36 = {Quotient_DP[35:0]};
+	assign Qcnt_one_37 = {Quotient_DP[36:0]};
+	assign Qcnt_one_38 = {Quotient_DP[37:0]};
+	assign Qcnt_one_39 = {Quotient_DP[38:0]};
+	assign Qcnt_one_40 = {Quotient_DP[39:0]};
+	assign Qcnt_one_41 = {Quotient_DP[40:0]};
+	assign Qcnt_one_42 = {Quotient_DP[41:0]};
+	assign Qcnt_one_43 = {Quotient_DP[42:0]};
+	assign Qcnt_one_44 = {Quotient_DP[43:0]};
+	assign Qcnt_one_45 = {Quotient_DP[44:0]};
+	assign Qcnt_one_46 = {Quotient_DP[45:0]};
+	assign Qcnt_one_47 = {Quotient_DP[46:0]};
+	assign Qcnt_one_48 = {Quotient_DP[47:0]};
+	assign Qcnt_one_49 = {Quotient_DP[48:0]};
+	assign Qcnt_one_50 = {Quotient_DP[49:0]};
+	assign Qcnt_one_51 = {Quotient_DP[50:0]};
+	assign Qcnt_one_52 = {Quotient_DP[51:0]};
+	assign Qcnt_one_53 = {Quotient_DP[52:0]};
+	assign Qcnt_one_54 = {Quotient_DP[53:0]};
+	assign Qcnt_one_55 = {Quotient_DP[54:0]};
+	assign Qcnt_one_56 = {Quotient_DP[55:0]};
+	assign Qcnt_one_57 = {Quotient_DP[56:0]};
+	assign Qcnt_two_0 = {1'b0, Sqrt_quotinent_S[3]};
+	assign Qcnt_two_1 = {Quotient_DP[1:0], Sqrt_quotinent_S[3]};
+	assign Qcnt_two_2 = {Quotient_DP[3:0], Sqrt_quotinent_S[3]};
+	assign Qcnt_two_3 = {Quotient_DP[5:0], Sqrt_quotinent_S[3]};
+	assign Qcnt_two_4 = {Quotient_DP[7:0], Sqrt_quotinent_S[3]};
+	assign Qcnt_two_5 = {Quotient_DP[9:0], Sqrt_quotinent_S[3]};
+	assign Qcnt_two_6 = {Quotient_DP[11:0], Sqrt_quotinent_S[3]};
+	assign Qcnt_two_7 = {Quotient_DP[13:0], Sqrt_quotinent_S[3]};
+	assign Qcnt_two_8 = {Quotient_DP[15:0], Sqrt_quotinent_S[3]};
+	assign Qcnt_two_9 = {Quotient_DP[17:0], Sqrt_quotinent_S[3]};
+	assign Qcnt_two_10 = {Quotient_DP[19:0], Sqrt_quotinent_S[3]};
+	assign Qcnt_two_11 = {Quotient_DP[21:0], Sqrt_quotinent_S[3]};
+	assign Qcnt_two_12 = {Quotient_DP[23:0], Sqrt_quotinent_S[3]};
+	assign Qcnt_two_13 = {Quotient_DP[25:0], Sqrt_quotinent_S[3]};
+	assign Qcnt_two_14 = {Quotient_DP[27:0], Sqrt_quotinent_S[3]};
+	assign Qcnt_two_15 = {Quotient_DP[29:0], Sqrt_quotinent_S[3]};
+	assign Qcnt_two_16 = {Quotient_DP[31:0], Sqrt_quotinent_S[3]};
+	assign Qcnt_two_17 = {Quotient_DP[33:0], Sqrt_quotinent_S[3]};
+	assign Qcnt_two_18 = {Quotient_DP[35:0], Sqrt_quotinent_S[3]};
+	assign Qcnt_two_19 = {Quotient_DP[37:0], Sqrt_quotinent_S[3]};
+	assign Qcnt_two_20 = {Quotient_DP[39:0], Sqrt_quotinent_S[3]};
+	assign Qcnt_two_21 = {Quotient_DP[41:0], Sqrt_quotinent_S[3]};
+	assign Qcnt_two_22 = {Quotient_DP[43:0], Sqrt_quotinent_S[3]};
+	assign Qcnt_two_23 = {Quotient_DP[45:0], Sqrt_quotinent_S[3]};
+	assign Qcnt_two_24 = {Quotient_DP[47:0], Sqrt_quotinent_S[3]};
+	assign Qcnt_two_25 = {Quotient_DP[49:0], Sqrt_quotinent_S[3]};
+	assign Qcnt_two_26 = {Quotient_DP[51:0], Sqrt_quotinent_S[3]};
+	assign Qcnt_two_27 = {Quotient_DP[53:0], Sqrt_quotinent_S[3]};
+	assign Qcnt_two_28 = {Quotient_DP[55:0], Sqrt_quotinent_S[3]};
+	assign Qcnt_three_0 = {1'b0, Sqrt_quotinent_S[3], Sqrt_quotinent_S[2]};
+	assign Qcnt_three_1 = {Quotient_DP[2:0], Sqrt_quotinent_S[3], Sqrt_quotinent_S[2]};
+	assign Qcnt_three_2 = {Quotient_DP[5:0], Sqrt_quotinent_S[3], Sqrt_quotinent_S[2]};
+	assign Qcnt_three_3 = {Quotient_DP[8:0], Sqrt_quotinent_S[3], Sqrt_quotinent_S[2]};
+	assign Qcnt_three_4 = {Quotient_DP[11:0], Sqrt_quotinent_S[3], Sqrt_quotinent_S[2]};
+	assign Qcnt_three_5 = {Quotient_DP[14:0], Sqrt_quotinent_S[3], Sqrt_quotinent_S[2]};
+	assign Qcnt_three_6 = {Quotient_DP[17:0], Sqrt_quotinent_S[3], Sqrt_quotinent_S[2]};
+	assign Qcnt_three_7 = {Quotient_DP[20:0], Sqrt_quotinent_S[3], Sqrt_quotinent_S[2]};
+	assign Qcnt_three_8 = {Quotient_DP[23:0], Sqrt_quotinent_S[3], Sqrt_quotinent_S[2]};
+	assign Qcnt_three_9 = {Quotient_DP[26:0], Sqrt_quotinent_S[3], Sqrt_quotinent_S[2]};
+	assign Qcnt_three_10 = {Quotient_DP[29:0], Sqrt_quotinent_S[3], Sqrt_quotinent_S[2]};
+	assign Qcnt_three_11 = {Quotient_DP[32:0], Sqrt_quotinent_S[3], Sqrt_quotinent_S[2]};
+	assign Qcnt_three_12 = {Quotient_DP[35:0], Sqrt_quotinent_S[3], Sqrt_quotinent_S[2]};
+	assign Qcnt_three_13 = {Quotient_DP[38:0], Sqrt_quotinent_S[3], Sqrt_quotinent_S[2]};
+	assign Qcnt_three_14 = {Quotient_DP[41:0], Sqrt_quotinent_S[3], Sqrt_quotinent_S[2]};
+	assign Qcnt_three_15 = {Quotient_DP[44:0], Sqrt_quotinent_S[3], Sqrt_quotinent_S[2]};
+	assign Qcnt_three_16 = {Quotient_DP[47:0], Sqrt_quotinent_S[3], Sqrt_quotinent_S[2]};
+	assign Qcnt_three_17 = {Quotient_DP[50:0], Sqrt_quotinent_S[3], Sqrt_quotinent_S[2]};
+	assign Qcnt_three_18 = {Quotient_DP[53:0], Sqrt_quotinent_S[3], Sqrt_quotinent_S[2]};
+	assign Qcnt_three_19 = {Quotient_DP[56:0], Sqrt_quotinent_S[3], Sqrt_quotinent_S[2]};
+	assign Qcnt_four_0 = {1'b0, Sqrt_quotinent_S[3], Sqrt_quotinent_S[2], Sqrt_quotinent_S[1]};
+	assign Qcnt_four_1 = {Quotient_DP[3:0], Sqrt_quotinent_S[3], Sqrt_quotinent_S[2], Sqrt_quotinent_S[1]};
+	assign Qcnt_four_2 = {Quotient_DP[7:0], Sqrt_quotinent_S[3], Sqrt_quotinent_S[2], Sqrt_quotinent_S[1]};
+	assign Qcnt_four_3 = {Quotient_DP[11:0], Sqrt_quotinent_S[3], Sqrt_quotinent_S[2], Sqrt_quotinent_S[1]};
+	assign Qcnt_four_4 = {Quotient_DP[15:0], Sqrt_quotinent_S[3], Sqrt_quotinent_S[2], Sqrt_quotinent_S[1]};
+	assign Qcnt_four_5 = {Quotient_DP[19:0], Sqrt_quotinent_S[3], Sqrt_quotinent_S[2], Sqrt_quotinent_S[1]};
+	assign Qcnt_four_6 = {Quotient_DP[23:0], Sqrt_quotinent_S[3], Sqrt_quotinent_S[2], Sqrt_quotinent_S[1]};
+	assign Qcnt_four_7 = {Quotient_DP[27:0], Sqrt_quotinent_S[3], Sqrt_quotinent_S[2], Sqrt_quotinent_S[1]};
+	assign Qcnt_four_8 = {Quotient_DP[31:0], Sqrt_quotinent_S[3], Sqrt_quotinent_S[2], Sqrt_quotinent_S[1]};
+	assign Qcnt_four_9 = {Quotient_DP[35:0], Sqrt_quotinent_S[3], Sqrt_quotinent_S[2], Sqrt_quotinent_S[1]};
+	assign Qcnt_four_10 = {Quotient_DP[39:0], Sqrt_quotinent_S[3], Sqrt_quotinent_S[2], Sqrt_quotinent_S[1]};
+	assign Qcnt_four_11 = {Quotient_DP[43:0], Sqrt_quotinent_S[3], Sqrt_quotinent_S[2], Sqrt_quotinent_S[1]};
+	assign Qcnt_four_12 = {Quotient_DP[47:0], Sqrt_quotinent_S[3], Sqrt_quotinent_S[2], Sqrt_quotinent_S[1]};
+	assign Qcnt_four_13 = {Quotient_DP[51:0], Sqrt_quotinent_S[3], Sqrt_quotinent_S[2], Sqrt_quotinent_S[1]};
+	assign Qcnt_four_14 = {Quotient_DP[55:0], Sqrt_quotinent_S[3], Sqrt_quotinent_S[2], Sqrt_quotinent_S[1]};
+	always @(*)
+		case (defs_div_sqrt_mvp_Iteration_unit_num_S)
+			2'b00:
+				case (Crtl_cnt_S)
+					6'b000000: begin
+						Sqrt_DI[0] = Mant_D_sqrt_Norm[53:defs_div_sqrt_mvp_C_MANT_FP64];
+						Q_sqrt0 = {{57 {1'b0}}, Qcnt_one_0};
+						Sqrt_Q0 = Q_sqrt_com_0;
+					end
+					6'b000001: begin
+						Sqrt_DI[0] = Mant_D_sqrt_Norm[51:50];
+						Q_sqrt0 = {{57 {1'b0}}, Qcnt_one_1};
+						Sqrt_Q0 = (Quotient_DP[0] ? Q_sqrt_com_0 : Q_sqrt0);
+					end
+					6'b000010: begin
+						Sqrt_DI[0] = Mant_D_sqrt_Norm[49:48];
+						Q_sqrt0 = {{56 {1'b0}}, Qcnt_one_2};
+						Sqrt_Q0 = (Quotient_DP[0] ? Q_sqrt_com_0 : Q_sqrt0);
+					end
+					6'b000011: begin
+						Sqrt_DI[0] = Mant_D_sqrt_Norm[47:46];
+						Q_sqrt0 = {{55 {1'b0}}, Qcnt_one_3};
+						Sqrt_Q0 = (Quotient_DP[0] ? Q_sqrt_com_0 : Q_sqrt0);
+					end
+					6'b000100: begin
+						Sqrt_DI[0] = Mant_D_sqrt_Norm[45:44];
+						Q_sqrt0 = {{54 {1'b0}}, Qcnt_one_4};
+						Sqrt_Q0 = (Quotient_DP[0] ? Q_sqrt_com_0 : Q_sqrt0);
+					end
+					6'b000101: begin
+						Sqrt_DI[0] = Mant_D_sqrt_Norm[43:42];
+						Q_sqrt0 = {{53 {1'b0}}, Qcnt_one_5};
+						Sqrt_Q0 = (Quotient_DP[0] ? Q_sqrt_com_0 : Q_sqrt0);
+					end
+					6'b000110: begin
+						Sqrt_DI[0] = Mant_D_sqrt_Norm[41:40];
+						Q_sqrt0 = {{defs_div_sqrt_mvp_C_MANT_FP64 {1'b0}}, Qcnt_one_6};
+						Sqrt_Q0 = (Quotient_DP[0] ? Q_sqrt_com_0 : Q_sqrt0);
+					end
+					6'b000111: begin
+						Sqrt_DI[0] = Mant_D_sqrt_Norm[39:38];
+						Q_sqrt0 = {{51 {1'b0}}, Qcnt_one_7};
+						Sqrt_Q0 = (Quotient_DP[0] ? Q_sqrt_com_0 : Q_sqrt0);
+					end
+					6'b001000: begin
+						Sqrt_DI[0] = Mant_D_sqrt_Norm[37:36];
+						Q_sqrt0 = {{50 {1'b0}}, Qcnt_one_8};
+						Sqrt_Q0 = (Quotient_DP[0] ? Q_sqrt_com_0 : Q_sqrt0);
+					end
+					6'b001001: begin
+						Sqrt_DI[0] = Mant_D_sqrt_Norm[35:34];
+						Q_sqrt0 = {{49 {1'b0}}, Qcnt_one_9};
+						Sqrt_Q0 = (Quotient_DP[0] ? Q_sqrt_com_0 : Q_sqrt0);
+					end
+					6'b001010: begin
+						Sqrt_DI[0] = Mant_D_sqrt_Norm[33:32];
+						Q_sqrt0 = {{48 {1'b0}}, Qcnt_one_10};
+						Sqrt_Q0 = (Quotient_DP[0] ? Q_sqrt_com_0 : Q_sqrt0);
+					end
+					6'b001011: begin
+						Sqrt_DI[0] = Mant_D_sqrt_Norm[31:30];
+						Q_sqrt0 = {{47 {1'b0}}, Qcnt_one_11};
+						Sqrt_Q0 = (Quotient_DP[0] ? Q_sqrt_com_0 : Q_sqrt0);
+					end
+					6'b001100: begin
+						Sqrt_DI[0] = Mant_D_sqrt_Norm[29:28];
+						Q_sqrt0 = {{46 {1'b0}}, Qcnt_one_12};
+						Sqrt_Q0 = (Quotient_DP[0] ? Q_sqrt_com_0 : Q_sqrt0);
+					end
+					6'b001101: begin
+						Sqrt_DI[0] = Mant_D_sqrt_Norm[27:26];
+						Q_sqrt0 = {{45 {1'b0}}, Qcnt_one_13};
+						Sqrt_Q0 = (Quotient_DP[0] ? Q_sqrt_com_0 : Q_sqrt0);
+					end
+					6'b001110: begin
+						Sqrt_DI[0] = Mant_D_sqrt_Norm[25:24];
+						Q_sqrt0 = {{44 {1'b0}}, Qcnt_one_14};
+						Sqrt_Q0 = (Quotient_DP[0] ? Q_sqrt_com_0 : Q_sqrt0);
+					end
+					6'b001111: begin
+						Sqrt_DI[0] = Mant_D_sqrt_Norm[23:22];
+						Q_sqrt0 = {{43 {1'b0}}, Qcnt_one_15};
+						Sqrt_Q0 = (Quotient_DP[0] ? Q_sqrt_com_0 : Q_sqrt0);
+					end
+					6'b010000: begin
+						Sqrt_DI[0] = Mant_D_sqrt_Norm[21:20];
+						Q_sqrt0 = {{42 {1'b0}}, Qcnt_one_16};
+						Sqrt_Q0 = (Quotient_DP[0] ? Q_sqrt_com_0 : Q_sqrt0);
+					end
+					6'b010001: begin
+						Sqrt_DI[0] = Mant_D_sqrt_Norm[19:18];
+						Q_sqrt0 = {{41 {1'b0}}, Qcnt_one_17};
+						Sqrt_Q0 = (Quotient_DP[0] ? Q_sqrt_com_0 : Q_sqrt0);
+					end
+					6'b010010: begin
+						Sqrt_DI[0] = Mant_D_sqrt_Norm[17:16];
+						Q_sqrt0 = {{40 {1'b0}}, Qcnt_one_18};
+						Sqrt_Q0 = (Quotient_DP[0] ? Q_sqrt_com_0 : Q_sqrt0);
+					end
+					6'b010011: begin
+						Sqrt_DI[0] = Mant_D_sqrt_Norm[15:14];
+						Q_sqrt0 = {{39 {1'b0}}, Qcnt_one_19};
+						Sqrt_Q0 = (Quotient_DP[0] ? Q_sqrt_com_0 : Q_sqrt0);
+					end
+					6'b010100: begin
+						Sqrt_DI[0] = Mant_D_sqrt_Norm[13:12];
+						Q_sqrt0 = {{38 {1'b0}}, Qcnt_one_20};
+						Sqrt_Q0 = (Quotient_DP[0] ? Q_sqrt_com_0 : Q_sqrt0);
+					end
+					6'b010101: begin
+						Sqrt_DI[0] = Mant_D_sqrt_Norm[11:10];
+						Q_sqrt0 = {{37 {1'b0}}, Qcnt_one_21};
+						Sqrt_Q0 = (Quotient_DP[0] ? Q_sqrt_com_0 : Q_sqrt0);
+					end
+					6'b010110: begin
+						Sqrt_DI[0] = Mant_D_sqrt_Norm[9:8];
+						Q_sqrt0 = {{36 {1'b0}}, Qcnt_one_22};
+						Sqrt_Q0 = (Quotient_DP[0] ? Q_sqrt_com_0 : Q_sqrt0);
+					end
+					6'b010111: begin
+						Sqrt_DI[0] = Mant_D_sqrt_Norm[7:6];
+						Q_sqrt0 = {{35 {1'b0}}, Qcnt_one_23};
+						Sqrt_Q0 = (Quotient_DP[0] ? Q_sqrt_com_0 : Q_sqrt0);
+					end
+					6'b011000: begin
+						Sqrt_DI[0] = Mant_D_sqrt_Norm[5:4];
+						Q_sqrt0 = {{34 {1'b0}}, Qcnt_one_24};
+						Sqrt_Q0 = (Quotient_DP[0] ? Q_sqrt_com_0 : Q_sqrt0);
+					end
+					6'b011001: begin
+						Sqrt_DI[0] = Mant_D_sqrt_Norm[3:2];
+						Q_sqrt0 = {{33 {1'b0}}, Qcnt_one_25};
+						Sqrt_Q0 = (Quotient_DP[0] ? Q_sqrt_com_0 : Q_sqrt0);
+					end
+					6'b011010: begin
+						Sqrt_DI[0] = Mant_D_sqrt_Norm[1:0];
+						Q_sqrt0 = {{32 {1'b0}}, Qcnt_one_26};
+						Sqrt_Q0 = (Quotient_DP[0] ? Q_sqrt_com_0 : Q_sqrt0);
+					end
+					6'b011011: begin
+						Sqrt_DI[0] = 2'b00;
+						Q_sqrt0 = {{31 {1'b0}}, Qcnt_one_27};
+						Sqrt_Q0 = (Quotient_DP[0] ? Q_sqrt_com_0 : Q_sqrt0);
+					end
+					6'b011100: begin
+						Sqrt_DI[0] = 2'b00;
+						Q_sqrt0 = {{30 {1'b0}}, Qcnt_one_28};
+						Sqrt_Q0 = (Quotient_DP[0] ? Q_sqrt_com_0 : Q_sqrt0);
+					end
+					6'b011101: begin
+						Sqrt_DI[0] = 2'b00;
+						Q_sqrt0 = {{29 {1'b0}}, Qcnt_one_29};
+						Sqrt_Q0 = (Quotient_DP[0] ? Q_sqrt_com_0 : Q_sqrt0);
+					end
+					6'b011110: begin
+						Sqrt_DI[0] = 2'b00;
+						Q_sqrt0 = {{28 {1'b0}}, Qcnt_one_30};
+						Sqrt_Q0 = (Quotient_DP[0] ? Q_sqrt_com_0 : Q_sqrt0);
+					end
+					6'b011111: begin
+						Sqrt_DI[0] = 2'b00;
+						Q_sqrt0 = {{27 {1'b0}}, Qcnt_one_31};
+						Sqrt_Q0 = (Quotient_DP[0] ? Q_sqrt_com_0 : Q_sqrt0);
+					end
+					6'b100000: begin
+						Sqrt_DI[0] = 2'b00;
+						Q_sqrt0 = {{26 {1'b0}}, Qcnt_one_32};
+						Sqrt_Q0 = (Quotient_DP[0] ? Q_sqrt_com_0 : Q_sqrt0);
+					end
+					6'b100001: begin
+						Sqrt_DI[0] = 2'b00;
+						Q_sqrt0 = {{25 {1'b0}}, Qcnt_one_33};
+						Sqrt_Q0 = (Quotient_DP[0] ? Q_sqrt_com_0 : Q_sqrt0);
+					end
+					6'b100010: begin
+						Sqrt_DI[0] = 2'b00;
+						Q_sqrt0 = {{24 {1'b0}}, Qcnt_one_34};
+						Sqrt_Q0 = (Quotient_DP[0] ? Q_sqrt_com_0 : Q_sqrt0);
+					end
+					6'b100011: begin
+						Sqrt_DI[0] = 2'b00;
+						Q_sqrt0 = {{23 {1'b0}}, Qcnt_one_35};
+						Sqrt_Q0 = (Quotient_DP[0] ? Q_sqrt_com_0 : Q_sqrt0);
+					end
+					6'b100100: begin
+						Sqrt_DI[0] = 2'b00;
+						Q_sqrt0 = {{22 {1'b0}}, Qcnt_one_36};
+						Sqrt_Q0 = (Quotient_DP[0] ? Q_sqrt_com_0 : Q_sqrt0);
+					end
+					6'b100101: begin
+						Sqrt_DI[0] = 2'b00;
+						Q_sqrt0 = {{21 {1'b0}}, Qcnt_one_37};
+						Sqrt_Q0 = (Quotient_DP[0] ? Q_sqrt_com_0 : Q_sqrt0);
+					end
+					6'b100110: begin
+						Sqrt_DI[0] = 2'b00;
+						Q_sqrt0 = {{20 {1'b0}}, Qcnt_one_38};
+						Sqrt_Q0 = (Quotient_DP[0] ? Q_sqrt_com_0 : Q_sqrt0);
+					end
+					6'b100111: begin
+						Sqrt_DI[0] = 2'b00;
+						Q_sqrt0 = {{19 {1'b0}}, Qcnt_one_39};
+						Sqrt_Q0 = (Quotient_DP[0] ? Q_sqrt_com_0 : Q_sqrt0);
+					end
+					6'b101000: begin
+						Sqrt_DI[0] = 2'b00;
+						Q_sqrt0 = {{18 {1'b0}}, Qcnt_one_40};
+						Sqrt_Q0 = (Quotient_DP[0] ? Q_sqrt_com_0 : Q_sqrt0);
+					end
+					6'b101001: begin
+						Sqrt_DI[0] = 2'b00;
+						Q_sqrt0 = {{17 {1'b0}}, Qcnt_one_41};
+						Sqrt_Q0 = (Quotient_DP[0] ? Q_sqrt_com_0 : Q_sqrt0);
+					end
+					6'b101010: begin
+						Sqrt_DI[0] = 2'b00;
+						Q_sqrt0 = {{16 {1'b0}}, Qcnt_one_42};
+						Sqrt_Q0 = (Quotient_DP[0] ? Q_sqrt_com_0 : Q_sqrt0);
+					end
+					6'b101011: begin
+						Sqrt_DI[0] = 2'b00;
+						Q_sqrt0 = {{15 {1'b0}}, Qcnt_one_43};
+						Sqrt_Q0 = (Quotient_DP[0] ? Q_sqrt_com_0 : Q_sqrt0);
+					end
+					6'b101100: begin
+						Sqrt_DI[0] = 2'b00;
+						Q_sqrt0 = {{14 {1'b0}}, Qcnt_one_44};
+						Sqrt_Q0 = (Quotient_DP[0] ? Q_sqrt_com_0 : Q_sqrt0);
+					end
+					6'b101101: begin
+						Sqrt_DI[0] = 2'b00;
+						Q_sqrt0 = {{13 {1'b0}}, Qcnt_one_45};
+						Sqrt_Q0 = (Quotient_DP[0] ? Q_sqrt_com_0 : Q_sqrt0);
+					end
+					6'b101110: begin
+						Sqrt_DI[0] = 2'b00;
+						Q_sqrt0 = {{12 {1'b0}}, Qcnt_one_46};
+						Sqrt_Q0 = (Quotient_DP[0] ? Q_sqrt_com_0 : Q_sqrt0);
+					end
+					6'b101111: begin
+						Sqrt_DI[0] = 2'b00;
+						Q_sqrt0 = {{11 {1'b0}}, Qcnt_one_47};
+						Sqrt_Q0 = (Quotient_DP[0] ? Q_sqrt_com_0 : Q_sqrt0);
+					end
+					6'b110000: begin
+						Sqrt_DI[0] = 2'b00;
+						Q_sqrt0 = {{10 {1'b0}}, Qcnt_one_48};
+						Sqrt_Q0 = (Quotient_DP[0] ? Q_sqrt_com_0 : Q_sqrt0);
+					end
+					6'b110001: begin
+						Sqrt_DI[0] = 2'b00;
+						Q_sqrt0 = {{9 {1'b0}}, Qcnt_one_49};
+						Sqrt_Q0 = (Quotient_DP[0] ? Q_sqrt_com_0 : Q_sqrt0);
+					end
+					6'b110010: begin
+						Sqrt_DI[0] = 2'b00;
+						Q_sqrt0 = {{8 {1'b0}}, Qcnt_one_50};
+						Sqrt_Q0 = (Quotient_DP[0] ? Q_sqrt_com_0 : Q_sqrt0);
+					end
+					6'b110011: begin
+						Sqrt_DI[0] = 2'b00;
+						Q_sqrt0 = {{7 {1'b0}}, Qcnt_one_51};
+						Sqrt_Q0 = (Quotient_DP[0] ? Q_sqrt_com_0 : Q_sqrt0);
+					end
+					6'b110100: begin
+						Sqrt_DI[0] = 2'b00;
+						Q_sqrt0 = {{6 {1'b0}}, Qcnt_one_52};
+						Sqrt_Q0 = (Quotient_DP[0] ? Q_sqrt_com_0 : Q_sqrt0);
+					end
+					6'b110101: begin
+						Sqrt_DI[0] = 2'b00;
+						Q_sqrt0 = {{5 {1'b0}}, Qcnt_one_53};
+						Sqrt_Q0 = (Quotient_DP[0] ? Q_sqrt_com_0 : Q_sqrt0);
+					end
+					6'b110110: begin
+						Sqrt_DI[0] = 2'b00;
+						Q_sqrt0 = {{4 {1'b0}}, Qcnt_one_54};
+						Sqrt_Q0 = (Quotient_DP[0] ? Q_sqrt_com_0 : Q_sqrt0);
+					end
+					6'b110111: begin
+						Sqrt_DI[0] = 2'b00;
+						Q_sqrt0 = {{3 {1'b0}}, Qcnt_one_55};
+						Sqrt_Q0 = (Quotient_DP[0] ? Q_sqrt_com_0 : Q_sqrt0);
+					end
+					6'b111000: begin
+						Sqrt_DI[0] = 2'b00;
+						Q_sqrt0 = {{2 {1'b0}}, Qcnt_one_56};
+						Sqrt_Q0 = (Quotient_DP[0] ? Q_sqrt_com_0 : Q_sqrt0);
+					end
+					default: begin
+						Sqrt_DI[0] = 2'b00;
+						Q_sqrt0 = {58 {1'sb0}};
+						Sqrt_Q0 = {58 {1'sb0}};
+					end
+				endcase
+			2'b01:
+				case (Crtl_cnt_S)
+					6'b000000: begin
+						Sqrt_DI[0] = Mant_D_sqrt_Norm[53:defs_div_sqrt_mvp_C_MANT_FP64];
+						Q_sqrt0 = {{57 {1'b0}}, Qcnt_two_0[1]};
+						Sqrt_Q0 = Q_sqrt_com_0;
+						Sqrt_DI[1] = Mant_D_sqrt_Norm[51:50];
+						Q_sqrt1 = {{56 {1'b0}}, Qcnt_two_0[1:0]};
+						Sqrt_Q1 = (Sqrt_quotinent_S[3] ? Q_sqrt_com_1 : Q_sqrt1);
+					end
+					6'b000001: begin
+						Sqrt_DI[0] = Mant_D_sqrt_Norm[49:48];
+						Q_sqrt0 = {{56 {1'b0}}, Qcnt_two_1[2:1]};
+						Sqrt_Q0 = (Quotient_DP[0] ? Q_sqrt_com_0 : Q_sqrt0);
+						Sqrt_DI[1] = Mant_D_sqrt_Norm[47:46];
+						Q_sqrt1 = {{55 {1'b0}}, Qcnt_two_1[2:0]};
+						Sqrt_Q1 = (Sqrt_quotinent_S[3] ? Q_sqrt_com_1 : Q_sqrt1);
+					end
+					6'b000010: begin
+						Sqrt_DI[0] = Mant_D_sqrt_Norm[45:44];
+						Q_sqrt0 = {{54 {1'b0}}, Qcnt_two_2[4:1]};
+						Sqrt_Q0 = (Quotient_DP[0] ? Q_sqrt_com_0 : Q_sqrt0);
+						Sqrt_DI[1] = Mant_D_sqrt_Norm[43:42];
+						Q_sqrt1 = {{53 {1'b0}}, Qcnt_two_2[4:0]};
+						Sqrt_Q1 = (Sqrt_quotinent_S[3] ? Q_sqrt_com_1 : Q_sqrt1);
+					end
+					6'b000011: begin
+						Sqrt_DI[0] = Mant_D_sqrt_Norm[41:40];
+						Q_sqrt0 = {{defs_div_sqrt_mvp_C_MANT_FP64 {1'b0}}, Qcnt_two_3[6:1]};
+						Sqrt_Q0 = (Quotient_DP[0] ? Q_sqrt_com_0 : Q_sqrt0);
+						Sqrt_DI[1] = Mant_D_sqrt_Norm[39:38];
+						Q_sqrt1 = {{51 {1'b0}}, Qcnt_two_3[6:0]};
+						Sqrt_Q1 = (Sqrt_quotinent_S[3] ? Q_sqrt_com_1 : Q_sqrt1);
+					end
+					6'b000100: begin
+						Sqrt_DI[0] = Mant_D_sqrt_Norm[37:36];
+						Q_sqrt0 = {{50 {1'b0}}, Qcnt_two_4[8:1]};
+						Sqrt_Q0 = (Quotient_DP[0] ? Q_sqrt_com_0 : Q_sqrt0);
+						Sqrt_DI[1] = Mant_D_sqrt_Norm[35:34];
+						Q_sqrt1 = {{49 {1'b0}}, Qcnt_two_4[8:0]};
+						Sqrt_Q1 = (Sqrt_quotinent_S[3] ? Q_sqrt_com_1 : Q_sqrt1);
+					end
+					6'b000101: begin
+						Sqrt_DI[0] = Mant_D_sqrt_Norm[33:32];
+						Q_sqrt0 = {{48 {1'b0}}, Qcnt_two_5[10:1]};
+						Sqrt_Q0 = (Quotient_DP[0] ? Q_sqrt_com_0 : Q_sqrt0);
+						Sqrt_DI[1] = Mant_D_sqrt_Norm[31:30];
+						Q_sqrt1 = {{47 {1'b0}}, Qcnt_two_5[10:0]};
+						Sqrt_Q1 = (Sqrt_quotinent_S[3] ? Q_sqrt_com_1 : Q_sqrt1);
+					end
+					6'b000110: begin
+						Sqrt_DI[0] = Mant_D_sqrt_Norm[29:28];
+						Q_sqrt0 = {{46 {1'b0}}, Qcnt_two_6[12:1]};
+						Sqrt_Q0 = (Quotient_DP[0] ? Q_sqrt_com_0 : Q_sqrt0);
+						Sqrt_DI[1] = Mant_D_sqrt_Norm[27:26];
+						Q_sqrt1 = {{45 {1'b0}}, Qcnt_two_6[12:0]};
+						Sqrt_Q1 = (Sqrt_quotinent_S[3] ? Q_sqrt_com_1 : Q_sqrt1);
+					end
+					6'b000111: begin
+						Sqrt_DI[0] = Mant_D_sqrt_Norm[25:24];
+						Q_sqrt0 = {{44 {1'b0}}, Qcnt_two_7[14:1]};
+						Sqrt_Q0 = (Quotient_DP[0] ? Q_sqrt_com_0 : Q_sqrt0);
+						Sqrt_DI[1] = Mant_D_sqrt_Norm[23:22];
+						Q_sqrt1 = {{43 {1'b0}}, Qcnt_two_7[14:0]};
+						Sqrt_Q1 = (Sqrt_quotinent_S[3] ? Q_sqrt_com_1 : Q_sqrt1);
+					end
+					6'b001000: begin
+						Sqrt_DI[0] = Mant_D_sqrt_Norm[21:20];
+						Q_sqrt0 = {{42 {1'b0}}, Qcnt_two_8[16:1]};
+						Sqrt_Q0 = (Quotient_DP[0] ? Q_sqrt_com_0 : Q_sqrt0);
+						Sqrt_DI[1] = Mant_D_sqrt_Norm[19:18];
+						Q_sqrt1 = {{41 {1'b0}}, Qcnt_two_8[16:0]};
+						Sqrt_Q1 = (Sqrt_quotinent_S[3] ? Q_sqrt_com_1 : Q_sqrt1);
+					end
+					6'b001001: begin
+						Sqrt_DI[0] = Mant_D_sqrt_Norm[17:16];
+						Q_sqrt0 = {{40 {1'b0}}, Qcnt_two_9[18:1]};
+						Sqrt_Q0 = (Quotient_DP[0] ? Q_sqrt_com_0 : Q_sqrt0);
+						Sqrt_DI[1] = Mant_D_sqrt_Norm[15:14];
+						Q_sqrt1 = {{39 {1'b0}}, Qcnt_two_9[18:0]};
+						Sqrt_Q1 = (Sqrt_quotinent_S[3] ? Q_sqrt_com_1 : Q_sqrt1);
+					end
+					6'b001010: begin
+						Sqrt_DI[0] = Mant_D_sqrt_Norm[13:12];
+						Q_sqrt0 = {{38 {1'b0}}, Qcnt_two_10[20:1]};
+						Sqrt_Q0 = (Quotient_DP[0] ? Q_sqrt_com_0 : Q_sqrt0);
+						Sqrt_DI[1] = Mant_D_sqrt_Norm[11:10];
+						Q_sqrt1 = {{37 {1'b0}}, Qcnt_two_10[20:0]};
+						Sqrt_Q1 = (Sqrt_quotinent_S[3] ? Q_sqrt_com_1 : Q_sqrt1);
+					end
+					6'b001011: begin
+						Sqrt_DI[0] = Mant_D_sqrt_Norm[9:8];
+						Q_sqrt0 = {{36 {1'b0}}, Qcnt_two_11[22:1]};
+						Sqrt_Q0 = (Quotient_DP[0] ? Q_sqrt_com_0 : Q_sqrt0);
+						Sqrt_DI[1] = Mant_D_sqrt_Norm[7:6];
+						Q_sqrt1 = {{35 {1'b0}}, Qcnt_two_11[22:0]};
+						Sqrt_Q1 = (Sqrt_quotinent_S[3] ? Q_sqrt_com_1 : Q_sqrt1);
+					end
+					6'b001100: begin
+						Sqrt_DI[0] = Mant_D_sqrt_Norm[5:4];
+						Q_sqrt0 = {{34 {1'b0}}, Qcnt_two_12[24:1]};
+						Sqrt_Q0 = (Quotient_DP[0] ? Q_sqrt_com_0 : Q_sqrt0);
+						Sqrt_DI[1] = Mant_D_sqrt_Norm[3:2];
+						Q_sqrt1 = {{33 {1'b0}}, Qcnt_two_12[24:0]};
+						Sqrt_Q1 = (Sqrt_quotinent_S[3] ? Q_sqrt_com_1 : Q_sqrt1);
+					end
+					6'b001101: begin
+						Sqrt_DI[0] = Mant_D_sqrt_Norm[1:0];
+						Q_sqrt0 = {{32 {1'b0}}, Qcnt_two_13[26:1]};
+						Sqrt_Q0 = (Quotient_DP[0] ? Q_sqrt_com_0 : Q_sqrt0);
+						Sqrt_DI[1] = 2'b00;
+						Q_sqrt1 = {{31 {1'b0}}, Qcnt_two_13[26:0]};
+						Sqrt_Q1 = (Sqrt_quotinent_S[3] ? Q_sqrt_com_1 : Q_sqrt1);
+					end
+					6'b001110: begin
+						Sqrt_DI[0] = 2'b00;
+						Q_sqrt0 = {{30 {1'b0}}, Qcnt_two_14[28:1]};
+						Sqrt_Q0 = (Quotient_DP[0] ? Q_sqrt_com_0 : Q_sqrt0);
+						Sqrt_DI[1] = 2'b00;
+						Q_sqrt1 = {{29 {1'b0}}, Qcnt_two_14[28:0]};
+						Sqrt_Q1 = (Sqrt_quotinent_S[3] ? Q_sqrt_com_1 : Q_sqrt1);
+					end
+					6'b001111: begin
+						Sqrt_DI[0] = 2'b00;
+						Q_sqrt0 = {{28 {1'b0}}, Qcnt_two_15[30:1]};
+						Sqrt_Q0 = (Quotient_DP[0] ? Q_sqrt_com_0 : Q_sqrt0);
+						Sqrt_DI[1] = 2'b00;
+						Q_sqrt1 = {{27 {1'b0}}, Qcnt_two_15[30:0]};
+						Sqrt_Q1 = (Sqrt_quotinent_S[3] ? Q_sqrt_com_1 : Q_sqrt1);
+					end
+					6'b010000: begin
+						Sqrt_DI[0] = 2'b00;
+						Q_sqrt0 = {{26 {1'b0}}, Qcnt_two_16[32:1]};
+						Sqrt_Q0 = (Quotient_DP[0] ? Q_sqrt_com_0 : Q_sqrt0);
+						Sqrt_DI[1] = 2'b00;
+						Q_sqrt1 = {{25 {1'b0}}, Qcnt_two_16[32:0]};
+						Sqrt_Q1 = (Sqrt_quotinent_S[3] ? Q_sqrt_com_1 : Q_sqrt1);
+					end
+					6'b010001: begin
+						Sqrt_DI[0] = 2'b00;
+						Q_sqrt0 = {{24 {1'b0}}, Qcnt_two_17[34:1]};
+						Sqrt_Q0 = (Quotient_DP[0] ? Q_sqrt_com_0 : Q_sqrt0);
+						Sqrt_DI[1] = 2'b00;
+						Q_sqrt1 = {{23 {1'b0}}, Qcnt_two_17[34:0]};
+						Sqrt_Q1 = (Sqrt_quotinent_S[3] ? Q_sqrt_com_1 : Q_sqrt1);
+					end
+					6'b010010: begin
+						Sqrt_DI[0] = 2'b00;
+						Q_sqrt0 = {{22 {1'b0}}, Qcnt_two_18[36:1]};
+						Sqrt_Q0 = (Quotient_DP[0] ? Q_sqrt_com_0 : Q_sqrt0);
+						Sqrt_DI[1] = 2'b00;
+						Q_sqrt1 = {{21 {1'b0}}, Qcnt_two_18[36:0]};
+						Sqrt_Q1 = (Sqrt_quotinent_S[3] ? Q_sqrt_com_1 : Q_sqrt1);
+					end
+					6'b010011: begin
+						Sqrt_DI[0] = 2'b00;
+						Q_sqrt0 = {{20 {1'b0}}, Qcnt_two_19[38:1]};
+						Sqrt_Q0 = (Quotient_DP[0] ? Q_sqrt_com_0 : Q_sqrt0);
+						Sqrt_DI[1] = 2'b00;
+						Q_sqrt1 = {{19 {1'b0}}, Qcnt_two_19[38:0]};
+						Sqrt_Q1 = (Sqrt_quotinent_S[3] ? Q_sqrt_com_1 : Q_sqrt1);
+					end
+					6'b010100: begin
+						Sqrt_DI[0] = 2'b00;
+						Q_sqrt0 = {{18 {1'b0}}, Qcnt_two_20[40:1]};
+						Sqrt_Q0 = (Quotient_DP[0] ? Q_sqrt_com_0 : Q_sqrt0);
+						Sqrt_DI[1] = 2'b00;
+						Q_sqrt1 = {{17 {1'b0}}, Qcnt_two_20[40:0]};
+						Sqrt_Q1 = (Sqrt_quotinent_S[3] ? Q_sqrt_com_1 : Q_sqrt1);
+					end
+					6'b010101: begin
+						Sqrt_DI[0] = 2'b00;
+						Q_sqrt0 = {{16 {1'b0}}, Qcnt_two_21[42:1]};
+						Sqrt_Q0 = (Quotient_DP[0] ? Q_sqrt_com_0 : Q_sqrt0);
+						Sqrt_DI[1] = 2'b00;
+						Q_sqrt1 = {{15 {1'b0}}, Qcnt_two_21[42:0]};
+						Sqrt_Q1 = (Sqrt_quotinent_S[3] ? Q_sqrt_com_1 : Q_sqrt1);
+					end
+					6'b010110: begin
+						Sqrt_DI[0] = 2'b00;
+						Q_sqrt0 = {{14 {1'b0}}, Qcnt_two_22[44:1]};
+						Sqrt_Q0 = (Quotient_DP[0] ? Q_sqrt_com_0 : Q_sqrt0);
+						Sqrt_DI[1] = 2'b00;
+						Q_sqrt1 = {{13 {1'b0}}, Qcnt_two_22[44:0]};
+						Sqrt_Q1 = (Sqrt_quotinent_S[3] ? Q_sqrt_com_1 : Q_sqrt1);
+					end
+					6'b010111: begin
+						Sqrt_DI[0] = 2'b00;
+						Q_sqrt0 = {{12 {1'b0}}, Qcnt_two_23[46:1]};
+						Sqrt_Q0 = (Quotient_DP[0] ? Q_sqrt_com_0 : Q_sqrt0);
+						Sqrt_DI[1] = 2'b00;
+						Q_sqrt1 = {{11 {1'b0}}, Qcnt_two_23[46:0]};
+						Sqrt_Q1 = (Sqrt_quotinent_S[3] ? Q_sqrt_com_1 : Q_sqrt1);
+					end
+					6'b011000: begin
+						Sqrt_DI[0] = 2'b00;
+						Q_sqrt0 = {{10 {1'b0}}, Qcnt_two_24[48:1]};
+						Sqrt_Q0 = (Quotient_DP[0] ? Q_sqrt_com_0 : Q_sqrt0);
+						Sqrt_DI[1] = 2'b00;
+						Q_sqrt1 = {{9 {1'b0}}, Qcnt_two_24[48:0]};
+						Sqrt_Q1 = (Sqrt_quotinent_S[3] ? Q_sqrt_com_1 : Q_sqrt1);
+					end
+					6'b011001: begin
+						Sqrt_DI[0] = 2'b00;
+						Q_sqrt0 = {{8 {1'b0}}, Qcnt_two_25[50:1]};
+						Sqrt_Q0 = (Quotient_DP[0] ? Q_sqrt_com_0 : Q_sqrt0);
+						Sqrt_DI[1] = 2'b00;
+						Q_sqrt1 = {{7 {1'b0}}, Qcnt_two_25[50:0]};
+						Sqrt_Q1 = (Sqrt_quotinent_S[3] ? Q_sqrt_com_1 : Q_sqrt1);
+					end
+					6'b011010: begin
+						Sqrt_DI[0] = 2'b00;
+						Q_sqrt0 = {{6 {1'b0}}, Qcnt_two_26[52:1]};
+						Sqrt_Q0 = (Quotient_DP[0] ? Q_sqrt_com_0 : Q_sqrt0);
+						Sqrt_DI[1] = 2'b00;
+						Q_sqrt1 = {{5 {1'b0}}, Qcnt_two_26[52:0]};
+						Sqrt_Q1 = (Sqrt_quotinent_S[3] ? Q_sqrt_com_1 : Q_sqrt1);
+					end
+					6'b011011: begin
+						Sqrt_DI[0] = 2'b00;
+						Q_sqrt0 = {{4 {1'b0}}, Qcnt_two_27[54:1]};
+						Sqrt_Q0 = (Quotient_DP[0] ? Q_sqrt_com_0 : Q_sqrt0);
+						Sqrt_DI[1] = 2'b00;
+						Q_sqrt1 = {{3 {1'b0}}, Qcnt_two_27[54:0]};
+						Sqrt_Q1 = (Sqrt_quotinent_S[3] ? Q_sqrt_com_1 : Q_sqrt1);
+					end
+					6'b011100: begin
+						Sqrt_DI[0] = 2'b00;
+						Q_sqrt0 = {{2 {1'b0}}, Qcnt_two_28[56:1]};
+						Sqrt_Q0 = (Quotient_DP[0] ? Q_sqrt_com_0 : Q_sqrt0);
+						Sqrt_DI[1] = 2'b00;
+						Q_sqrt1 = {1'b0, Qcnt_two_28[56:0]};
+						Sqrt_Q1 = (Sqrt_quotinent_S[3] ? Q_sqrt_com_1 : Q_sqrt1);
+					end
+					default: begin
+						Sqrt_DI[0] = Mant_D_sqrt_Norm[53:defs_div_sqrt_mvp_C_MANT_FP64];
+						Q_sqrt0 = {{57 {1'b0}}, Qcnt_two_0[1]};
+						Sqrt_Q0 = Q_sqrt_com_0;
+						Sqrt_DI[1] = Mant_D_sqrt_Norm[51:50];
+						Q_sqrt1 = {{56 {1'b0}}, Qcnt_two_0[1:0]};
+						Sqrt_Q1 = (Sqrt_quotinent_S[3] ? Q_sqrt_com_1 : Q_sqrt1);
+					end
+				endcase
+			2'b10:
+				case (Crtl_cnt_S)
+					6'b000000: begin
+						Sqrt_DI[0] = Mant_D_sqrt_Norm[53:defs_div_sqrt_mvp_C_MANT_FP64];
+						Q_sqrt0 = {{57 {1'b0}}, Qcnt_three_0[2]};
+						Sqrt_Q0 = Q_sqrt_com_0;
+						Sqrt_DI[1] = Mant_D_sqrt_Norm[51:50];
+						Q_sqrt1 = {{56 {1'b0}}, Qcnt_three_0[2:1]};
+						Sqrt_Q1 = (Sqrt_quotinent_S[3] ? Q_sqrt_com_1 : Q_sqrt1);
+						Sqrt_DI[2] = Mant_D_sqrt_Norm[49:48];
+						Q_sqrt2 = {{55 {1'b0}}, Qcnt_three_0[2:0]};
+						Sqrt_Q2 = (Sqrt_quotinent_S[2] ? Q_sqrt_com_2 : Q_sqrt2);
+					end
+					6'b000001: begin
+						Sqrt_DI[0] = Mant_D_sqrt_Norm[47:46];
+						Q_sqrt0 = {{54 {1'b0}}, Qcnt_three_1[4:2]};
+						Sqrt_Q0 = (Quotient_DP[0] ? Q_sqrt_com_0 : Q_sqrt0);
+						Sqrt_DI[1] = Mant_D_sqrt_Norm[45:44];
+						Q_sqrt1 = {{53 {1'b0}}, Qcnt_three_1[4:1]};
+						Sqrt_Q1 = (Sqrt_quotinent_S[3] ? Q_sqrt_com_1 : Q_sqrt1);
+						Sqrt_DI[2] = Mant_D_sqrt_Norm[43:42];
+						Q_sqrt2 = {{defs_div_sqrt_mvp_C_MANT_FP64 {1'b0}}, Qcnt_three_1[4:0]};
+						Sqrt_Q2 = (Sqrt_quotinent_S[2] ? Q_sqrt_com_2 : Q_sqrt2);
+					end
+					6'b000010: begin
+						Sqrt_DI[0] = Mant_D_sqrt_Norm[41:40];
+						Q_sqrt0 = {{51 {1'b0}}, Qcnt_three_2[7:2]};
+						Sqrt_Q0 = (Quotient_DP[0] ? Q_sqrt_com_0 : Q_sqrt0);
+						Sqrt_DI[1] = Mant_D_sqrt_Norm[39:38];
+						Q_sqrt1 = {{50 {1'b0}}, Qcnt_three_2[7:1]};
+						Sqrt_Q1 = (Sqrt_quotinent_S[3] ? Q_sqrt_com_1 : Q_sqrt1);
+						Sqrt_DI[2] = Mant_D_sqrt_Norm[37:36];
+						Q_sqrt2 = {{49 {1'b0}}, Qcnt_three_2[7:0]};
+						Sqrt_Q2 = (Sqrt_quotinent_S[2] ? Q_sqrt_com_2 : Q_sqrt2);
+					end
+					6'b000011: begin
+						Sqrt_DI[0] = Mant_D_sqrt_Norm[35:34];
+						Q_sqrt0 = {{48 {1'b0}}, Qcnt_three_3[10:2]};
+						Sqrt_Q0 = (Quotient_DP[0] ? Q_sqrt_com_0 : Q_sqrt0);
+						Sqrt_DI[1] = Mant_D_sqrt_Norm[33:32];
+						Q_sqrt1 = {{47 {1'b0}}, Qcnt_three_3[10:1]};
+						Sqrt_Q1 = (Sqrt_quotinent_S[3] ? Q_sqrt_com_1 : Q_sqrt1);
+						Sqrt_DI[2] = Mant_D_sqrt_Norm[31:30];
+						Q_sqrt2 = {{46 {1'b0}}, Qcnt_three_3[10:0]};
+						Sqrt_Q2 = (Sqrt_quotinent_S[2] ? Q_sqrt_com_2 : Q_sqrt2);
+					end
+					6'b000100: begin
+						Sqrt_DI[0] = Mant_D_sqrt_Norm[29:28];
+						Q_sqrt0 = {{45 {1'b0}}, Qcnt_three_4[13:2]};
+						Sqrt_Q0 = (Quotient_DP[0] ? Q_sqrt_com_0 : Q_sqrt0);
+						Sqrt_DI[1] = Mant_D_sqrt_Norm[27:26];
+						Q_sqrt1 = {{44 {1'b0}}, Qcnt_three_4[13:1]};
+						Sqrt_Q1 = (Sqrt_quotinent_S[3] ? Q_sqrt_com_1 : Q_sqrt1);
+						Sqrt_DI[2] = Mant_D_sqrt_Norm[25:24];
+						Q_sqrt2 = {{43 {1'b0}}, Qcnt_three_4[13:0]};
+						Sqrt_Q2 = (Sqrt_quotinent_S[2] ? Q_sqrt_com_2 : Q_sqrt2);
+					end
+					6'b000101: begin
+						Sqrt_DI[0] = Mant_D_sqrt_Norm[23:22];
+						Q_sqrt0 = {{42 {1'b0}}, Qcnt_three_5[16:2]};
+						Sqrt_Q0 = (Quotient_DP[0] ? Q_sqrt_com_0 : Q_sqrt0);
+						Sqrt_DI[1] = Mant_D_sqrt_Norm[21:20];
+						Q_sqrt1 = {{41 {1'b0}}, Qcnt_three_5[16:1]};
+						Sqrt_Q1 = (Sqrt_quotinent_S[3] ? Q_sqrt_com_1 : Q_sqrt1);
+						Sqrt_DI[2] = Mant_D_sqrt_Norm[19:18];
+						Q_sqrt2 = {{40 {1'b0}}, Qcnt_three_5[16:0]};
+						Sqrt_Q2 = (Sqrt_quotinent_S[2] ? Q_sqrt_com_2 : Q_sqrt2);
+					end
+					6'b000110: begin
+						Sqrt_DI[0] = Mant_D_sqrt_Norm[17:16];
+						Q_sqrt0 = {{39 {1'b0}}, Qcnt_three_6[19:2]};
+						Sqrt_Q0 = (Quotient_DP[0] ? Q_sqrt_com_0 : Q_sqrt0);
+						Sqrt_DI[1] = Mant_D_sqrt_Norm[15:14];
+						Q_sqrt1 = {{38 {1'b0}}, Qcnt_three_6[19:1]};
+						Sqrt_Q1 = (Sqrt_quotinent_S[3] ? Q_sqrt_com_1 : Q_sqrt1);
+						Sqrt_DI[2] = Mant_D_sqrt_Norm[13:12];
+						Q_sqrt2 = {{37 {1'b0}}, Qcnt_three_6[19:0]};
+						Sqrt_Q2 = (Sqrt_quotinent_S[2] ? Q_sqrt_com_2 : Q_sqrt2);
+					end
+					6'b000111: begin
+						Sqrt_DI[0] = Mant_D_sqrt_Norm[11:10];
+						Q_sqrt0 = {{36 {1'b0}}, Qcnt_three_7[22:2]};
+						Sqrt_Q0 = (Quotient_DP[0] ? Q_sqrt_com_0 : Q_sqrt0);
+						Sqrt_DI[1] = Mant_D_sqrt_Norm[9:8];
+						Q_sqrt1 = {{35 {1'b0}}, Qcnt_three_7[22:1]};
+						Sqrt_Q1 = (Sqrt_quotinent_S[3] ? Q_sqrt_com_1 : Q_sqrt1);
+						Sqrt_DI[2] = Mant_D_sqrt_Norm[7:6];
+						Q_sqrt2 = {{34 {1'b0}}, Qcnt_three_7[22:0]};
+						Sqrt_Q2 = (Sqrt_quotinent_S[2] ? Q_sqrt_com_2 : Q_sqrt2);
+					end
+					6'b001000: begin
+						Sqrt_DI[0] = Mant_D_sqrt_Norm[5:4];
+						Q_sqrt0 = {{33 {1'b0}}, Qcnt_three_8[25:2]};
+						Sqrt_Q0 = (Quotient_DP[0] ? Q_sqrt_com_0 : Q_sqrt0);
+						Sqrt_DI[1] = Mant_D_sqrt_Norm[3:2];
+						Q_sqrt1 = {{32 {1'b0}}, Qcnt_three_8[25:1]};
+						Sqrt_Q1 = (Sqrt_quotinent_S[3] ? Q_sqrt_com_1 : Q_sqrt1);
+						Sqrt_DI[2] = Mant_D_sqrt_Norm[1:0];
+						Q_sqrt2 = {{31 {1'b0}}, Qcnt_three_8[25:0]};
+						Sqrt_Q2 = (Sqrt_quotinent_S[2] ? Q_sqrt_com_2 : Q_sqrt2);
+					end
+					6'b001001: begin
+						Sqrt_DI[0] = 2'b00;
+						Q_sqrt0 = {{30 {1'b0}}, Qcnt_three_9[28:2]};
+						Sqrt_Q0 = (Quotient_DP[0] ? Q_sqrt_com_0 : Q_sqrt0);
+						Sqrt_DI[1] = 2'b00;
+						Q_sqrt1 = {{29 {1'b0}}, Qcnt_three_9[28:1]};
+						Sqrt_Q1 = (Sqrt_quotinent_S[3] ? Q_sqrt_com_1 : Q_sqrt1);
+						Sqrt_DI[2] = 2'b00;
+						Q_sqrt2 = {{28 {1'b0}}, Qcnt_three_9[28:0]};
+						Sqrt_Q2 = (Sqrt_quotinent_S[2] ? Q_sqrt_com_2 : Q_sqrt2);
+					end
+					6'b001010: begin
+						Sqrt_DI[0] = 2'b00;
+						Q_sqrt0 = {{27 {1'b0}}, Qcnt_three_10[31:2]};
+						Sqrt_Q0 = (Quotient_DP[0] ? Q_sqrt_com_0 : Q_sqrt0);
+						Sqrt_DI[1] = 2'b00;
+						Q_sqrt1 = {{26 {1'b0}}, Qcnt_three_10[31:1]};
+						Sqrt_Q1 = (Sqrt_quotinent_S[3] ? Q_sqrt_com_1 : Q_sqrt1);
+						Sqrt_DI[2] = 2'b00;
+						Q_sqrt2 = {{25 {1'b0}}, Qcnt_three_10[31:0]};
+						Sqrt_Q2 = (Sqrt_quotinent_S[2] ? Q_sqrt_com_2 : Q_sqrt2);
+					end
+					6'b001011: begin
+						Sqrt_DI[0] = 2'b00;
+						Q_sqrt0 = {{24 {1'b0}}, Qcnt_three_11[34:2]};
+						Sqrt_Q0 = (Quotient_DP[0] ? Q_sqrt_com_0 : Q_sqrt0);
+						Sqrt_DI[1] = 2'b00;
+						Q_sqrt1 = {{23 {1'b0}}, Qcnt_three_11[34:1]};
+						Sqrt_Q1 = (Sqrt_quotinent_S[3] ? Q_sqrt_com_1 : Q_sqrt1);
+						Sqrt_DI[2] = 2'b00;
+						Q_sqrt2 = {{22 {1'b0}}, Qcnt_three_11[34:0]};
+						Sqrt_Q2 = (Sqrt_quotinent_S[2] ? Q_sqrt_com_2 : Q_sqrt2);
+					end
+					6'b001100: begin
+						Sqrt_DI[0] = 2'b00;
+						Q_sqrt0 = {{21 {1'b0}}, Qcnt_three_12[37:2]};
+						Sqrt_Q0 = (Quotient_DP[0] ? Q_sqrt_com_0 : Q_sqrt0);
+						Sqrt_DI[1] = 2'b00;
+						Q_sqrt1 = {{20 {1'b0}}, Qcnt_three_12[37:1]};
+						Sqrt_Q1 = (Sqrt_quotinent_S[3] ? Q_sqrt_com_1 : Q_sqrt1);
+						Sqrt_DI[2] = 2'b00;
+						Q_sqrt2 = {{19 {1'b0}}, Qcnt_three_12[37:0]};
+						Sqrt_Q2 = (Sqrt_quotinent_S[2] ? Q_sqrt_com_2 : Q_sqrt2);
+					end
+					6'b001101: begin
+						Sqrt_DI[0] = 2'b00;
+						Q_sqrt0 = {{18 {1'b0}}, Qcnt_three_13[40:2]};
+						Sqrt_Q0 = (Quotient_DP[0] ? Q_sqrt_com_0 : Q_sqrt0);
+						Sqrt_DI[1] = 2'b00;
+						Q_sqrt1 = {{17 {1'b0}}, Qcnt_three_13[40:1]};
+						Sqrt_Q1 = (Sqrt_quotinent_S[3] ? Q_sqrt_com_1 : Q_sqrt1);
+						Sqrt_DI[2] = 2'b00;
+						Q_sqrt2 = {{16 {1'b0}}, Qcnt_three_13[40:0]};
+						Sqrt_Q2 = (Sqrt_quotinent_S[2] ? Q_sqrt_com_2 : Q_sqrt2);
+					end
+					6'b001110: begin
+						Sqrt_DI[0] = 2'b00;
+						Q_sqrt0 = {{15 {1'b0}}, Qcnt_three_14[43:2]};
+						Sqrt_Q0 = (Quotient_DP[0] ? Q_sqrt_com_0 : Q_sqrt0);
+						Sqrt_DI[1] = 2'b00;
+						Q_sqrt1 = {{14 {1'b0}}, Qcnt_three_14[43:1]};
+						Sqrt_Q1 = (Sqrt_quotinent_S[3] ? Q_sqrt_com_1 : Q_sqrt1);
+						Sqrt_DI[2] = 2'b00;
+						Q_sqrt2 = {{13 {1'b0}}, Qcnt_three_14[43:0]};
+						Sqrt_Q2 = (Sqrt_quotinent_S[2] ? Q_sqrt_com_2 : Q_sqrt2);
+					end
+					6'b001111: begin
+						Sqrt_DI[0] = 2'b00;
+						Q_sqrt0 = {{12 {1'b0}}, Qcnt_three_15[46:2]};
+						Sqrt_Q0 = (Quotient_DP[0] ? Q_sqrt_com_0 : Q_sqrt0);
+						Sqrt_DI[1] = 2'b00;
+						Q_sqrt1 = {{11 {1'b0}}, Qcnt_three_15[46:1]};
+						Sqrt_Q1 = (Sqrt_quotinent_S[3] ? Q_sqrt_com_1 : Q_sqrt1);
+						Sqrt_DI[2] = 2'b00;
+						Q_sqrt2 = {{10 {1'b0}}, Qcnt_three_15[46:0]};
+						Sqrt_Q2 = (Sqrt_quotinent_S[2] ? Q_sqrt_com_2 : Q_sqrt2);
+					end
+					6'b010000: begin
+						Sqrt_DI[0] = 2'b00;
+						Q_sqrt0 = {{9 {1'b0}}, Qcnt_three_16[49:2]};
+						Sqrt_Q0 = (Quotient_DP[0] ? Q_sqrt_com_0 : Q_sqrt0);
+						Sqrt_DI[1] = 2'b00;
+						Q_sqrt1 = {{8 {1'b0}}, Qcnt_three_16[49:1]};
+						Sqrt_Q1 = (Sqrt_quotinent_S[3] ? Q_sqrt_com_1 : Q_sqrt1);
+						Sqrt_DI[2] = 2'b00;
+						Q_sqrt2 = {{7 {1'b0}}, Qcnt_three_16[49:0]};
+						Sqrt_Q2 = (Sqrt_quotinent_S[2] ? Q_sqrt_com_2 : Q_sqrt2);
+					end
+					6'b010001: begin
+						Sqrt_DI[0] = 2'b00;
+						Q_sqrt0 = {{6 {1'b0}}, Qcnt_three_17[52:2]};
+						Sqrt_Q0 = (Quotient_DP[0] ? Q_sqrt_com_0 : Q_sqrt0);
+						Sqrt_DI[1] = 2'b00;
+						Q_sqrt1 = {{5 {1'b0}}, Qcnt_three_17[52:1]};
+						Sqrt_Q1 = (Sqrt_quotinent_S[3] ? Q_sqrt_com_1 : Q_sqrt1);
+						Sqrt_DI[2] = 2'b00;
+						Q_sqrt2 = {{4 {1'b0}}, Qcnt_three_17[52:0]};
+						Sqrt_Q2 = (Sqrt_quotinent_S[2] ? Q_sqrt_com_2 : Q_sqrt2);
+					end
+					6'b010010: begin
+						Sqrt_DI[0] = 2'b00;
+						Q_sqrt0 = {{3 {1'b0}}, Qcnt_three_18[55:2]};
+						Sqrt_Q0 = (Quotient_DP[0] ? Q_sqrt_com_0 : Q_sqrt0);
+						Sqrt_DI[1] = 2'b00;
+						Q_sqrt1 = {{2 {1'b0}}, Qcnt_three_18[55:1]};
+						Sqrt_Q1 = (Sqrt_quotinent_S[3] ? Q_sqrt_com_1 : Q_sqrt1);
+						Sqrt_DI[2] = 2'b00;
+						Q_sqrt2 = {1'b0, Qcnt_three_18[55:0]};
+						Sqrt_Q2 = (Sqrt_quotinent_S[2] ? Q_sqrt_com_2 : Q_sqrt2);
+					end
+					default: begin
+						Sqrt_DI[0] = Mant_D_sqrt_Norm[53:defs_div_sqrt_mvp_C_MANT_FP64];
+						Q_sqrt0 = {{57 {1'b0}}, Qcnt_three_0[2]};
+						Sqrt_Q0 = Q_sqrt_com_0;
+						Sqrt_DI[1] = Mant_D_sqrt_Norm[51:50];
+						Q_sqrt1 = {{56 {1'b0}}, Qcnt_three_0[2:1]};
+						Sqrt_Q1 = (Sqrt_quotinent_S[3] ? Q_sqrt_com_1 : Q_sqrt1);
+						Sqrt_DI[2] = Mant_D_sqrt_Norm[49:48];
+						Q_sqrt2 = {{55 {1'b0}}, Qcnt_three_0[2:0]};
+						Sqrt_Q2 = (Sqrt_quotinent_S[2] ? Q_sqrt_com_2 : Q_sqrt2);
+					end
+				endcase
+			2'b11:
+				case (Crtl_cnt_S)
+					6'b000000: begin
+						Sqrt_DI[0] = Mant_D_sqrt_Norm[53:defs_div_sqrt_mvp_C_MANT_FP64];
+						Q_sqrt0 = {{57 {1'b0}}, Qcnt_four_0[3]};
+						Sqrt_Q0 = Q_sqrt_com_0;
+						Sqrt_DI[1] = Mant_D_sqrt_Norm[51:50];
+						Q_sqrt1 = {{56 {1'b0}}, Qcnt_four_0[3:2]};
+						Sqrt_Q1 = (Sqrt_quotinent_S[3] ? Q_sqrt_com_1 : Q_sqrt1);
+						Sqrt_DI[2] = Mant_D_sqrt_Norm[49:48];
+						Q_sqrt2 = {{55 {1'b0}}, Qcnt_four_0[3:1]};
+						Sqrt_Q2 = (Sqrt_quotinent_S[2] ? Q_sqrt_com_2 : Q_sqrt2);
+						Sqrt_DI[3] = Mant_D_sqrt_Norm[47:46];
+						Q_sqrt3 = {{54 {1'b0}}, Qcnt_four_0[3:0]};
+						Sqrt_Q3 = (Sqrt_quotinent_S[1] ? Q_sqrt_com_3 : Q_sqrt3);
+					end
+					6'b000001: begin
+						Sqrt_DI[0] = Mant_D_sqrt_Norm[45:44];
+						Q_sqrt0 = {{53 {1'b0}}, Qcnt_four_1[6:3]};
+						Sqrt_Q0 = (Quotient_DP[0] ? Q_sqrt_com_0 : Q_sqrt0);
+						Sqrt_DI[1] = Mant_D_sqrt_Norm[43:42];
+						Q_sqrt1 = {{defs_div_sqrt_mvp_C_MANT_FP64 {1'b0}}, Qcnt_four_1[6:2]};
+						Sqrt_Q1 = (Sqrt_quotinent_S[3] ? Q_sqrt_com_1 : Q_sqrt1);
+						Sqrt_DI[2] = Mant_D_sqrt_Norm[41:40];
+						Q_sqrt2 = {{51 {1'b0}}, Qcnt_four_1[6:1]};
+						Sqrt_Q2 = (Sqrt_quotinent_S[2] ? Q_sqrt_com_2 : Q_sqrt2);
+						Sqrt_DI[3] = Mant_D_sqrt_Norm[39:38];
+						Q_sqrt3 = {{50 {1'b0}}, Qcnt_four_1[6:0]};
+						Sqrt_Q3 = (Sqrt_quotinent_S[1] ? Q_sqrt_com_3 : Q_sqrt3);
+					end
+					6'b000010: begin
+						Sqrt_DI[0] = Mant_D_sqrt_Norm[37:36];
+						Q_sqrt0 = {{49 {1'b0}}, Qcnt_four_2[10:3]};
+						Sqrt_Q0 = (Quotient_DP[0] ? Q_sqrt_com_0 : Q_sqrt0);
+						Sqrt_DI[1] = Mant_D_sqrt_Norm[35:34];
+						Q_sqrt1 = {{48 {1'b0}}, Qcnt_four_2[10:2]};
+						Sqrt_Q1 = (Sqrt_quotinent_S[3] ? Q_sqrt_com_1 : Q_sqrt1);
+						Sqrt_DI[2] = Mant_D_sqrt_Norm[33:32];
+						Q_sqrt2 = {{47 {1'b0}}, Qcnt_four_2[10:1]};
+						Sqrt_Q2 = (Sqrt_quotinent_S[2] ? Q_sqrt_com_2 : Q_sqrt2);
+						Sqrt_DI[3] = Mant_D_sqrt_Norm[31:30];
+						Q_sqrt3 = {{46 {1'b0}}, Qcnt_four_2[10:0]};
+						Sqrt_Q3 = (Sqrt_quotinent_S[1] ? Q_sqrt_com_3 : Q_sqrt3);
+					end
+					6'b000011: begin
+						Sqrt_DI[0] = Mant_D_sqrt_Norm[29:28];
+						Q_sqrt0 = {{45 {1'b0}}, Qcnt_four_3[14:3]};
+						Sqrt_Q0 = (Quotient_DP[0] ? Q_sqrt_com_0 : Q_sqrt0);
+						Sqrt_DI[1] = Mant_D_sqrt_Norm[27:26];
+						Q_sqrt1 = {{44 {1'b0}}, Qcnt_four_3[14:2]};
+						Sqrt_Q1 = (Sqrt_quotinent_S[3] ? Q_sqrt_com_1 : Q_sqrt1);
+						Sqrt_DI[2] = Mant_D_sqrt_Norm[25:24];
+						Q_sqrt2 = {{43 {1'b0}}, Qcnt_four_3[14:1]};
+						Sqrt_Q2 = (Sqrt_quotinent_S[2] ? Q_sqrt_com_2 : Q_sqrt2);
+						Sqrt_DI[3] = Mant_D_sqrt_Norm[23:22];
+						Q_sqrt3 = {{42 {1'b0}}, Qcnt_four_3[14:0]};
+						Sqrt_Q3 = (Sqrt_quotinent_S[1] ? Q_sqrt_com_3 : Q_sqrt3);
+					end
+					6'b000100: begin
+						Sqrt_DI[0] = Mant_D_sqrt_Norm[21:20];
+						Q_sqrt0 = {{41 {1'b0}}, Qcnt_four_4[18:3]};
+						Sqrt_Q0 = (Quotient_DP[0] ? Q_sqrt_com_0 : Q_sqrt0);
+						Sqrt_DI[1] = Mant_D_sqrt_Norm[19:18];
+						Q_sqrt1 = {{40 {1'b0}}, Qcnt_four_4[18:2]};
+						Sqrt_Q1 = (Sqrt_quotinent_S[3] ? Q_sqrt_com_1 : Q_sqrt1);
+						Sqrt_DI[2] = Mant_D_sqrt_Norm[17:16];
+						Q_sqrt2 = {{39 {1'b0}}, Qcnt_four_4[18:1]};
+						Sqrt_Q2 = (Sqrt_quotinent_S[2] ? Q_sqrt_com_2 : Q_sqrt2);
+						Sqrt_DI[3] = Mant_D_sqrt_Norm[15:14];
+						Q_sqrt3 = {{38 {1'b0}}, Qcnt_four_4[18:0]};
+						Sqrt_Q3 = (Sqrt_quotinent_S[1] ? Q_sqrt_com_3 : Q_sqrt3);
+					end
+					6'b000101: begin
+						Sqrt_DI[0] = Mant_D_sqrt_Norm[13:12];
+						Q_sqrt0 = {{37 {1'b0}}, Qcnt_four_5[22:3]};
+						Sqrt_Q0 = (Quotient_DP[0] ? Q_sqrt_com_0 : Q_sqrt0);
+						Sqrt_DI[1] = Mant_D_sqrt_Norm[11:10];
+						Q_sqrt1 = {{36 {1'b0}}, Qcnt_four_5[22:2]};
+						Sqrt_Q1 = (Sqrt_quotinent_S[3] ? Q_sqrt_com_1 : Q_sqrt1);
+						Sqrt_DI[2] = Mant_D_sqrt_Norm[9:8];
+						Q_sqrt2 = {{35 {1'b0}}, Qcnt_four_5[22:1]};
+						Sqrt_Q2 = (Sqrt_quotinent_S[2] ? Q_sqrt_com_2 : Q_sqrt2);
+						Sqrt_DI[3] = Mant_D_sqrt_Norm[7:6];
+						Q_sqrt3 = {{34 {1'b0}}, Qcnt_four_5[22:0]};
+						Sqrt_Q3 = (Sqrt_quotinent_S[1] ? Q_sqrt_com_3 : Q_sqrt3);
+					end
+					6'b000110: begin
+						Sqrt_DI[0] = Mant_D_sqrt_Norm[5:4];
+						Q_sqrt0 = {{33 {1'b0}}, Qcnt_four_6[26:3]};
+						Sqrt_Q0 = (Quotient_DP[0] ? Q_sqrt_com_0 : Q_sqrt0);
+						Sqrt_DI[1] = Mant_D_sqrt_Norm[3:2];
+						Q_sqrt1 = {{32 {1'b0}}, Qcnt_four_6[26:2]};
+						Sqrt_Q1 = (Sqrt_quotinent_S[3] ? Q_sqrt_com_1 : Q_sqrt1);
+						Sqrt_DI[2] = Mant_D_sqrt_Norm[1:0];
+						Q_sqrt2 = {{31 {1'b0}}, Qcnt_four_6[26:1]};
+						Sqrt_Q2 = (Sqrt_quotinent_S[2] ? Q_sqrt_com_2 : Q_sqrt2);
+						Sqrt_DI[3] = 2'b00;
+						Q_sqrt3 = {{30 {1'b0}}, Qcnt_four_6[26:0]};
+						Sqrt_Q3 = (Sqrt_quotinent_S[1] ? Q_sqrt_com_3 : Q_sqrt3);
+					end
+					6'b000111: begin
+						Sqrt_DI[0] = 2'b00;
+						Q_sqrt0 = {{29 {1'b0}}, Qcnt_four_7[30:3]};
+						Sqrt_Q0 = (Quotient_DP[0] ? Q_sqrt_com_0 : Q_sqrt0);
+						Sqrt_DI[1] = 2'b00;
+						Q_sqrt1 = {{28 {1'b0}}, Qcnt_four_7[30:2]};
+						Sqrt_Q1 = (Sqrt_quotinent_S[3] ? Q_sqrt_com_1 : Q_sqrt1);
+						Sqrt_DI[2] = 2'b00;
+						Q_sqrt2 = {{27 {1'b0}}, Qcnt_four_7[30:1]};
+						Sqrt_Q2 = (Sqrt_quotinent_S[2] ? Q_sqrt_com_2 : Q_sqrt2);
+						Sqrt_DI[3] = 2'b00;
+						Q_sqrt3 = {{26 {1'b0}}, Qcnt_four_7[30:0]};
+						Sqrt_Q3 = (Sqrt_quotinent_S[1] ? Q_sqrt_com_3 : Q_sqrt3);
+					end
+					6'b001000: begin
+						Sqrt_DI[0] = 2'b00;
+						Q_sqrt0 = {{25 {1'b0}}, Qcnt_four_8[34:3]};
+						Sqrt_Q0 = (Quotient_DP[0] ? Q_sqrt_com_0 : Q_sqrt0);
+						Sqrt_DI[1] = 2'b00;
+						Q_sqrt1 = {{24 {1'b0}}, Qcnt_four_8[34:2]};
+						Sqrt_Q1 = (Sqrt_quotinent_S[3] ? Q_sqrt_com_1 : Q_sqrt1);
+						Sqrt_DI[2] = 2'b00;
+						Q_sqrt2 = {{23 {1'b0}}, Qcnt_four_8[34:1]};
+						Sqrt_Q2 = (Sqrt_quotinent_S[2] ? Q_sqrt_com_2 : Q_sqrt2);
+						Sqrt_DI[3] = 2'b00;
+						Q_sqrt3 = {{22 {1'b0}}, Qcnt_four_8[34:0]};
+						Sqrt_Q3 = (Sqrt_quotinent_S[1] ? Q_sqrt_com_3 : Q_sqrt3);
+					end
+					6'b001001: begin
+						Sqrt_DI[0] = 2'b00;
+						Q_sqrt0 = {{21 {1'b0}}, Qcnt_four_9[38:3]};
+						Sqrt_Q0 = (Quotient_DP[0] ? Q_sqrt_com_0 : Q_sqrt0);
+						Sqrt_DI[1] = 2'b00;
+						Q_sqrt1 = {{20 {1'b0}}, Qcnt_four_9[38:2]};
+						Sqrt_Q1 = (Sqrt_quotinent_S[3] ? Q_sqrt_com_1 : Q_sqrt1);
+						Sqrt_DI[2] = 2'b00;
+						Q_sqrt2 = {{19 {1'b0}}, Qcnt_four_9[38:1]};
+						Sqrt_Q2 = (Sqrt_quotinent_S[2] ? Q_sqrt_com_2 : Q_sqrt2);
+						Sqrt_DI[3] = 2'b00;
+						Q_sqrt3 = {{18 {1'b0}}, Qcnt_four_9[38:0]};
+						Sqrt_Q3 = (Sqrt_quotinent_S[1] ? Q_sqrt_com_3 : Q_sqrt3);
+					end
+					6'b001010: begin
+						Sqrt_DI[0] = 2'b00;
+						Q_sqrt0 = {{17 {1'b0}}, Qcnt_four_10[42:3]};
+						Sqrt_Q0 = (Quotient_DP[0] ? Q_sqrt_com_0 : Q_sqrt0);
+						Sqrt_DI[1] = 2'b00;
+						Q_sqrt1 = {{16 {1'b0}}, Qcnt_four_10[42:2]};
+						Sqrt_Q1 = (Sqrt_quotinent_S[3] ? Q_sqrt_com_1 : Q_sqrt1);
+						Sqrt_DI[2] = 2'b00;
+						Q_sqrt2 = {{15 {1'b0}}, Qcnt_four_10[42:1]};
+						Sqrt_Q2 = (Sqrt_quotinent_S[2] ? Q_sqrt_com_2 : Q_sqrt2);
+						Sqrt_DI[3] = 2'b00;
+						Q_sqrt3 = {{14 {1'b0}}, Qcnt_four_10[42:0]};
+						Sqrt_Q3 = (Sqrt_quotinent_S[1] ? Q_sqrt_com_3 : Q_sqrt3);
+					end
+					6'b001011: begin
+						Sqrt_DI[0] = 2'b00;
+						Q_sqrt0 = {{13 {1'b0}}, Qcnt_four_11[46:3]};
+						Sqrt_Q0 = (Quotient_DP[0] ? Q_sqrt_com_0 : Q_sqrt0);
+						Sqrt_DI[1] = 2'b00;
+						Q_sqrt1 = {{12 {1'b0}}, Qcnt_four_11[46:2]};
+						Sqrt_Q1 = (Sqrt_quotinent_S[3] ? Q_sqrt_com_1 : Q_sqrt1);
+						Sqrt_DI[2] = 2'b00;
+						Q_sqrt2 = {{11 {1'b0}}, Qcnt_four_11[46:1]};
+						Sqrt_Q2 = (Sqrt_quotinent_S[2] ? Q_sqrt_com_2 : Q_sqrt2);
+						Sqrt_DI[3] = 2'b00;
+						Q_sqrt3 = {{10 {1'b0}}, Qcnt_four_11[46:0]};
+						Sqrt_Q3 = (Sqrt_quotinent_S[1] ? Q_sqrt_com_3 : Q_sqrt3);
+					end
+					6'b001100: begin
+						Sqrt_DI[0] = 2'b00;
+						Q_sqrt0 = {{9 {1'b0}}, Qcnt_four_12[50:3]};
+						Sqrt_Q0 = (Quotient_DP[0] ? Q_sqrt_com_0 : Q_sqrt0);
+						Sqrt_DI[1] = 2'b00;
+						Q_sqrt1 = {{8 {1'b0}}, Qcnt_four_12[50:2]};
+						Sqrt_Q1 = (Sqrt_quotinent_S[3] ? Q_sqrt_com_1 : Q_sqrt1);
+						Sqrt_DI[2] = 2'b00;
+						Q_sqrt2 = {{7 {1'b0}}, Qcnt_four_12[50:1]};
+						Sqrt_Q2 = (Sqrt_quotinent_S[2] ? Q_sqrt_com_2 : Q_sqrt2);
+						Sqrt_DI[3] = 2'b00;
+						Q_sqrt3 = {{6 {1'b0}}, Qcnt_four_12[50:0]};
+						Sqrt_Q3 = (Sqrt_quotinent_S[1] ? Q_sqrt_com_3 : Q_sqrt3);
+					end
+					6'b001101: begin
+						Sqrt_DI[0] = 2'b00;
+						Q_sqrt0 = {{5 {1'b0}}, Qcnt_four_13[54:3]};
+						Sqrt_Q0 = (Quotient_DP[0] ? Q_sqrt_com_0 : Q_sqrt0);
+						Sqrt_DI[1] = 2'b00;
+						Q_sqrt1 = {{4 {1'b0}}, Qcnt_four_13[54:2]};
+						Sqrt_Q1 = (Sqrt_quotinent_S[3] ? Q_sqrt_com_1 : Q_sqrt1);
+						Sqrt_DI[2] = 2'b00;
+						Q_sqrt2 = {{3 {1'b0}}, Qcnt_four_13[54:1]};
+						Sqrt_Q2 = (Sqrt_quotinent_S[2] ? Q_sqrt_com_2 : Q_sqrt2);
+						Sqrt_DI[3] = 2'b00;
+						Q_sqrt3 = {{2 {1'b0}}, Qcnt_four_13[54:0]};
+						Sqrt_Q3 = (Sqrt_quotinent_S[1] ? Q_sqrt_com_3 : Q_sqrt3);
+					end
+					default: begin
+						Sqrt_DI[0] = Mant_D_sqrt_Norm[53:defs_div_sqrt_mvp_C_MANT_FP64];
+						Q_sqrt0 = {{57 {1'b0}}, Qcnt_four_0[3]};
+						Sqrt_Q0 = Q_sqrt_com_0;
+						Sqrt_DI[1] = Mant_D_sqrt_Norm[51:50];
+						Q_sqrt1 = {{56 {1'b0}}, Qcnt_four_0[3:2]};
+						Sqrt_Q1 = (Sqrt_quotinent_S[3] ? Q_sqrt_com_1 : Q_sqrt1);
+						Sqrt_DI[2] = Mant_D_sqrt_Norm[49:48];
+						Q_sqrt2 = {{55 {1'b0}}, Qcnt_four_0[3:1]};
+						Sqrt_Q2 = (Sqrt_quotinent_S[2] ? Q_sqrt_com_2 : Q_sqrt2);
+						Sqrt_DI[3] = Mant_D_sqrt_Norm[47:46];
+						Q_sqrt3 = {{54 {1'b0}}, Qcnt_four_0[3:0]};
+						Sqrt_Q3 = (Sqrt_quotinent_S[1] ? Q_sqrt_com_3 : Q_sqrt3);
+					end
+				endcase
+		endcase
+	assign Sqrt_R0 = (Sqrt_start_dly_S ? {58 {1'sb0}} : {Partial_remainder_DP[57:0]});
+	assign Sqrt_R1 = {Iteration_cell_sum_AMASK_D[0][57], Iteration_cell_sum_AMASK_D[0][54:0], Sqrt_DO[0]};
+	assign Sqrt_R2 = {Iteration_cell_sum_AMASK_D[1][57], Iteration_cell_sum_AMASK_D[1][54:0], Sqrt_DO[1]};
+	assign Sqrt_R3 = {Iteration_cell_sum_AMASK_D[2][57], Iteration_cell_sum_AMASK_D[2][54:0], Sqrt_DO[2]};
+	assign Sqrt_R4 = {Iteration_cell_sum_AMASK_D[3][57], Iteration_cell_sum_AMASK_D[3][54:0], Sqrt_DO[3]};
+	wire [57:0] Denominator_se_format_DB;
+	assign Denominator_se_format_DB = {Denominator_se_DB[53:45], {(FP16ALT_SO ? FP16ALT_SO : Denominator_se_DB[44])}, Denominator_se_DB[43:42], {(FP16_SO ? FP16_SO : Denominator_se_DB[41])}, Denominator_se_DB[40:29], {(FP32_SO ? FP32_SO : Denominator_se_DB[28])}, Denominator_se_DB[27:0], FP64_SO, 3'b000};
+	wire [57:0] First_iteration_cell_div_a_D;
+	wire [57:0] First_iteration_cell_div_b_D;
+	wire Sel_b_for_first_S;
+	assign First_iteration_cell_div_a_D = (Div_start_dly_S ? {Numerator_se_D[53:45], {(FP16ALT_SO ? FP16ALT_SO : Numerator_se_D[44])}, Numerator_se_D[43:42], {(FP16_SO ? FP16_SO : Numerator_se_D[41])}, Numerator_se_D[40:29], {(FP32_SO ? FP32_SO : Numerator_se_D[28])}, Numerator_se_D[27:0], FP64_SO, 3'b000} : {Partial_remainder_DP[56:48], {(FP16ALT_SO ? Quotient_DP[0] : Partial_remainder_DP[47])}, Partial_remainder_DP[46:45], {(FP16_SO ? Quotient_DP[0] : Partial_remainder_DP[44])}, Partial_remainder_DP[43:32], {(FP32_SO ? Quotient_DP[0] : Partial_remainder_DP[31])}, Partial_remainder_DP[30:3], FP64_SO && Quotient_DP[0], 3'b000});
+	assign Sel_b_for_first_S = (Div_start_dly_S ? 1 : Quotient_DP[0]);
+	assign First_iteration_cell_div_b_D = (Sel_b_for_first_S ? Denominator_se_format_DB : {Denominator_se_D, 4'b0000});
+	assign Iteration_cell_a_BMASK_D[0] = (Sqrt_enable_SO ? Sqrt_R0 : {First_iteration_cell_div_a_D});
+	assign Iteration_cell_b_BMASK_D[0] = (Sqrt_enable_SO ? Sqrt_Q0 : {First_iteration_cell_div_b_D});
+	wire [57:0] Sec_iteration_cell_div_a_D;
+	wire [57:0] Sec_iteration_cell_div_b_D;
+	wire Sel_b_for_sec_S;
+	generate
+		if (|defs_div_sqrt_mvp_Iteration_unit_num_S) begin
+			assign Sel_b_for_sec_S = ~Iteration_cell_sum_AMASK_D[0][57];
+			assign Sec_iteration_cell_div_a_D = {Iteration_cell_sum_AMASK_D[0][56:48], {(FP16ALT_SO ? Sel_b_for_sec_S : Iteration_cell_sum_AMASK_D[0][47])}, Iteration_cell_sum_AMASK_D[0][46:45], {(FP16_SO ? Sel_b_for_sec_S : Iteration_cell_sum_AMASK_D[0][44])}, Iteration_cell_sum_AMASK_D[0][43:32], {(FP32_SO ? Sel_b_for_sec_S : Iteration_cell_sum_AMASK_D[0][31])}, Iteration_cell_sum_AMASK_D[0][30:3], FP64_SO && Sel_b_for_sec_S, 3'b000};
+			assign Sec_iteration_cell_div_b_D = (Sel_b_for_sec_S ? Denominator_se_format_DB : {Denominator_se_D, 4'b0000});
+			assign Iteration_cell_a_BMASK_D[1] = (Sqrt_enable_SO ? Sqrt_R1 : {Sec_iteration_cell_div_a_D});
+			assign Iteration_cell_b_BMASK_D[1] = (Sqrt_enable_SO ? Sqrt_Q1 : {Sec_iteration_cell_div_b_D});
+		end
+	endgenerate
+	wire [57:0] Thi_iteration_cell_div_a_D;
+	wire [57:0] Thi_iteration_cell_div_b_D;
+	wire Sel_b_for_thi_S;
+	generate
+		if ((defs_div_sqrt_mvp_Iteration_unit_num_S == 2'b10) | (defs_div_sqrt_mvp_Iteration_unit_num_S == 2'b11)) begin
+			assign Sel_b_for_thi_S = ~Iteration_cell_sum_AMASK_D[1][57];
+			assign Thi_iteration_cell_div_a_D = {Iteration_cell_sum_AMASK_D[1][56:48], {(FP16ALT_SO ? Sel_b_for_thi_S : Iteration_cell_sum_AMASK_D[1][47])}, Iteration_cell_sum_AMASK_D[1][46:45], {(FP16_SO ? Sel_b_for_thi_S : Iteration_cell_sum_AMASK_D[1][44])}, Iteration_cell_sum_AMASK_D[1][43:32], {(FP32_SO ? Sel_b_for_thi_S : Iteration_cell_sum_AMASK_D[1][31])}, Iteration_cell_sum_AMASK_D[1][30:3], FP64_SO && Sel_b_for_thi_S, 3'b000};
+			assign Thi_iteration_cell_div_b_D = (Sel_b_for_thi_S ? Denominator_se_format_DB : {Denominator_se_D, 4'b0000});
+			assign Iteration_cell_a_BMASK_D[2] = (Sqrt_enable_SO ? Sqrt_R2 : {Thi_iteration_cell_div_a_D});
+			assign Iteration_cell_b_BMASK_D[2] = (Sqrt_enable_SO ? Sqrt_Q2 : {Thi_iteration_cell_div_b_D});
+		end
+	endgenerate
+	wire [57:0] Fou_iteration_cell_div_a_D;
+	wire [57:0] Fou_iteration_cell_div_b_D;
+	wire Sel_b_for_fou_S;
+	generate
+		if (defs_div_sqrt_mvp_Iteration_unit_num_S == 2'b11) begin
+			assign Sel_b_for_fou_S = ~Iteration_cell_sum_AMASK_D[2][57];
+			assign Fou_iteration_cell_div_a_D = {Iteration_cell_sum_AMASK_D[2][56:48], {(FP16ALT_SO ? Sel_b_for_fou_S : Iteration_cell_sum_AMASK_D[2][47])}, Iteration_cell_sum_AMASK_D[2][46:45], {(FP16_SO ? Sel_b_for_fou_S : Iteration_cell_sum_AMASK_D[2][44])}, Iteration_cell_sum_AMASK_D[2][43:32], {(FP32_SO ? Sel_b_for_fou_S : Iteration_cell_sum_AMASK_D[2][31])}, Iteration_cell_sum_AMASK_D[2][30:3], FP64_SO && Sel_b_for_fou_S, 3'b000};
+			assign Fou_iteration_cell_div_b_D = (Sel_b_for_fou_S ? Denominator_se_format_DB : {Denominator_se_D, 4'b0000});
+			assign Iteration_cell_a_BMASK_D[3] = (Sqrt_enable_SO ? Sqrt_R3 : {Fou_iteration_cell_div_a_D});
+			assign Iteration_cell_b_BMASK_D[3] = (Sqrt_enable_SO ? Sqrt_Q3 : {Fou_iteration_cell_div_b_D});
+		end
+	endgenerate
+	wire [57:0] Mask_bits_ctl_S;
+	assign Mask_bits_ctl_S = 58'h3ffffffffffffff;
+	wire Div_enable_SI [3:0];
+	wire Div_start_dly_SI [3:0];
+	wire Sqrt_enable_SI [3:0];
+	generate
+		genvar i;
+		genvar j;
+		for (i = 0; i <= defs_div_sqrt_mvp_Iteration_unit_num_S; i = i + 1) begin
+			for (j = 0; j <= 57; j = j + 1) begin
+				assign Iteration_cell_a_D[i][j] = Mask_bits_ctl_S[j] && Iteration_cell_a_BMASK_D[i][j];
+				assign Iteration_cell_b_D[i][j] = Mask_bits_ctl_S[j] && Iteration_cell_b_BMASK_D[i][j];
+				assign Iteration_cell_sum_AMASK_D[i][j] = Mask_bits_ctl_S[j] && Iteration_cell_sum_D[i][j];
+			end
+			assign Div_enable_SI[i] = Div_enable_SO;
+			assign Div_start_dly_SI[i] = Div_start_dly_S;
+			assign Sqrt_enable_SI[i] = Sqrt_enable_SO;
+			iteration_div_sqrt_mvp #(.WIDTH(58)) iteration_div_sqrt(
+				.A_DI(Iteration_cell_a_D[i]),
+				.B_DI(Iteration_cell_b_D[i]),
+				.Div_enable_SI(Div_enable_SI[i]),
+				.Div_start_dly_SI(Div_start_dly_SI[i]),
+				.Sqrt_enable_SI(Sqrt_enable_SI[i]),
+				.D_DI(Sqrt_DI[i]),
+				.D_DO(Sqrt_DO[i]),
+				.Sum_DO(Iteration_cell_sum_D[i]),
+				.Carry_out_DO(Iteration_cell_carry_D[i])
+			);
+		end
+	endgenerate
+	always @(*)
+		case (defs_div_sqrt_mvp_Iteration_unit_num_S)
+			2'b00:
+				if (Fsm_enable_S)
+					Partial_remainder_DN = (Sqrt_enable_SO ? Sqrt_R1 : Iteration_cell_sum_AMASK_D[0]);
+				else
+					Partial_remainder_DN = Partial_remainder_DP;
+			2'b01:
+				if (Fsm_enable_S)
+					Partial_remainder_DN = (Sqrt_enable_SO ? Sqrt_R2 : Iteration_cell_sum_AMASK_D[1]);
+				else
+					Partial_remainder_DN = Partial_remainder_DP;
+			2'b10:
+				if (Fsm_enable_S)
+					Partial_remainder_DN = (Sqrt_enable_SO ? Sqrt_R3 : Iteration_cell_sum_AMASK_D[2]);
+				else
+					Partial_remainder_DN = Partial_remainder_DP;
+			2'b11:
+				if (Fsm_enable_S)
+					Partial_remainder_DN = (Sqrt_enable_SO ? Sqrt_R4 : Iteration_cell_sum_AMASK_D[3]);
+				else
+					Partial_remainder_DN = Partial_remainder_DP;
+		endcase
+	always @(posedge Clk_CI or negedge Rst_RBI)
+		if (~Rst_RBI)
+			Partial_remainder_DP <= {58 {1'sb0}};
+		else
+			Partial_remainder_DP <= Partial_remainder_DN;
+	reg [56:0] Quotient_DN;
+	always @(*)
+		case (defs_div_sqrt_mvp_Iteration_unit_num_S)
+			2'b00:
+				if (Fsm_enable_S)
+					Quotient_DN = (Sqrt_enable_SO ? {Quotient_DP[55:0], Sqrt_quotinent_S[3]} : {Quotient_DP[55:0], Iteration_cell_carry_D[0]});
+				else
+					Quotient_DN = Quotient_DP;
+			2'b01:
+				if (Fsm_enable_S)
+					Quotient_DN = (Sqrt_enable_SO ? {Quotient_DP[54:0], Sqrt_quotinent_S[3:2]} : {Quotient_DP[54:0], Iteration_cell_carry_D[0], Iteration_cell_carry_D[1]});
+				else
+					Quotient_DN = Quotient_DP;
+			2'b10:
+				if (Fsm_enable_S)
+					Quotient_DN = (Sqrt_enable_SO ? {Quotient_DP[53:0], Sqrt_quotinent_S[3:1]} : {Quotient_DP[53:0], Iteration_cell_carry_D[0], Iteration_cell_carry_D[1], Iteration_cell_carry_D[2]});
+				else
+					Quotient_DN = Quotient_DP;
+			2'b11:
+				if (Fsm_enable_S)
+					Quotient_DN = (Sqrt_enable_SO ? {Quotient_DP[defs_div_sqrt_mvp_C_MANT_FP64:0], Sqrt_quotinent_S} : {Quotient_DP[defs_div_sqrt_mvp_C_MANT_FP64:0], Iteration_cell_carry_D[0], Iteration_cell_carry_D[1], Iteration_cell_carry_D[2], Iteration_cell_carry_D[3]});
+				else
+					Quotient_DN = Quotient_DP;
+		endcase
+	always @(posedge Clk_CI or negedge Rst_RBI)
+		if (~Rst_RBI)
+			Quotient_DP <= {57 {1'sb0}};
+		else
+			Quotient_DP <= Quotient_DN;
+	generate
+		if (defs_div_sqrt_mvp_Iteration_unit_num_S == 2'b00) always @(*)
+			case (Format_sel_S)
+				2'b00:
+					case (Precision_ctl_S)
+						6'h00: Mant_result_prenorm_DO = {Quotient_DP[27:0], {29 {1'b0}}};
+						6'h17: Mant_result_prenorm_DO = {Quotient_DP[defs_div_sqrt_mvp_C_MANT_FP32:0], {33 {1'b0}}};
+						6'h16: Mant_result_prenorm_DO = {Quotient_DP[22:0], {34 {1'b0}}};
+						6'h15: Mant_result_prenorm_DO = {Quotient_DP[21:0], {35 {1'b0}}};
+						6'h14: Mant_result_prenorm_DO = {Quotient_DP[20:0], {36 {1'b0}}};
+						6'h13: Mant_result_prenorm_DO = {Quotient_DP[19:0], {37 {1'b0}}};
+						6'h12: Mant_result_prenorm_DO = {Quotient_DP[18:0], {38 {1'b0}}};
+						6'h11: Mant_result_prenorm_DO = {Quotient_DP[17:0], {39 {1'b0}}};
+						6'h10: Mant_result_prenorm_DO = {Quotient_DP[16:0], {40 {1'b0}}};
+						6'h0f: Mant_result_prenorm_DO = {Quotient_DP[15:0], {41 {1'b0}}};
+						6'h0e: Mant_result_prenorm_DO = {Quotient_DP[14:0], {42 {1'b0}}};
+						6'h0d: Mant_result_prenorm_DO = {Quotient_DP[13:0], {43 {1'b0}}};
+						6'h0c: Mant_result_prenorm_DO = {Quotient_DP[12:0], {44 {1'b0}}};
+						6'h0b: Mant_result_prenorm_DO = {Quotient_DP[11:0], {45 {1'b0}}};
+						6'h0a: Mant_result_prenorm_DO = {Quotient_DP[10:0], {46 {1'b0}}};
+						6'h09: Mant_result_prenorm_DO = {Quotient_DP[9:0], {47 {1'b0}}};
+						6'h08: Mant_result_prenorm_DO = {Quotient_DP[8:0], {48 {1'b0}}};
+						6'h07: Mant_result_prenorm_DO = {Quotient_DP[7:0], {49 {1'b0}}};
+						default: Mant_result_prenorm_DO = {Quotient_DP[27:0], {29 {1'b0}}};
+					endcase
+				2'b01:
+					case (Precision_ctl_S)
+						6'h00: Mant_result_prenorm_DO = Quotient_DP[56:0];
+						6'h34: Mant_result_prenorm_DO = {Quotient_DP[defs_div_sqrt_mvp_C_MANT_FP64:0], {4 {1'b0}}};
+						6'h33: Mant_result_prenorm_DO = {Quotient_DP[51:0], {5 {1'b0}}};
+						6'h32: Mant_result_prenorm_DO = {Quotient_DP[50:0], {6 {1'b0}}};
+						6'h31: Mant_result_prenorm_DO = {Quotient_DP[49:0], {7 {1'b0}}};
+						6'h30: Mant_result_prenorm_DO = {Quotient_DP[48:0], {8 {1'b0}}};
+						6'h2f: Mant_result_prenorm_DO = {Quotient_DP[47:0], {9 {1'b0}}};
+						6'h2e: Mant_result_prenorm_DO = {Quotient_DP[46:0], {10 {1'b0}}};
+						6'h2d: Mant_result_prenorm_DO = {Quotient_DP[45:0], {11 {1'b0}}};
+						6'h2c: Mant_result_prenorm_DO = {Quotient_DP[44:0], {12 {1'b0}}};
+						6'h2b: Mant_result_prenorm_DO = {Quotient_DP[43:0], {13 {1'b0}}};
+						6'h2a: Mant_result_prenorm_DO = {Quotient_DP[42:0], {14 {1'b0}}};
+						6'h29: Mant_result_prenorm_DO = {Quotient_DP[41:0], {15 {1'b0}}};
+						6'h28: Mant_result_prenorm_DO = {Quotient_DP[40:0], {16 {1'b0}}};
+						6'h27: Mant_result_prenorm_DO = {Quotient_DP[39:0], {17 {1'b0}}};
+						6'h26: Mant_result_prenorm_DO = {Quotient_DP[38:0], {18 {1'b0}}};
+						6'h25: Mant_result_prenorm_DO = {Quotient_DP[37:0], {19 {1'b0}}};
+						6'h24: Mant_result_prenorm_DO = {Quotient_DP[36:0], {20 {1'b0}}};
+						6'h23: Mant_result_prenorm_DO = {Quotient_DP[35:0], {21 {1'b0}}};
+						6'h22: Mant_result_prenorm_DO = {Quotient_DP[34:0], {22 {1'b0}}};
+						6'h21: Mant_result_prenorm_DO = {Quotient_DP[33:0], {23 {1'b0}}};
+						6'h20: Mant_result_prenorm_DO = {Quotient_DP[32:0], {24 {1'b0}}};
+						6'h1f: Mant_result_prenorm_DO = {Quotient_DP[31:0], {25 {1'b0}}};
+						6'h1e: Mant_result_prenorm_DO = {Quotient_DP[30:0], {26 {1'b0}}};
+						6'h1d: Mant_result_prenorm_DO = {Quotient_DP[29:0], {27 {1'b0}}};
+						6'h1c: Mant_result_prenorm_DO = {Quotient_DP[28:0], {28 {1'b0}}};
+						6'h1b: Mant_result_prenorm_DO = {Quotient_DP[27:0], {29 {1'b0}}};
+						6'h1a: Mant_result_prenorm_DO = {Quotient_DP[26:0], {30 {1'b0}}};
+						6'h19: Mant_result_prenorm_DO = {Quotient_DP[25:0], {31 {1'b0}}};
+						6'h18: Mant_result_prenorm_DO = {Quotient_DP[24:0], {32 {1'b0}}};
+						6'h17: Mant_result_prenorm_DO = {Quotient_DP[23:0], {33 {1'b0}}};
+						6'h16: Mant_result_prenorm_DO = {Quotient_DP[22:0], {34 {1'b0}}};
+						6'h15: Mant_result_prenorm_DO = {Quotient_DP[21:0], {35 {1'b0}}};
+						6'h14: Mant_result_prenorm_DO = {Quotient_DP[20:0], {36 {1'b0}}};
+						6'h13: Mant_result_prenorm_DO = {Quotient_DP[19:0], {37 {1'b0}}};
+						6'h12: Mant_result_prenorm_DO = {Quotient_DP[18:0], {38 {1'b0}}};
+						6'h11: Mant_result_prenorm_DO = {Quotient_DP[17:0], {39 {1'b0}}};
+						6'h10: Mant_result_prenorm_DO = {Quotient_DP[16:0], {40 {1'b0}}};
+						6'h0f: Mant_result_prenorm_DO = {Quotient_DP[15:0], {41 {1'b0}}};
+						6'h0e: Mant_result_prenorm_DO = {Quotient_DP[14:0], {42 {1'b0}}};
+						6'h0d: Mant_result_prenorm_DO = {Quotient_DP[13:0], {43 {1'b0}}};
+						6'h0c: Mant_result_prenorm_DO = {Quotient_DP[12:0], {44 {1'b0}}};
+						6'h0b: Mant_result_prenorm_DO = {Quotient_DP[11:0], {45 {1'b0}}};
+						6'h0a: Mant_result_prenorm_DO = {Quotient_DP[10:0], {46 {1'b0}}};
+						6'h09: Mant_result_prenorm_DO = {Quotient_DP[9:0], {47 {1'b0}}};
+						6'h08: Mant_result_prenorm_DO = {Quotient_DP[8:0], {48 {1'b0}}};
+						6'h07: Mant_result_prenorm_DO = {Quotient_DP[7:0], {49 {1'b0}}};
+						default: Mant_result_prenorm_DO = Quotient_DP[56:0];
+					endcase
+				2'b10:
+					case (Precision_ctl_S)
+						6'b000000: Mant_result_prenorm_DO = {Quotient_DP[14:0], {42 {1'b0}}};
+						6'h0a: Mant_result_prenorm_DO = {Quotient_DP[defs_div_sqrt_mvp_C_MANT_FP16:0], {46 {1'b0}}};
+						6'h09: Mant_result_prenorm_DO = {Quotient_DP[9:0], {47 {1'b0}}};
+						6'h08: Mant_result_prenorm_DO = {Quotient_DP[8:0], {48 {1'b0}}};
+						6'h07: Mant_result_prenorm_DO = {Quotient_DP[7:0], {49 {1'b0}}};
+						default: Mant_result_prenorm_DO = {Quotient_DP[14:0], {42 {1'b0}}};
+					endcase
+				2'b11:
+					case (Precision_ctl_S)
+						6'b000000: Mant_result_prenorm_DO = {Quotient_DP[11:0], {45 {1'b0}}};
+						6'h07: Mant_result_prenorm_DO = {Quotient_DP[defs_div_sqrt_mvp_C_MANT_FP16ALT:0], {49 {1'b0}}};
+						default: Mant_result_prenorm_DO = {Quotient_DP[11:0], {45 {1'b0}}};
+					endcase
+			endcase
+	endgenerate
+	generate
+		if (defs_div_sqrt_mvp_Iteration_unit_num_S == 2'b01) always @(*)
+			case (Format_sel_S)
+				2'b00:
+					case (Precision_ctl_S)
+						6'h00: Mant_result_prenorm_DO = {Quotient_DP[27:0], {29 {1'b0}}};
+						6'h17, 6'h16: Mant_result_prenorm_DO = {Quotient_DP[defs_div_sqrt_mvp_C_MANT_FP32:0], {33 {1'b0}}};
+						6'h15, 6'h14: Mant_result_prenorm_DO = {Quotient_DP[21:0], {35 {1'b0}}};
+						6'h13, 6'h12: Mant_result_prenorm_DO = {Quotient_DP[19:0], {37 {1'b0}}};
+						6'h11, 6'h10: Mant_result_prenorm_DO = {Quotient_DP[17:0], {39 {1'b0}}};
+						6'h0f, 6'h0e: Mant_result_prenorm_DO = {Quotient_DP[15:0], {41 {1'b0}}};
+						6'h0d, 6'h0c: Mant_result_prenorm_DO = {Quotient_DP[13:0], {43 {1'b0}}};
+						6'h0b, 6'h0a: Mant_result_prenorm_DO = {Quotient_DP[11:0], {45 {1'b0}}};
+						6'h09, 6'h08: Mant_result_prenorm_DO = {Quotient_DP[9:0], {47 {1'b0}}};
+						6'h07, 6'h06: Mant_result_prenorm_DO = {Quotient_DP[7:0], {49 {1'b0}}};
+						default: Mant_result_prenorm_DO = {Quotient_DP[27:0], {29 {1'b0}}};
+					endcase
+				2'b01:
+					case (Precision_ctl_S)
+						6'h00: Mant_result_prenorm_DO = {Quotient_DP[55:0], 1'b0};
+						6'h34: Mant_result_prenorm_DO = {Quotient_DP[53:1], {4 {1'b0}}};
+						6'h33, 6'h32: Mant_result_prenorm_DO = {Quotient_DP[51:0], {5 {1'b0}}};
+						6'h31, 6'h30: Mant_result_prenorm_DO = {Quotient_DP[49:0], {7 {1'b0}}};
+						6'h2f, 6'h2e: Mant_result_prenorm_DO = {Quotient_DP[47:0], {9 {1'b0}}};
+						6'h2d, 6'h2c: Mant_result_prenorm_DO = {Quotient_DP[45:0], {11 {1'b0}}};
+						6'h2b, 6'h2a: Mant_result_prenorm_DO = {Quotient_DP[43:0], {13 {1'b0}}};
+						6'h29, 6'h28: Mant_result_prenorm_DO = {Quotient_DP[41:0], {15 {1'b0}}};
+						6'h27, 6'h26: Mant_result_prenorm_DO = {Quotient_DP[39:0], {17 {1'b0}}};
+						6'h25, 6'h24: Mant_result_prenorm_DO = {Quotient_DP[37:0], {19 {1'b0}}};
+						6'h23, 6'h22: Mant_result_prenorm_DO = {Quotient_DP[35:0], {21 {1'b0}}};
+						6'h21, 6'h20: Mant_result_prenorm_DO = {Quotient_DP[33:0], {23 {1'b0}}};
+						6'h1f, 6'h1e: Mant_result_prenorm_DO = {Quotient_DP[31:0], {25 {1'b0}}};
+						6'h1d, 6'h1c: Mant_result_prenorm_DO = {Quotient_DP[29:0], {27 {1'b0}}};
+						6'h1b, 6'h1a: Mant_result_prenorm_DO = {Quotient_DP[27:0], {29 {1'b0}}};
+						6'h19, 6'h18: Mant_result_prenorm_DO = {Quotient_DP[25:0], {31 {1'b0}}};
+						6'h17, 6'h16: Mant_result_prenorm_DO = {Quotient_DP[23:0], {33 {1'b0}}};
+						6'h15, 6'h14: Mant_result_prenorm_DO = {Quotient_DP[21:0], {35 {1'b0}}};
+						6'h13, 6'h12: Mant_result_prenorm_DO = {Quotient_DP[19:0], {37 {1'b0}}};
+						6'h11, 6'h10: Mant_result_prenorm_DO = {Quotient_DP[17:0], {39 {1'b0}}};
+						6'h0f, 6'h0e: Mant_result_prenorm_DO = {Quotient_DP[15:0], {41 {1'b0}}};
+						6'h0d, 6'h0c: Mant_result_prenorm_DO = {Quotient_DP[13:0], {43 {1'b0}}};
+						6'h0b, 6'h0a: Mant_result_prenorm_DO = {Quotient_DP[11:0], {45 {1'b0}}};
+						6'h09, 6'h08: Mant_result_prenorm_DO = {Quotient_DP[9:0], {47 {1'b0}}};
+						6'h07: Mant_result_prenorm_DO = {Quotient_DP[7:0], {49 {1'b0}}};
+						default: Mant_result_prenorm_DO = {Quotient_DP[55:0], 1'b0};
+					endcase
+				2'b10:
+					case (Precision_ctl_S)
+						6'b000000: Mant_result_prenorm_DO = {Quotient_DP[13:0], {43 {1'b0}}};
+						6'h0a: Mant_result_prenorm_DO = {Quotient_DP[11:1], {46 {1'b0}}};
+						6'h09, 6'h08: Mant_result_prenorm_DO = {Quotient_DP[9:0], {47 {1'b0}}};
+						6'h07: Mant_result_prenorm_DO = {Quotient_DP[7:0], {49 {1'b0}}};
+						default: Mant_result_prenorm_DO = {Quotient_DP[14:0], {42 {1'b0}}};
+					endcase
+				2'b11:
+					case (Precision_ctl_S)
+						6'b000000: Mant_result_prenorm_DO = {Quotient_DP[11:0], {45 {1'b0}}};
+						6'h07: Mant_result_prenorm_DO = {Quotient_DP[defs_div_sqrt_mvp_C_MANT_FP16ALT:0], {49 {1'b0}}};
+						default: Mant_result_prenorm_DO = {Quotient_DP[11:0], {45 {1'b0}}};
+					endcase
+			endcase
+	endgenerate
+	generate
+		if (defs_div_sqrt_mvp_Iteration_unit_num_S == 2'b10) always @(*)
+			case (Format_sel_S)
+				2'b00:
+					case (Precision_ctl_S)
+						6'h00: Mant_result_prenorm_DO = {Quotient_DP[26:0], {30 {1'b0}}};
+						6'h17, 6'h16, 6'h15: Mant_result_prenorm_DO = {Quotient_DP[defs_div_sqrt_mvp_C_MANT_FP32:0], {33 {1'b0}}};
+						6'h14, 6'h13, 6'h12: Mant_result_prenorm_DO = {Quotient_DP[20:0], {36 {1'b0}}};
+						6'h11, 6'h10, 6'h0f: Mant_result_prenorm_DO = {Quotient_DP[17:0], {39 {1'b0}}};
+						6'h0e, 6'h0d, 6'h0c: Mant_result_prenorm_DO = {Quotient_DP[14:0], {42 {1'b0}}};
+						6'h0b, 6'h0a, 6'h09: Mant_result_prenorm_DO = {Quotient_DP[11:0], {45 {1'b0}}};
+						6'h08, 6'h07, 6'h06: Mant_result_prenorm_DO = {Quotient_DP[8:0], {48 {1'b0}}};
+						default: Mant_result_prenorm_DO = {Quotient_DP[26:0], {30 {1'b0}}};
+					endcase
+				2'b01:
+					case (Precision_ctl_S)
+						6'h00: Mant_result_prenorm_DO = Quotient_DP[56:0];
+						6'h34, 6'h33: Mant_result_prenorm_DO = {Quotient_DP[53:1], {4 {1'b0}}};
+						6'h32, 6'h31, 6'h30: Mant_result_prenorm_DO = {Quotient_DP[50:0], {6 {1'b0}}};
+						6'h2f, 6'h2e, 6'h2d: Mant_result_prenorm_DO = {Quotient_DP[47:0], {9 {1'b0}}};
+						6'h2c, 6'h2b, 6'h2a: Mant_result_prenorm_DO = {Quotient_DP[44:0], {12 {1'b0}}};
+						6'h29, 6'h28, 6'h27: Mant_result_prenorm_DO = {Quotient_DP[41:0], {15 {1'b0}}};
+						6'h26, 6'h25, 6'h24: Mant_result_prenorm_DO = {Quotient_DP[38:0], {18 {1'b0}}};
+						6'h23, 6'h22, 6'h21: Mant_result_prenorm_DO = {Quotient_DP[35:0], {21 {1'b0}}};
+						6'h20, 6'h1f, 6'h1e: Mant_result_prenorm_DO = {Quotient_DP[32:0], {24 {1'b0}}};
+						6'h1d, 6'h1c, 6'h1b: Mant_result_prenorm_DO = {Quotient_DP[29:0], {27 {1'b0}}};
+						6'h1a, 6'h19, 6'h18: Mant_result_prenorm_DO = {Quotient_DP[26:0], {30 {1'b0}}};
+						6'h17, 6'h16, 6'h15: Mant_result_prenorm_DO = {Quotient_DP[23:0], {33 {1'b0}}};
+						6'h14, 6'h13, 6'h12: Mant_result_prenorm_DO = {Quotient_DP[20:0], {36 {1'b0}}};
+						6'h11, 6'h10, 6'h0f: Mant_result_prenorm_DO = {Quotient_DP[17:0], {39 {1'b0}}};
+						6'h0e, 6'h0d, 6'h0c: Mant_result_prenorm_DO = {Quotient_DP[14:0], {42 {1'b0}}};
+						6'h0b, 6'h0a, 6'h09: Mant_result_prenorm_DO = {Quotient_DP[11:0], {45 {1'b0}}};
+						6'h08, 6'h07, 6'h06: Mant_result_prenorm_DO = {Quotient_DP[8:0], {48 {1'b0}}};
+						default: Mant_result_prenorm_DO = Quotient_DP[56:0];
+					endcase
+				2'b10:
+					case (Precision_ctl_S)
+						6'b000000: Mant_result_prenorm_DO = {Quotient_DP[14:0], {42 {1'b0}}};
+						6'h0a, 6'h09: Mant_result_prenorm_DO = {Quotient_DP[11:1], {46 {1'b0}}};
+						6'h08, 6'h07, 6'h06: Mant_result_prenorm_DO = {Quotient_DP[8:0], {48 {1'b0}}};
+						default: Mant_result_prenorm_DO = {Quotient_DP[14:0], {42 {1'b0}}};
+					endcase
+				2'b11:
+					case (Precision_ctl_S)
+						6'b000000: Mant_result_prenorm_DO = {Quotient_DP[11:0], {45 {1'b0}}};
+						6'h07, 6'h06: Mant_result_prenorm_DO = {Quotient_DP[8:1], {49 {1'b0}}};
+						default: Mant_result_prenorm_DO = {Quotient_DP[11:0], {45 {1'b0}}};
+					endcase
+			endcase
+	endgenerate
+	generate
+		if (defs_div_sqrt_mvp_Iteration_unit_num_S == 2'b11) always @(*)
+			case (Format_sel_S)
+				2'b00:
+					case (Precision_ctl_S)
+						6'h00: Mant_result_prenorm_DO = {Quotient_DP[27:0], {29 {1'b0}}};
+						6'h17, 6'h16, 6'h15, 6'h14: Mant_result_prenorm_DO = {Quotient_DP[defs_div_sqrt_mvp_C_MANT_FP32:0], {33 {1'b0}}};
+						6'h13, 6'h12, 6'h11, 6'h10: Mant_result_prenorm_DO = {Quotient_DP[19:0], {37 {1'b0}}};
+						6'h0f, 6'h0e, 6'h0d, 6'h0c: Mant_result_prenorm_DO = {Quotient_DP[15:0], {41 {1'b0}}};
+						6'h0b, 6'h0a, 6'h09, 6'h08: Mant_result_prenorm_DO = {Quotient_DP[11:0], {45 {1'b0}}};
+						6'h07, 6'h06: Mant_result_prenorm_DO = {Quotient_DP[7:0], {49 {1'b0}}};
+						default: Mant_result_prenorm_DO = {Quotient_DP[27:0], {29 {1'b0}}};
+					endcase
+				2'b01:
+					case (Precision_ctl_S)
+						6'h00: Mant_result_prenorm_DO = {Quotient_DP[55:0], 1'b0};
+						6'h34: Mant_result_prenorm_DO = {Quotient_DP[55:0], 1'b0};
+						6'h33, 6'h32, 6'h31, 6'h30: Mant_result_prenorm_DO = {Quotient_DP[51:0], {5 {1'b0}}};
+						6'h2f, 6'h2e, 6'h2d, 6'h2c: Mant_result_prenorm_DO = {Quotient_DP[47:0], {9 {1'b0}}};
+						6'h2b, 6'h2a, 6'h29, 6'h28: Mant_result_prenorm_DO = {Quotient_DP[43:0], {13 {1'b0}}};
+						6'h27, 6'h26, 6'h25, 6'h24: Mant_result_prenorm_DO = {Quotient_DP[39:0], {17 {1'b0}}};
+						6'h23, 6'h22, 6'h21, 6'h20: Mant_result_prenorm_DO = {Quotient_DP[35:0], {21 {1'b0}}};
+						6'h1f, 6'h1e, 6'h1d, 6'h1c: Mant_result_prenorm_DO = {Quotient_DP[31:0], {25 {1'b0}}};
+						6'h1b, 6'h1a, 6'h19, 6'h18: Mant_result_prenorm_DO = {Quotient_DP[27:0], {29 {1'b0}}};
+						6'h17, 6'h16, 6'h15, 6'h14: Mant_result_prenorm_DO = {Quotient_DP[23:0], {33 {1'b0}}};
+						6'h13, 6'h12, 6'h11, 6'h10: Mant_result_prenorm_DO = {Quotient_DP[19:0], {37 {1'b0}}};
+						6'h0f, 6'h0e, 6'h0d, 6'h0c: Mant_result_prenorm_DO = {Quotient_DP[15:0], {41 {1'b0}}};
+						6'h0b, 6'h0a, 6'h09, 6'h08: Mant_result_prenorm_DO = {Quotient_DP[11:0], {45 {1'b0}}};
+						6'h07, 6'h06: Mant_result_prenorm_DO = {Quotient_DP[7:0], {49 {1'b0}}};
+						default: Mant_result_prenorm_DO = {Quotient_DP[55:0], 1'b0};
+					endcase
+				2'b10:
+					case (Precision_ctl_S)
+						6'b000000: Mant_result_prenorm_DO = {Quotient_DP[15:0], {41 {1'b0}}};
+						6'h0a, 6'h09, 6'h08: Mant_result_prenorm_DO = {Quotient_DP[11:1], {46 {1'b0}}};
+						6'h07, 6'h06: Mant_result_prenorm_DO = {Quotient_DP[7:0], {49 {1'b0}}};
+						default: Mant_result_prenorm_DO = {Quotient_DP[15:0], {41 {1'b0}}};
+					endcase
+				2'b11:
+					case (Precision_ctl_S)
+						6'b000000: Mant_result_prenorm_DO = {Quotient_DP[11:0], {45 {1'b0}}};
+						6'h07, 6'h06: Mant_result_prenorm_DO = {Quotient_DP[defs_div_sqrt_mvp_C_MANT_FP16ALT:0], {49 {1'b0}}};
+						default: Mant_result_prenorm_DO = {Quotient_DP[11:0], {45 {1'b0}}};
+					endcase
+			endcase
+	endgenerate
+	wire [12:0] Exp_result_prenorm_DN;
+	reg [12:0] Exp_result_prenorm_DP;
+	wire [12:0] Exp_add_a_D;
+	wire [12:0] Exp_add_b_D;
+	wire [12:0] Exp_add_c_D;
+	integer C_BIAS_AONE;
+	integer C_HALF_BIAS;
+	localparam defs_div_sqrt_mvp_C_BIAS_AONE_FP16 = 5'h10;
+	localparam defs_div_sqrt_mvp_C_BIAS_AONE_FP16ALT = 8'h80;
+	localparam defs_div_sqrt_mvp_C_BIAS_AONE_FP32 = 8'h80;
+	localparam defs_div_sqrt_mvp_C_BIAS_AONE_FP64 = 11'h400;
+	localparam defs_div_sqrt_mvp_C_HALF_BIAS_FP16 = 7;
+	localparam defs_div_sqrt_mvp_C_HALF_BIAS_FP16ALT = 63;
+	localparam defs_div_sqrt_mvp_C_HALF_BIAS_FP32 = 63;
+	localparam defs_div_sqrt_mvp_C_HALF_BIAS_FP64 = 511;
+	always @(*)
+		case (Format_sel_S)
+			2'b00: begin
+				C_BIAS_AONE = defs_div_sqrt_mvp_C_BIAS_AONE_FP32;
+				C_HALF_BIAS = defs_div_sqrt_mvp_C_HALF_BIAS_FP32;
+			end
+			2'b01: begin
+				C_BIAS_AONE = defs_div_sqrt_mvp_C_BIAS_AONE_FP64;
+				C_HALF_BIAS = defs_div_sqrt_mvp_C_HALF_BIAS_FP64;
+			end
+			2'b10: begin
+				C_BIAS_AONE = defs_div_sqrt_mvp_C_BIAS_AONE_FP16;
+				C_HALF_BIAS = defs_div_sqrt_mvp_C_HALF_BIAS_FP16;
+			end
+			2'b11: begin
+				C_BIAS_AONE = defs_div_sqrt_mvp_C_BIAS_AONE_FP16ALT;
+				C_HALF_BIAS = defs_div_sqrt_mvp_C_HALF_BIAS_FP16ALT;
+			end
+		endcase
+	assign Exp_add_a_D = {(Sqrt_start_dly_S ? {Exp_num_DI[defs_div_sqrt_mvp_C_EXP_FP64], Exp_num_DI[defs_div_sqrt_mvp_C_EXP_FP64], Exp_num_DI[defs_div_sqrt_mvp_C_EXP_FP64], Exp_num_DI[defs_div_sqrt_mvp_C_EXP_FP64:1]} : {Exp_num_DI[defs_div_sqrt_mvp_C_EXP_FP64], Exp_num_DI[defs_div_sqrt_mvp_C_EXP_FP64], Exp_num_DI})};
+	localparam defs_div_sqrt_mvp_C_EXP_ZERO_FP64 = 11'h000;
+	assign Exp_add_b_D = {(Sqrt_start_dly_S ? {1'b0, {defs_div_sqrt_mvp_C_EXP_ZERO_FP64}, Exp_num_DI[0]} : {~Exp_den_DI[defs_div_sqrt_mvp_C_EXP_FP64], ~Exp_den_DI[defs_div_sqrt_mvp_C_EXP_FP64], ~Exp_den_DI})};
+	assign Exp_add_c_D = {(Div_start_dly_S ? {C_BIAS_AONE} : {C_HALF_BIAS})};
+	assign Exp_result_prenorm_DN = (Start_dly_S ? {(Exp_add_a_D + Exp_add_b_D) + Exp_add_c_D} : Exp_result_prenorm_DP);
+	always @(posedge Clk_CI or negedge Rst_RBI)
+		if (~Rst_RBI)
+			Exp_result_prenorm_DP <= {13 {1'sb0}};
+		else
+			Exp_result_prenorm_DP <= Exp_result_prenorm_DN;
+	assign Exp_result_prenorm_DO = Exp_result_prenorm_DP;
+endmodule
+module data_mem_top (
+	clk_i,
+	rst_ni,
+	tl_d_i,
+	tl_d_o,
+	csb,
+	addr_o,
+	wdata_o,
+	wmask_o,
+	we_o,
+	rdata_i
+);
+	input wire clk_i;
+	input wire rst_ni;
+	localparam signed [31:0] tlul_pkg_TL_AIW = 8;
+	localparam signed [31:0] tlul_pkg_TL_AW = 32;
+	localparam signed [31:0] tlul_pkg_TL_DW = 32;
+	localparam signed [31:0] tlul_pkg_TL_DBW = 4;
+	localparam signed [31:0] tlul_pkg_TL_SZW = 2;
+	input wire [85:0] tl_d_i;
+	localparam signed [31:0] tlul_pkg_TL_DIW = 1;
+	output wire [51:0] tl_d_o;
+	output wire csb;
+	output wire [11:0] addr_o;
+	output wire [31:0] wdata_o;
+	output wire [3:0] wmask_o;
+	output wire we_o;
+	input wire [31:0] rdata_i;
+	wire tl_req;
+	wire [31:0] tl_wmask;
+	wire we_i;
+	reg rvalid_o;
+	assign wmask_o[0] = (tl_wmask[7:0] != 8'b00000000 ? 1'b1 : 1'b0);
+	assign wmask_o[1] = (tl_wmask[15:8] != 8'b00000000 ? 1'b1 : 1'b0);
+	assign wmask_o[2] = (tl_wmask[23:16] != 8'b00000000 ? 1'b1 : 1'b0);
+	assign wmask_o[3] = (tl_wmask[31:24] != 8'b00000000 ? 1'b1 : 1'b0);
+	assign we_o = ~we_i;
+	assign csb = ~tl_req;
+	tlul_sram_adapter #(
+		.SramAw(12),
+		.SramDw(32),
+		.Outstanding(4),
+		.ByteAccess(1),
+		.ErrOnWrite(0),
+		.ErrOnRead(0)
+	) data_mem(
+		.clk_i(clk_i),
+		.rst_ni(rst_ni),
+		.tl_i(tl_d_i),
+		.tl_o(tl_d_o),
+		.req_o(tl_req),
+		.gnt_i(1'b1),
+		.we_o(we_i),
+		.addr_o(addr_o),
+		.wdata_o(wdata_o),
+		.wmask_o(tl_wmask),
+		.rdata_i((rst_ni ? rdata_i : {32 {1'sb0}})),
+		.rvalid_i(rvalid_o),
+		.rerror_i(2'b00)
+	);
+	always @(posedge clk_i)
+		if (!rst_ni)
+			rvalid_o <= 1'b0;
+		else if (we_i)
+			rvalid_o <= 1'b0;
+		else
+			rvalid_o <= tl_req;
+endmodule
+module div_sqrt_top_mvp (
+	Clk_CI,
+	Rst_RBI,
+	Div_start_SI,
+	Sqrt_start_SI,
+	Operand_a_DI,
+	Operand_b_DI,
+	RM_SI,
+	Precision_ctl_SI,
+	Format_sel_SI,
+	Kill_SI,
+	Result_DO,
+	Fflags_SO,
+	Ready_SO,
+	Done_SO
+);
+	input wire Clk_CI;
+	input wire Rst_RBI;
+	input wire Div_start_SI;
+	input wire Sqrt_start_SI;
+	localparam defs_div_sqrt_mvp_C_OP_FP64 = 64;
+	input wire [63:0] Operand_a_DI;
+	input wire [63:0] Operand_b_DI;
+	localparam defs_div_sqrt_mvp_C_RM = 3;
+	input wire [2:0] RM_SI;
+	localparam defs_div_sqrt_mvp_C_PC = 6;
+	input wire [5:0] Precision_ctl_SI;
+	localparam defs_div_sqrt_mvp_C_FS = 2;
+	input wire [1:0] Format_sel_SI;
+	input wire Kill_SI;
+	output wire [63:0] Result_DO;
+	output wire [4:0] Fflags_SO;
+	output wire Ready_SO;
+	output wire Done_SO;
+	localparam defs_div_sqrt_mvp_C_EXP_FP64 = 11;
+	wire [defs_div_sqrt_mvp_C_EXP_FP64:0] Exp_a_D;
+	wire [defs_div_sqrt_mvp_C_EXP_FP64:0] Exp_b_D;
+	localparam defs_div_sqrt_mvp_C_MANT_FP64 = 52;
+	wire [defs_div_sqrt_mvp_C_MANT_FP64:0] Mant_a_D;
+	wire [defs_div_sqrt_mvp_C_MANT_FP64:0] Mant_b_D;
+	wire [12:0] Exp_z_D;
+	wire [56:0] Mant_z_D;
+	wire Sign_z_D;
+	wire Start_S;
+	wire [2:0] RM_dly_S;
+	wire Div_enable_S;
+	wire Sqrt_enable_S;
+	wire Inf_a_S;
+	wire Inf_b_S;
+	wire Zero_a_S;
+	wire Zero_b_S;
+	wire NaN_a_S;
+	wire NaN_b_S;
+	wire SNaN_S;
+	wire Special_case_SB;
+	wire Special_case_dly_SB;
+	wire Full_precision_S;
+	wire FP32_S;
+	wire FP64_S;
+	wire FP16_S;
+	wire FP16ALT_S;
+	preprocess_mvp preprocess_U0(
+		.Clk_CI(Clk_CI),
+		.Rst_RBI(Rst_RBI),
+		.Div_start_SI(Div_start_SI),
+		.Sqrt_start_SI(Sqrt_start_SI),
+		.Ready_SI(Ready_SO),
+		.Operand_a_DI(Operand_a_DI),
+		.Operand_b_DI(Operand_b_DI),
+		.RM_SI(RM_SI),
+		.Format_sel_SI(Format_sel_SI),
+		.Start_SO(Start_S),
+		.Exp_a_DO_norm(Exp_a_D),
+		.Exp_b_DO_norm(Exp_b_D),
+		.Mant_a_DO_norm(Mant_a_D),
+		.Mant_b_DO_norm(Mant_b_D),
+		.RM_dly_SO(RM_dly_S),
+		.Sign_z_DO(Sign_z_D),
+		.Inf_a_SO(Inf_a_S),
+		.Inf_b_SO(Inf_b_S),
+		.Zero_a_SO(Zero_a_S),
+		.Zero_b_SO(Zero_b_S),
+		.NaN_a_SO(NaN_a_S),
+		.NaN_b_SO(NaN_b_S),
+		.SNaN_SO(SNaN_S),
+		.Special_case_SBO(Special_case_SB),
+		.Special_case_dly_SBO(Special_case_dly_SB)
+	);
+	nrbd_nrsc_mvp nrbd_nrsc_U0(
+		.Clk_CI(Clk_CI),
+		.Rst_RBI(Rst_RBI),
+		.Div_start_SI(Div_start_SI),
+		.Sqrt_start_SI(Sqrt_start_SI),
+		.Start_SI(Start_S),
+		.Kill_SI(Kill_SI),
+		.Special_case_SBI(Special_case_SB),
+		.Special_case_dly_SBI(Special_case_dly_SB),
+		.Div_enable_SO(Div_enable_S),
+		.Sqrt_enable_SO(Sqrt_enable_S),
+		.Precision_ctl_SI(Precision_ctl_SI),
+		.Format_sel_SI(Format_sel_SI),
+		.Exp_a_DI(Exp_a_D),
+		.Exp_b_DI(Exp_b_D),
+		.Mant_a_DI(Mant_a_D),
+		.Mant_b_DI(Mant_b_D),
+		.Full_precision_SO(Full_precision_S),
+		.FP32_SO(FP32_S),
+		.FP64_SO(FP64_S),
+		.FP16_SO(FP16_S),
+		.FP16ALT_SO(FP16ALT_S),
+		.Ready_SO(Ready_SO),
+		.Done_SO(Done_SO),
+		.Exp_z_DO(Exp_z_D),
+		.Mant_z_DO(Mant_z_D)
+	);
+	norm_div_sqrt_mvp fpu_norm_U0(
+		.Mant_in_DI(Mant_z_D),
+		.Exp_in_DI(Exp_z_D),
+		.Sign_in_DI(Sign_z_D),
+		.Div_enable_SI(Div_enable_S),
+		.Sqrt_enable_SI(Sqrt_enable_S),
+		.Inf_a_SI(Inf_a_S),
+		.Inf_b_SI(Inf_b_S),
+		.Zero_a_SI(Zero_a_S),
+		.Zero_b_SI(Zero_b_S),
+		.NaN_a_SI(NaN_a_S),
+		.NaN_b_SI(NaN_b_S),
+		.SNaN_SI(SNaN_S),
+		.RM_SI(RM_dly_S),
+		.Full_precision_SI(Full_precision_S),
+		.FP32_SI(FP32_S),
+		.FP64_SI(FP64_S),
+		.FP16_SI(FP16_S),
+		.FP16ALT_SI(FP16ALT_S),
+		.Result_DO(Result_DO),
+		.Fflags_SO(Fflags_SO)
+	);
+endmodule
+module fifo_sync (
+	clk_i,
+	rst_ni,
+	clr_i,
+	wvalid_i,
+	wready_o,
+	wdata_i,
+	rvalid_o,
+	rready_i,
+	rdata_o,
+	full_o,
+	depth_o
+);
+	parameter [31:0] Width = 16;
+	parameter [0:0] Pass = 1'b1;
+	parameter [31:0] Depth = 4;
+	parameter [0:0] OutputZeroIfEmpty = 1'b1;
+	function automatic integer prim_util_pkg_vbits;
+		input integer value;
+		prim_util_pkg_vbits = (value == 1 ? 1 : $clog2(value));
+	endfunction
+	localparam signed [31:0] DepthW = prim_util_pkg_vbits(Depth + 1);
+	input clk_i;
+	input rst_ni;
+	input clr_i;
+	input wvalid_i;
+	output wready_o;
+	input [Width - 1:0] wdata_i;
+	output rvalid_o;
+	input rready_i;
+	output [Width - 1:0] rdata_o;
+	output full_o;
+	output [DepthW - 1:0] depth_o;
+	generate
+		if (Depth == 0) begin : gen_passthru_fifo
+			assign depth_o = 1'b0;
+			assign rvalid_o = wvalid_i;
+			assign rdata_o = wdata_i;
+			assign wready_o = rready_i;
+			assign full_o = rready_i;
+			wire unused_clr;
+			assign unused_clr = clr_i;
+		end
+		else begin : gen_normal_fifo
+			localparam [31:0] PTRV_W = prim_util_pkg_vbits(Depth);
+			localparam [31:0] PTR_WIDTH = PTRV_W + 1;
+			reg [PTR_WIDTH - 1:0] fifo_wptr;
+			reg [PTR_WIDTH - 1:0] fifo_rptr;
+			wire fifo_incr_wptr;
+			wire fifo_incr_rptr;
+			wire fifo_empty;
+			reg under_rst;
+			always @(posedge clk_i or negedge rst_ni)
+				if (!rst_ni)
+					under_rst <= 1'b1;
+				else if (under_rst)
+					under_rst <= ~under_rst;
+			wire full;
+			wire empty;
+			wire wptr_msb;
+			wire rptr_msb;
+			wire [PTRV_W - 1:0] wptr_value;
+			wire [PTRV_W - 1:0] rptr_value;
+			assign wptr_msb = fifo_wptr[PTR_WIDTH - 1];
+			assign rptr_msb = fifo_rptr[PTR_WIDTH - 1];
+			assign wptr_value = fifo_wptr[0+:PTRV_W];
+			assign rptr_value = fifo_rptr[0+:PTRV_W];
+			function automatic [DepthW - 1:0] sv2v_cast_703F8;
+				input reg [DepthW - 1:0] inp;
+				sv2v_cast_703F8 = inp;
+			endfunction
+			assign depth_o = (full ? sv2v_cast_703F8(Depth) : (wptr_msb == rptr_msb ? sv2v_cast_703F8(wptr_value) - sv2v_cast_703F8(rptr_value) : (sv2v_cast_703F8(Depth) - sv2v_cast_703F8(rptr_value)) + sv2v_cast_703F8(wptr_value)));
+			assign fifo_incr_wptr = (wvalid_i & wready_o) & ~under_rst;
+			assign fifo_incr_rptr = (rvalid_o & rready_i) & ~under_rst;
+			assign wready_o = ~full & ~under_rst;
+			assign full_o = full;
+			assign rvalid_o = ~empty & ~under_rst;
+			always @(posedge clk_i or negedge rst_ni)
+				if (!rst_ni)
+					fifo_wptr <= {PTR_WIDTH {1'sb0}};
+				else if (clr_i)
+					fifo_wptr <= {PTR_WIDTH {1'b0}};
+				else if (fifo_incr_wptr) begin : sv2v_autoblock_107
+					reg [((PTR_WIDTH - 2) >= 0 ? PTR_WIDTH - 1 : 3 - PTR_WIDTH) - 1:0] sv2v_tmp_cast;
+					sv2v_tmp_cast = Depth - 1;
+					if (fifo_wptr[PTR_WIDTH - 2:0] == sv2v_tmp_cast)
+						fifo_wptr <= {~fifo_wptr[PTR_WIDTH - 1], {PTR_WIDTH - 1 {1'b0}}};
+					else
+						fifo_wptr <= fifo_wptr + {{PTR_WIDTH - 1 {1'b0}}, 1'b1};
+				end
+			always @(posedge clk_i or negedge rst_ni)
+				if (!rst_ni)
+					fifo_rptr <= {PTR_WIDTH {1'sb0}};
+				else if (clr_i)
+					fifo_rptr <= {PTR_WIDTH {1'b0}};
+				else if (fifo_incr_rptr) begin : sv2v_autoblock_108
+					reg [((PTR_WIDTH - 2) >= 0 ? PTR_WIDTH - 1 : 3 - PTR_WIDTH) - 1:0] sv2v_tmp_cast_1;
+					sv2v_tmp_cast_1 = Depth - 1;
+					if (fifo_rptr[PTR_WIDTH - 2:0] == sv2v_tmp_cast_1)
+						fifo_rptr <= {~fifo_rptr[PTR_WIDTH - 1], {PTR_WIDTH - 1 {1'b0}}};
+					else
+						fifo_rptr <= fifo_rptr + {{PTR_WIDTH - 1 {1'b0}}, 1'b1};
+				end
+			assign full = fifo_wptr == (fifo_rptr ^ {1'b1, {PTR_WIDTH - 1 {1'b0}}});
+			assign fifo_empty = fifo_wptr == fifo_rptr;
+			reg [(Depth * Width) - 1:0] storage;
+			wire [Width - 1:0] storage_rdata;
+			if (Depth == 1) begin : gen_depth_eq1
+				assign storage_rdata = storage[0+:Width];
+				always @(posedge clk_i)
+					if (~rst_ni)
+						storage[0+:Width] <= {Width {1'sb0}};
+					else if (fifo_incr_wptr)
+						storage[0+:Width] <= wdata_i;
+			end
+			else begin : gen_depth_gt1
+				assign storage_rdata = storage[fifo_rptr[PTR_WIDTH - 2:0] * Width+:Width];
+				always @(posedge clk_i)
+					if (~rst_ni)
+						storage[fifo_wptr[PTR_WIDTH - 2:0] * Width+:Width] <= {Width {1'sb0}};
+					else if (fifo_incr_wptr)
+						storage[fifo_wptr[PTR_WIDTH - 2:0] * Width+:Width] <= wdata_i;
+			end
+			wire [Width - 1:0] rdata_int;
+			if (Pass == 1'b1) begin : gen_pass
+				assign rdata_int = (fifo_empty && wvalid_i ? wdata_i : storage_rdata);
+				assign empty = fifo_empty & ~wvalid_i;
+			end
+			else begin : gen_nopass
+				assign rdata_int = storage_rdata;
+				assign empty = fifo_empty;
+			end
+			if (OutputZeroIfEmpty == 1'b1) begin : gen_output_zero
+				assign rdata_o = (empty ? 'b0 : rdata_int);
+			end
+			else begin : gen_no_output_zero
+				assign rdata_o = rdata_int;
+			end
+		end
+	endgenerate
+endmodule
+module fpnew_cast_multi_8A35C_87530 (
+	clk_i,
+	rst_ni,
+	operands_i,
+	is_boxed_i,
+	rnd_mode_i,
+	op_i,
+	op_mod_i,
+	src_fmt_i,
+	dst_fmt_i,
+	int_fmt_i,
+	tag_i,
+	aux_i,
+	in_valid_i,
+	in_ready_o,
+	flush_i,
+	result_o,
+	status_o,
+	extension_bit_o,
+	tag_o,
+	aux_o,
+	out_valid_o,
+	out_ready_i,
+	busy_o
+);
+	parameter [31:0] AuxType_AUX_BITS = 0;
+	localparam [31:0] fpnew_pkg_NUM_FP_FORMATS = 4;
+	parameter [0:3] FpFmtConfig = 1'sb1;
+	localparam [31:0] fpnew_pkg_NUM_INT_FORMATS = 4;
+	parameter [0:3] IntFmtConfig = 1'sb1;
+	parameter [31:0] NumPipeRegs = 0;
+	localparam [1:0] fpnew_pkg_BEFORE = 0;
+	parameter [1:0] PipeConfig = fpnew_pkg_BEFORE;
+	localparam [31:0] fpnew_pkg_FP_FORMAT_BITS = 2;
+	localparam [255:0] fpnew_pkg_FP_ENCODINGS = 256'h00000008000000170000000b00000034000000050000000a0000000500000002;
+	function automatic [31:0] fpnew_pkg_fp_width;
+		input reg [1:0] fmt;
+		fpnew_pkg_fp_width = (fpnew_pkg_FP_ENCODINGS[((3 - fmt) * 64) + 63-:32] + fpnew_pkg_FP_ENCODINGS[((3 - fmt) * 64) + 31-:32]) + 1;
+	endfunction
+	function automatic signed [31:0] fpnew_pkg_maximum;
+		input reg signed [31:0] a;
+		input reg signed [31:0] b;
+		fpnew_pkg_maximum = (a > b ? a : b);
+	endfunction
+	function automatic [1:0] sv2v_cast_9359B;
+		input reg [1:0] inp;
+		sv2v_cast_9359B = inp;
+	endfunction
+	function automatic [31:0] fpnew_pkg_max_fp_width;
+		input reg [0:3] cfg;
+		reg [31:0] res;
+		begin
+			res = 0;
+			begin : sv2v_autoblock_109
+				reg [31:0] i;
+				for (i = 0; i < fpnew_pkg_NUM_FP_FORMATS; i = i + 1)
+					if (cfg[i])
+						res = $unsigned(fpnew_pkg_maximum(res, fpnew_pkg_fp_width(sv2v_cast_9359B(i))));
+			end
+			fpnew_pkg_max_fp_width = res;
+		end
+	endfunction
+	localparam [31:0] fpnew_pkg_INT_FORMAT_BITS = 2;
+	localparam [1:0] fpnew_pkg_INT16 = 1;
+	localparam [1:0] fpnew_pkg_INT32 = 2;
+	localparam [1:0] fpnew_pkg_INT64 = 3;
+	localparam [1:0] fpnew_pkg_INT8 = 0;
+	function automatic [31:0] fpnew_pkg_int_width;
+		input reg [1:0] ifmt;
+		case (ifmt)
+			fpnew_pkg_INT8: fpnew_pkg_int_width = 8;
+			fpnew_pkg_INT16: fpnew_pkg_int_width = 16;
+			fpnew_pkg_INT32: fpnew_pkg_int_width = 32;
+			fpnew_pkg_INT64: fpnew_pkg_int_width = 64;
+		endcase
+	endfunction
+	function automatic [1:0] sv2v_cast_D812A;
+		input reg [1:0] inp;
+		sv2v_cast_D812A = inp;
+	endfunction
+	function automatic [31:0] fpnew_pkg_max_int_width;
+		input reg [0:3] cfg;
+		reg [31:0] res;
+		begin
+			res = 0;
+			begin : sv2v_autoblock_110
+				reg signed [31:0] ifmt;
+				for (ifmt = 0; ifmt < fpnew_pkg_NUM_INT_FORMATS; ifmt = ifmt + 1)
+					if (cfg[ifmt])
+						res = fpnew_pkg_maximum(res, fpnew_pkg_int_width(sv2v_cast_D812A(ifmt)));
+			end
+			fpnew_pkg_max_int_width = res;
+		end
+	endfunction
+	localparam [31:0] WIDTH = fpnew_pkg_maximum(fpnew_pkg_max_fp_width(FpFmtConfig), fpnew_pkg_max_int_width(IntFmtConfig));
+	localparam [31:0] NUM_FORMATS = fpnew_pkg_NUM_FP_FORMATS;
+	input wire clk_i;
+	input wire rst_ni;
+	input wire [WIDTH - 1:0] operands_i;
+	input wire [3:0] is_boxed_i;
+	input wire [2:0] rnd_mode_i;
+	localparam [31:0] fpnew_pkg_OP_BITS = 4;
+	input wire [3:0] op_i;
+	input wire op_mod_i;
+	input wire [1:0] src_fmt_i;
+	input wire [1:0] dst_fmt_i;
+	input wire [1:0] int_fmt_i;
+	input wire tag_i;
+	input wire [AuxType_AUX_BITS - 1:0] aux_i;
+	input wire in_valid_i;
+	output wire in_ready_o;
+	input wire flush_i;
+	output wire [WIDTH - 1:0] result_o;
+	output wire [4:0] status_o;
+	output wire extension_bit_o;
+	output wire tag_o;
+	output wire [AuxType_AUX_BITS - 1:0] aux_o;
+	output wire out_valid_o;
+	input wire out_ready_i;
+	output wire busy_o;
+	always @(posedge __clk or negedge __arst_n)
+		if (!__arst_n)
+			__q <= __reset_value;
+		else
+			__q <= (__clear ? __reset_value : (__load ? __d : __q));
+	always @(posedge clk_i or negedge rst_ni)
+		if (!rst_ni)
+			__q <= __reset_value;
+		else
+			__q <= (__load ? __d : __q);
+	localparam [31:0] NUM_INT_FORMATS = fpnew_pkg_NUM_INT_FORMATS;
+	localparam [31:0] MAX_INT_WIDTH = fpnew_pkg_max_int_width(IntFmtConfig);
+	function automatic [31:0] fpnew_pkg_exp_bits;
+		input reg [1:0] fmt;
+		fpnew_pkg_exp_bits = fpnew_pkg_FP_ENCODINGS[((3 - fmt) * 64) + 63-:32];
+	endfunction
+	function automatic [31:0] fpnew_pkg_man_bits;
+		input reg [1:0] fmt;
+		fpnew_pkg_man_bits = fpnew_pkg_FP_ENCODINGS[((3 - fmt) * 64) + 31-:32];
+	endfunction
+	function automatic [63:0] fpnew_pkg_super_format;
+		input reg [0:3] cfg;
+		reg [63:0] res;
+		begin
+			res = {64 {1'sb0}};
+			begin : sv2v_autoblock_111
+				reg [31:0] fmt;
+				for (fmt = 0; fmt < fpnew_pkg_NUM_FP_FORMATS; fmt = fmt + 1)
+					if (cfg[fmt]) begin
+						res[63-:32] = $unsigned(fpnew_pkg_maximum(res[63-:32], fpnew_pkg_exp_bits(sv2v_cast_9359B(fmt))));
+						res[31-:32] = $unsigned(fpnew_pkg_maximum(res[31-:32], fpnew_pkg_man_bits(sv2v_cast_9359B(fmt))));
+					end
+			end
+			fpnew_pkg_super_format = res;
+		end
+	endfunction
+	localparam [63:0] SUPER_FORMAT = fpnew_pkg_super_format(FpFmtConfig);
+	localparam [31:0] SUPER_EXP_BITS = SUPER_FORMAT[63-:32];
+	localparam [31:0] SUPER_MAN_BITS = SUPER_FORMAT[31-:32];
+	localparam [31:0] SUPER_BIAS = (2 ** (SUPER_EXP_BITS - 1)) - 1;
+	localparam [31:0] INT_MAN_WIDTH = fpnew_pkg_maximum(SUPER_MAN_BITS + 1, MAX_INT_WIDTH);
+	localparam [31:0] LZC_RESULT_WIDTH = $clog2(INT_MAN_WIDTH);
+	localparam [31:0] INT_EXP_WIDTH = fpnew_pkg_maximum($clog2(MAX_INT_WIDTH), fpnew_pkg_maximum(SUPER_EXP_BITS, $clog2(SUPER_BIAS + SUPER_MAN_BITS))) + 1;
+	localparam [1:0] fpnew_pkg_DISTRIBUTED = 3;
+	localparam NUM_INP_REGS = (PipeConfig == fpnew_pkg_BEFORE ? NumPipeRegs : (PipeConfig == fpnew_pkg_DISTRIBUTED ? (NumPipeRegs + 1) / 3 : 0));
+	localparam [1:0] fpnew_pkg_INSIDE = 2;
+	localparam NUM_MID_REGS = (PipeConfig == fpnew_pkg_INSIDE ? NumPipeRegs : (PipeConfig == fpnew_pkg_DISTRIBUTED ? (NumPipeRegs + 2) / 3 : 0));
+	localparam [1:0] fpnew_pkg_AFTER = 1;
+	localparam NUM_OUT_REGS = (PipeConfig == fpnew_pkg_AFTER ? NumPipeRegs : (PipeConfig == fpnew_pkg_DISTRIBUTED ? NumPipeRegs / 3 : 0));
+	wire [WIDTH - 1:0] operands_q;
+	wire [3:0] is_boxed_q;
+	wire op_mod_q;
+	wire [1:0] src_fmt_q;
+	wire [1:0] dst_fmt_q;
+	wire [1:0] int_fmt_q;
+	wire [(0 >= NUM_INP_REGS ? ((1 - NUM_INP_REGS) * WIDTH) + ((NUM_INP_REGS * WIDTH) - 1) : ((NUM_INP_REGS + 1) * WIDTH) - 1):(0 >= NUM_INP_REGS ? NUM_INP_REGS * WIDTH : 0)] inp_pipe_operands_q;
+	wire [(0 >= NUM_INP_REGS ? ((1 - NUM_INP_REGS) * NUM_FORMATS) + ((NUM_INP_REGS * NUM_FORMATS) - 1) : ((NUM_INP_REGS + 1) * NUM_FORMATS) - 1):(0 >= NUM_INP_REGS ? NUM_INP_REGS * NUM_FORMATS : 0)] inp_pipe_is_boxed_q;
+	wire [(0 >= NUM_INP_REGS ? ((1 - NUM_INP_REGS) * 3) + ((NUM_INP_REGS * 3) - 1) : ((NUM_INP_REGS + 1) * 3) - 1):(0 >= NUM_INP_REGS ? NUM_INP_REGS * 3 : 0)] inp_pipe_rnd_mode_q;
+	wire [(0 >= NUM_INP_REGS ? ((1 - NUM_INP_REGS) * fpnew_pkg_OP_BITS) + ((NUM_INP_REGS * fpnew_pkg_OP_BITS) - 1) : ((NUM_INP_REGS + 1) * fpnew_pkg_OP_BITS) - 1):(0 >= NUM_INP_REGS ? NUM_INP_REGS * fpnew_pkg_OP_BITS : 0)] inp_pipe_op_q;
+	wire [0:NUM_INP_REGS] inp_pipe_op_mod_q;
+	wire [(0 >= NUM_INP_REGS ? ((1 - NUM_INP_REGS) * fpnew_pkg_FP_FORMAT_BITS) + ((NUM_INP_REGS * fpnew_pkg_FP_FORMAT_BITS) - 1) : ((NUM_INP_REGS + 1) * fpnew_pkg_FP_FORMAT_BITS) - 1):(0 >= NUM_INP_REGS ? NUM_INP_REGS * fpnew_pkg_FP_FORMAT_BITS : 0)] inp_pipe_src_fmt_q;
+	wire [(0 >= NUM_INP_REGS ? ((1 - NUM_INP_REGS) * fpnew_pkg_FP_FORMAT_BITS) + ((NUM_INP_REGS * fpnew_pkg_FP_FORMAT_BITS) - 1) : ((NUM_INP_REGS + 1) * fpnew_pkg_FP_FORMAT_BITS) - 1):(0 >= NUM_INP_REGS ? NUM_INP_REGS * fpnew_pkg_FP_FORMAT_BITS : 0)] inp_pipe_dst_fmt_q;
+	wire [(0 >= NUM_INP_REGS ? ((1 - NUM_INP_REGS) * fpnew_pkg_INT_FORMAT_BITS) + ((NUM_INP_REGS * fpnew_pkg_INT_FORMAT_BITS) - 1) : ((NUM_INP_REGS + 1) * fpnew_pkg_INT_FORMAT_BITS) - 1):(0 >= NUM_INP_REGS ? NUM_INP_REGS * fpnew_pkg_INT_FORMAT_BITS : 0)] inp_pipe_int_fmt_q;
+	wire [0:NUM_INP_REGS] inp_pipe_tag_q;
+	wire [(0 >= NUM_INP_REGS ? ((1 - NUM_INP_REGS) * AuxType_AUX_BITS) + ((NUM_INP_REGS * AuxType_AUX_BITS) - 1) : ((NUM_INP_REGS + 1) * AuxType_AUX_BITS) - 1):(0 >= NUM_INP_REGS ? NUM_INP_REGS * AuxType_AUX_BITS : 0)] inp_pipe_aux_q;
+	wire [0:NUM_INP_REGS] inp_pipe_valid_q;
+	wire [0:NUM_INP_REGS] inp_pipe_ready;
+	assign inp_pipe_operands_q[(0 >= NUM_INP_REGS ? 0 : NUM_INP_REGS) * WIDTH+:WIDTH] = operands_i;
+	assign inp_pipe_is_boxed_q[(0 >= NUM_INP_REGS ? 0 : NUM_INP_REGS) * NUM_FORMATS+:NUM_FORMATS] = is_boxed_i;
+	assign inp_pipe_rnd_mode_q[(0 >= NUM_INP_REGS ? 0 : NUM_INP_REGS) * 3+:3] = rnd_mode_i;
+	assign inp_pipe_op_q[(0 >= NUM_INP_REGS ? 0 : NUM_INP_REGS) * fpnew_pkg_OP_BITS+:fpnew_pkg_OP_BITS] = op_i;
+	assign inp_pipe_op_mod_q[0] = op_mod_i;
+	assign inp_pipe_src_fmt_q[(0 >= NUM_INP_REGS ? 0 : NUM_INP_REGS) * fpnew_pkg_FP_FORMAT_BITS+:fpnew_pkg_FP_FORMAT_BITS] = src_fmt_i;
+	assign inp_pipe_dst_fmt_q[(0 >= NUM_INP_REGS ? 0 : NUM_INP_REGS) * fpnew_pkg_FP_FORMAT_BITS+:fpnew_pkg_FP_FORMAT_BITS] = dst_fmt_i;
+	assign inp_pipe_int_fmt_q[(0 >= NUM_INP_REGS ? 0 : NUM_INP_REGS) * fpnew_pkg_INT_FORMAT_BITS+:fpnew_pkg_INT_FORMAT_BITS] = int_fmt_i;
+	assign inp_pipe_tag_q[0] = tag_i;
+	assign inp_pipe_aux_q[(0 >= NUM_INP_REGS ? 0 : NUM_INP_REGS) * AuxType_AUX_BITS+:AuxType_AUX_BITS] = aux_i;
+	assign inp_pipe_valid_q[0] = in_valid_i;
+	assign in_ready_o = inp_pipe_ready[0];
+	generate
+		genvar i;
+		for (i = 0; i < NUM_INP_REGS; i = i + 1) begin : gen_input_pipeline
+			wire reg_ena;
+			assign inp_pipe_ready[i] = inp_pipe_ready[i + 1] | ~inp_pipe_valid_q[i + 1];
+			assign reg_ena = inp_pipe_ready[i] & inp_pipe_valid_q[i];
+		end
+	endgenerate
+	assign operands_q = inp_pipe_operands_q[(0 >= NUM_INP_REGS ? NUM_INP_REGS : NUM_INP_REGS - NUM_INP_REGS) * WIDTH+:WIDTH];
+	assign is_boxed_q = inp_pipe_is_boxed_q[(0 >= NUM_INP_REGS ? NUM_INP_REGS : NUM_INP_REGS - NUM_INP_REGS) * NUM_FORMATS+:NUM_FORMATS];
+	assign op_mod_q = inp_pipe_op_mod_q[NUM_INP_REGS];
+	assign src_fmt_q = inp_pipe_src_fmt_q[(0 >= NUM_INP_REGS ? NUM_INP_REGS : NUM_INP_REGS - NUM_INP_REGS) * fpnew_pkg_FP_FORMAT_BITS+:fpnew_pkg_FP_FORMAT_BITS];
+	assign dst_fmt_q = inp_pipe_dst_fmt_q[(0 >= NUM_INP_REGS ? NUM_INP_REGS : NUM_INP_REGS - NUM_INP_REGS) * fpnew_pkg_FP_FORMAT_BITS+:fpnew_pkg_FP_FORMAT_BITS];
+	assign int_fmt_q = inp_pipe_int_fmt_q[(0 >= NUM_INP_REGS ? NUM_INP_REGS : NUM_INP_REGS - NUM_INP_REGS) * fpnew_pkg_INT_FORMAT_BITS+:fpnew_pkg_INT_FORMAT_BITS];
+	wire src_is_int;
+	wire dst_is_int;
+	localparam [3:0] fpnew_pkg_I2F = 12;
+	assign src_is_int = inp_pipe_op_q[(0 >= NUM_INP_REGS ? NUM_INP_REGS : NUM_INP_REGS - NUM_INP_REGS) * fpnew_pkg_OP_BITS+:fpnew_pkg_OP_BITS] == fpnew_pkg_I2F;
+	localparam [3:0] fpnew_pkg_F2I = 11;
+	assign dst_is_int = inp_pipe_op_q[(0 >= NUM_INP_REGS ? NUM_INP_REGS : NUM_INP_REGS - NUM_INP_REGS) * fpnew_pkg_OP_BITS+:fpnew_pkg_OP_BITS] == fpnew_pkg_F2I;
+	wire [INT_MAN_WIDTH - 1:0] encoded_mant;
+	wire [3:0] fmt_sign;
+	wire signed [(NUM_FORMATS * INT_EXP_WIDTH) - 1:0] fmt_exponent;
+	wire [(NUM_FORMATS * INT_MAN_WIDTH) - 1:0] fmt_mantissa;
+	wire signed [(NUM_FORMATS * INT_EXP_WIDTH) - 1:0] fmt_shift_compensation;
+	wire [31:0] info;
+	reg [(NUM_INT_FORMATS * INT_MAN_WIDTH) - 1:0] ifmt_input_val;
+	wire int_sign;
+	wire [INT_MAN_WIDTH - 1:0] int_value;
+	wire [INT_MAN_WIDTH - 1:0] int_mantissa;
+	localparam [0:0] fpnew_pkg_DONT_CARE = 1'b1;
+	generate
+		genvar fmt;
+		function automatic signed [31:0] sv2v_cast_32_signed;
+			input reg signed [31:0] inp;
+			sv2v_cast_32_signed = inp;
+		endfunction
+		for (fmt = 0; fmt < sv2v_cast_32_signed(NUM_FORMATS); fmt = fmt + 1) begin : fmt_init_inputs
+			function automatic [1:0] sv2v_cast_9359B;
+				input reg [1:0] inp;
+				sv2v_cast_9359B = inp;
+			endfunction
+			localparam [31:0] FP_WIDTH = fpnew_pkg_fp_width(sv2v_cast_9359B(fmt));
+			localparam [31:0] EXP_BITS = fpnew_pkg_exp_bits(sv2v_cast_9359B(fmt));
+			localparam [31:0] MAN_BITS = fpnew_pkg_man_bits(sv2v_cast_9359B(fmt));
+			if (FpFmtConfig[fmt]) begin : active_format
+				function automatic [1:0] sv2v_cast_9359B;
+					input reg [1:0] inp;
+					sv2v_cast_9359B = inp;
+				endfunction
+				fpnew_classifier #(
+					.FpFormat(sv2v_cast_9359B(fmt)),
+					.NumOperands(1)
+				) i_fpnew_classifier(
+					.operands_i(operands_q[FP_WIDTH - 1:0]),
+					.is_boxed_i(is_boxed_q[fmt]),
+					.info_o(info[fmt * 8+:8])
+				);
+				assign fmt_sign[fmt] = operands_q[FP_WIDTH - 1];
+				assign fmt_exponent[fmt * INT_EXP_WIDTH+:INT_EXP_WIDTH] = $signed({1'b0, operands_q[MAN_BITS+:EXP_BITS]});
+				assign fmt_mantissa[fmt * INT_MAN_WIDTH+:INT_MAN_WIDTH] = {info[(fmt * 8) + 7], operands_q[MAN_BITS - 1:0]};
+				assign fmt_shift_compensation[fmt * INT_EXP_WIDTH+:INT_EXP_WIDTH] = $signed((INT_MAN_WIDTH - 1) - MAN_BITS);
+			end
+			else begin : inactive_format
+				assign info[fmt * 8+:8] = {fpnew_pkg_DONT_CARE, fpnew_pkg_DONT_CARE, fpnew_pkg_DONT_CARE, fpnew_pkg_DONT_CARE, fpnew_pkg_DONT_CARE, fpnew_pkg_DONT_CARE, fpnew_pkg_DONT_CARE, fpnew_pkg_DONT_CARE};
+				assign fmt_sign[fmt] = fpnew_pkg_DONT_CARE;
+				function automatic signed [0:0] sv2v_cast_1_signed;
+					input reg signed [0:0] inp;
+					sv2v_cast_1_signed = inp;
+				endfunction
+				assign fmt_exponent[fmt * INT_EXP_WIDTH+:INT_EXP_WIDTH] = {INT_EXP_WIDTH {sv2v_cast_1_signed(fpnew_pkg_DONT_CARE)}};
+				assign fmt_mantissa[fmt * INT_MAN_WIDTH+:INT_MAN_WIDTH] = {INT_MAN_WIDTH {fpnew_pkg_DONT_CARE}};
+				assign fmt_shift_compensation[fmt * INT_EXP_WIDTH+:INT_EXP_WIDTH] = {INT_EXP_WIDTH {sv2v_cast_1_signed(fpnew_pkg_DONT_CARE)}};
+			end
+		end
+	endgenerate
+	generate
+		genvar ifmt;
+		for (ifmt = 0; ifmt < sv2v_cast_32_signed(NUM_INT_FORMATS); ifmt = ifmt + 1) begin : gen_sign_extend_int
+			function automatic [1:0] sv2v_cast_D812A;
+				input reg [1:0] inp;
+				sv2v_cast_D812A = inp;
+			endfunction
+			localparam [31:0] INT_WIDTH = fpnew_pkg_int_width(sv2v_cast_D812A(ifmt));
+			if (IntFmtConfig[ifmt]) begin : active_format
+				function automatic [0:0] sv2v_cast_1;
+					input reg [0:0] inp;
+					sv2v_cast_1 = inp;
+				endfunction
+				always @(*) begin : sign_ext_input
+					ifmt_input_val[ifmt * INT_MAN_WIDTH+:INT_MAN_WIDTH] = {INT_MAN_WIDTH {sv2v_cast_1(operands_q[INT_WIDTH - 1] & ~op_mod_q)}};
+					ifmt_input_val[(ifmt * INT_MAN_WIDTH) + (INT_WIDTH - 1)-:INT_WIDTH] = operands_q[INT_WIDTH - 1:0];
+				end
+			end
+			else begin : inactive_format
+				wire [INT_MAN_WIDTH:1] sv2v_tmp_F538F;
+				assign sv2v_tmp_F538F = {INT_MAN_WIDTH {fpnew_pkg_DONT_CARE}};
+				always @(*) ifmt_input_val[ifmt * INT_MAN_WIDTH+:INT_MAN_WIDTH] = sv2v_tmp_F538F;
+			end
+		end
+	endgenerate
+	assign int_value = ifmt_input_val[int_fmt_q * INT_MAN_WIDTH+:INT_MAN_WIDTH];
+	assign int_sign = int_value[INT_MAN_WIDTH - 1] & ~op_mod_q;
+	assign int_mantissa = (int_sign ? $unsigned(-int_value) : int_value);
+	assign encoded_mant = (src_is_int ? int_mantissa : fmt_mantissa[src_fmt_q * INT_MAN_WIDTH+:INT_MAN_WIDTH]);
+	wire signed [INT_EXP_WIDTH - 1:0] src_bias;
+	wire signed [INT_EXP_WIDTH - 1:0] src_exp;
+	wire signed [INT_EXP_WIDTH - 1:0] src_subnormal;
+	wire signed [INT_EXP_WIDTH - 1:0] src_offset;
+	function automatic [31:0] fpnew_pkg_bias;
+		input reg [1:0] fmt;
+		fpnew_pkg_bias = $unsigned((2 ** (fpnew_pkg_FP_ENCODINGS[((3 - fmt) * 64) + 63-:32] - 1)) - 1);
+	endfunction
+	assign src_bias = $signed(fpnew_pkg_bias(src_fmt_q));
+	assign src_exp = fmt_exponent[src_fmt_q * INT_EXP_WIDTH+:INT_EXP_WIDTH];
+	assign src_subnormal = $signed({1'b0, info[(src_fmt_q * 8) + 6]});
+	assign src_offset = fmt_shift_compensation[src_fmt_q * INT_EXP_WIDTH+:INT_EXP_WIDTH];
+	wire input_sign;
+	wire signed [INT_EXP_WIDTH - 1:0] input_exp;
+	wire [INT_MAN_WIDTH - 1:0] input_mant;
+	wire mant_is_zero;
+	wire signed [INT_EXP_WIDTH - 1:0] fp_input_exp;
+	wire signed [INT_EXP_WIDTH - 1:0] int_input_exp;
+	wire [LZC_RESULT_WIDTH - 1:0] renorm_shamt;
+	wire [LZC_RESULT_WIDTH:0] renorm_shamt_sgn;
+	lzc #(
+		.WIDTH(INT_MAN_WIDTH),
+		.MODE(1)
+	) i_lzc(
+		.in_i(encoded_mant),
+		.cnt_o(renorm_shamt),
+		.empty_o(mant_is_zero)
+	);
+	assign renorm_shamt_sgn = $signed({1'b0, renorm_shamt});
+	assign input_sign = (src_is_int ? int_sign : fmt_sign[src_fmt_q]);
+	assign input_mant = encoded_mant << renorm_shamt;
+	assign fp_input_exp = $signed((((src_exp + src_subnormal) - src_bias) - renorm_shamt_sgn) + src_offset);
+	assign int_input_exp = $signed((INT_MAN_WIDTH - 1) - renorm_shamt_sgn);
+	assign input_exp = (src_is_int ? int_input_exp : fp_input_exp);
+	wire signed [INT_EXP_WIDTH - 1:0] destination_exp;
+	assign destination_exp = input_exp + $signed(fpnew_pkg_bias(dst_fmt_q));
+	wire input_sign_q;
+	wire signed [INT_EXP_WIDTH - 1:0] input_exp_q;
+	wire [INT_MAN_WIDTH - 1:0] input_mant_q;
+	wire signed [INT_EXP_WIDTH - 1:0] destination_exp_q;
+	wire src_is_int_q;
+	wire dst_is_int_q;
+	wire [7:0] info_q;
+	wire mant_is_zero_q;
+	wire op_mod_q2;
+	wire [2:0] rnd_mode_q;
+	wire [1:0] src_fmt_q2;
+	wire [1:0] dst_fmt_q2;
+	wire [1:0] int_fmt_q2;
+	wire [0:NUM_MID_REGS] mid_pipe_input_sign_q;
+	wire signed [(0 >= NUM_MID_REGS ? ((1 - NUM_MID_REGS) * INT_EXP_WIDTH) + ((NUM_MID_REGS * INT_EXP_WIDTH) - 1) : ((NUM_MID_REGS + 1) * INT_EXP_WIDTH) - 1):(0 >= NUM_MID_REGS ? NUM_MID_REGS * INT_EXP_WIDTH : 0)] mid_pipe_input_exp_q;
+	wire [(0 >= NUM_MID_REGS ? ((1 - NUM_MID_REGS) * INT_MAN_WIDTH) + ((NUM_MID_REGS * INT_MAN_WIDTH) - 1) : ((NUM_MID_REGS + 1) * INT_MAN_WIDTH) - 1):(0 >= NUM_MID_REGS ? NUM_MID_REGS * INT_MAN_WIDTH : 0)] mid_pipe_input_mant_q;
+	wire signed [(0 >= NUM_MID_REGS ? ((1 - NUM_MID_REGS) * INT_EXP_WIDTH) + ((NUM_MID_REGS * INT_EXP_WIDTH) - 1) : ((NUM_MID_REGS + 1) * INT_EXP_WIDTH) - 1):(0 >= NUM_MID_REGS ? NUM_MID_REGS * INT_EXP_WIDTH : 0)] mid_pipe_dest_exp_q;
+	wire [0:NUM_MID_REGS] mid_pipe_src_is_int_q;
+	wire [0:NUM_MID_REGS] mid_pipe_dst_is_int_q;
+	wire [(0 >= NUM_MID_REGS ? ((1 - NUM_MID_REGS) * 8) + ((NUM_MID_REGS * 8) - 1) : ((NUM_MID_REGS + 1) * 8) - 1):(0 >= NUM_MID_REGS ? NUM_MID_REGS * 8 : 0)] mid_pipe_info_q;
+	wire [0:NUM_MID_REGS] mid_pipe_mant_zero_q;
+	wire [0:NUM_MID_REGS] mid_pipe_op_mod_q;
+	wire [(0 >= NUM_MID_REGS ? ((1 - NUM_MID_REGS) * 3) + ((NUM_MID_REGS * 3) - 1) : ((NUM_MID_REGS + 1) * 3) - 1):(0 >= NUM_MID_REGS ? NUM_MID_REGS * 3 : 0)] mid_pipe_rnd_mode_q;
+	wire [(0 >= NUM_MID_REGS ? ((1 - NUM_MID_REGS) * fpnew_pkg_FP_FORMAT_BITS) + ((NUM_MID_REGS * fpnew_pkg_FP_FORMAT_BITS) - 1) : ((NUM_MID_REGS + 1) * fpnew_pkg_FP_FORMAT_BITS) - 1):(0 >= NUM_MID_REGS ? NUM_MID_REGS * fpnew_pkg_FP_FORMAT_BITS : 0)] mid_pipe_src_fmt_q;
+	wire [(0 >= NUM_MID_REGS ? ((1 - NUM_MID_REGS) * fpnew_pkg_FP_FORMAT_BITS) + ((NUM_MID_REGS * fpnew_pkg_FP_FORMAT_BITS) - 1) : ((NUM_MID_REGS + 1) * fpnew_pkg_FP_FORMAT_BITS) - 1):(0 >= NUM_MID_REGS ? NUM_MID_REGS * fpnew_pkg_FP_FORMAT_BITS : 0)] mid_pipe_dst_fmt_q;
+	wire [(0 >= NUM_MID_REGS ? ((1 - NUM_MID_REGS) * fpnew_pkg_INT_FORMAT_BITS) + ((NUM_MID_REGS * fpnew_pkg_INT_FORMAT_BITS) - 1) : ((NUM_MID_REGS + 1) * fpnew_pkg_INT_FORMAT_BITS) - 1):(0 >= NUM_MID_REGS ? NUM_MID_REGS * fpnew_pkg_INT_FORMAT_BITS : 0)] mid_pipe_int_fmt_q;
+	wire [0:NUM_MID_REGS] mid_pipe_tag_q;
+	wire [(0 >= NUM_MID_REGS ? ((1 - NUM_MID_REGS) * AuxType_AUX_BITS) + ((NUM_MID_REGS * AuxType_AUX_BITS) - 1) : ((NUM_MID_REGS + 1) * AuxType_AUX_BITS) - 1):(0 >= NUM_MID_REGS ? NUM_MID_REGS * AuxType_AUX_BITS : 0)] mid_pipe_aux_q;
+	wire [0:NUM_MID_REGS] mid_pipe_valid_q;
+	wire [0:NUM_MID_REGS] mid_pipe_ready;
+	assign mid_pipe_input_sign_q[0] = input_sign;
+	assign mid_pipe_input_exp_q[(0 >= NUM_MID_REGS ? 0 : NUM_MID_REGS) * INT_EXP_WIDTH+:INT_EXP_WIDTH] = input_exp;
+	assign mid_pipe_input_mant_q[(0 >= NUM_MID_REGS ? 0 : NUM_MID_REGS) * INT_MAN_WIDTH+:INT_MAN_WIDTH] = input_mant;
+	assign mid_pipe_dest_exp_q[(0 >= NUM_MID_REGS ? 0 : NUM_MID_REGS) * INT_EXP_WIDTH+:INT_EXP_WIDTH] = destination_exp;
+	assign mid_pipe_src_is_int_q[0] = src_is_int;
+	assign mid_pipe_dst_is_int_q[0] = dst_is_int;
+	assign mid_pipe_info_q[(0 >= NUM_MID_REGS ? 0 : NUM_MID_REGS) * 8+:8] = info[src_fmt_q * 8+:8];
+	assign mid_pipe_mant_zero_q[0] = mant_is_zero;
+	assign mid_pipe_op_mod_q[0] = op_mod_q;
+	assign mid_pipe_rnd_mode_q[(0 >= NUM_MID_REGS ? 0 : NUM_MID_REGS) * 3+:3] = inp_pipe_rnd_mode_q[(0 >= NUM_INP_REGS ? NUM_INP_REGS : NUM_INP_REGS - NUM_INP_REGS) * 3+:3];
+	assign mid_pipe_src_fmt_q[(0 >= NUM_MID_REGS ? 0 : NUM_MID_REGS) * fpnew_pkg_FP_FORMAT_BITS+:fpnew_pkg_FP_FORMAT_BITS] = src_fmt_q;
+	assign mid_pipe_dst_fmt_q[(0 >= NUM_MID_REGS ? 0 : NUM_MID_REGS) * fpnew_pkg_FP_FORMAT_BITS+:fpnew_pkg_FP_FORMAT_BITS] = dst_fmt_q;
+	assign mid_pipe_int_fmt_q[(0 >= NUM_MID_REGS ? 0 : NUM_MID_REGS) * fpnew_pkg_INT_FORMAT_BITS+:fpnew_pkg_INT_FORMAT_BITS] = int_fmt_q;
+	assign mid_pipe_tag_q[0] = inp_pipe_tag_q[NUM_INP_REGS];
+	assign mid_pipe_aux_q[(0 >= NUM_MID_REGS ? 0 : NUM_MID_REGS) * AuxType_AUX_BITS+:AuxType_AUX_BITS] = inp_pipe_aux_q[(0 >= NUM_INP_REGS ? NUM_INP_REGS : NUM_INP_REGS - NUM_INP_REGS) * AuxType_AUX_BITS+:AuxType_AUX_BITS];
+	assign mid_pipe_valid_q[0] = inp_pipe_valid_q[NUM_INP_REGS];
+	assign inp_pipe_ready[NUM_INP_REGS] = mid_pipe_ready[0];
+	generate
+		for (i = 0; i < NUM_MID_REGS; i = i + 1) begin : gen_inside_pipeline
+			wire reg_ena;
+			assign mid_pipe_ready[i] = mid_pipe_ready[i + 1] | ~mid_pipe_valid_q[i + 1];
+			assign reg_ena = mid_pipe_ready[i] & mid_pipe_valid_q[i];
+		end
+	endgenerate
+	assign input_sign_q = mid_pipe_input_sign_q[NUM_MID_REGS];
+	assign input_exp_q = mid_pipe_input_exp_q[(0 >= NUM_MID_REGS ? NUM_MID_REGS : NUM_MID_REGS - NUM_MID_REGS) * INT_EXP_WIDTH+:INT_EXP_WIDTH];
+	assign input_mant_q = mid_pipe_input_mant_q[(0 >= NUM_MID_REGS ? NUM_MID_REGS : NUM_MID_REGS - NUM_MID_REGS) * INT_MAN_WIDTH+:INT_MAN_WIDTH];
+	assign destination_exp_q = mid_pipe_dest_exp_q[(0 >= NUM_MID_REGS ? NUM_MID_REGS : NUM_MID_REGS - NUM_MID_REGS) * INT_EXP_WIDTH+:INT_EXP_WIDTH];
+	assign src_is_int_q = mid_pipe_src_is_int_q[NUM_MID_REGS];
+	assign dst_is_int_q = mid_pipe_dst_is_int_q[NUM_MID_REGS];
+	assign info_q = mid_pipe_info_q[(0 >= NUM_MID_REGS ? NUM_MID_REGS : NUM_MID_REGS - NUM_MID_REGS) * 8+:8];
+	assign mant_is_zero_q = mid_pipe_mant_zero_q[NUM_MID_REGS];
+	assign op_mod_q2 = mid_pipe_op_mod_q[NUM_MID_REGS];
+	assign rnd_mode_q = mid_pipe_rnd_mode_q[(0 >= NUM_MID_REGS ? NUM_MID_REGS : NUM_MID_REGS - NUM_MID_REGS) * 3+:3];
+	assign src_fmt_q2 = mid_pipe_src_fmt_q[(0 >= NUM_MID_REGS ? NUM_MID_REGS : NUM_MID_REGS - NUM_MID_REGS) * fpnew_pkg_FP_FORMAT_BITS+:fpnew_pkg_FP_FORMAT_BITS];
+	assign dst_fmt_q2 = mid_pipe_dst_fmt_q[(0 >= NUM_MID_REGS ? NUM_MID_REGS : NUM_MID_REGS - NUM_MID_REGS) * fpnew_pkg_FP_FORMAT_BITS+:fpnew_pkg_FP_FORMAT_BITS];
+	assign int_fmt_q2 = mid_pipe_int_fmt_q[(0 >= NUM_MID_REGS ? NUM_MID_REGS : NUM_MID_REGS - NUM_MID_REGS) * fpnew_pkg_INT_FORMAT_BITS+:fpnew_pkg_INT_FORMAT_BITS];
+	reg [INT_EXP_WIDTH - 1:0] final_exp;
+	reg [2 * INT_MAN_WIDTH:0] preshift_mant;
+	wire [2 * INT_MAN_WIDTH:0] destination_mant;
+	wire [SUPER_MAN_BITS - 1:0] final_mant;
+	wire [MAX_INT_WIDTH - 1:0] final_int;
+	reg [$clog2(INT_MAN_WIDTH + 1) - 1:0] denorm_shamt;
+	wire [1:0] fp_round_sticky_bits;
+	wire [1:0] int_round_sticky_bits;
+	wire [1:0] round_sticky_bits;
+	reg of_before_round;
+	reg uf_before_round;
+	always @(*) begin : cast_value
+		final_exp = $unsigned(destination_exp_q);
+		preshift_mant = {((2 * INT_MAN_WIDTH) >= 0 ? (2 * INT_MAN_WIDTH) + 1 : 1 - (2 * INT_MAN_WIDTH)) {1'sb0}};
+		denorm_shamt = SUPER_MAN_BITS - fpnew_pkg_man_bits(dst_fmt_q2);
+		of_before_round = 1'b0;
+		uf_before_round = 1'b0;
+		preshift_mant = input_mant_q << (INT_MAN_WIDTH + 1);
+		if (dst_is_int_q) begin
+			denorm_shamt = $unsigned((MAX_INT_WIDTH - 1) - input_exp_q);
+			if (input_exp_q >= $signed((fpnew_pkg_int_width(int_fmt_q2) - 1) + op_mod_q2)) begin
+				denorm_shamt = {$clog2(INT_MAN_WIDTH + 1) {1'sb0}};
+				of_before_round = 1'b1;
+			end
+			else if (input_exp_q < -1) begin
+				denorm_shamt = MAX_INT_WIDTH + 1;
+				uf_before_round = 1'b1;
+			end
+		end
+		else if ((destination_exp_q >= ($signed(2 ** fpnew_pkg_exp_bits(dst_fmt_q2)) - 1)) || (~src_is_int_q && info_q[4])) begin
+			final_exp = $unsigned((2 ** fpnew_pkg_exp_bits(dst_fmt_q2)) - 2);
+			preshift_mant = {((2 * INT_MAN_WIDTH) >= 0 ? (2 * INT_MAN_WIDTH) + 1 : 1 - (2 * INT_MAN_WIDTH)) {1'sb1}};
+			of_before_round = 1'b1;
+		end
+		else if ((destination_exp_q < 1) && (destination_exp_q >= -$signed(fpnew_pkg_man_bits(dst_fmt_q2)))) begin
+			final_exp = {INT_EXP_WIDTH {1'sb0}};
+			denorm_shamt = $unsigned((denorm_shamt + 1) - destination_exp_q);
+			uf_before_round = 1'b1;
+		end
+		else if (destination_exp_q < -$signed(fpnew_pkg_man_bits(dst_fmt_q2))) begin
+			final_exp = {INT_EXP_WIDTH {1'sb0}};
+			denorm_shamt = $unsigned((denorm_shamt + 2) + fpnew_pkg_man_bits(dst_fmt_q2));
+			uf_before_round = 1'b1;
+		end
+	end
+	localparam NUM_FP_STICKY = ((2 * INT_MAN_WIDTH) - SUPER_MAN_BITS) - 1;
+	localparam NUM_INT_STICKY = (2 * INT_MAN_WIDTH) - MAX_INT_WIDTH;
+	assign destination_mant = preshift_mant >> denorm_shamt;
+	assign {final_mant, fp_round_sticky_bits[1]} = destination_mant[(2 * INT_MAN_WIDTH) - 1-:SUPER_MAN_BITS + 1];
+	assign {final_int, int_round_sticky_bits[1]} = destination_mant[2 * INT_MAN_WIDTH-:MAX_INT_WIDTH + 1];
+	assign fp_round_sticky_bits[0] = |{destination_mant[NUM_FP_STICKY - 1:0]};
+	assign int_round_sticky_bits[0] = |{destination_mant[NUM_INT_STICKY - 1:0]};
+	assign round_sticky_bits = (dst_is_int_q ? int_round_sticky_bits : fp_round_sticky_bits);
+	wire [WIDTH - 1:0] pre_round_abs;
+	wire of_after_round;
+	wire uf_after_round;
+	reg [(NUM_FORMATS * WIDTH) - 1:0] fmt_pre_round_abs;
+	reg [3:0] fmt_of_after_round;
+	reg [3:0] fmt_uf_after_round;
+	reg [(NUM_INT_FORMATS * WIDTH) - 1:0] ifmt_pre_round_abs;
+	wire rounded_sign;
+	wire [WIDTH - 1:0] rounded_abs;
+	wire result_true_zero;
+	wire [WIDTH - 1:0] rounded_int_res;
+	wire rounded_int_res_zero;
+	generate
+		for (fmt = 0; fmt < sv2v_cast_32_signed(NUM_FORMATS); fmt = fmt + 1) begin : gen_res_assemble
+			function automatic [1:0] sv2v_cast_9359B;
+				input reg [1:0] inp;
+				sv2v_cast_9359B = inp;
+			endfunction
+			localparam [31:0] EXP_BITS = fpnew_pkg_exp_bits(sv2v_cast_9359B(fmt));
+			localparam [31:0] MAN_BITS = fpnew_pkg_man_bits(sv2v_cast_9359B(fmt));
+			if (FpFmtConfig[fmt]) begin : active_format
+				always @(*) begin : assemble_result
+					fmt_pre_round_abs[fmt * WIDTH+:WIDTH] = {final_exp[EXP_BITS - 1:0], final_mant[MAN_BITS - 1:0]};
+				end
+			end
+			else begin : inactive_format
+				wire [WIDTH:1] sv2v_tmp_4020A;
+				assign sv2v_tmp_4020A = {WIDTH {fpnew_pkg_DONT_CARE}};
+				always @(*) fmt_pre_round_abs[fmt * WIDTH+:WIDTH] = sv2v_tmp_4020A;
+			end
+		end
+	endgenerate
+	generate
+		for (ifmt = 0; ifmt < sv2v_cast_32_signed(NUM_INT_FORMATS); ifmt = ifmt + 1) begin : gen_int_res_sign_ext
+			function automatic [1:0] sv2v_cast_D812A;
+				input reg [1:0] inp;
+				sv2v_cast_D812A = inp;
+			endfunction
+			localparam [31:0] INT_WIDTH = fpnew_pkg_int_width(sv2v_cast_D812A(ifmt));
+			if (IntFmtConfig[ifmt]) begin : active_format
+				always @(*) begin : assemble_result
+					ifmt_pre_round_abs[ifmt * WIDTH+:WIDTH] = {WIDTH {final_int[INT_WIDTH - 1]}};
+					ifmt_pre_round_abs[(ifmt * WIDTH) + (INT_WIDTH - 1)-:INT_WIDTH] = final_int[INT_WIDTH - 1:0];
+				end
+			end
+			else begin : inactive_format
+				wire [WIDTH:1] sv2v_tmp_D81CB;
+				assign sv2v_tmp_D81CB = {WIDTH {fpnew_pkg_DONT_CARE}};
+				always @(*) ifmt_pre_round_abs[ifmt * WIDTH+:WIDTH] = sv2v_tmp_D81CB;
+			end
+		end
+	endgenerate
+	assign pre_round_abs = (dst_is_int_q ? ifmt_pre_round_abs[int_fmt_q2 * WIDTH+:WIDTH] : fmt_pre_round_abs[dst_fmt_q2 * WIDTH+:WIDTH]);
+	fpnew_rounding #(.AbsWidth(WIDTH)) i_fpnew_rounding(
+		.abs_value_i(pre_round_abs),
+		.sign_i(input_sign_q),
+		.round_sticky_bits_i(round_sticky_bits),
+		.rnd_mode_i(rnd_mode_q),
+		.effective_subtraction_i(1'b0),
+		.abs_rounded_o(rounded_abs),
+		.sign_o(rounded_sign),
+		.exact_zero_o(result_true_zero)
+	);
+	reg [(NUM_FORMATS * WIDTH) - 1:0] fmt_result;
+	generate
+		for (fmt = 0; fmt < sv2v_cast_32_signed(NUM_FORMATS); fmt = fmt + 1) begin : gen_sign_inject
+			function automatic [1:0] sv2v_cast_9359B;
+				input reg [1:0] inp;
+				sv2v_cast_9359B = inp;
+			endfunction
+			localparam [31:0] FP_WIDTH = fpnew_pkg_fp_width(sv2v_cast_9359B(fmt));
+			localparam [31:0] EXP_BITS = fpnew_pkg_exp_bits(sv2v_cast_9359B(fmt));
+			localparam [31:0] MAN_BITS = fpnew_pkg_man_bits(sv2v_cast_9359B(fmt));
+			if (FpFmtConfig[fmt]) begin : active_format
+				always @(*) begin : post_process
+					fmt_uf_after_round[fmt] = rounded_abs[(EXP_BITS + MAN_BITS) - 1:MAN_BITS] == {(((EXP_BITS + MAN_BITS) - 1) >= MAN_BITS ? (((EXP_BITS + MAN_BITS) - 1) - MAN_BITS) + 1 : (MAN_BITS - ((EXP_BITS + MAN_BITS) - 1)) + 1) {1'sb0}};
+					fmt_of_after_round[fmt] = rounded_abs[(EXP_BITS + MAN_BITS) - 1:MAN_BITS] == {(((EXP_BITS + MAN_BITS) - 1) >= MAN_BITS ? (((EXP_BITS + MAN_BITS) - 1) - MAN_BITS) + 1 : (MAN_BITS - ((EXP_BITS + MAN_BITS) - 1)) + 1) {1'sb1}};
+					fmt_result[fmt * WIDTH+:WIDTH] = {WIDTH {1'sb1}};
+					fmt_result[(fmt * WIDTH) + (FP_WIDTH - 1)-:FP_WIDTH] = (src_is_int_q & mant_is_zero_q ? {FP_WIDTH {1'sb0}} : {rounded_sign, rounded_abs[(EXP_BITS + MAN_BITS) - 1:0]});
+				end
+			end
+			else begin : inactive_format
+				wire [1:1] sv2v_tmp_78FCE;
+				assign sv2v_tmp_78FCE = fpnew_pkg_DONT_CARE;
+				always @(*) fmt_uf_after_round[fmt] = sv2v_tmp_78FCE;
+				wire [1:1] sv2v_tmp_C5A3B;
+				assign sv2v_tmp_C5A3B = fpnew_pkg_DONT_CARE;
+				always @(*) fmt_of_after_round[fmt] = sv2v_tmp_C5A3B;
+				wire [WIDTH:1] sv2v_tmp_4A6B1;
+				assign sv2v_tmp_4A6B1 = {WIDTH {fpnew_pkg_DONT_CARE}};
+				always @(*) fmt_result[fmt * WIDTH+:WIDTH] = sv2v_tmp_4A6B1;
+			end
+		end
+	endgenerate
+	assign uf_after_round = fmt_uf_after_round[dst_fmt_q2];
+	assign of_after_round = fmt_of_after_round[dst_fmt_q2];
+	assign rounded_int_res = (rounded_sign ? $unsigned(-rounded_abs) : rounded_abs);
+	assign rounded_int_res_zero = rounded_int_res == {WIDTH {1'sb0}};
+	wire [WIDTH - 1:0] fp_special_result;
+	wire [4:0] fp_special_status;
+	wire fp_result_is_special;
+	reg [(NUM_FORMATS * WIDTH) - 1:0] fmt_special_result;
+	generate
+		for (fmt = 0; fmt < sv2v_cast_32_signed(NUM_FORMATS); fmt = fmt + 1) begin : gen_special_results
+			function automatic [1:0] sv2v_cast_9359B;
+				input reg [1:0] inp;
+				sv2v_cast_9359B = inp;
+			endfunction
+			localparam [31:0] FP_WIDTH = fpnew_pkg_fp_width(sv2v_cast_9359B(fmt));
+			localparam [31:0] EXP_BITS = fpnew_pkg_exp_bits(sv2v_cast_9359B(fmt));
+			localparam [31:0] MAN_BITS = fpnew_pkg_man_bits(sv2v_cast_9359B(fmt));
+			localparam [EXP_BITS - 1:0] QNAN_EXPONENT = 1'sb1;
+			localparam [MAN_BITS - 1:0] QNAN_MANTISSA = 2 ** (MAN_BITS - 1);
+			if (FpFmtConfig[fmt]) begin : active_format
+				always @(*) begin : special_results
+					reg [FP_WIDTH - 1:0] special_res;
+					special_res = (info_q[5] ? input_sign_q << (FP_WIDTH - 1) : {1'b0, QNAN_EXPONENT, QNAN_MANTISSA});
+					fmt_special_result[fmt * WIDTH+:WIDTH] = {WIDTH {1'sb1}};
+					fmt_special_result[(fmt * WIDTH) + (FP_WIDTH - 1)-:FP_WIDTH] = special_res;
+				end
+			end
+			else begin : inactive_format
+				wire [WIDTH:1] sv2v_tmp_E5F3D;
+				assign sv2v_tmp_E5F3D = {WIDTH {fpnew_pkg_DONT_CARE}};
+				always @(*) fmt_special_result[fmt * WIDTH+:WIDTH] = sv2v_tmp_E5F3D;
+			end
+		end
+	endgenerate
+	assign fp_result_is_special = ~src_is_int_q & ((info_q[5] | info_q[3]) | ~info_q[0]);
+	assign fp_special_status = {info_q[2], 1'b0, 1'b0, 1'b0, 1'b0};
+	assign fp_special_result = fmt_special_result[dst_fmt_q2 * WIDTH+:WIDTH];
+	wire [WIDTH - 1:0] int_special_result;
+	wire [4:0] int_special_status;
+	wire int_result_is_special;
+	reg [(NUM_INT_FORMATS * WIDTH) - 1:0] ifmt_special_result;
+	generate
+		for (ifmt = 0; ifmt < sv2v_cast_32_signed(NUM_INT_FORMATS); ifmt = ifmt + 1) begin : gen_special_results_int
+			function automatic [1:0] sv2v_cast_D812A;
+				input reg [1:0] inp;
+				sv2v_cast_D812A = inp;
+			endfunction
+			localparam [31:0] INT_WIDTH = fpnew_pkg_int_width(sv2v_cast_D812A(ifmt));
+			if (IntFmtConfig[ifmt]) begin : active_format
+				always @(*) begin : special_results
+					reg [INT_WIDTH - 1:0] special_res;
+					special_res[INT_WIDTH - 2:0] = {((INT_WIDTH - 2) >= 0 ? INT_WIDTH - 1 : 3 - INT_WIDTH) {1'sb1}};
+					special_res[INT_WIDTH - 1] = op_mod_q2;
+					if (input_sign_q && !info_q[3])
+						special_res = ~special_res;
+					ifmt_special_result[ifmt * WIDTH+:WIDTH] = {WIDTH {special_res[INT_WIDTH - 1]}};
+					ifmt_special_result[(ifmt * WIDTH) + (INT_WIDTH - 1)-:INT_WIDTH] = special_res;
+				end
+			end
+			else begin : inactive_format
+				wire [WIDTH:1] sv2v_tmp_B8B30;
+				assign sv2v_tmp_B8B30 = {WIDTH {fpnew_pkg_DONT_CARE}};
+				always @(*) ifmt_special_result[ifmt * WIDTH+:WIDTH] = sv2v_tmp_B8B30;
+			end
+		end
+	endgenerate
+	assign int_result_is_special = (((info_q[3] | info_q[4]) | of_before_round) | ~info_q[0]) | ((input_sign_q & op_mod_q2) & ~rounded_int_res_zero);
+	assign int_special_status = 5'b10000;
+	assign int_special_result = ifmt_special_result[int_fmt_q2 * WIDTH+:WIDTH];
+	wire [4:0] int_regular_status;
+	wire [4:0] fp_regular_status;
+	wire [WIDTH - 1:0] fp_result;
+	wire [WIDTH - 1:0] int_result;
+	wire [4:0] fp_status;
+	wire [4:0] int_status;
+	assign fp_regular_status[4] = src_is_int_q & (of_before_round | of_after_round);
+	assign fp_regular_status[3] = 1'b0;
+	assign fp_regular_status[2] = ~src_is_int_q & (~info_q[4] & (of_before_round | of_after_round));
+	assign fp_regular_status[1] = uf_after_round & fp_regular_status[0];
+	assign fp_regular_status[0] = (src_is_int_q ? |fp_round_sticky_bits : |fp_round_sticky_bits | (~info_q[4] & (of_before_round | of_after_round)));
+	assign int_regular_status = {4'b0000, |int_round_sticky_bits};
+	assign fp_result = (fp_result_is_special ? fp_special_result : fmt_result[dst_fmt_q2 * WIDTH+:WIDTH]);
+	assign fp_status = (fp_result_is_special ? fp_special_status : fp_regular_status);
+	assign int_result = (int_result_is_special ? int_special_result : rounded_int_res);
+	assign int_status = (int_result_is_special ? int_special_status : int_regular_status);
+	wire [WIDTH - 1:0] result_d;
+	wire [4:0] status_d;
+	wire extension_bit;
+	assign result_d = (dst_is_int_q ? int_result : fp_result);
+	assign status_d = (dst_is_int_q ? int_status : fp_status);
+	assign extension_bit = (dst_is_int_q ? int_result[WIDTH - 1] : 1'b1);
+	wire [(0 >= NUM_OUT_REGS ? ((1 - NUM_OUT_REGS) * WIDTH) + ((NUM_OUT_REGS * WIDTH) - 1) : ((NUM_OUT_REGS + 1) * WIDTH) - 1):(0 >= NUM_OUT_REGS ? NUM_OUT_REGS * WIDTH : 0)] out_pipe_result_q;
+	wire [(0 >= NUM_OUT_REGS ? ((1 - NUM_OUT_REGS) * 5) + ((NUM_OUT_REGS * 5) - 1) : ((NUM_OUT_REGS + 1) * 5) - 1):(0 >= NUM_OUT_REGS ? NUM_OUT_REGS * 5 : 0)] out_pipe_status_q;
+	wire [0:NUM_OUT_REGS] out_pipe_ext_bit_q;
+	wire [0:NUM_OUT_REGS] out_pipe_tag_q;
+	wire [(0 >= NUM_OUT_REGS ? ((1 - NUM_OUT_REGS) * AuxType_AUX_BITS) + ((NUM_OUT_REGS * AuxType_AUX_BITS) - 1) : ((NUM_OUT_REGS + 1) * AuxType_AUX_BITS) - 1):(0 >= NUM_OUT_REGS ? NUM_OUT_REGS * AuxType_AUX_BITS : 0)] out_pipe_aux_q;
+	wire [0:NUM_OUT_REGS] out_pipe_valid_q;
+	wire [0:NUM_OUT_REGS] out_pipe_ready;
+	assign out_pipe_result_q[(0 >= NUM_OUT_REGS ? 0 : NUM_OUT_REGS) * WIDTH+:WIDTH] = result_d;
+	assign out_pipe_status_q[(0 >= NUM_OUT_REGS ? 0 : NUM_OUT_REGS) * 5+:5] = status_d;
+	assign out_pipe_ext_bit_q[0] = extension_bit;
+	assign out_pipe_tag_q[0] = mid_pipe_tag_q[NUM_MID_REGS];
+	assign out_pipe_aux_q[(0 >= NUM_OUT_REGS ? 0 : NUM_OUT_REGS) * AuxType_AUX_BITS+:AuxType_AUX_BITS] = mid_pipe_aux_q[(0 >= NUM_MID_REGS ? NUM_MID_REGS : NUM_MID_REGS - NUM_MID_REGS) * AuxType_AUX_BITS+:AuxType_AUX_BITS];
+	assign out_pipe_valid_q[0] = mid_pipe_valid_q[NUM_MID_REGS];
+	assign mid_pipe_ready[NUM_MID_REGS] = out_pipe_ready[0];
+	generate
+		for (i = 0; i < NUM_OUT_REGS; i = i + 1) begin : gen_output_pipeline
+			wire reg_ena;
+			assign out_pipe_ready[i] = out_pipe_ready[i + 1] | ~out_pipe_valid_q[i + 1];
+			assign reg_ena = out_pipe_ready[i] & out_pipe_valid_q[i];
+		end
+	endgenerate
+	assign out_pipe_ready[NUM_OUT_REGS] = out_ready_i;
+	assign result_o = out_pipe_result_q[(0 >= NUM_OUT_REGS ? NUM_OUT_REGS : NUM_OUT_REGS - NUM_OUT_REGS) * WIDTH+:WIDTH];
+	assign status_o = out_pipe_status_q[(0 >= NUM_OUT_REGS ? NUM_OUT_REGS : NUM_OUT_REGS - NUM_OUT_REGS) * 5+:5];
+	assign extension_bit_o = out_pipe_ext_bit_q[NUM_OUT_REGS];
+	assign tag_o = out_pipe_tag_q[NUM_OUT_REGS];
+	assign aux_o = out_pipe_aux_q[(0 >= NUM_OUT_REGS ? NUM_OUT_REGS : NUM_OUT_REGS - NUM_OUT_REGS) * AuxType_AUX_BITS+:AuxType_AUX_BITS];
+	assign out_valid_o = out_pipe_valid_q[NUM_OUT_REGS];
+	assign busy_o = |{inp_pipe_valid_q, mid_pipe_valid_q, out_pipe_valid_q};
+endmodule
+module fpnew_classifier (
+	operands_i,
+	is_boxed_i,
+	info_o
+);
+	localparam [31:0] fpnew_pkg_NUM_FP_FORMATS = 4;
+	localparam [31:0] fpnew_pkg_FP_FORMAT_BITS = 2;
+	function automatic [1:0] sv2v_cast_9E068;
+		input reg [1:0] inp;
+		sv2v_cast_9E068 = inp;
+	endfunction
+	parameter [1:0] FpFormat = sv2v_cast_9E068(0);
+	parameter [31:0] NumOperands = 1;
+	localparam [255:0] fpnew_pkg_FP_ENCODINGS = 256'h00000008000000170000000b00000034000000050000000a0000000500000002;
+	function automatic [31:0] fpnew_pkg_fp_width;
+		input reg [1:0] fmt;
+		fpnew_pkg_fp_width = (fpnew_pkg_FP_ENCODINGS[((3 - fmt) * 64) + 63-:32] + fpnew_pkg_FP_ENCODINGS[((3 - fmt) * 64) + 31-:32]) + 1;
+	endfunction
+	localparam [31:0] WIDTH = fpnew_pkg_fp_width(FpFormat);
+	input wire [(NumOperands * WIDTH) - 1:0] operands_i;
+	input wire [NumOperands - 1:0] is_boxed_i;
+	output reg [(NumOperands * 8) - 1:0] info_o;
+	function automatic [31:0] fpnew_pkg_exp_bits;
+		input reg [1:0] fmt;
+		fpnew_pkg_exp_bits = fpnew_pkg_FP_ENCODINGS[((3 - fmt) * 64) + 63-:32];
+	endfunction
+	localparam [31:0] EXP_BITS = fpnew_pkg_exp_bits(FpFormat);
+	function automatic [31:0] fpnew_pkg_man_bits;
+		input reg [1:0] fmt;
+		fpnew_pkg_man_bits = fpnew_pkg_FP_ENCODINGS[((3 - fmt) * 64) + 31-:32];
+	endfunction
+	localparam [31:0] MAN_BITS = fpnew_pkg_man_bits(FpFormat);
+	generate
+		genvar op;
+		function automatic signed [31:0] sv2v_cast_32_signed;
+			input reg signed [31:0] inp;
+			sv2v_cast_32_signed = inp;
+		endfunction
+		for (op = 0; op < sv2v_cast_32_signed(NumOperands); op = op + 1) begin : gen_num_values
+			reg [((1 + EXP_BITS) + MAN_BITS) - 1:0] value;
+			reg is_boxed;
+			reg is_normal;
+			reg is_inf;
+			reg is_nan;
+			reg is_signalling;
+			reg is_quiet;
+			reg is_zero;
+			reg is_subnormal;
+			always @(*) begin : classify_input
+				value = operands_i[op * WIDTH+:WIDTH];
+				is_boxed = is_boxed_i[op];
+				is_normal = (is_boxed && (value[EXP_BITS + (MAN_BITS - 1)-:((EXP_BITS + (MAN_BITS - 1)) >= MAN_BITS ? ((EXP_BITS + (MAN_BITS - 1)) - MAN_BITS) + 1 : (MAN_BITS - (EXP_BITS + (MAN_BITS - 1))) + 1)] != {((EXP_BITS + (MAN_BITS - 1)) >= MAN_BITS ? ((EXP_BITS + (MAN_BITS - 1)) - MAN_BITS) + 1 : (MAN_BITS - (EXP_BITS + (MAN_BITS - 1))) + 1) {1'sb0}})) && (value[EXP_BITS + (MAN_BITS - 1)-:((EXP_BITS + (MAN_BITS - 1)) >= MAN_BITS ? ((EXP_BITS + (MAN_BITS - 1)) - MAN_BITS) + 1 : (MAN_BITS - (EXP_BITS + (MAN_BITS - 1))) + 1)] != {((EXP_BITS + (MAN_BITS - 1)) >= MAN_BITS ? ((EXP_BITS + (MAN_BITS - 1)) - MAN_BITS) + 1 : (MAN_BITS - (EXP_BITS + (MAN_BITS - 1))) + 1) {1'sb1}});
+				is_zero = (is_boxed && (value[EXP_BITS + (MAN_BITS - 1)-:((EXP_BITS + (MAN_BITS - 1)) >= MAN_BITS ? ((EXP_BITS + (MAN_BITS - 1)) - MAN_BITS) + 1 : (MAN_BITS - (EXP_BITS + (MAN_BITS - 1))) + 1)] == {((EXP_BITS + (MAN_BITS - 1)) >= MAN_BITS ? ((EXP_BITS + (MAN_BITS - 1)) - MAN_BITS) + 1 : (MAN_BITS - (EXP_BITS + (MAN_BITS - 1))) + 1) {1'sb0}})) && (value[MAN_BITS - 1-:MAN_BITS] == {MAN_BITS {1'sb0}});
+				is_subnormal = (is_boxed && (value[EXP_BITS + (MAN_BITS - 1)-:((EXP_BITS + (MAN_BITS - 1)) >= MAN_BITS ? ((EXP_BITS + (MAN_BITS - 1)) - MAN_BITS) + 1 : (MAN_BITS - (EXP_BITS + (MAN_BITS - 1))) + 1)] == {((EXP_BITS + (MAN_BITS - 1)) >= MAN_BITS ? ((EXP_BITS + (MAN_BITS - 1)) - MAN_BITS) + 1 : (MAN_BITS - (EXP_BITS + (MAN_BITS - 1))) + 1) {1'sb0}})) && !is_zero;
+				is_inf = is_boxed && ((value[EXP_BITS + (MAN_BITS - 1)-:((EXP_BITS + (MAN_BITS - 1)) >= MAN_BITS ? ((EXP_BITS + (MAN_BITS - 1)) - MAN_BITS) + 1 : (MAN_BITS - (EXP_BITS + (MAN_BITS - 1))) + 1)] == {((EXP_BITS + (MAN_BITS - 1)) >= MAN_BITS ? ((EXP_BITS + (MAN_BITS - 1)) - MAN_BITS) + 1 : (MAN_BITS - (EXP_BITS + (MAN_BITS - 1))) + 1) {1'sb1}}) && (value[MAN_BITS - 1-:MAN_BITS] == {MAN_BITS {1'sb0}}));
+				is_nan = !is_boxed || ((value[EXP_BITS + (MAN_BITS - 1)-:((EXP_BITS + (MAN_BITS - 1)) >= MAN_BITS ? ((EXP_BITS + (MAN_BITS - 1)) - MAN_BITS) + 1 : (MAN_BITS - (EXP_BITS + (MAN_BITS - 1))) + 1)] == {((EXP_BITS + (MAN_BITS - 1)) >= MAN_BITS ? ((EXP_BITS + (MAN_BITS - 1)) - MAN_BITS) + 1 : (MAN_BITS - (EXP_BITS + (MAN_BITS - 1))) + 1) {1'sb1}}) && (value[MAN_BITS - 1-:MAN_BITS] != {MAN_BITS {1'sb0}}));
+				is_signalling = (is_boxed && is_nan) && (value[(MAN_BITS - 1) - ((MAN_BITS - 1) - (MAN_BITS - 1))] == 1'b0);
+				is_quiet = is_nan && !is_signalling;
+				info_o[(op * 8) + 7] = is_normal;
+				info_o[(op * 8) + 6] = is_subnormal;
+				info_o[(op * 8) + 5] = is_zero;
+				info_o[(op * 8) + 4] = is_inf;
+				info_o[(op * 8) + 3] = is_nan;
+				info_o[(op * 8) + 2] = is_signalling;
+				info_o[(op * 8) + 1] = is_quiet;
+				info_o[op * 8] = is_boxed;
+			end
+		end
+	endgenerate
+endmodule
+module fpnew_divsqrt_multi_28154_735ED (
+	clk_i,
+	rst_ni,
+	operands_i,
+	is_boxed_i,
+	rnd_mode_i,
+	op_i,
+	dst_fmt_i,
+	tag_i,
+	aux_i,
+	in_valid_i,
+	in_ready_o,
+	flush_i,
+	result_o,
+	status_o,
+	extension_bit_o,
+	tag_o,
+	aux_o,
+	out_valid_o,
+	out_ready_i,
+	busy_o
+);
+	parameter [31:0] AuxType_AUX_BITS = 0;
+	localparam [31:0] fpnew_pkg_NUM_FP_FORMATS = 4;
+	parameter [0:3] FpFmtConfig = 1'sb1;
+	parameter [31:0] NumPipeRegs = 0;
+	localparam [1:0] fpnew_pkg_AFTER = 1;
+	parameter [1:0] PipeConfig = fpnew_pkg_AFTER;
+	localparam [31:0] fpnew_pkg_FP_FORMAT_BITS = 2;
+	localparam [255:0] fpnew_pkg_FP_ENCODINGS = 256'h00000008000000170000000b00000034000000050000000a0000000500000002;
+	function automatic [31:0] fpnew_pkg_fp_width;
+		input reg [1:0] fmt;
+		fpnew_pkg_fp_width = (fpnew_pkg_FP_ENCODINGS[((3 - fmt) * 64) + 63-:32] + fpnew_pkg_FP_ENCODINGS[((3 - fmt) * 64) + 31-:32]) + 1;
+	endfunction
+	function automatic signed [31:0] fpnew_pkg_maximum;
+		input reg signed [31:0] a;
+		input reg signed [31:0] b;
+		fpnew_pkg_maximum = (a > b ? a : b);
+	endfunction
+	function automatic [1:0] sv2v_cast_8C7A2;
+		input reg [1:0] inp;
+		sv2v_cast_8C7A2 = inp;
+	endfunction
+	function automatic [31:0] fpnew_pkg_max_fp_width;
+		input reg [0:3] cfg;
+		reg [31:0] res;
+		begin
+			res = 0;
+			begin : sv2v_autoblock_112
+				reg [31:0] i;
+				for (i = 0; i < fpnew_pkg_NUM_FP_FORMATS; i = i + 1)
+					if (cfg[i])
+						res = $unsigned(fpnew_pkg_maximum(res, fpnew_pkg_fp_width(sv2v_cast_8C7A2(i))));
+			end
+			fpnew_pkg_max_fp_width = res;
+		end
+	endfunction
+	localparam [31:0] WIDTH = fpnew_pkg_max_fp_width(FpFmtConfig);
+	localparam [31:0] NUM_FORMATS = fpnew_pkg_NUM_FP_FORMATS;
+	input wire clk_i;
+	input wire rst_ni;
+	input wire [(2 * WIDTH) - 1:0] operands_i;
+	input wire [7:0] is_boxed_i;
+	input wire [2:0] rnd_mode_i;
+	localparam [31:0] fpnew_pkg_OP_BITS = 4;
+	input wire [3:0] op_i;
+	input wire [1:0] dst_fmt_i;
+	input wire tag_i;
+	input wire [AuxType_AUX_BITS - 1:0] aux_i;
+	input wire in_valid_i;
+	output wire in_ready_o;
+	input wire flush_i;
+	output wire [WIDTH - 1:0] result_o;
+	output wire [4:0] status_o;
+	output wire extension_bit_o;
+	output wire tag_o;
+	output wire [AuxType_AUX_BITS - 1:0] aux_o;
+	output wire out_valid_o;
+	input wire out_ready_i;
+	output wire busy_o;
+	localparam [1:0] fpnew_pkg_BEFORE = 0;
+	localparam [1:0] fpnew_pkg_DISTRIBUTED = 3;
+	localparam NUM_INP_REGS = (PipeConfig == fpnew_pkg_BEFORE ? NumPipeRegs : (PipeConfig == fpnew_pkg_DISTRIBUTED ? NumPipeRegs / 2 : 0));
+	localparam [1:0] fpnew_pkg_INSIDE = 2;
+	localparam NUM_OUT_REGS = ((PipeConfig == fpnew_pkg_AFTER) || (PipeConfig == fpnew_pkg_INSIDE) ? NumPipeRegs : (PipeConfig == fpnew_pkg_DISTRIBUTED ? (NumPipeRegs + 1) / 2 : 0));
+	wire [(2 * WIDTH) - 1:0] operands_q;
+	wire [2:0] rnd_mode_q;
+	wire [3:0] op_q;
+	wire [1:0] dst_fmt_q;
+	wire in_valid_q;
+	wire [((0 >= NUM_INP_REGS ? ((1 - NUM_INP_REGS) * 2) + ((NUM_INP_REGS * 2) - 1) : ((NUM_INP_REGS + 1) * 2) - 1) >= (0 >= NUM_INP_REGS ? NUM_INP_REGS * 2 : 0) ? ((((0 >= NUM_INP_REGS ? ((1 - NUM_INP_REGS) * 2) + ((NUM_INP_REGS * 2) - 1) : ((NUM_INP_REGS + 1) * 2) - 1) - (0 >= NUM_INP_REGS ? NUM_INP_REGS * 2 : 0)) + 1) * WIDTH) + (((0 >= NUM_INP_REGS ? NUM_INP_REGS * 2 : 0) * WIDTH) - 1) : ((((0 >= NUM_INP_REGS ? NUM_INP_REGS * 2 : 0) - (0 >= NUM_INP_REGS ? ((1 - NUM_INP_REGS) * 2) + ((NUM_INP_REGS * 2) - 1) : ((NUM_INP_REGS + 1) * 2) - 1)) + 1) * WIDTH) + (((0 >= NUM_INP_REGS ? ((1 - NUM_INP_REGS) * 2) + ((NUM_INP_REGS * 2) - 1) : ((NUM_INP_REGS + 1) * 2) - 1) * WIDTH) - 1)):((0 >= NUM_INP_REGS ? ((1 - NUM_INP_REGS) * 2) + ((NUM_INP_REGS * 2) - 1) : ((NUM_INP_REGS + 1) * 2) - 1) >= (0 >= NUM_INP_REGS ? NUM_INP_REGS * 2 : 0) ? (0 >= NUM_INP_REGS ? NUM_INP_REGS * 2 : 0) * WIDTH : (0 >= NUM_INP_REGS ? ((1 - NUM_INP_REGS) * 2) + ((NUM_INP_REGS * 2) - 1) : ((NUM_INP_REGS + 1) * 2) - 1) * WIDTH)] inp_pipe_operands_q;
+	wire [(0 >= NUM_INP_REGS ? ((1 - NUM_INP_REGS) * 3) + ((NUM_INP_REGS * 3) - 1) : ((NUM_INP_REGS + 1) * 3) - 1):(0 >= NUM_INP_REGS ? NUM_INP_REGS * 3 : 0)] inp_pipe_rnd_mode_q;
+	wire [(0 >= NUM_INP_REGS ? ((1 - NUM_INP_REGS) * fpnew_pkg_OP_BITS) + ((NUM_INP_REGS * fpnew_pkg_OP_BITS) - 1) : ((NUM_INP_REGS + 1) * fpnew_pkg_OP_BITS) - 1):(0 >= NUM_INP_REGS ? NUM_INP_REGS * fpnew_pkg_OP_BITS : 0)] inp_pipe_op_q;
+	wire [(0 >= NUM_INP_REGS ? ((1 - NUM_INP_REGS) * fpnew_pkg_FP_FORMAT_BITS) + ((NUM_INP_REGS * fpnew_pkg_FP_FORMAT_BITS) - 1) : ((NUM_INP_REGS + 1) * fpnew_pkg_FP_FORMAT_BITS) - 1):(0 >= NUM_INP_REGS ? NUM_INP_REGS * fpnew_pkg_FP_FORMAT_BITS : 0)] inp_pipe_dst_fmt_q;
+	wire [0:NUM_INP_REGS] inp_pipe_tag_q;
+	wire [(0 >= NUM_INP_REGS ? ((1 - NUM_INP_REGS) * AuxType_AUX_BITS) + ((NUM_INP_REGS * AuxType_AUX_BITS) - 1) : ((NUM_INP_REGS + 1) * AuxType_AUX_BITS) - 1):(0 >= NUM_INP_REGS ? NUM_INP_REGS * AuxType_AUX_BITS : 0)] inp_pipe_aux_q;
+	wire [0:NUM_INP_REGS] inp_pipe_valid_q;
+	wire [0:NUM_INP_REGS] inp_pipe_ready;
+	assign inp_pipe_operands_q[WIDTH * ((0 >= NUM_INP_REGS ? ((1 - NUM_INP_REGS) * 2) + ((NUM_INP_REGS * 2) - 1) : ((NUM_INP_REGS + 1) * 2) - 1) >= (0 >= NUM_INP_REGS ? NUM_INP_REGS * 2 : 0) ? ((0 >= NUM_INP_REGS ? ((1 - NUM_INP_REGS) * 2) + ((NUM_INP_REGS * 2) - 1) : ((NUM_INP_REGS + 1) * 2) - 1) >= (0 >= NUM_INP_REGS ? NUM_INP_REGS * 2 : 0) ? (0 >= NUM_INP_REGS ? 0 : NUM_INP_REGS) * 2 : ((0 >= NUM_INP_REGS ? 0 : NUM_INP_REGS) * 2) + 1) : (0 >= NUM_INP_REGS ? NUM_INP_REGS * 2 : 0) - (((0 >= NUM_INP_REGS ? ((1 - NUM_INP_REGS) * 2) + ((NUM_INP_REGS * 2) - 1) : ((NUM_INP_REGS + 1) * 2) - 1) >= (0 >= NUM_INP_REGS ? NUM_INP_REGS * 2 : 0) ? (0 >= NUM_INP_REGS ? 0 : NUM_INP_REGS) * 2 : ((0 >= NUM_INP_REGS ? 0 : NUM_INP_REGS) * 2) + 1) - (0 >= NUM_INP_REGS ? ((1 - NUM_INP_REGS) * 2) + ((NUM_INP_REGS * 2) - 1) : ((NUM_INP_REGS + 1) * 2) - 1)))+:WIDTH * 2] = operands_i;
+	assign inp_pipe_rnd_mode_q[(0 >= NUM_INP_REGS ? 0 : NUM_INP_REGS) * 3+:3] = rnd_mode_i;
+	assign inp_pipe_op_q[(0 >= NUM_INP_REGS ? 0 : NUM_INP_REGS) * fpnew_pkg_OP_BITS+:fpnew_pkg_OP_BITS] = op_i;
+	assign inp_pipe_dst_fmt_q[(0 >= NUM_INP_REGS ? 0 : NUM_INP_REGS) * fpnew_pkg_FP_FORMAT_BITS+:fpnew_pkg_FP_FORMAT_BITS] = dst_fmt_i;
+	assign inp_pipe_tag_q[0] = tag_i;
+	assign inp_pipe_aux_q[(0 >= NUM_INP_REGS ? 0 : NUM_INP_REGS) * AuxType_AUX_BITS+:AuxType_AUX_BITS] = aux_i;
+	assign inp_pipe_valid_q[0] = in_valid_i;
+	assign in_ready_o = inp_pipe_ready[0];
+	generate
+		genvar i;
+		for (i = 0; i < NUM_INP_REGS; i = i + 1) begin : gen_input_pipeline
+			wire reg_ena;
+			assign inp_pipe_ready[i] = inp_pipe_ready[i + 1] | ~inp_pipe_valid_q[i + 1];
+			assign reg_ena = inp_pipe_ready[i] & inp_pipe_valid_q[i];
+		end
+	endgenerate
+	assign operands_q = inp_pipe_operands_q[WIDTH * ((0 >= NUM_INP_REGS ? ((1 - NUM_INP_REGS) * 2) + ((NUM_INP_REGS * 2) - 1) : ((NUM_INP_REGS + 1) * 2) - 1) >= (0 >= NUM_INP_REGS ? NUM_INP_REGS * 2 : 0) ? ((0 >= NUM_INP_REGS ? ((1 - NUM_INP_REGS) * 2) + ((NUM_INP_REGS * 2) - 1) : ((NUM_INP_REGS + 1) * 2) - 1) >= (0 >= NUM_INP_REGS ? NUM_INP_REGS * 2 : 0) ? (0 >= NUM_INP_REGS ? NUM_INP_REGS : NUM_INP_REGS - NUM_INP_REGS) * 2 : ((0 >= NUM_INP_REGS ? NUM_INP_REGS : NUM_INP_REGS - NUM_INP_REGS) * 2) + 1) : (0 >= NUM_INP_REGS ? NUM_INP_REGS * 2 : 0) - (((0 >= NUM_INP_REGS ? ((1 - NUM_INP_REGS) * 2) + ((NUM_INP_REGS * 2) - 1) : ((NUM_INP_REGS + 1) * 2) - 1) >= (0 >= NUM_INP_REGS ? NUM_INP_REGS * 2 : 0) ? (0 >= NUM_INP_REGS ? NUM_INP_REGS : NUM_INP_REGS - NUM_INP_REGS) * 2 : ((0 >= NUM_INP_REGS ? NUM_INP_REGS : NUM_INP_REGS - NUM_INP_REGS) * 2) + 1) - (0 >= NUM_INP_REGS ? ((1 - NUM_INP_REGS) * 2) + ((NUM_INP_REGS * 2) - 1) : ((NUM_INP_REGS + 1) * 2) - 1)))+:WIDTH * 2];
+	assign rnd_mode_q = inp_pipe_rnd_mode_q[(0 >= NUM_INP_REGS ? NUM_INP_REGS : NUM_INP_REGS - NUM_INP_REGS) * 3+:3];
+	assign op_q = inp_pipe_op_q[(0 >= NUM_INP_REGS ? NUM_INP_REGS : NUM_INP_REGS - NUM_INP_REGS) * fpnew_pkg_OP_BITS+:fpnew_pkg_OP_BITS];
+	assign dst_fmt_q = inp_pipe_dst_fmt_q[(0 >= NUM_INP_REGS ? NUM_INP_REGS : NUM_INP_REGS - NUM_INP_REGS) * fpnew_pkg_FP_FORMAT_BITS+:fpnew_pkg_FP_FORMAT_BITS];
+	assign in_valid_q = inp_pipe_valid_q[NUM_INP_REGS];
+	reg [1:0] divsqrt_fmt;
+	reg [127:0] divsqrt_operands;
+	reg input_is_fp8;
+	localparam [1:0] fpnew_pkg_FP16 = 'd2;
+	localparam [1:0] fpnew_pkg_FP32 = 'd0;
+	localparam [1:0] fpnew_pkg_FP64 = 'd1;
+	localparam [1:0] fpnew_pkg_FP8 = 'd3;
+	always @(*) begin : translate_fmt
+		case (dst_fmt_q)
+			fpnew_pkg_FP32: divsqrt_fmt = 2'b00;
+			fpnew_pkg_FP64: divsqrt_fmt = 2'b01;
+			fpnew_pkg_FP16: divsqrt_fmt = 2'b10;
+			default: divsqrt_fmt = 2'b10;
+		endcase
+		input_is_fp8 = FpFmtConfig[fpnew_pkg_FP8] & (dst_fmt_q == fpnew_pkg_FP8);
+		divsqrt_operands[0+:64] = (input_is_fp8 ? operands_q[0+:WIDTH] << 8 : operands_q[0+:WIDTH]);
+		divsqrt_operands[64+:64] = (input_is_fp8 ? operands_q[WIDTH+:WIDTH] << 8 : operands_q[WIDTH+:WIDTH]);
+	end
+	reg in_ready;
+	wire div_valid;
+	wire sqrt_valid;
+	wire unit_ready;
+	wire unit_done;
+	wire op_starting;
+	reg out_valid;
+	wire out_ready;
+	reg hold_result;
+	reg data_is_held;
+	reg unit_busy;
+	wire [1:0] state_q;
+	reg [1:0] state_d;
+	assign inp_pipe_ready[NUM_INP_REGS] = in_ready;
+	localparam [3:0] fpnew_pkg_DIV = 4;
+	assign div_valid = ((in_valid_q & (op_q == fpnew_pkg_DIV)) & in_ready) & ~flush_i;
+	assign sqrt_valid = ((in_valid_q & (op_q != fpnew_pkg_DIV)) & in_ready) & ~flush_i;
+	assign op_starting = div_valid | sqrt_valid;
+	localparam [1:0] BUSY = 1;
+	localparam [1:0] HOLD = 2;
+	localparam [1:0] IDLE = 0;
+	always @(*) begin : flag_fsm
+		in_ready = 1'b0;
+		out_valid = 1'b0;
+		hold_result = 1'b0;
+		data_is_held = 1'b0;
+		unit_busy = 1'b0;
+		state_d = state_q;
+		case (state_q)
+			IDLE: begin
+				in_ready = 1'b1;
+				if (in_valid_q && unit_ready)
+					state_d = BUSY;
+			end
+			BUSY: begin
+				unit_busy = 1'b1;
+				if (unit_done) begin
+					out_valid = 1'b1;
+					if (out_ready) begin
+						state_d = IDLE;
+						if (in_valid_q && unit_ready) begin
+							in_ready = 1'b1;
+							state_d = BUSY;
+						end
+					end
+					else begin
+						hold_result = 1'b1;
+						state_d = HOLD;
+					end
+				end
+			end
+			HOLD: begin
+				unit_busy = 1'b1;
+				data_is_held = 1'b1;
+				out_valid = 1'b1;
+				if (out_ready) begin
+					state_d = IDLE;
+					if (in_valid_q && unit_ready) begin
+						in_ready = 1'b1;
+						state_d = BUSY;
+					end
+				end
+			end
+			default: state_d = IDLE;
+		endcase
+		if (flush_i) begin
+			unit_busy = 1'b0;
+			out_valid = 1'b0;
+			state_d = IDLE;
+		end
+	end
+	always @(posedge clk_i or negedge rst_ni)
+		if (!rst_ni)
+			__q <= __reset_value;
+		else
+			__q <= __d;
+	wire result_is_fp8_q;
+	wire result_tag_q;
+	wire [AuxType_AUX_BITS - 1:0] result_aux_q;
+	wire [63:0] unit_result;
+	wire [WIDTH - 1:0] adjusted_result;
+	wire [WIDTH - 1:0] held_result_q;
+	wire [4:0] unit_status;
+	wire [4:0] held_status_q;
+	div_sqrt_top_mvp i_divsqrt_lei(
+		.Clk_CI(clk_i),
+		.Rst_RBI(rst_ni),
+		.Div_start_SI(div_valid),
+		.Sqrt_start_SI(sqrt_valid),
+		.Operand_a_DI(divsqrt_operands[0+:64]),
+		.Operand_b_DI(divsqrt_operands[64+:64]),
+		.RM_SI(rnd_mode_q),
+		.Precision_ctl_SI({6 {1'sb0}}),
+		.Format_sel_SI(divsqrt_fmt),
+		.Kill_SI(flush_i),
+		.Result_DO(unit_result),
+		.Fflags_SO(unit_status),
+		.Ready_SO(unit_ready),
+		.Done_SO(unit_done)
+	);
+	always @(posedge __clk) __q <= (__load ? __d : __q);
+	assign adjusted_result = (result_is_fp8_q ? unit_result >> 8 : unit_result);
+	wire [WIDTH - 1:0] result_d;
+	wire [4:0] status_d;
+	assign result_d = (data_is_held ? held_result_q : adjusted_result);
+	assign status_d = (data_is_held ? held_status_q : unit_status);
+	wire [(0 >= NUM_OUT_REGS ? ((1 - NUM_OUT_REGS) * WIDTH) + ((NUM_OUT_REGS * WIDTH) - 1) : ((NUM_OUT_REGS + 1) * WIDTH) - 1):(0 >= NUM_OUT_REGS ? NUM_OUT_REGS * WIDTH : 0)] out_pipe_result_q;
+	wire [(0 >= NUM_OUT_REGS ? ((1 - NUM_OUT_REGS) * 5) + ((NUM_OUT_REGS * 5) - 1) : ((NUM_OUT_REGS + 1) * 5) - 1):(0 >= NUM_OUT_REGS ? NUM_OUT_REGS * 5 : 0)] out_pipe_status_q;
+	wire [0:NUM_OUT_REGS] out_pipe_tag_q;
+	wire [(0 >= NUM_OUT_REGS ? ((1 - NUM_OUT_REGS) * AuxType_AUX_BITS) + ((NUM_OUT_REGS * AuxType_AUX_BITS) - 1) : ((NUM_OUT_REGS + 1) * AuxType_AUX_BITS) - 1):(0 >= NUM_OUT_REGS ? NUM_OUT_REGS * AuxType_AUX_BITS : 0)] out_pipe_aux_q;
+	wire [0:NUM_OUT_REGS] out_pipe_valid_q;
+	wire [0:NUM_OUT_REGS] out_pipe_ready;
+	assign out_pipe_result_q[(0 >= NUM_OUT_REGS ? 0 : NUM_OUT_REGS) * WIDTH+:WIDTH] = result_d;
+	assign out_pipe_status_q[(0 >= NUM_OUT_REGS ? 0 : NUM_OUT_REGS) * 5+:5] = status_d;
+	assign out_pipe_tag_q[0] = result_tag_q;
+	assign out_pipe_aux_q[(0 >= NUM_OUT_REGS ? 0 : NUM_OUT_REGS) * AuxType_AUX_BITS+:AuxType_AUX_BITS] = result_aux_q;
+	assign out_pipe_valid_q[0] = out_valid;
+	assign out_ready = out_pipe_ready[0];
+	generate
+		for (i = 0; i < NUM_OUT_REGS; i = i + 1) begin : gen_output_pipeline
+			wire reg_ena;
+			assign out_pipe_ready[i] = out_pipe_ready[i + 1] | ~out_pipe_valid_q[i + 1];
+			assign reg_ena = out_pipe_ready[i] & out_pipe_valid_q[i];
+		end
+	endgenerate
+	assign out_pipe_ready[NUM_OUT_REGS] = out_ready_i;
+	assign result_o = out_pipe_result_q[(0 >= NUM_OUT_REGS ? NUM_OUT_REGS : NUM_OUT_REGS - NUM_OUT_REGS) * WIDTH+:WIDTH];
+	assign status_o = out_pipe_status_q[(0 >= NUM_OUT_REGS ? NUM_OUT_REGS : NUM_OUT_REGS - NUM_OUT_REGS) * 5+:5];
+	assign extension_bit_o = 1'b1;
+	assign tag_o = out_pipe_tag_q[NUM_OUT_REGS];
+	assign aux_o = out_pipe_aux_q[(0 >= NUM_OUT_REGS ? NUM_OUT_REGS : NUM_OUT_REGS - NUM_OUT_REGS) * AuxType_AUX_BITS+:AuxType_AUX_BITS];
+	assign out_valid_o = out_pipe_valid_q[NUM_OUT_REGS];
+	assign busy_o = |{inp_pipe_valid_q, unit_busy, out_pipe_valid_q};
+endmodule
+module fpnew_fma_multi_E4D0A_BE123 (
+	clk_i,
+	rst_ni,
+	operands_i,
+	is_boxed_i,
+	rnd_mode_i,
+	op_i,
+	op_mod_i,
+	src_fmt_i,
+	dst_fmt_i,
+	tag_i,
+	aux_i,
+	in_valid_i,
+	in_ready_o,
+	flush_i,
+	result_o,
+	status_o,
+	extension_bit_o,
+	tag_o,
+	aux_o,
+	out_valid_o,
+	out_ready_i,
+	busy_o
+);
+	parameter [31:0] AuxType_AUX_BITS = 0;
+	localparam [31:0] fpnew_pkg_NUM_FP_FORMATS = 4;
+	parameter [0:3] FpFmtConfig = 1'sb1;
+	parameter [31:0] NumPipeRegs = 0;
+	localparam [1:0] fpnew_pkg_BEFORE = 0;
+	parameter [1:0] PipeConfig = fpnew_pkg_BEFORE;
+	localparam [31:0] fpnew_pkg_FP_FORMAT_BITS = 2;
+	localparam [255:0] fpnew_pkg_FP_ENCODINGS = 256'h00000008000000170000000b00000034000000050000000a0000000500000002;
+	function automatic [31:0] fpnew_pkg_fp_width;
+		input reg [1:0] fmt;
+		fpnew_pkg_fp_width = (fpnew_pkg_FP_ENCODINGS[((3 - fmt) * 64) + 63-:32] + fpnew_pkg_FP_ENCODINGS[((3 - fmt) * 64) + 31-:32]) + 1;
+	endfunction
+	function automatic signed [31:0] fpnew_pkg_maximum;
+		input reg signed [31:0] a;
+		input reg signed [31:0] b;
+		fpnew_pkg_maximum = (a > b ? a : b);
+	endfunction
+	function automatic [1:0] sv2v_cast_3AA4D;
+		input reg [1:0] inp;
+		sv2v_cast_3AA4D = inp;
+	endfunction
+	function automatic [31:0] fpnew_pkg_max_fp_width;
+		input reg [0:3] cfg;
+		reg [31:0] res;
+		begin
+			res = 0;
+			begin : sv2v_autoblock_113
+				reg [31:0] i;
+				for (i = 0; i < fpnew_pkg_NUM_FP_FORMATS; i = i + 1)
+					if (cfg[i])
+						res = $unsigned(fpnew_pkg_maximum(res, fpnew_pkg_fp_width(sv2v_cast_3AA4D(i))));
+			end
+			fpnew_pkg_max_fp_width = res;
+		end
+	endfunction
+	localparam [31:0] WIDTH = fpnew_pkg_max_fp_width(FpFmtConfig);
+	localparam [31:0] NUM_FORMATS = fpnew_pkg_NUM_FP_FORMATS;
+	input wire clk_i;
+	input wire rst_ni;
+	input wire [(3 * WIDTH) - 1:0] operands_i;
+	input wire [11:0] is_boxed_i;
+	input wire [2:0] rnd_mode_i;
+	localparam [31:0] fpnew_pkg_OP_BITS = 4;
+	input wire [3:0] op_i;
+	input wire op_mod_i;
+	input wire [1:0] src_fmt_i;
+	input wire [1:0] dst_fmt_i;
+	input wire tag_i;
+	input wire [AuxType_AUX_BITS - 1:0] aux_i;
+	input wire in_valid_i;
+	output wire in_ready_o;
+	input wire flush_i;
+	output wire [WIDTH - 1:0] result_o;
+	output wire [4:0] status_o;
+	output wire extension_bit_o;
+	output wire tag_o;
+	output wire [AuxType_AUX_BITS - 1:0] aux_o;
+	output wire out_valid_o;
+	input wire out_ready_i;
+	output wire busy_o;
+	function automatic [31:0] fpnew_pkg_exp_bits;
+		input reg [1:0] fmt;
+		fpnew_pkg_exp_bits = fpnew_pkg_FP_ENCODINGS[((3 - fmt) * 64) + 63-:32];
+	endfunction
+	function automatic [31:0] fpnew_pkg_man_bits;
+		input reg [1:0] fmt;
+		fpnew_pkg_man_bits = fpnew_pkg_FP_ENCODINGS[((3 - fmt) * 64) + 31-:32];
+	endfunction
+	function automatic [63:0] fpnew_pkg_super_format;
+		input reg [0:3] cfg;
+		reg [63:0] res;
+		begin
+			res = {64 {1'sb0}};
+			begin : sv2v_autoblock_114
+				reg [31:0] fmt;
+				for (fmt = 0; fmt < fpnew_pkg_NUM_FP_FORMATS; fmt = fmt + 1)
+					if (cfg[fmt]) begin
+						res[63-:32] = $unsigned(fpnew_pkg_maximum(res[63-:32], fpnew_pkg_exp_bits(sv2v_cast_3AA4D(fmt))));
+						res[31-:32] = $unsigned(fpnew_pkg_maximum(res[31-:32], fpnew_pkg_man_bits(sv2v_cast_3AA4D(fmt))));
+					end
+			end
+			fpnew_pkg_super_format = res;
+		end
+	endfunction
+	localparam [63:0] SUPER_FORMAT = fpnew_pkg_super_format(FpFmtConfig);
+	localparam [31:0] SUPER_EXP_BITS = SUPER_FORMAT[63-:32];
+	localparam [31:0] SUPER_MAN_BITS = SUPER_FORMAT[31-:32];
+	localparam [31:0] PRECISION_BITS = SUPER_MAN_BITS + 1;
+	localparam [31:0] LOWER_SUM_WIDTH = (2 * PRECISION_BITS) + 3;
+	localparam [31:0] LZC_RESULT_WIDTH = $clog2(LOWER_SUM_WIDTH);
+	localparam [31:0] EXP_WIDTH = fpnew_pkg_maximum(SUPER_EXP_BITS + 2, LZC_RESULT_WIDTH);
+	localparam [31:0] SHIFT_AMOUNT_WIDTH = $clog2((3 * PRECISION_BITS) + 3);
+	localparam [1:0] fpnew_pkg_DISTRIBUTED = 3;
+	localparam NUM_INP_REGS = (PipeConfig == fpnew_pkg_BEFORE ? NumPipeRegs : (PipeConfig == fpnew_pkg_DISTRIBUTED ? (NumPipeRegs + 1) / 3 : 0));
+	localparam [1:0] fpnew_pkg_INSIDE = 2;
+	localparam NUM_MID_REGS = (PipeConfig == fpnew_pkg_INSIDE ? NumPipeRegs : (PipeConfig == fpnew_pkg_DISTRIBUTED ? (NumPipeRegs + 2) / 3 : 0));
+	localparam [1:0] fpnew_pkg_AFTER = 1;
+	localparam NUM_OUT_REGS = (PipeConfig == fpnew_pkg_AFTER ? NumPipeRegs : (PipeConfig == fpnew_pkg_DISTRIBUTED ? NumPipeRegs / 3 : 0));
+	wire [(3 * WIDTH) - 1:0] operands_q;
+	wire [1:0] src_fmt_q;
+	wire [1:0] dst_fmt_q;
+	wire [((0 >= NUM_INP_REGS ? ((1 - NUM_INP_REGS) * 3) + ((NUM_INP_REGS * 3) - 1) : ((NUM_INP_REGS + 1) * 3) - 1) >= (0 >= NUM_INP_REGS ? NUM_INP_REGS * 3 : 0) ? ((((0 >= NUM_INP_REGS ? ((1 - NUM_INP_REGS) * 3) + ((NUM_INP_REGS * 3) - 1) : ((NUM_INP_REGS + 1) * 3) - 1) - (0 >= NUM_INP_REGS ? NUM_INP_REGS * 3 : 0)) + 1) * WIDTH) + (((0 >= NUM_INP_REGS ? NUM_INP_REGS * 3 : 0) * WIDTH) - 1) : ((((0 >= NUM_INP_REGS ? NUM_INP_REGS * 3 : 0) - (0 >= NUM_INP_REGS ? ((1 - NUM_INP_REGS) * 3) + ((NUM_INP_REGS * 3) - 1) : ((NUM_INP_REGS + 1) * 3) - 1)) + 1) * WIDTH) + (((0 >= NUM_INP_REGS ? ((1 - NUM_INP_REGS) * 3) + ((NUM_INP_REGS * 3) - 1) : ((NUM_INP_REGS + 1) * 3) - 1) * WIDTH) - 1)):((0 >= NUM_INP_REGS ? ((1 - NUM_INP_REGS) * 3) + ((NUM_INP_REGS * 3) - 1) : ((NUM_INP_REGS + 1) * 3) - 1) >= (0 >= NUM_INP_REGS ? NUM_INP_REGS * 3 : 0) ? (0 >= NUM_INP_REGS ? NUM_INP_REGS * 3 : 0) * WIDTH : (0 >= NUM_INP_REGS ? ((1 - NUM_INP_REGS) * 3) + ((NUM_INP_REGS * 3) - 1) : ((NUM_INP_REGS + 1) * 3) - 1) * WIDTH)] inp_pipe_operands_q;
+	wire [((0 >= NUM_INP_REGS ? ((1 - NUM_INP_REGS) * NUM_FORMATS) + ((NUM_INP_REGS * NUM_FORMATS) - 1) : ((NUM_INP_REGS + 1) * NUM_FORMATS) - 1) >= (0 >= NUM_INP_REGS ? NUM_INP_REGS * NUM_FORMATS : 0) ? ((((0 >= NUM_INP_REGS ? ((1 - NUM_INP_REGS) * NUM_FORMATS) + ((NUM_INP_REGS * NUM_FORMATS) - 1) : ((NUM_INP_REGS + 1) * NUM_FORMATS) - 1) - (0 >= NUM_INP_REGS ? NUM_INP_REGS * NUM_FORMATS : 0)) + 1) * 3) + (((0 >= NUM_INP_REGS ? NUM_INP_REGS * NUM_FORMATS : 0) * 3) - 1) : ((((0 >= NUM_INP_REGS ? NUM_INP_REGS * NUM_FORMATS : 0) - (0 >= NUM_INP_REGS ? ((1 - NUM_INP_REGS) * NUM_FORMATS) + ((NUM_INP_REGS * NUM_FORMATS) - 1) : ((NUM_INP_REGS + 1) * NUM_FORMATS) - 1)) + 1) * 3) + (((0 >= NUM_INP_REGS ? ((1 - NUM_INP_REGS) * NUM_FORMATS) + ((NUM_INP_REGS * NUM_FORMATS) - 1) : ((NUM_INP_REGS + 1) * NUM_FORMATS) - 1) * 3) - 1)):((0 >= NUM_INP_REGS ? ((1 - NUM_INP_REGS) * NUM_FORMATS) + ((NUM_INP_REGS * NUM_FORMATS) - 1) : ((NUM_INP_REGS + 1) * NUM_FORMATS) - 1) >= (0 >= NUM_INP_REGS ? NUM_INP_REGS * NUM_FORMATS : 0) ? (0 >= NUM_INP_REGS ? NUM_INP_REGS * NUM_FORMATS : 0) * 3 : (0 >= NUM_INP_REGS ? ((1 - NUM_INP_REGS) * NUM_FORMATS) + ((NUM_INP_REGS * NUM_FORMATS) - 1) : ((NUM_INP_REGS + 1) * NUM_FORMATS) - 1) * 3)] inp_pipe_is_boxed_q;
+	wire [(0 >= NUM_INP_REGS ? ((1 - NUM_INP_REGS) * 3) + ((NUM_INP_REGS * 3) - 1) : ((NUM_INP_REGS + 1) * 3) - 1):(0 >= NUM_INP_REGS ? NUM_INP_REGS * 3 : 0)] inp_pipe_rnd_mode_q;
+	wire [(0 >= NUM_INP_REGS ? ((1 - NUM_INP_REGS) * fpnew_pkg_OP_BITS) + ((NUM_INP_REGS * fpnew_pkg_OP_BITS) - 1) : ((NUM_INP_REGS + 1) * fpnew_pkg_OP_BITS) - 1):(0 >= NUM_INP_REGS ? NUM_INP_REGS * fpnew_pkg_OP_BITS : 0)] inp_pipe_op_q;
+	wire [0:NUM_INP_REGS] inp_pipe_op_mod_q;
+	wire [(0 >= NUM_INP_REGS ? ((1 - NUM_INP_REGS) * fpnew_pkg_FP_FORMAT_BITS) + ((NUM_INP_REGS * fpnew_pkg_FP_FORMAT_BITS) - 1) : ((NUM_INP_REGS + 1) * fpnew_pkg_FP_FORMAT_BITS) - 1):(0 >= NUM_INP_REGS ? NUM_INP_REGS * fpnew_pkg_FP_FORMAT_BITS : 0)] inp_pipe_src_fmt_q;
+	wire [(0 >= NUM_INP_REGS ? ((1 - NUM_INP_REGS) * fpnew_pkg_FP_FORMAT_BITS) + ((NUM_INP_REGS * fpnew_pkg_FP_FORMAT_BITS) - 1) : ((NUM_INP_REGS + 1) * fpnew_pkg_FP_FORMAT_BITS) - 1):(0 >= NUM_INP_REGS ? NUM_INP_REGS * fpnew_pkg_FP_FORMAT_BITS : 0)] inp_pipe_dst_fmt_q;
+	wire [0:NUM_INP_REGS] inp_pipe_tag_q;
+	wire [(0 >= NUM_INP_REGS ? ((1 - NUM_INP_REGS) * AuxType_AUX_BITS) + ((NUM_INP_REGS * AuxType_AUX_BITS) - 1) : ((NUM_INP_REGS + 1) * AuxType_AUX_BITS) - 1):(0 >= NUM_INP_REGS ? NUM_INP_REGS * AuxType_AUX_BITS : 0)] inp_pipe_aux_q;
+	wire [0:NUM_INP_REGS] inp_pipe_valid_q;
+	wire [0:NUM_INP_REGS] inp_pipe_ready;
+	assign inp_pipe_operands_q[WIDTH * ((0 >= NUM_INP_REGS ? ((1 - NUM_INP_REGS) * 3) + ((NUM_INP_REGS * 3) - 1) : ((NUM_INP_REGS + 1) * 3) - 1) >= (0 >= NUM_INP_REGS ? NUM_INP_REGS * 3 : 0) ? ((0 >= NUM_INP_REGS ? ((1 - NUM_INP_REGS) * 3) + ((NUM_INP_REGS * 3) - 1) : ((NUM_INP_REGS + 1) * 3) - 1) >= (0 >= NUM_INP_REGS ? NUM_INP_REGS * 3 : 0) ? (0 >= NUM_INP_REGS ? 0 : NUM_INP_REGS) * 3 : ((0 >= NUM_INP_REGS ? 0 : NUM_INP_REGS) * 3) + 2) : (0 >= NUM_INP_REGS ? NUM_INP_REGS * 3 : 0) - (((0 >= NUM_INP_REGS ? ((1 - NUM_INP_REGS) * 3) + ((NUM_INP_REGS * 3) - 1) : ((NUM_INP_REGS + 1) * 3) - 1) >= (0 >= NUM_INP_REGS ? NUM_INP_REGS * 3 : 0) ? (0 >= NUM_INP_REGS ? 0 : NUM_INP_REGS) * 3 : ((0 >= NUM_INP_REGS ? 0 : NUM_INP_REGS) * 3) + 2) - (0 >= NUM_INP_REGS ? ((1 - NUM_INP_REGS) * 3) + ((NUM_INP_REGS * 3) - 1) : ((NUM_INP_REGS + 1) * 3) - 1)))+:WIDTH * 3] = operands_i;
+	assign inp_pipe_is_boxed_q[3 * ((0 >= NUM_INP_REGS ? ((1 - NUM_INP_REGS) * NUM_FORMATS) + ((NUM_INP_REGS * NUM_FORMATS) - 1) : ((NUM_INP_REGS + 1) * NUM_FORMATS) - 1) >= (0 >= NUM_INP_REGS ? NUM_INP_REGS * NUM_FORMATS : 0) ? ((0 >= NUM_INP_REGS ? ((1 - NUM_INP_REGS) * NUM_FORMATS) + ((NUM_INP_REGS * NUM_FORMATS) - 1) : ((NUM_INP_REGS + 1) * NUM_FORMATS) - 1) >= (0 >= NUM_INP_REGS ? NUM_INP_REGS * NUM_FORMATS : 0) ? (0 >= NUM_INP_REGS ? 0 : NUM_INP_REGS) * NUM_FORMATS : ((0 >= NUM_INP_REGS ? 0 : NUM_INP_REGS) * NUM_FORMATS) + 3) : (0 >= NUM_INP_REGS ? NUM_INP_REGS * NUM_FORMATS : 0) - (((0 >= NUM_INP_REGS ? ((1 - NUM_INP_REGS) * NUM_FORMATS) + ((NUM_INP_REGS * NUM_FORMATS) - 1) : ((NUM_INP_REGS + 1) * NUM_FORMATS) - 1) >= (0 >= NUM_INP_REGS ? NUM_INP_REGS * NUM_FORMATS : 0) ? (0 >= NUM_INP_REGS ? 0 : NUM_INP_REGS) * NUM_FORMATS : ((0 >= NUM_INP_REGS ? 0 : NUM_INP_REGS) * NUM_FORMATS) + 3) - (0 >= NUM_INP_REGS ? ((1 - NUM_INP_REGS) * NUM_FORMATS) + ((NUM_INP_REGS * NUM_FORMATS) - 1) : ((NUM_INP_REGS + 1) * NUM_FORMATS) - 1)))+:12] = is_boxed_i;
+	assign inp_pipe_rnd_mode_q[(0 >= NUM_INP_REGS ? 0 : NUM_INP_REGS) * 3+:3] = rnd_mode_i;
+	assign inp_pipe_op_q[(0 >= NUM_INP_REGS ? 0 : NUM_INP_REGS) * fpnew_pkg_OP_BITS+:fpnew_pkg_OP_BITS] = op_i;
+	assign inp_pipe_op_mod_q[0] = op_mod_i;
+	assign inp_pipe_src_fmt_q[(0 >= NUM_INP_REGS ? 0 : NUM_INP_REGS) * fpnew_pkg_FP_FORMAT_BITS+:fpnew_pkg_FP_FORMAT_BITS] = src_fmt_i;
+	assign inp_pipe_dst_fmt_q[(0 >= NUM_INP_REGS ? 0 : NUM_INP_REGS) * fpnew_pkg_FP_FORMAT_BITS+:fpnew_pkg_FP_FORMAT_BITS] = dst_fmt_i;
+	assign inp_pipe_tag_q[0] = tag_i;
+	assign inp_pipe_aux_q[(0 >= NUM_INP_REGS ? 0 : NUM_INP_REGS) * AuxType_AUX_BITS+:AuxType_AUX_BITS] = aux_i;
+	assign inp_pipe_valid_q[0] = in_valid_i;
+	assign in_ready_o = inp_pipe_ready[0];
+	generate
+		genvar i;
+		for (i = 0; i < NUM_INP_REGS; i = i + 1) begin : gen_input_pipeline
+			wire reg_ena;
+			assign inp_pipe_ready[i] = inp_pipe_ready[i + 1] | ~inp_pipe_valid_q[i + 1];
+			assign reg_ena = inp_pipe_ready[i] & inp_pipe_valid_q[i];
+		end
+	endgenerate
+	assign operands_q = inp_pipe_operands_q[WIDTH * ((0 >= NUM_INP_REGS ? ((1 - NUM_INP_REGS) * 3) + ((NUM_INP_REGS * 3) - 1) : ((NUM_INP_REGS + 1) * 3) - 1) >= (0 >= NUM_INP_REGS ? NUM_INP_REGS * 3 : 0) ? ((0 >= NUM_INP_REGS ? ((1 - NUM_INP_REGS) * 3) + ((NUM_INP_REGS * 3) - 1) : ((NUM_INP_REGS + 1) * 3) - 1) >= (0 >= NUM_INP_REGS ? NUM_INP_REGS * 3 : 0) ? (0 >= NUM_INP_REGS ? NUM_INP_REGS : NUM_INP_REGS - NUM_INP_REGS) * 3 : ((0 >= NUM_INP_REGS ? NUM_INP_REGS : NUM_INP_REGS - NUM_INP_REGS) * 3) + 2) : (0 >= NUM_INP_REGS ? NUM_INP_REGS * 3 : 0) - (((0 >= NUM_INP_REGS ? ((1 - NUM_INP_REGS) * 3) + ((NUM_INP_REGS * 3) - 1) : ((NUM_INP_REGS + 1) * 3) - 1) >= (0 >= NUM_INP_REGS ? NUM_INP_REGS * 3 : 0) ? (0 >= NUM_INP_REGS ? NUM_INP_REGS : NUM_INP_REGS - NUM_INP_REGS) * 3 : ((0 >= NUM_INP_REGS ? NUM_INP_REGS : NUM_INP_REGS - NUM_INP_REGS) * 3) + 2) - (0 >= NUM_INP_REGS ? ((1 - NUM_INP_REGS) * 3) + ((NUM_INP_REGS * 3) - 1) : ((NUM_INP_REGS + 1) * 3) - 1)))+:WIDTH * 3];
+	assign src_fmt_q = inp_pipe_src_fmt_q[(0 >= NUM_INP_REGS ? NUM_INP_REGS : NUM_INP_REGS - NUM_INP_REGS) * fpnew_pkg_FP_FORMAT_BITS+:fpnew_pkg_FP_FORMAT_BITS];
+	assign dst_fmt_q = inp_pipe_dst_fmt_q[(0 >= NUM_INP_REGS ? NUM_INP_REGS : NUM_INP_REGS - NUM_INP_REGS) * fpnew_pkg_FP_FORMAT_BITS+:fpnew_pkg_FP_FORMAT_BITS];
+	wire [11:0] fmt_sign;
+	wire signed [(12 * SUPER_EXP_BITS) - 1:0] fmt_exponent;
+	wire [(12 * SUPER_MAN_BITS) - 1:0] fmt_mantissa;
+	wire [95:0] info_q;
+	localparam [0:0] fpnew_pkg_DONT_CARE = 1'b1;
+	generate
+		genvar fmt;
+		function automatic signed [31:0] sv2v_cast_32_signed;
+			input reg signed [31:0] inp;
+			sv2v_cast_32_signed = inp;
+		endfunction
+		for (fmt = 0; fmt < sv2v_cast_32_signed(NUM_FORMATS); fmt = fmt + 1) begin : fmt_init_inputs
+			function automatic [1:0] sv2v_cast_3AA4D;
+				input reg [1:0] inp;
+				sv2v_cast_3AA4D = inp;
+			endfunction
+			localparam [31:0] FP_WIDTH = fpnew_pkg_fp_width(sv2v_cast_3AA4D(fmt));
+			localparam [31:0] EXP_BITS = fpnew_pkg_exp_bits(sv2v_cast_3AA4D(fmt));
+			localparam [31:0] MAN_BITS = fpnew_pkg_man_bits(sv2v_cast_3AA4D(fmt));
+			if (FpFmtConfig[fmt]) begin : active_format
+				wire [(3 * FP_WIDTH) - 1:0] trimmed_ops;
+				function automatic [1:0] sv2v_cast_3AA4D;
+					input reg [1:0] inp;
+					sv2v_cast_3AA4D = inp;
+				endfunction
+				fpnew_classifier #(
+					.FpFormat(sv2v_cast_3AA4D(fmt)),
+					.NumOperands(3)
+				) i_fpnew_classifier(
+					.operands_i(trimmed_ops),
+					.is_boxed_i(inp_pipe_is_boxed_q[((0 >= NUM_INP_REGS ? ((1 - NUM_INP_REGS) * NUM_FORMATS) + ((NUM_INP_REGS * NUM_FORMATS) - 1) : ((NUM_INP_REGS + 1) * NUM_FORMATS) - 1) >= (0 >= NUM_INP_REGS ? NUM_INP_REGS * NUM_FORMATS : 0) ? ((0 >= NUM_INP_REGS ? NUM_INP_REGS : NUM_INP_REGS - NUM_INP_REGS) * NUM_FORMATS) + fmt : (0 >= NUM_INP_REGS ? NUM_INP_REGS * NUM_FORMATS : 0) - ((((0 >= NUM_INP_REGS ? NUM_INP_REGS : NUM_INP_REGS - NUM_INP_REGS) * NUM_FORMATS) + fmt) - (0 >= NUM_INP_REGS ? ((1 - NUM_INP_REGS) * NUM_FORMATS) + ((NUM_INP_REGS * NUM_FORMATS) - 1) : ((NUM_INP_REGS + 1) * NUM_FORMATS) - 1))) * 3+:3]),
+					.info_o(info_q[8 * (fmt * 3)+:24])
+				);
+				genvar op;
+				for (op = 0; op < 3; op = op + 1) begin : gen_operands
+					function automatic [31:0] sv2v_cast_32;
+						input reg [31:0] inp;
+						sv2v_cast_32 = inp;
+					endfunction
+					assign trimmed_ops[op * sv2v_cast_32(fpnew_pkg_fp_width(sv2v_cast_3AA4D(fmt)))+:sv2v_cast_32(fpnew_pkg_fp_width(sv2v_cast_3AA4D(fmt)))] = operands_q[(op * WIDTH) + (FP_WIDTH - 1)-:FP_WIDTH];
+					assign fmt_sign[(fmt * 3) + op] = operands_q[(op * WIDTH) + (FP_WIDTH - 1)];
+					assign fmt_exponent[((fmt * 3) + op) * SUPER_EXP_BITS+:SUPER_EXP_BITS] = $signed({1'b0, operands_q[(op * WIDTH) + MAN_BITS+:EXP_BITS]});
+					assign fmt_mantissa[((fmt * 3) + op) * SUPER_MAN_BITS+:SUPER_MAN_BITS] = {info_q[(((fmt * 3) + op) * 8) + 7], operands_q[(op * WIDTH) + (MAN_BITS - 1)-:MAN_BITS]} << (SUPER_MAN_BITS - MAN_BITS);
+				end
+			end
+			else begin : inactive_format
+				function automatic [7:0] sv2v_cast_8;
+					input reg [7:0] inp;
+					sv2v_cast_8 = inp;
+				endfunction
+				assign info_q[8 * (fmt * 3)+:24] = {3 {sv2v_cast_8(fpnew_pkg_DONT_CARE)}};
+				assign fmt_sign[fmt * 3+:3] = fpnew_pkg_DONT_CARE;
+				function automatic signed [SUPER_EXP_BITS - 1:0] sv2v_cast_153A8_signed;
+					input reg signed [SUPER_EXP_BITS - 1:0] inp;
+					sv2v_cast_153A8_signed = inp;
+				endfunction
+				assign fmt_exponent[SUPER_EXP_BITS * (fmt * 3)+:SUPER_EXP_BITS * 3] = {3 {sv2v_cast_153A8_signed(fpnew_pkg_DONT_CARE)}};
+				function automatic [SUPER_MAN_BITS - 1:0] sv2v_cast_C630A;
+					input reg [SUPER_MAN_BITS - 1:0] inp;
+					sv2v_cast_C630A = inp;
+				endfunction
+				assign fmt_mantissa[SUPER_MAN_BITS * (fmt * 3)+:SUPER_MAN_BITS * 3] = {3 {sv2v_cast_C630A(fpnew_pkg_DONT_CARE)}};
+			end
+		end
+	endgenerate
+	reg [((1 + SUPER_EXP_BITS) + SUPER_MAN_BITS) - 1:0] operand_a;
+	reg [((1 + SUPER_EXP_BITS) + SUPER_MAN_BITS) - 1:0] operand_b;
+	reg [((1 + SUPER_EXP_BITS) + SUPER_MAN_BITS) - 1:0] operand_c;
+	reg [7:0] info_a;
+	reg [7:0] info_b;
+	reg [7:0] info_c;
+	function automatic [31:0] fpnew_pkg_bias;
+		input reg [1:0] fmt;
+		fpnew_pkg_bias = $unsigned((2 ** (fpnew_pkg_FP_ENCODINGS[((3 - fmt) * 64) + 63-:32] - 1)) - 1);
+	endfunction
+	localparam [3:0] fpnew_pkg_ADD = 2;
+	localparam [3:0] fpnew_pkg_FMADD = 0;
+	localparam [3:0] fpnew_pkg_FNMSUB = 1;
+	localparam [3:0] fpnew_pkg_MUL = 3;
+	function automatic [SUPER_EXP_BITS - 1:0] sv2v_cast_153A8;
+		input reg [SUPER_EXP_BITS - 1:0] inp;
+		sv2v_cast_153A8 = inp;
+	endfunction
+	function automatic [SUPER_MAN_BITS - 1:0] sv2v_cast_C630A;
+		input reg [SUPER_MAN_BITS - 1:0] inp;
+		sv2v_cast_C630A = inp;
+	endfunction
+	always @(*) begin : op_select
+		operand_a = {fmt_sign[src_fmt_q * 3], fmt_exponent[(src_fmt_q * 3) * SUPER_EXP_BITS+:SUPER_EXP_BITS], fmt_mantissa[(src_fmt_q * 3) * SUPER_MAN_BITS+:SUPER_MAN_BITS]};
+		operand_b = {fmt_sign[(src_fmt_q * 3) + 1], fmt_exponent[((src_fmt_q * 3) + 1) * SUPER_EXP_BITS+:SUPER_EXP_BITS], fmt_mantissa[((src_fmt_q * 3) + 1) * SUPER_MAN_BITS+:SUPER_MAN_BITS]};
+		operand_c = {fmt_sign[(dst_fmt_q * 3) + 2], fmt_exponent[((dst_fmt_q * 3) + 2) * SUPER_EXP_BITS+:SUPER_EXP_BITS], fmt_mantissa[((dst_fmt_q * 3) + 2) * SUPER_MAN_BITS+:SUPER_MAN_BITS]};
+		info_a = info_q[(src_fmt_q * 3) * 8+:8];
+		info_b = info_q[((src_fmt_q * 3) + 1) * 8+:8];
+		info_c = info_q[((dst_fmt_q * 3) + 2) * 8+:8];
+		operand_c[1 + (SUPER_EXP_BITS + (SUPER_MAN_BITS - 1))] = operand_c[1 + (SUPER_EXP_BITS + (SUPER_MAN_BITS - 1))] ^ inp_pipe_op_mod_q[NUM_INP_REGS];
+		case (inp_pipe_op_q[(0 >= NUM_INP_REGS ? NUM_INP_REGS : NUM_INP_REGS - NUM_INP_REGS) * fpnew_pkg_OP_BITS+:fpnew_pkg_OP_BITS])
+			fpnew_pkg_FMADD:
+				;
+			fpnew_pkg_FNMSUB: operand_a[1 + (SUPER_EXP_BITS + (SUPER_MAN_BITS - 1))] = ~operand_a[1 + (SUPER_EXP_BITS + (SUPER_MAN_BITS - 1))];
+			fpnew_pkg_ADD: begin
+				operand_a = {1'b0, sv2v_cast_153A8(fpnew_pkg_bias(src_fmt_q)), sv2v_cast_C630A(1'sb0)};
+				info_a = 8'b10000001;
+			end
+			fpnew_pkg_MUL: begin
+				operand_c = {1'b1, sv2v_cast_153A8(1'sb0), sv2v_cast_C630A(1'sb0)};
+				info_c = 8'b00100001;
+			end
+			default: begin
+				operand_a = {fpnew_pkg_DONT_CARE, sv2v_cast_153A8(fpnew_pkg_DONT_CARE), sv2v_cast_C630A(fpnew_pkg_DONT_CARE)};
+				operand_b = {fpnew_pkg_DONT_CARE, sv2v_cast_153A8(fpnew_pkg_DONT_CARE), sv2v_cast_C630A(fpnew_pkg_DONT_CARE)};
+				operand_c = {fpnew_pkg_DONT_CARE, sv2v_cast_153A8(fpnew_pkg_DONT_CARE), sv2v_cast_C630A(fpnew_pkg_DONT_CARE)};
+				info_a = {fpnew_pkg_DONT_CARE, fpnew_pkg_DONT_CARE, fpnew_pkg_DONT_CARE, fpnew_pkg_DONT_CARE, fpnew_pkg_DONT_CARE, fpnew_pkg_DONT_CARE, fpnew_pkg_DONT_CARE, fpnew_pkg_DONT_CARE};
+				info_b = {fpnew_pkg_DONT_CARE, fpnew_pkg_DONT_CARE, fpnew_pkg_DONT_CARE, fpnew_pkg_DONT_CARE, fpnew_pkg_DONT_CARE, fpnew_pkg_DONT_CARE, fpnew_pkg_DONT_CARE, fpnew_pkg_DONT_CARE};
+				info_c = {fpnew_pkg_DONT_CARE, fpnew_pkg_DONT_CARE, fpnew_pkg_DONT_CARE, fpnew_pkg_DONT_CARE, fpnew_pkg_DONT_CARE, fpnew_pkg_DONT_CARE, fpnew_pkg_DONT_CARE, fpnew_pkg_DONT_CARE};
+			end
+		endcase
+	end
+	wire any_operand_inf;
+	wire any_operand_nan;
+	wire signalling_nan;
+	wire effective_subtraction;
+	wire tentative_sign;
+	assign any_operand_inf = |{info_a[4], info_b[4], info_c[4]};
+	assign any_operand_nan = |{info_a[3], info_b[3], info_c[3]};
+	assign signalling_nan = |{info_a[2], info_b[2], info_c[2]};
+	assign effective_subtraction = (operand_a[1 + (SUPER_EXP_BITS + (SUPER_MAN_BITS - 1))] ^ operand_b[1 + (SUPER_EXP_BITS + (SUPER_MAN_BITS - 1))]) ^ operand_c[1 + (SUPER_EXP_BITS + (SUPER_MAN_BITS - 1))];
+	assign tentative_sign = operand_a[1 + (SUPER_EXP_BITS + (SUPER_MAN_BITS - 1))] ^ operand_b[1 + (SUPER_EXP_BITS + (SUPER_MAN_BITS - 1))];
+	wire [WIDTH - 1:0] special_result;
+	wire [4:0] special_status;
+	wire result_is_special;
+	reg [(NUM_FORMATS * WIDTH) - 1:0] fmt_special_result;
+	reg [19:0] fmt_special_status;
+	reg [3:0] fmt_result_is_special;
+	generate
+		for (fmt = 0; fmt < sv2v_cast_32_signed(NUM_FORMATS); fmt = fmt + 1) begin : gen_special_results
+			function automatic [1:0] sv2v_cast_3AA4D;
+				input reg [1:0] inp;
+				sv2v_cast_3AA4D = inp;
+			endfunction
+			localparam [31:0] FP_WIDTH = fpnew_pkg_fp_width(sv2v_cast_3AA4D(fmt));
+			localparam [31:0] EXP_BITS = fpnew_pkg_exp_bits(sv2v_cast_3AA4D(fmt));
+			localparam [31:0] MAN_BITS = fpnew_pkg_man_bits(sv2v_cast_3AA4D(fmt));
+			localparam [EXP_BITS - 1:0] QNAN_EXPONENT = 1'sb1;
+			localparam [MAN_BITS - 1:0] QNAN_MANTISSA = 2 ** (MAN_BITS - 1);
+			localparam [MAN_BITS - 1:0] ZERO_MANTISSA = 1'sb0;
+			if (FpFmtConfig[fmt]) begin : active_format
+				always @(*) begin : special_results
+					reg [FP_WIDTH - 1:0] special_res;
+					special_res = {1'b0, QNAN_EXPONENT, QNAN_MANTISSA};
+					fmt_special_status[fmt * 5+:5] = {5 {1'sb0}};
+					fmt_result_is_special[fmt] = 1'b0;
+					if ((info_a[4] && info_b[5]) || (info_a[5] && info_b[4])) begin
+						fmt_result_is_special[fmt] = 1'b1;
+						fmt_special_status[(fmt * 5) + 4] = 1'b1;
+					end
+					else if (any_operand_nan) begin
+						fmt_result_is_special[fmt] = 1'b1;
+						fmt_special_status[(fmt * 5) + 4] = signalling_nan;
+					end
+					else if (any_operand_inf) begin
+						fmt_result_is_special[fmt] = 1'b1;
+						if (((info_a[4] || info_b[4]) && info_c[4]) && effective_subtraction)
+							fmt_special_status[(fmt * 5) + 4] = 1'b1;
+						else if (info_a[4] || info_b[4])
+							special_res = {operand_a[1 + (SUPER_EXP_BITS + (SUPER_MAN_BITS - 1))] ^ operand_b[1 + (SUPER_EXP_BITS + (SUPER_MAN_BITS - 1))], QNAN_EXPONENT, ZERO_MANTISSA};
+						else if (info_c[4])
+							special_res = {operand_c[1 + (SUPER_EXP_BITS + (SUPER_MAN_BITS - 1))], QNAN_EXPONENT, ZERO_MANTISSA};
+					end
+					fmt_special_result[fmt * WIDTH+:WIDTH] = {WIDTH {1'sb1}};
+					fmt_special_result[(fmt * WIDTH) + (FP_WIDTH - 1)-:FP_WIDTH] = special_res;
+				end
+			end
+			else begin : inactive_format
+				wire [WIDTH:1] sv2v_tmp_2DFD8;
+				assign sv2v_tmp_2DFD8 = {WIDTH {fpnew_pkg_DONT_CARE}};
+				always @(*) fmt_special_result[fmt * WIDTH+:WIDTH] = sv2v_tmp_2DFD8;
+				wire [5:1] sv2v_tmp_1FB62;
+				assign sv2v_tmp_1FB62 = {5 {1'sb0}};
+				always @(*) fmt_special_status[fmt * 5+:5] = sv2v_tmp_1FB62;
+				wire [1:1] sv2v_tmp_7823E;
+				assign sv2v_tmp_7823E = 1'b0;
+				always @(*) fmt_result_is_special[fmt] = sv2v_tmp_7823E;
+			end
+		end
+	endgenerate
+	assign result_is_special = fmt_result_is_special[dst_fmt_q];
+	assign special_status = fmt_special_status[dst_fmt_q * 5+:5];
+	assign special_result = fmt_special_result[dst_fmt_q * WIDTH+:WIDTH];
+	wire signed [EXP_WIDTH - 1:0] exponent_a;
+	wire signed [EXP_WIDTH - 1:0] exponent_b;
+	wire signed [EXP_WIDTH - 1:0] exponent_c;
+	wire signed [EXP_WIDTH - 1:0] exponent_addend;
+	wire signed [EXP_WIDTH - 1:0] exponent_product;
+	wire signed [EXP_WIDTH - 1:0] exponent_difference;
+	wire signed [EXP_WIDTH - 1:0] tentative_exponent;
+	assign exponent_a = $signed({1'b0, operand_a[SUPER_EXP_BITS + (SUPER_MAN_BITS - 1)-:((SUPER_EXP_BITS + (SUPER_MAN_BITS - 1)) >= SUPER_MAN_BITS ? ((SUPER_EXP_BITS + (SUPER_MAN_BITS - 1)) - SUPER_MAN_BITS) + 1 : (SUPER_MAN_BITS - (SUPER_EXP_BITS + (SUPER_MAN_BITS - 1))) + 1)]});
+	assign exponent_b = $signed({1'b0, operand_b[SUPER_EXP_BITS + (SUPER_MAN_BITS - 1)-:((SUPER_EXP_BITS + (SUPER_MAN_BITS - 1)) >= SUPER_MAN_BITS ? ((SUPER_EXP_BITS + (SUPER_MAN_BITS - 1)) - SUPER_MAN_BITS) + 1 : (SUPER_MAN_BITS - (SUPER_EXP_BITS + (SUPER_MAN_BITS - 1))) + 1)]});
+	assign exponent_c = $signed({1'b0, operand_c[SUPER_EXP_BITS + (SUPER_MAN_BITS - 1)-:((SUPER_EXP_BITS + (SUPER_MAN_BITS - 1)) >= SUPER_MAN_BITS ? ((SUPER_EXP_BITS + (SUPER_MAN_BITS - 1)) - SUPER_MAN_BITS) + 1 : (SUPER_MAN_BITS - (SUPER_EXP_BITS + (SUPER_MAN_BITS - 1))) + 1)]});
+	assign exponent_addend = $signed(exponent_c + $signed({1'b0, ~info_c[7]}));
+	assign exponent_product = (info_a[5] || info_b[5] ? 2 - $signed(fpnew_pkg_bias(dst_fmt_q)) : $signed(((((exponent_a + info_a[6]) + exponent_b) + info_b[6]) - (2 * $signed(fpnew_pkg_bias(src_fmt_q)))) + $signed(fpnew_pkg_bias(dst_fmt_q))));
+	assign exponent_difference = exponent_addend - exponent_product;
+	assign tentative_exponent = (exponent_difference > 0 ? exponent_addend : exponent_product);
+	reg [SHIFT_AMOUNT_WIDTH - 1:0] addend_shamt;
+	always @(*) begin : addend_shift_amount
+		if (exponent_difference <= $signed((-2 * PRECISION_BITS) - 1))
+			addend_shamt = (3 * PRECISION_BITS) + 4;
+		else if (exponent_difference <= $signed(PRECISION_BITS + 2))
+			addend_shamt = $unsigned(($signed(PRECISION_BITS) + 3) - exponent_difference);
+		else
+			addend_shamt = 0;
+	end
+	wire [PRECISION_BITS - 1:0] mantissa_a;
+	wire [PRECISION_BITS - 1:0] mantissa_b;
+	wire [PRECISION_BITS - 1:0] mantissa_c;
+	wire [(2 * PRECISION_BITS) - 1:0] product;
+	wire [(3 * PRECISION_BITS) + 3:0] product_shifted;
+	assign mantissa_a = {info_a[7], operand_a[SUPER_MAN_BITS - 1-:SUPER_MAN_BITS]};
+	assign mantissa_b = {info_b[7], operand_b[SUPER_MAN_BITS - 1-:SUPER_MAN_BITS]};
+	assign mantissa_c = {info_c[7], operand_c[SUPER_MAN_BITS - 1-:SUPER_MAN_BITS]};
+	assign product = mantissa_a * mantissa_b;
+	assign product_shifted = product << 2;
+	wire [(3 * PRECISION_BITS) + 3:0] addend_after_shift;
+	wire [PRECISION_BITS - 1:0] addend_sticky_bits;
+	wire sticky_before_add;
+	wire [(3 * PRECISION_BITS) + 3:0] addend_shifted;
+	wire inject_carry_in;
+	assign {addend_after_shift, addend_sticky_bits} = (mantissa_c << ((3 * PRECISION_BITS) + 4)) >> addend_shamt;
+	assign sticky_before_add = |addend_sticky_bits;
+	assign addend_shifted = (effective_subtraction ? ~addend_after_shift : addend_after_shift);
+	assign inject_carry_in = effective_subtraction & ~sticky_before_add;
+	wire [(3 * PRECISION_BITS) + 4:0] sum_raw;
+	wire sum_carry;
+	wire [(3 * PRECISION_BITS) + 3:0] sum;
+	wire final_sign;
+	assign sum_raw = (product_shifted + addend_shifted) + inject_carry_in;
+	assign sum_carry = sum_raw[(3 * PRECISION_BITS) + 4];
+	assign sum = (effective_subtraction && ~sum_carry ? -sum_raw : sum_raw);
+	assign final_sign = (effective_subtraction && (sum_carry == tentative_sign) ? 1'b1 : (effective_subtraction ? 1'b0 : tentative_sign));
+	wire effective_subtraction_q;
+	wire signed [EXP_WIDTH - 1:0] exponent_product_q;
+	wire signed [EXP_WIDTH - 1:0] exponent_difference_q;
+	wire signed [EXP_WIDTH - 1:0] tentative_exponent_q;
+	wire [SHIFT_AMOUNT_WIDTH - 1:0] addend_shamt_q;
+	wire sticky_before_add_q;
+	wire [(3 * PRECISION_BITS) + 3:0] sum_q;
+	wire final_sign_q;
+	wire [1:0] dst_fmt_q2;
+	wire [2:0] rnd_mode_q;
+	wire result_is_special_q;
+	wire [((1 + SUPER_EXP_BITS) + SUPER_MAN_BITS) - 1:0] special_result_q;
+	wire [4:0] special_status_q;
+	wire [0:NUM_MID_REGS] mid_pipe_eff_sub_q;
+	wire signed [(0 >= NUM_MID_REGS ? ((1 - NUM_MID_REGS) * EXP_WIDTH) + ((NUM_MID_REGS * EXP_WIDTH) - 1) : ((NUM_MID_REGS + 1) * EXP_WIDTH) - 1):(0 >= NUM_MID_REGS ? NUM_MID_REGS * EXP_WIDTH : 0)] mid_pipe_exp_prod_q;
+	wire signed [(0 >= NUM_MID_REGS ? ((1 - NUM_MID_REGS) * EXP_WIDTH) + ((NUM_MID_REGS * EXP_WIDTH) - 1) : ((NUM_MID_REGS + 1) * EXP_WIDTH) - 1):(0 >= NUM_MID_REGS ? NUM_MID_REGS * EXP_WIDTH : 0)] mid_pipe_exp_diff_q;
+	wire signed [(0 >= NUM_MID_REGS ? ((1 - NUM_MID_REGS) * EXP_WIDTH) + ((NUM_MID_REGS * EXP_WIDTH) - 1) : ((NUM_MID_REGS + 1) * EXP_WIDTH) - 1):(0 >= NUM_MID_REGS ? NUM_MID_REGS * EXP_WIDTH : 0)] mid_pipe_tent_exp_q;
+	wire [(0 >= NUM_MID_REGS ? ((1 - NUM_MID_REGS) * SHIFT_AMOUNT_WIDTH) + ((NUM_MID_REGS * SHIFT_AMOUNT_WIDTH) - 1) : ((NUM_MID_REGS + 1) * SHIFT_AMOUNT_WIDTH) - 1):(0 >= NUM_MID_REGS ? NUM_MID_REGS * SHIFT_AMOUNT_WIDTH : 0)] mid_pipe_add_shamt_q;
+	wire [0:NUM_MID_REGS] mid_pipe_sticky_q;
+	wire [(0 >= NUM_MID_REGS ? (((3 * PRECISION_BITS) + 3) >= 0 ? ((1 - NUM_MID_REGS) * ((3 * PRECISION_BITS) + 4)) + ((NUM_MID_REGS * ((3 * PRECISION_BITS) + 4)) - 1) : ((1 - NUM_MID_REGS) * (1 - ((3 * PRECISION_BITS) + 3))) + ((((3 * PRECISION_BITS) + 3) + (NUM_MID_REGS * (1 - ((3 * PRECISION_BITS) + 3)))) - 1)) : (((3 * PRECISION_BITS) + 3) >= 0 ? ((NUM_MID_REGS + 1) * ((3 * PRECISION_BITS) + 4)) - 1 : ((NUM_MID_REGS + 1) * (1 - ((3 * PRECISION_BITS) + 3))) + ((3 * PRECISION_BITS) + 2))):(0 >= NUM_MID_REGS ? (((3 * PRECISION_BITS) + 3) >= 0 ? NUM_MID_REGS * ((3 * PRECISION_BITS) + 4) : ((3 * PRECISION_BITS) + 3) + (NUM_MID_REGS * (1 - ((3 * PRECISION_BITS) + 3)))) : (((3 * PRECISION_BITS) + 3) >= 0 ? 0 : (3 * PRECISION_BITS) + 3))] mid_pipe_sum_q;
+	wire [0:NUM_MID_REGS] mid_pipe_final_sign_q;
+	wire [(0 >= NUM_MID_REGS ? ((1 - NUM_MID_REGS) * 3) + ((NUM_MID_REGS * 3) - 1) : ((NUM_MID_REGS + 1) * 3) - 1):(0 >= NUM_MID_REGS ? NUM_MID_REGS * 3 : 0)] mid_pipe_rnd_mode_q;
+	wire [(0 >= NUM_MID_REGS ? ((1 - NUM_MID_REGS) * fpnew_pkg_FP_FORMAT_BITS) + ((NUM_MID_REGS * fpnew_pkg_FP_FORMAT_BITS) - 1) : ((NUM_MID_REGS + 1) * fpnew_pkg_FP_FORMAT_BITS) - 1):(0 >= NUM_MID_REGS ? NUM_MID_REGS * fpnew_pkg_FP_FORMAT_BITS : 0)] mid_pipe_dst_fmt_q;
+	wire [0:NUM_MID_REGS] mid_pipe_res_is_spec_q;
+	wire [(0 >= NUM_MID_REGS ? ((1 - NUM_MID_REGS) * ((1 + SUPER_EXP_BITS) + SUPER_MAN_BITS)) + ((NUM_MID_REGS * ((1 + SUPER_EXP_BITS) + SUPER_MAN_BITS)) - 1) : ((NUM_MID_REGS + 1) * ((1 + SUPER_EXP_BITS) + SUPER_MAN_BITS)) - 1):(0 >= NUM_MID_REGS ? NUM_MID_REGS * ((1 + SUPER_EXP_BITS) + SUPER_MAN_BITS) : 0)] mid_pipe_spec_res_q;
+	wire [(0 >= NUM_MID_REGS ? ((1 - NUM_MID_REGS) * 5) + ((NUM_MID_REGS * 5) - 1) : ((NUM_MID_REGS + 1) * 5) - 1):(0 >= NUM_MID_REGS ? NUM_MID_REGS * 5 : 0)] mid_pipe_spec_stat_q;
+	wire [0:NUM_MID_REGS] mid_pipe_tag_q;
+	wire [(0 >= NUM_MID_REGS ? ((1 - NUM_MID_REGS) * AuxType_AUX_BITS) + ((NUM_MID_REGS * AuxType_AUX_BITS) - 1) : ((NUM_MID_REGS + 1) * AuxType_AUX_BITS) - 1):(0 >= NUM_MID_REGS ? NUM_MID_REGS * AuxType_AUX_BITS : 0)] mid_pipe_aux_q;
+	wire [0:NUM_MID_REGS] mid_pipe_valid_q;
+	wire [0:NUM_MID_REGS] mid_pipe_ready;
+	assign mid_pipe_eff_sub_q[0] = effective_subtraction;
+	assign mid_pipe_exp_prod_q[(0 >= NUM_MID_REGS ? 0 : NUM_MID_REGS) * EXP_WIDTH+:EXP_WIDTH] = exponent_product;
+	assign mid_pipe_exp_diff_q[(0 >= NUM_MID_REGS ? 0 : NUM_MID_REGS) * EXP_WIDTH+:EXP_WIDTH] = exponent_difference;
+	assign mid_pipe_tent_exp_q[(0 >= NUM_MID_REGS ? 0 : NUM_MID_REGS) * EXP_WIDTH+:EXP_WIDTH] = tentative_exponent;
+	assign mid_pipe_add_shamt_q[(0 >= NUM_MID_REGS ? 0 : NUM_MID_REGS) * SHIFT_AMOUNT_WIDTH+:SHIFT_AMOUNT_WIDTH] = addend_shamt;
+	assign mid_pipe_sticky_q[0] = sticky_before_add;
+	assign mid_pipe_sum_q[(((3 * PRECISION_BITS) + 3) >= 0 ? 0 : (3 * PRECISION_BITS) + 3) + ((0 >= NUM_MID_REGS ? 0 : NUM_MID_REGS) * (((3 * PRECISION_BITS) + 3) >= 0 ? (3 * PRECISION_BITS) + 4 : 1 - ((3 * PRECISION_BITS) + 3)))+:(((3 * PRECISION_BITS) + 3) >= 0 ? (3 * PRECISION_BITS) + 4 : 1 - ((3 * PRECISION_BITS) + 3))] = sum;
+	assign mid_pipe_final_sign_q[0] = final_sign;
+	assign mid_pipe_rnd_mode_q[(0 >= NUM_MID_REGS ? 0 : NUM_MID_REGS) * 3+:3] = inp_pipe_rnd_mode_q[(0 >= NUM_INP_REGS ? NUM_INP_REGS : NUM_INP_REGS - NUM_INP_REGS) * 3+:3];
+	assign mid_pipe_dst_fmt_q[(0 >= NUM_MID_REGS ? 0 : NUM_MID_REGS) * fpnew_pkg_FP_FORMAT_BITS+:fpnew_pkg_FP_FORMAT_BITS] = dst_fmt_q;
+	assign mid_pipe_res_is_spec_q[0] = result_is_special;
+	assign mid_pipe_spec_res_q[(0 >= NUM_MID_REGS ? 0 : NUM_MID_REGS) * ((1 + SUPER_EXP_BITS) + SUPER_MAN_BITS)+:(1 + SUPER_EXP_BITS) + SUPER_MAN_BITS] = special_result;
+	assign mid_pipe_spec_stat_q[(0 >= NUM_MID_REGS ? 0 : NUM_MID_REGS) * 5+:5] = special_status;
+	assign mid_pipe_tag_q[0] = inp_pipe_tag_q[NUM_INP_REGS];
+	assign mid_pipe_aux_q[(0 >= NUM_MID_REGS ? 0 : NUM_MID_REGS) * AuxType_AUX_BITS+:AuxType_AUX_BITS] = inp_pipe_aux_q[(0 >= NUM_INP_REGS ? NUM_INP_REGS : NUM_INP_REGS - NUM_INP_REGS) * AuxType_AUX_BITS+:AuxType_AUX_BITS];
+	assign mid_pipe_valid_q[0] = inp_pipe_valid_q[NUM_INP_REGS];
+	assign inp_pipe_ready[NUM_INP_REGS] = mid_pipe_ready[0];
+	generate
+		for (i = 0; i < NUM_MID_REGS; i = i + 1) begin : gen_inside_pipeline
+			wire reg_ena;
+			assign mid_pipe_ready[i] = mid_pipe_ready[i + 1] | ~mid_pipe_valid_q[i + 1];
+			assign reg_ena = mid_pipe_ready[i] & mid_pipe_valid_q[i];
+		end
+	endgenerate
+	assign effective_subtraction_q = mid_pipe_eff_sub_q[NUM_MID_REGS];
+	assign exponent_product_q = mid_pipe_exp_prod_q[(0 >= NUM_MID_REGS ? NUM_MID_REGS : NUM_MID_REGS - NUM_MID_REGS) * EXP_WIDTH+:EXP_WIDTH];
+	assign exponent_difference_q = mid_pipe_exp_diff_q[(0 >= NUM_MID_REGS ? NUM_MID_REGS : NUM_MID_REGS - NUM_MID_REGS) * EXP_WIDTH+:EXP_WIDTH];
+	assign tentative_exponent_q = mid_pipe_tent_exp_q[(0 >= NUM_MID_REGS ? NUM_MID_REGS : NUM_MID_REGS - NUM_MID_REGS) * EXP_WIDTH+:EXP_WIDTH];
+	assign addend_shamt_q = mid_pipe_add_shamt_q[(0 >= NUM_MID_REGS ? NUM_MID_REGS : NUM_MID_REGS - NUM_MID_REGS) * SHIFT_AMOUNT_WIDTH+:SHIFT_AMOUNT_WIDTH];
+	assign sticky_before_add_q = mid_pipe_sticky_q[NUM_MID_REGS];
+	assign sum_q = mid_pipe_sum_q[(((3 * PRECISION_BITS) + 3) >= 0 ? 0 : (3 * PRECISION_BITS) + 3) + ((0 >= NUM_MID_REGS ? NUM_MID_REGS : NUM_MID_REGS - NUM_MID_REGS) * (((3 * PRECISION_BITS) + 3) >= 0 ? (3 * PRECISION_BITS) + 4 : 1 - ((3 * PRECISION_BITS) + 3)))+:(((3 * PRECISION_BITS) + 3) >= 0 ? (3 * PRECISION_BITS) + 4 : 1 - ((3 * PRECISION_BITS) + 3))];
+	assign final_sign_q = mid_pipe_final_sign_q[NUM_MID_REGS];
+	assign rnd_mode_q = mid_pipe_rnd_mode_q[(0 >= NUM_MID_REGS ? NUM_MID_REGS : NUM_MID_REGS - NUM_MID_REGS) * 3+:3];
+	assign dst_fmt_q2 = mid_pipe_dst_fmt_q[(0 >= NUM_MID_REGS ? NUM_MID_REGS : NUM_MID_REGS - NUM_MID_REGS) * fpnew_pkg_FP_FORMAT_BITS+:fpnew_pkg_FP_FORMAT_BITS];
+	assign result_is_special_q = mid_pipe_res_is_spec_q[NUM_MID_REGS];
+	assign special_result_q = mid_pipe_spec_res_q[(0 >= NUM_MID_REGS ? NUM_MID_REGS : NUM_MID_REGS - NUM_MID_REGS) * ((1 + SUPER_EXP_BITS) + SUPER_MAN_BITS)+:(1 + SUPER_EXP_BITS) + SUPER_MAN_BITS];
+	assign special_status_q = mid_pipe_spec_stat_q[(0 >= NUM_MID_REGS ? NUM_MID_REGS : NUM_MID_REGS - NUM_MID_REGS) * 5+:5];
+	wire [LOWER_SUM_WIDTH - 1:0] sum_lower;
+	wire [LZC_RESULT_WIDTH - 1:0] leading_zero_count;
+	wire signed [LZC_RESULT_WIDTH:0] leading_zero_count_sgn;
+	wire lzc_zeroes;
+	reg [SHIFT_AMOUNT_WIDTH - 1:0] norm_shamt;
+	reg signed [EXP_WIDTH - 1:0] normalized_exponent;
+	wire [(3 * PRECISION_BITS) + 4:0] sum_shifted;
+	reg [PRECISION_BITS:0] final_mantissa;
+	reg [(2 * PRECISION_BITS) + 2:0] sum_sticky_bits;
+	wire sticky_after_norm;
+	reg signed [EXP_WIDTH - 1:0] final_exponent;
+	assign sum_lower = sum_q[LOWER_SUM_WIDTH - 1:0];
+	lzc #(
+		.WIDTH(LOWER_SUM_WIDTH),
+		.MODE(1)
+	) i_lzc(
+		.in_i(sum_lower),
+		.cnt_o(leading_zero_count),
+		.empty_o(lzc_zeroes)
+	);
+	assign leading_zero_count_sgn = $signed({1'b0, leading_zero_count});
+	always @(*) begin : norm_shift_amount
+		if ((exponent_difference_q <= 0) || (effective_subtraction_q && (exponent_difference_q <= 2))) begin
+			if ((((exponent_product_q - leading_zero_count_sgn) + 1) >= 0) && !lzc_zeroes) begin
+				norm_shamt = (PRECISION_BITS + 2) + leading_zero_count;
+				normalized_exponent = (exponent_product_q - leading_zero_count_sgn) + 1;
+			end
+			else begin
+				norm_shamt = $unsigned($signed((PRECISION_BITS + 2) + exponent_product_q));
+				normalized_exponent = 0;
+			end
+		end
+		else begin
+			norm_shamt = addend_shamt_q;
+			normalized_exponent = tentative_exponent_q;
+		end
+	end
+	assign sum_shifted = sum_q << norm_shamt;
+	always @(*) begin : small_norm
+		{final_mantissa, sum_sticky_bits} = sum_shifted;
+		final_exponent = normalized_exponent;
+		if (sum_shifted[(3 * PRECISION_BITS) + 4]) begin
+			{final_mantissa, sum_sticky_bits} = sum_shifted >> 1;
+			final_exponent = normalized_exponent + 1;
+		end
+		else if (sum_shifted[(3 * PRECISION_BITS) + 3])
+			;
+		else if (normalized_exponent > 1) begin
+			{final_mantissa, sum_sticky_bits} = sum_shifted << 1;
+			final_exponent = normalized_exponent - 1;
+		end
+		else
+			final_exponent = {EXP_WIDTH {1'sb0}};
+	end
+	assign sticky_after_norm = |{sum_sticky_bits} | sticky_before_add_q;
+	wire pre_round_sign;
+	wire [(SUPER_EXP_BITS + SUPER_MAN_BITS) - 1:0] pre_round_abs;
+	wire [1:0] round_sticky_bits;
+	wire of_before_round;
+	wire of_after_round;
+	wire uf_before_round;
+	wire uf_after_round;
+	wire [(NUM_FORMATS * (SUPER_EXP_BITS + SUPER_MAN_BITS)) - 1:0] fmt_pre_round_abs;
+	wire [7:0] fmt_round_sticky_bits;
+	reg [3:0] fmt_of_after_round;
+	reg [3:0] fmt_uf_after_round;
+	wire rounded_sign;
+	wire [(SUPER_EXP_BITS + SUPER_MAN_BITS) - 1:0] rounded_abs;
+	wire result_zero;
+	assign of_before_round = final_exponent >= ((2 ** fpnew_pkg_exp_bits(dst_fmt_q2)) - 1);
+	assign uf_before_round = final_exponent == 0;
+	generate
+		for (fmt = 0; fmt < sv2v_cast_32_signed(NUM_FORMATS); fmt = fmt + 1) begin : gen_res_assemble
+			function automatic [1:0] sv2v_cast_3AA4D;
+				input reg [1:0] inp;
+				sv2v_cast_3AA4D = inp;
+			endfunction
+			localparam [31:0] EXP_BITS = fpnew_pkg_exp_bits(sv2v_cast_3AA4D(fmt));
+			localparam [31:0] MAN_BITS = fpnew_pkg_man_bits(sv2v_cast_3AA4D(fmt));
+			wire [EXP_BITS - 1:0] pre_round_exponent;
+			wire [MAN_BITS - 1:0] pre_round_mantissa;
+			if (FpFmtConfig[fmt]) begin : active_format
+				assign pre_round_exponent = (of_before_round ? (2 ** EXP_BITS) - 2 : final_exponent[EXP_BITS - 1:0]);
+				function automatic [31:0] sv2v_cast_32;
+					input reg [31:0] inp;
+					sv2v_cast_32 = inp;
+				endfunction
+				assign pre_round_mantissa = (of_before_round ? {sv2v_cast_32(fpnew_pkg_man_bits(sv2v_cast_3AA4D(fmt))) {1'sb1}} : final_mantissa[SUPER_MAN_BITS-:MAN_BITS]);
+				assign fmt_pre_round_abs[fmt * (SUPER_EXP_BITS + SUPER_MAN_BITS)+:SUPER_EXP_BITS + SUPER_MAN_BITS] = {pre_round_exponent, pre_round_mantissa};
+				assign fmt_round_sticky_bits[(fmt * 2) + 1] = final_mantissa[SUPER_MAN_BITS - MAN_BITS] | of_before_round;
+				if (MAN_BITS < SUPER_MAN_BITS) begin : narrow_sticky
+					assign fmt_round_sticky_bits[fmt * 2] = (|final_mantissa[(SUPER_MAN_BITS - MAN_BITS) - 1:0] | sticky_after_norm) | of_before_round;
+				end
+				else begin : normal_sticky
+					assign fmt_round_sticky_bits[fmt * 2] = sticky_after_norm | of_before_round;
+				end
+			end
+			else begin : inactive_format
+				assign fmt_pre_round_abs[fmt * (SUPER_EXP_BITS + SUPER_MAN_BITS)+:SUPER_EXP_BITS + SUPER_MAN_BITS] = {SUPER_EXP_BITS + SUPER_MAN_BITS {fpnew_pkg_DONT_CARE}};
+				assign fmt_round_sticky_bits[fmt * 2+:2] = {2 {fpnew_pkg_DONT_CARE}};
+			end
+		end
+	endgenerate
+	assign pre_round_sign = final_sign_q;
+	assign pre_round_abs = fmt_pre_round_abs[dst_fmt_q2 * (SUPER_EXP_BITS + SUPER_MAN_BITS)+:SUPER_EXP_BITS + SUPER_MAN_BITS];
+	assign round_sticky_bits = fmt_round_sticky_bits[dst_fmt_q2 * 2+:2];
+	fpnew_rounding #(.AbsWidth(SUPER_EXP_BITS + SUPER_MAN_BITS)) i_fpnew_rounding(
+		.abs_value_i(pre_round_abs),
+		.sign_i(pre_round_sign),
+		.round_sticky_bits_i(round_sticky_bits),
+		.rnd_mode_i(rnd_mode_q),
+		.effective_subtraction_i(effective_subtraction_q),
+		.abs_rounded_o(rounded_abs),
+		.sign_o(rounded_sign),
+		.exact_zero_o(result_zero)
+	);
+	reg [(NUM_FORMATS * WIDTH) - 1:0] fmt_result;
+	generate
+		for (fmt = 0; fmt < sv2v_cast_32_signed(NUM_FORMATS); fmt = fmt + 1) begin : gen_sign_inject
+			function automatic [1:0] sv2v_cast_3AA4D;
+				input reg [1:0] inp;
+				sv2v_cast_3AA4D = inp;
+			endfunction
+			localparam [31:0] FP_WIDTH = fpnew_pkg_fp_width(sv2v_cast_3AA4D(fmt));
+			localparam [31:0] EXP_BITS = fpnew_pkg_exp_bits(sv2v_cast_3AA4D(fmt));
+			localparam [31:0] MAN_BITS = fpnew_pkg_man_bits(sv2v_cast_3AA4D(fmt));
+			if (FpFmtConfig[fmt]) begin : active_format
+				always @(*) begin : post_process
+					fmt_uf_after_round[fmt] = rounded_abs[(EXP_BITS + MAN_BITS) - 1:MAN_BITS] == {(((EXP_BITS + MAN_BITS) - 1) >= MAN_BITS ? (((EXP_BITS + MAN_BITS) - 1) - MAN_BITS) + 1 : (MAN_BITS - ((EXP_BITS + MAN_BITS) - 1)) + 1) {1'sb0}};
+					fmt_of_after_round[fmt] = rounded_abs[(EXP_BITS + MAN_BITS) - 1:MAN_BITS] == {(((EXP_BITS + MAN_BITS) - 1) >= MAN_BITS ? (((EXP_BITS + MAN_BITS) - 1) - MAN_BITS) + 1 : (MAN_BITS - ((EXP_BITS + MAN_BITS) - 1)) + 1) {1'sb1}};
+					fmt_result[fmt * WIDTH+:WIDTH] = {WIDTH {1'sb1}};
+					fmt_result[(fmt * WIDTH) + (FP_WIDTH - 1)-:FP_WIDTH] = {rounded_sign, rounded_abs[(EXP_BITS + MAN_BITS) - 1:0]};
+				end
+			end
+			else begin : inactive_format
+				wire [1:1] sv2v_tmp_78FCE;
+				assign sv2v_tmp_78FCE = fpnew_pkg_DONT_CARE;
+				always @(*) fmt_uf_after_round[fmt] = sv2v_tmp_78FCE;
+				wire [1:1] sv2v_tmp_C5A3B;
+				assign sv2v_tmp_C5A3B = fpnew_pkg_DONT_CARE;
+				always @(*) fmt_of_after_round[fmt] = sv2v_tmp_C5A3B;
+				wire [WIDTH:1] sv2v_tmp_E2871;
+				assign sv2v_tmp_E2871 = {WIDTH {fpnew_pkg_DONT_CARE}};
+				always @(*) fmt_result[fmt * WIDTH+:WIDTH] = sv2v_tmp_E2871;
+			end
+		end
+	endgenerate
+	assign uf_after_round = fmt_uf_after_round[dst_fmt_q2];
+	assign of_after_round = fmt_of_after_round[dst_fmt_q2];
+	wire [WIDTH - 1:0] regular_result;
+	wire [4:0] regular_status;
+	assign regular_result = fmt_result[dst_fmt_q2 * WIDTH+:WIDTH];
+	assign regular_status[4] = 1'b0;
+	assign regular_status[3] = 1'b0;
+	assign regular_status[2] = of_before_round | of_after_round;
+	assign regular_status[1] = uf_after_round & regular_status[0];
+	assign regular_status[0] = (|round_sticky_bits | of_before_round) | of_after_round;
+	wire [WIDTH - 1:0] result_d;
+	wire [4:0] status_d;
+	assign result_d = (result_is_special_q ? special_result_q : regular_result);
+	assign status_d = (result_is_special_q ? special_status_q : regular_status);
+	wire [(0 >= NUM_OUT_REGS ? ((1 - NUM_OUT_REGS) * WIDTH) + ((NUM_OUT_REGS * WIDTH) - 1) : ((NUM_OUT_REGS + 1) * WIDTH) - 1):(0 >= NUM_OUT_REGS ? NUM_OUT_REGS * WIDTH : 0)] out_pipe_result_q;
+	wire [(0 >= NUM_OUT_REGS ? ((1 - NUM_OUT_REGS) * 5) + ((NUM_OUT_REGS * 5) - 1) : ((NUM_OUT_REGS + 1) * 5) - 1):(0 >= NUM_OUT_REGS ? NUM_OUT_REGS * 5 : 0)] out_pipe_status_q;
+	wire [0:NUM_OUT_REGS] out_pipe_tag_q;
+	wire [(0 >= NUM_OUT_REGS ? ((1 - NUM_OUT_REGS) * AuxType_AUX_BITS) + ((NUM_OUT_REGS * AuxType_AUX_BITS) - 1) : ((NUM_OUT_REGS + 1) * AuxType_AUX_BITS) - 1):(0 >= NUM_OUT_REGS ? NUM_OUT_REGS * AuxType_AUX_BITS : 0)] out_pipe_aux_q;
+	wire [0:NUM_OUT_REGS] out_pipe_valid_q;
+	wire [0:NUM_OUT_REGS] out_pipe_ready;
+	assign out_pipe_result_q[(0 >= NUM_OUT_REGS ? 0 : NUM_OUT_REGS) * WIDTH+:WIDTH] = result_d;
+	assign out_pipe_status_q[(0 >= NUM_OUT_REGS ? 0 : NUM_OUT_REGS) * 5+:5] = status_d;
+	assign out_pipe_tag_q[0] = mid_pipe_tag_q[NUM_MID_REGS];
+	assign out_pipe_aux_q[(0 >= NUM_OUT_REGS ? 0 : NUM_OUT_REGS) * AuxType_AUX_BITS+:AuxType_AUX_BITS] = mid_pipe_aux_q[(0 >= NUM_MID_REGS ? NUM_MID_REGS : NUM_MID_REGS - NUM_MID_REGS) * AuxType_AUX_BITS+:AuxType_AUX_BITS];
+	assign out_pipe_valid_q[0] = mid_pipe_valid_q[NUM_MID_REGS];
+	assign mid_pipe_ready[NUM_MID_REGS] = out_pipe_ready[0];
+	generate
+		for (i = 0; i < NUM_OUT_REGS; i = i + 1) begin : gen_output_pipeline
+			wire reg_ena;
+			assign out_pipe_ready[i] = out_pipe_ready[i + 1] | ~out_pipe_valid_q[i + 1];
+			assign reg_ena = out_pipe_ready[i] & out_pipe_valid_q[i];
+		end
+	endgenerate
+	assign out_pipe_ready[NUM_OUT_REGS] = out_ready_i;
+	assign result_o = out_pipe_result_q[(0 >= NUM_OUT_REGS ? NUM_OUT_REGS : NUM_OUT_REGS - NUM_OUT_REGS) * WIDTH+:WIDTH];
+	assign status_o = out_pipe_status_q[(0 >= NUM_OUT_REGS ? NUM_OUT_REGS : NUM_OUT_REGS - NUM_OUT_REGS) * 5+:5];
+	assign extension_bit_o = 1'b1;
+	assign tag_o = out_pipe_tag_q[NUM_OUT_REGS];
+	assign aux_o = out_pipe_aux_q[(0 >= NUM_OUT_REGS ? NUM_OUT_REGS : NUM_OUT_REGS - NUM_OUT_REGS) * AuxType_AUX_BITS+:AuxType_AUX_BITS];
+	assign out_valid_o = out_pipe_valid_q[NUM_OUT_REGS];
+	assign busy_o = |{inp_pipe_valid_q, mid_pipe_valid_q, out_pipe_valid_q};
+endmodule
+module fpnew_fma_B2D03 (
+	clk_i,
+	rst_ni,
+	operands_i,
+	is_boxed_i,
+	rnd_mode_i,
+	op_i,
+	op_mod_i,
+	tag_i,
+	aux_i,
+	in_valid_i,
+	in_ready_o,
+	flush_i,
+	result_o,
+	status_o,
+	extension_bit_o,
+	tag_o,
+	aux_o,
+	out_valid_o,
+	out_ready_i,
+	busy_o
+);
+	localparam [31:0] fpnew_pkg_NUM_FP_FORMATS = 4;
+	localparam [31:0] fpnew_pkg_FP_FORMAT_BITS = 2;
+	function automatic [1:0] sv2v_cast_1ED13;
+		input reg [1:0] inp;
+		sv2v_cast_1ED13 = inp;
+	endfunction
+	parameter [1:0] FpFormat = sv2v_cast_1ED13(0);
+	parameter [31:0] NumPipeRegs = 0;
+	localparam [1:0] fpnew_pkg_BEFORE = 0;
+	parameter [1:0] PipeConfig = fpnew_pkg_BEFORE;
+	localparam [255:0] fpnew_pkg_FP_ENCODINGS = 256'h00000008000000170000000b00000034000000050000000a0000000500000002;
+	function automatic [31:0] fpnew_pkg_fp_width;
+		input reg [1:0] fmt;
+		fpnew_pkg_fp_width = (fpnew_pkg_FP_ENCODINGS[((3 - fmt) * 64) + 63-:32] + fpnew_pkg_FP_ENCODINGS[((3 - fmt) * 64) + 31-:32]) + 1;
+	endfunction
+	localparam [31:0] WIDTH = fpnew_pkg_fp_width(FpFormat);
+	input wire clk_i;
+	input wire rst_ni;
+	input wire [(3 * WIDTH) - 1:0] operands_i;
+	input wire [2:0] is_boxed_i;
+	input wire [2:0] rnd_mode_i;
+	localparam [31:0] fpnew_pkg_OP_BITS = 4;
+	input wire [3:0] op_i;
+	input wire op_mod_i;
+	input wire tag_i;
+	input wire aux_i;
+	input wire in_valid_i;
+	output wire in_ready_o;
+	input wire flush_i;
+	output wire [WIDTH - 1:0] result_o;
+	output wire [4:0] status_o;
+	output wire extension_bit_o;
+	output wire tag_o;
+	output wire aux_o;
+	output wire out_valid_o;
+	input wire out_ready_i;
+	output wire busy_o;
+	function automatic [31:0] fpnew_pkg_exp_bits;
+		input reg [1:0] fmt;
+		fpnew_pkg_exp_bits = fpnew_pkg_FP_ENCODINGS[((3 - fmt) * 64) + 63-:32];
+	endfunction
+	localparam [31:0] EXP_BITS = fpnew_pkg_exp_bits(FpFormat);
+	function automatic [31:0] fpnew_pkg_man_bits;
+		input reg [1:0] fmt;
+		fpnew_pkg_man_bits = fpnew_pkg_FP_ENCODINGS[((3 - fmt) * 64) + 31-:32];
+	endfunction
+	localparam [31:0] MAN_BITS = fpnew_pkg_man_bits(FpFormat);
+	function automatic [31:0] fpnew_pkg_bias;
+		input reg [1:0] fmt;
+		fpnew_pkg_bias = $unsigned((2 ** (fpnew_pkg_FP_ENCODINGS[((3 - fmt) * 64) + 63-:32] - 1)) - 1);
+	endfunction
+	localparam [31:0] BIAS = fpnew_pkg_bias(FpFormat);
+	localparam [31:0] PRECISION_BITS = MAN_BITS + 1;
+	localparam [31:0] LOWER_SUM_WIDTH = (2 * PRECISION_BITS) + 3;
+	localparam [31:0] LZC_RESULT_WIDTH = $clog2(LOWER_SUM_WIDTH);
+	function automatic signed [31:0] fpnew_pkg_maximum;
+		input reg signed [31:0] a;
+		input reg signed [31:0] b;
+		fpnew_pkg_maximum = (a > b ? a : b);
+	endfunction
+	localparam [31:0] EXP_WIDTH = $unsigned(fpnew_pkg_maximum(EXP_BITS + 2, LZC_RESULT_WIDTH));
+	localparam [31:0] SHIFT_AMOUNT_WIDTH = $clog2((3 * PRECISION_BITS) + 3);
+	localparam [1:0] fpnew_pkg_DISTRIBUTED = 3;
+	localparam NUM_INP_REGS = (PipeConfig == fpnew_pkg_BEFORE ? NumPipeRegs : (PipeConfig == fpnew_pkg_DISTRIBUTED ? (NumPipeRegs + 1) / 3 : 0));
+	localparam [1:0] fpnew_pkg_INSIDE = 2;
+	localparam NUM_MID_REGS = (PipeConfig == fpnew_pkg_INSIDE ? NumPipeRegs : (PipeConfig == fpnew_pkg_DISTRIBUTED ? (NumPipeRegs + 2) / 3 : 0));
+	localparam [1:0] fpnew_pkg_AFTER = 1;
+	localparam NUM_OUT_REGS = (PipeConfig == fpnew_pkg_AFTER ? NumPipeRegs : (PipeConfig == fpnew_pkg_DISTRIBUTED ? NumPipeRegs / 3 : 0));
+	wire [((0 >= NUM_INP_REGS ? ((1 - NUM_INP_REGS) * 3) + ((NUM_INP_REGS * 3) - 1) : ((NUM_INP_REGS + 1) * 3) - 1) >= (0 >= NUM_INP_REGS ? NUM_INP_REGS * 3 : 0) ? ((((0 >= NUM_INP_REGS ? ((1 - NUM_INP_REGS) * 3) + ((NUM_INP_REGS * 3) - 1) : ((NUM_INP_REGS + 1) * 3) - 1) - (0 >= NUM_INP_REGS ? NUM_INP_REGS * 3 : 0)) + 1) * WIDTH) + (((0 >= NUM_INP_REGS ? NUM_INP_REGS * 3 : 0) * WIDTH) - 1) : ((((0 >= NUM_INP_REGS ? NUM_INP_REGS * 3 : 0) - (0 >= NUM_INP_REGS ? ((1 - NUM_INP_REGS) * 3) + ((NUM_INP_REGS * 3) - 1) : ((NUM_INP_REGS + 1) * 3) - 1)) + 1) * WIDTH) + (((0 >= NUM_INP_REGS ? ((1 - NUM_INP_REGS) * 3) + ((NUM_INP_REGS * 3) - 1) : ((NUM_INP_REGS + 1) * 3) - 1) * WIDTH) - 1)):((0 >= NUM_INP_REGS ? ((1 - NUM_INP_REGS) * 3) + ((NUM_INP_REGS * 3) - 1) : ((NUM_INP_REGS + 1) * 3) - 1) >= (0 >= NUM_INP_REGS ? NUM_INP_REGS * 3 : 0) ? (0 >= NUM_INP_REGS ? NUM_INP_REGS * 3 : 0) * WIDTH : (0 >= NUM_INP_REGS ? ((1 - NUM_INP_REGS) * 3) + ((NUM_INP_REGS * 3) - 1) : ((NUM_INP_REGS + 1) * 3) - 1) * WIDTH)] inp_pipe_operands_q;
+	wire [(0 >= NUM_INP_REGS ? ((1 - NUM_INP_REGS) * 3) + ((NUM_INP_REGS * 3) - 1) : ((NUM_INP_REGS + 1) * 3) - 1):(0 >= NUM_INP_REGS ? NUM_INP_REGS * 3 : 0)] inp_pipe_is_boxed_q;
+	wire [(0 >= NUM_INP_REGS ? ((1 - NUM_INP_REGS) * 3) + ((NUM_INP_REGS * 3) - 1) : ((NUM_INP_REGS + 1) * 3) - 1):(0 >= NUM_INP_REGS ? NUM_INP_REGS * 3 : 0)] inp_pipe_rnd_mode_q;
+	wire [(0 >= NUM_INP_REGS ? ((1 - NUM_INP_REGS) * fpnew_pkg_OP_BITS) + ((NUM_INP_REGS * fpnew_pkg_OP_BITS) - 1) : ((NUM_INP_REGS + 1) * fpnew_pkg_OP_BITS) - 1):(0 >= NUM_INP_REGS ? NUM_INP_REGS * fpnew_pkg_OP_BITS : 0)] inp_pipe_op_q;
+	wire [0:NUM_INP_REGS] inp_pipe_op_mod_q;
+	wire [0:NUM_INP_REGS] inp_pipe_tag_q;
+	wire [0:NUM_INP_REGS] inp_pipe_aux_q;
+	wire [0:NUM_INP_REGS] inp_pipe_valid_q;
+	wire [0:NUM_INP_REGS] inp_pipe_ready;
+	assign inp_pipe_operands_q[WIDTH * ((0 >= NUM_INP_REGS ? ((1 - NUM_INP_REGS) * 3) + ((NUM_INP_REGS * 3) - 1) : ((NUM_INP_REGS + 1) * 3) - 1) >= (0 >= NUM_INP_REGS ? NUM_INP_REGS * 3 : 0) ? ((0 >= NUM_INP_REGS ? ((1 - NUM_INP_REGS) * 3) + ((NUM_INP_REGS * 3) - 1) : ((NUM_INP_REGS + 1) * 3) - 1) >= (0 >= NUM_INP_REGS ? NUM_INP_REGS * 3 : 0) ? (0 >= NUM_INP_REGS ? 0 : NUM_INP_REGS) * 3 : ((0 >= NUM_INP_REGS ? 0 : NUM_INP_REGS) * 3) + 2) : (0 >= NUM_INP_REGS ? NUM_INP_REGS * 3 : 0) - (((0 >= NUM_INP_REGS ? ((1 - NUM_INP_REGS) * 3) + ((NUM_INP_REGS * 3) - 1) : ((NUM_INP_REGS + 1) * 3) - 1) >= (0 >= NUM_INP_REGS ? NUM_INP_REGS * 3 : 0) ? (0 >= NUM_INP_REGS ? 0 : NUM_INP_REGS) * 3 : ((0 >= NUM_INP_REGS ? 0 : NUM_INP_REGS) * 3) + 2) - (0 >= NUM_INP_REGS ? ((1 - NUM_INP_REGS) * 3) + ((NUM_INP_REGS * 3) - 1) : ((NUM_INP_REGS + 1) * 3) - 1)))+:WIDTH * 3] = operands_i;
+	assign inp_pipe_is_boxed_q[(0 >= NUM_INP_REGS ? 0 : NUM_INP_REGS) * 3+:3] = is_boxed_i;
+	assign inp_pipe_rnd_mode_q[(0 >= NUM_INP_REGS ? 0 : NUM_INP_REGS) * 3+:3] = rnd_mode_i;
+	assign inp_pipe_op_q[(0 >= NUM_INP_REGS ? 0 : NUM_INP_REGS) * fpnew_pkg_OP_BITS+:fpnew_pkg_OP_BITS] = op_i;
+	assign inp_pipe_op_mod_q[0] = op_mod_i;
+	assign inp_pipe_tag_q[0] = tag_i;
+	assign inp_pipe_aux_q[0] = aux_i;
+	assign inp_pipe_valid_q[0] = in_valid_i;
+	assign in_ready_o = inp_pipe_ready[0];
+	generate
+		genvar i;
+		for (i = 0; i < NUM_INP_REGS; i = i + 1) begin : gen_input_pipeline
+			wire reg_ena;
+			assign inp_pipe_ready[i] = inp_pipe_ready[i + 1] | ~inp_pipe_valid_q[i + 1];
+			assign reg_ena = inp_pipe_ready[i] & inp_pipe_valid_q[i];
+		end
+	endgenerate
+	wire [23:0] info_q;
+	fpnew_classifier #(
+		.FpFormat(FpFormat),
+		.NumOperands(3)
+	) i_class_inputs(
+		.operands_i(inp_pipe_operands_q[WIDTH * ((0 >= NUM_INP_REGS ? ((1 - NUM_INP_REGS) * 3) + ((NUM_INP_REGS * 3) - 1) : ((NUM_INP_REGS + 1) * 3) - 1) >= (0 >= NUM_INP_REGS ? NUM_INP_REGS * 3 : 0) ? ((0 >= NUM_INP_REGS ? ((1 - NUM_INP_REGS) * 3) + ((NUM_INP_REGS * 3) - 1) : ((NUM_INP_REGS + 1) * 3) - 1) >= (0 >= NUM_INP_REGS ? NUM_INP_REGS * 3 : 0) ? (0 >= NUM_INP_REGS ? NUM_INP_REGS : NUM_INP_REGS - NUM_INP_REGS) * 3 : ((0 >= NUM_INP_REGS ? NUM_INP_REGS : NUM_INP_REGS - NUM_INP_REGS) * 3) + 2) : (0 >= NUM_INP_REGS ? NUM_INP_REGS * 3 : 0) - (((0 >= NUM_INP_REGS ? ((1 - NUM_INP_REGS) * 3) + ((NUM_INP_REGS * 3) - 1) : ((NUM_INP_REGS + 1) * 3) - 1) >= (0 >= NUM_INP_REGS ? NUM_INP_REGS * 3 : 0) ? (0 >= NUM_INP_REGS ? NUM_INP_REGS : NUM_INP_REGS - NUM_INP_REGS) * 3 : ((0 >= NUM_INP_REGS ? NUM_INP_REGS : NUM_INP_REGS - NUM_INP_REGS) * 3) + 2) - (0 >= NUM_INP_REGS ? ((1 - NUM_INP_REGS) * 3) + ((NUM_INP_REGS * 3) - 1) : ((NUM_INP_REGS + 1) * 3) - 1)))+:WIDTH * 3]),
+		.is_boxed_i(inp_pipe_is_boxed_q[(0 >= NUM_INP_REGS ? NUM_INP_REGS : NUM_INP_REGS - NUM_INP_REGS) * 3+:3]),
+		.info_o(info_q)
+	);
+	reg [((1 + EXP_BITS) + MAN_BITS) - 1:0] operand_a;
+	reg [((1 + EXP_BITS) + MAN_BITS) - 1:0] operand_b;
+	reg [((1 + EXP_BITS) + MAN_BITS) - 1:0] operand_c;
+	reg [7:0] info_a;
+	reg [7:0] info_b;
+	reg [7:0] info_c;
+	localparam [0:0] fpnew_pkg_DONT_CARE = 1'b1;
+	localparam [3:0] fpnew_pkg_ADD = 2;
+	localparam [3:0] fpnew_pkg_FMADD = 0;
+	localparam [3:0] fpnew_pkg_FNMSUB = 1;
+	localparam [3:0] fpnew_pkg_MUL = 3;
+	function automatic [EXP_BITS - 1:0] sv2v_cast_93512;
+		input reg [EXP_BITS - 1:0] inp;
+		sv2v_cast_93512 = inp;
+	endfunction
+	function automatic [MAN_BITS - 1:0] sv2v_cast_2A6A2;
+		input reg [MAN_BITS - 1:0] inp;
+		sv2v_cast_2A6A2 = inp;
+	endfunction
+	always @(*) begin : op_select
+		operand_a = inp_pipe_operands_q[((0 >= NUM_INP_REGS ? ((1 - NUM_INP_REGS) * 3) + ((NUM_INP_REGS * 3) - 1) : ((NUM_INP_REGS + 1) * 3) - 1) >= (0 >= NUM_INP_REGS ? NUM_INP_REGS * 3 : 0) ? (0 >= NUM_INP_REGS ? NUM_INP_REGS : NUM_INP_REGS - NUM_INP_REGS) * 3 : (0 >= NUM_INP_REGS ? NUM_INP_REGS * 3 : 0) - (((0 >= NUM_INP_REGS ? NUM_INP_REGS : NUM_INP_REGS - NUM_INP_REGS) * 3) - (0 >= NUM_INP_REGS ? ((1 - NUM_INP_REGS) * 3) + ((NUM_INP_REGS * 3) - 1) : ((NUM_INP_REGS + 1) * 3) - 1))) * WIDTH+:WIDTH];
+		operand_b = inp_pipe_operands_q[((0 >= NUM_INP_REGS ? ((1 - NUM_INP_REGS) * 3) + ((NUM_INP_REGS * 3) - 1) : ((NUM_INP_REGS + 1) * 3) - 1) >= (0 >= NUM_INP_REGS ? NUM_INP_REGS * 3 : 0) ? ((0 >= NUM_INP_REGS ? NUM_INP_REGS : NUM_INP_REGS - NUM_INP_REGS) * 3) + 1 : (0 >= NUM_INP_REGS ? NUM_INP_REGS * 3 : 0) - ((((0 >= NUM_INP_REGS ? NUM_INP_REGS : NUM_INP_REGS - NUM_INP_REGS) * 3) + 1) - (0 >= NUM_INP_REGS ? ((1 - NUM_INP_REGS) * 3) + ((NUM_INP_REGS * 3) - 1) : ((NUM_INP_REGS + 1) * 3) - 1))) * WIDTH+:WIDTH];
+		operand_c = inp_pipe_operands_q[((0 >= NUM_INP_REGS ? ((1 - NUM_INP_REGS) * 3) + ((NUM_INP_REGS * 3) - 1) : ((NUM_INP_REGS + 1) * 3) - 1) >= (0 >= NUM_INP_REGS ? NUM_INP_REGS * 3 : 0) ? ((0 >= NUM_INP_REGS ? NUM_INP_REGS : NUM_INP_REGS - NUM_INP_REGS) * 3) + 2 : (0 >= NUM_INP_REGS ? NUM_INP_REGS * 3 : 0) - ((((0 >= NUM_INP_REGS ? NUM_INP_REGS : NUM_INP_REGS - NUM_INP_REGS) * 3) + 2) - (0 >= NUM_INP_REGS ? ((1 - NUM_INP_REGS) * 3) + ((NUM_INP_REGS * 3) - 1) : ((NUM_INP_REGS + 1) * 3) - 1))) * WIDTH+:WIDTH];
+		info_a = info_q[0+:8];
+		info_b = info_q[8+:8];
+		info_c = info_q[16+:8];
+		operand_c[1 + (EXP_BITS + (MAN_BITS - 1))] = operand_c[1 + (EXP_BITS + (MAN_BITS - 1))] ^ inp_pipe_op_mod_q[NUM_INP_REGS];
+		case (inp_pipe_op_q[(0 >= NUM_INP_REGS ? NUM_INP_REGS : NUM_INP_REGS - NUM_INP_REGS) * fpnew_pkg_OP_BITS+:fpnew_pkg_OP_BITS])
+			fpnew_pkg_FMADD:
+				;
+			fpnew_pkg_FNMSUB: operand_a[1 + (EXP_BITS + (MAN_BITS - 1))] = ~operand_a[1 + (EXP_BITS + (MAN_BITS - 1))];
+			fpnew_pkg_ADD: begin
+				operand_a = {1'b0, sv2v_cast_93512(BIAS), sv2v_cast_2A6A2(1'sb0)};
+				info_a = 8'b10000001;
+			end
+			fpnew_pkg_MUL: begin
+				operand_c = {1'b1, sv2v_cast_93512(1'sb0), sv2v_cast_2A6A2(1'sb0)};
+				info_c = 8'b00100001;
+			end
+			default: begin
+				operand_a = {fpnew_pkg_DONT_CARE, sv2v_cast_93512(fpnew_pkg_DONT_CARE), sv2v_cast_2A6A2(fpnew_pkg_DONT_CARE)};
+				operand_b = {fpnew_pkg_DONT_CARE, sv2v_cast_93512(fpnew_pkg_DONT_CARE), sv2v_cast_2A6A2(fpnew_pkg_DONT_CARE)};
+				operand_c = {fpnew_pkg_DONT_CARE, sv2v_cast_93512(fpnew_pkg_DONT_CARE), sv2v_cast_2A6A2(fpnew_pkg_DONT_CARE)};
+				info_a = {fpnew_pkg_DONT_CARE, fpnew_pkg_DONT_CARE, fpnew_pkg_DONT_CARE, fpnew_pkg_DONT_CARE, fpnew_pkg_DONT_CARE, fpnew_pkg_DONT_CARE, fpnew_pkg_DONT_CARE, fpnew_pkg_DONT_CARE};
+				info_b = {fpnew_pkg_DONT_CARE, fpnew_pkg_DONT_CARE, fpnew_pkg_DONT_CARE, fpnew_pkg_DONT_CARE, fpnew_pkg_DONT_CARE, fpnew_pkg_DONT_CARE, fpnew_pkg_DONT_CARE, fpnew_pkg_DONT_CARE};
+				info_c = {fpnew_pkg_DONT_CARE, fpnew_pkg_DONT_CARE, fpnew_pkg_DONT_CARE, fpnew_pkg_DONT_CARE, fpnew_pkg_DONT_CARE, fpnew_pkg_DONT_CARE, fpnew_pkg_DONT_CARE, fpnew_pkg_DONT_CARE};
+			end
+		endcase
+	end
+	wire any_operand_inf;
+	wire any_operand_nan;
+	wire signalling_nan;
+	wire effective_subtraction;
+	wire tentative_sign;
+	assign any_operand_inf = |{info_a[4], info_b[4], info_c[4]};
+	assign any_operand_nan = |{info_a[3], info_b[3], info_c[3]};
+	assign signalling_nan = |{info_a[2], info_b[2], info_c[2]};
+	assign effective_subtraction = (operand_a[1 + (EXP_BITS + (MAN_BITS - 1))] ^ operand_b[1 + (EXP_BITS + (MAN_BITS - 1))]) ^ operand_c[1 + (EXP_BITS + (MAN_BITS - 1))];
+	assign tentative_sign = operand_a[1 + (EXP_BITS + (MAN_BITS - 1))] ^ operand_b[1 + (EXP_BITS + (MAN_BITS - 1))];
+	reg [((1 + EXP_BITS) + MAN_BITS) - 1:0] special_result;
+	reg [4:0] special_status;
+	reg result_is_special;
+	always @(*) begin : special_cases
+		special_result = {1'b0, sv2v_cast_93512(1'sb1), sv2v_cast_2A6A2(2 ** (MAN_BITS - 1))};
+		special_status = {5 {1'sb0}};
+		result_is_special = 1'b0;
+		if ((info_a[4] && info_b[5]) || (info_a[5] && info_b[4])) begin
+			result_is_special = 1'b1;
+			special_status[4] = 1'b1;
+		end
+		else if (any_operand_nan) begin
+			result_is_special = 1'b1;
+			special_status[4] = signalling_nan;
+		end
+		else if (any_operand_inf) begin
+			result_is_special = 1'b1;
+			if (((info_a[4] || info_b[4]) && info_c[4]) && effective_subtraction)
+				special_status[4] = 1'b1;
+			else if (info_a[4] || info_b[4])
+				special_result = {operand_a[1 + (EXP_BITS + (MAN_BITS - 1))] ^ operand_b[1 + (EXP_BITS + (MAN_BITS - 1))], sv2v_cast_93512(1'sb1), sv2v_cast_2A6A2(1'sb0)};
+			else if (info_c[4])
+				special_result = {operand_c[1 + (EXP_BITS + (MAN_BITS - 1))], sv2v_cast_93512(1'sb1), sv2v_cast_2A6A2(1'sb0)};
+		end
+	end
+	wire signed [EXP_WIDTH - 1:0] exponent_a;
+	wire signed [EXP_WIDTH - 1:0] exponent_b;
+	wire signed [EXP_WIDTH - 1:0] exponent_c;
+	wire signed [EXP_WIDTH - 1:0] exponent_addend;
+	wire signed [EXP_WIDTH - 1:0] exponent_product;
+	wire signed [EXP_WIDTH - 1:0] exponent_difference;
+	wire signed [EXP_WIDTH - 1:0] tentative_exponent;
+	assign exponent_a = $signed({1'b0, operand_a[EXP_BITS + (MAN_BITS - 1)-:((EXP_BITS + (MAN_BITS - 1)) >= MAN_BITS ? ((EXP_BITS + (MAN_BITS - 1)) - MAN_BITS) + 1 : (MAN_BITS - (EXP_BITS + (MAN_BITS - 1))) + 1)]});
+	assign exponent_b = $signed({1'b0, operand_b[EXP_BITS + (MAN_BITS - 1)-:((EXP_BITS + (MAN_BITS - 1)) >= MAN_BITS ? ((EXP_BITS + (MAN_BITS - 1)) - MAN_BITS) + 1 : (MAN_BITS - (EXP_BITS + (MAN_BITS - 1))) + 1)]});
+	assign exponent_c = $signed({1'b0, operand_c[EXP_BITS + (MAN_BITS - 1)-:((EXP_BITS + (MAN_BITS - 1)) >= MAN_BITS ? ((EXP_BITS + (MAN_BITS - 1)) - MAN_BITS) + 1 : (MAN_BITS - (EXP_BITS + (MAN_BITS - 1))) + 1)]});
+	assign exponent_addend = $signed(exponent_c + $signed({1'b0, ~info_c[7]}));
+	assign exponent_product = (info_a[5] || info_b[5] ? 2 - $signed(BIAS) : $signed((((exponent_a + info_a[6]) + exponent_b) + info_b[6]) - $signed(BIAS)));
+	assign exponent_difference = exponent_addend - exponent_product;
+	assign tentative_exponent = (exponent_difference > 0 ? exponent_addend : exponent_product);
+	reg [SHIFT_AMOUNT_WIDTH - 1:0] addend_shamt;
+	always @(*) begin : addend_shift_amount
+		if (exponent_difference <= $signed((-2 * PRECISION_BITS) - 1))
+			addend_shamt = (3 * PRECISION_BITS) + 4;
+		else if (exponent_difference <= $signed(PRECISION_BITS + 2))
+			addend_shamt = $unsigned(($signed(PRECISION_BITS) + 3) - exponent_difference);
+		else
+			addend_shamt = 0;
+	end
+	wire [PRECISION_BITS - 1:0] mantissa_a;
+	wire [PRECISION_BITS - 1:0] mantissa_b;
+	wire [PRECISION_BITS - 1:0] mantissa_c;
+	wire [(2 * PRECISION_BITS) - 1:0] product;
+	wire [(3 * PRECISION_BITS) + 3:0] product_shifted;
+	assign mantissa_a = {info_a[7], operand_a[MAN_BITS - 1-:MAN_BITS]};
+	assign mantissa_b = {info_b[7], operand_b[MAN_BITS - 1-:MAN_BITS]};
+	assign mantissa_c = {info_c[7], operand_c[MAN_BITS - 1-:MAN_BITS]};
+	assign product = mantissa_a * mantissa_b;
+	assign product_shifted = product << 2;
+	wire [(3 * PRECISION_BITS) + 3:0] addend_after_shift;
+	wire [PRECISION_BITS - 1:0] addend_sticky_bits;
+	wire sticky_before_add;
+	wire [(3 * PRECISION_BITS) + 3:0] addend_shifted;
+	wire inject_carry_in;
+	assign {addend_after_shift, addend_sticky_bits} = (mantissa_c << ((3 * PRECISION_BITS) + 4)) >> addend_shamt;
+	assign sticky_before_add = |addend_sticky_bits;
+	assign addend_shifted = (effective_subtraction ? ~addend_after_shift : addend_after_shift);
+	assign inject_carry_in = effective_subtraction & ~sticky_before_add;
+	wire [(3 * PRECISION_BITS) + 4:0] sum_raw;
+	wire sum_carry;
+	wire [(3 * PRECISION_BITS) + 3:0] sum;
+	wire final_sign;
+	assign sum_raw = (product_shifted + addend_shifted) + inject_carry_in;
+	assign sum_carry = sum_raw[(3 * PRECISION_BITS) + 4];
+	assign sum = (effective_subtraction && ~sum_carry ? -sum_raw : sum_raw);
+	assign final_sign = (effective_subtraction && (sum_carry == tentative_sign) ? 1'b1 : (effective_subtraction ? 1'b0 : tentative_sign));
+	wire effective_subtraction_q;
+	wire signed [EXP_WIDTH - 1:0] exponent_product_q;
+	wire signed [EXP_WIDTH - 1:0] exponent_difference_q;
+	wire signed [EXP_WIDTH - 1:0] tentative_exponent_q;
+	wire [SHIFT_AMOUNT_WIDTH - 1:0] addend_shamt_q;
+	wire sticky_before_add_q;
+	wire [(3 * PRECISION_BITS) + 3:0] sum_q;
+	wire final_sign_q;
+	wire [2:0] rnd_mode_q;
+	wire result_is_special_q;
+	wire [((1 + EXP_BITS) + MAN_BITS) - 1:0] special_result_q;
+	wire [4:0] special_status_q;
+	wire [0:NUM_MID_REGS] mid_pipe_eff_sub_q;
+	wire signed [(0 >= NUM_MID_REGS ? ((1 - NUM_MID_REGS) * EXP_WIDTH) + ((NUM_MID_REGS * EXP_WIDTH) - 1) : ((NUM_MID_REGS + 1) * EXP_WIDTH) - 1):(0 >= NUM_MID_REGS ? NUM_MID_REGS * EXP_WIDTH : 0)] mid_pipe_exp_prod_q;
+	wire signed [(0 >= NUM_MID_REGS ? ((1 - NUM_MID_REGS) * EXP_WIDTH) + ((NUM_MID_REGS * EXP_WIDTH) - 1) : ((NUM_MID_REGS + 1) * EXP_WIDTH) - 1):(0 >= NUM_MID_REGS ? NUM_MID_REGS * EXP_WIDTH : 0)] mid_pipe_exp_diff_q;
+	wire signed [(0 >= NUM_MID_REGS ? ((1 - NUM_MID_REGS) * EXP_WIDTH) + ((NUM_MID_REGS * EXP_WIDTH) - 1) : ((NUM_MID_REGS + 1) * EXP_WIDTH) - 1):(0 >= NUM_MID_REGS ? NUM_MID_REGS * EXP_WIDTH : 0)] mid_pipe_tent_exp_q;
+	wire [(0 >= NUM_MID_REGS ? ((1 - NUM_MID_REGS) * SHIFT_AMOUNT_WIDTH) + ((NUM_MID_REGS * SHIFT_AMOUNT_WIDTH) - 1) : ((NUM_MID_REGS + 1) * SHIFT_AMOUNT_WIDTH) - 1):(0 >= NUM_MID_REGS ? NUM_MID_REGS * SHIFT_AMOUNT_WIDTH : 0)] mid_pipe_add_shamt_q;
+	wire [0:NUM_MID_REGS] mid_pipe_sticky_q;
+	wire [(0 >= NUM_MID_REGS ? (((3 * PRECISION_BITS) + 3) >= 0 ? ((1 - NUM_MID_REGS) * ((3 * PRECISION_BITS) + 4)) + ((NUM_MID_REGS * ((3 * PRECISION_BITS) + 4)) - 1) : ((1 - NUM_MID_REGS) * (1 - ((3 * PRECISION_BITS) + 3))) + ((((3 * PRECISION_BITS) + 3) + (NUM_MID_REGS * (1 - ((3 * PRECISION_BITS) + 3)))) - 1)) : (((3 * PRECISION_BITS) + 3) >= 0 ? ((NUM_MID_REGS + 1) * ((3 * PRECISION_BITS) + 4)) - 1 : ((NUM_MID_REGS + 1) * (1 - ((3 * PRECISION_BITS) + 3))) + ((3 * PRECISION_BITS) + 2))):(0 >= NUM_MID_REGS ? (((3 * PRECISION_BITS) + 3) >= 0 ? NUM_MID_REGS * ((3 * PRECISION_BITS) + 4) : ((3 * PRECISION_BITS) + 3) + (NUM_MID_REGS * (1 - ((3 * PRECISION_BITS) + 3)))) : (((3 * PRECISION_BITS) + 3) >= 0 ? 0 : (3 * PRECISION_BITS) + 3))] mid_pipe_sum_q;
+	wire [0:NUM_MID_REGS] mid_pipe_final_sign_q;
+	wire [(0 >= NUM_MID_REGS ? ((1 - NUM_MID_REGS) * 3) + ((NUM_MID_REGS * 3) - 1) : ((NUM_MID_REGS + 1) * 3) - 1):(0 >= NUM_MID_REGS ? NUM_MID_REGS * 3 : 0)] mid_pipe_rnd_mode_q;
+	wire [0:NUM_MID_REGS] mid_pipe_res_is_spec_q;
+	wire [(0 >= NUM_MID_REGS ? ((1 - NUM_MID_REGS) * ((1 + EXP_BITS) + MAN_BITS)) + ((NUM_MID_REGS * ((1 + EXP_BITS) + MAN_BITS)) - 1) : ((NUM_MID_REGS + 1) * ((1 + EXP_BITS) + MAN_BITS)) - 1):(0 >= NUM_MID_REGS ? NUM_MID_REGS * ((1 + EXP_BITS) + MAN_BITS) : 0)] mid_pipe_spec_res_q;
+	wire [(0 >= NUM_MID_REGS ? ((1 - NUM_MID_REGS) * 5) + ((NUM_MID_REGS * 5) - 1) : ((NUM_MID_REGS + 1) * 5) - 1):(0 >= NUM_MID_REGS ? NUM_MID_REGS * 5 : 0)] mid_pipe_spec_stat_q;
+	wire [0:NUM_MID_REGS] mid_pipe_tag_q;
+	wire [0:NUM_MID_REGS] mid_pipe_aux_q;
+	wire [0:NUM_MID_REGS] mid_pipe_valid_q;
+	wire [0:NUM_MID_REGS] mid_pipe_ready;
+	assign mid_pipe_eff_sub_q[0] = effective_subtraction;
+	assign mid_pipe_exp_prod_q[(0 >= NUM_MID_REGS ? 0 : NUM_MID_REGS) * EXP_WIDTH+:EXP_WIDTH] = exponent_product;
+	assign mid_pipe_exp_diff_q[(0 >= NUM_MID_REGS ? 0 : NUM_MID_REGS) * EXP_WIDTH+:EXP_WIDTH] = exponent_difference;
+	assign mid_pipe_tent_exp_q[(0 >= NUM_MID_REGS ? 0 : NUM_MID_REGS) * EXP_WIDTH+:EXP_WIDTH] = tentative_exponent;
+	assign mid_pipe_add_shamt_q[(0 >= NUM_MID_REGS ? 0 : NUM_MID_REGS) * SHIFT_AMOUNT_WIDTH+:SHIFT_AMOUNT_WIDTH] = addend_shamt;
+	assign mid_pipe_sticky_q[0] = sticky_before_add;
+	assign mid_pipe_sum_q[(((3 * PRECISION_BITS) + 3) >= 0 ? 0 : (3 * PRECISION_BITS) + 3) + ((0 >= NUM_MID_REGS ? 0 : NUM_MID_REGS) * (((3 * PRECISION_BITS) + 3) >= 0 ? (3 * PRECISION_BITS) + 4 : 1 - ((3 * PRECISION_BITS) + 3)))+:(((3 * PRECISION_BITS) + 3) >= 0 ? (3 * PRECISION_BITS) + 4 : 1 - ((3 * PRECISION_BITS) + 3))] = sum;
+	assign mid_pipe_final_sign_q[0] = final_sign;
+	assign mid_pipe_rnd_mode_q[(0 >= NUM_MID_REGS ? 0 : NUM_MID_REGS) * 3+:3] = inp_pipe_rnd_mode_q[(0 >= NUM_INP_REGS ? NUM_INP_REGS : NUM_INP_REGS - NUM_INP_REGS) * 3+:3];
+	assign mid_pipe_res_is_spec_q[0] = result_is_special;
+	assign mid_pipe_spec_res_q[(0 >= NUM_MID_REGS ? 0 : NUM_MID_REGS) * ((1 + EXP_BITS) + MAN_BITS)+:(1 + EXP_BITS) + MAN_BITS] = special_result;
+	assign mid_pipe_spec_stat_q[(0 >= NUM_MID_REGS ? 0 : NUM_MID_REGS) * 5+:5] = special_status;
+	assign mid_pipe_tag_q[0] = inp_pipe_tag_q[NUM_INP_REGS];
+	assign mid_pipe_aux_q[0] = inp_pipe_aux_q[NUM_INP_REGS];
+	assign mid_pipe_valid_q[0] = inp_pipe_valid_q[NUM_INP_REGS];
+	assign inp_pipe_ready[NUM_INP_REGS] = mid_pipe_ready[0];
+	generate
+		for (i = 0; i < NUM_MID_REGS; i = i + 1) begin : gen_inside_pipeline
+			wire reg_ena;
+			assign mid_pipe_ready[i] = mid_pipe_ready[i + 1] | ~mid_pipe_valid_q[i + 1];
+			assign reg_ena = mid_pipe_ready[i] & mid_pipe_valid_q[i];
+		end
+	endgenerate
+	assign effective_subtraction_q = mid_pipe_eff_sub_q[NUM_MID_REGS];
+	assign exponent_product_q = mid_pipe_exp_prod_q[(0 >= NUM_MID_REGS ? NUM_MID_REGS : NUM_MID_REGS - NUM_MID_REGS) * EXP_WIDTH+:EXP_WIDTH];
+	assign exponent_difference_q = mid_pipe_exp_diff_q[(0 >= NUM_MID_REGS ? NUM_MID_REGS : NUM_MID_REGS - NUM_MID_REGS) * EXP_WIDTH+:EXP_WIDTH];
+	assign tentative_exponent_q = mid_pipe_tent_exp_q[(0 >= NUM_MID_REGS ? NUM_MID_REGS : NUM_MID_REGS - NUM_MID_REGS) * EXP_WIDTH+:EXP_WIDTH];
+	assign addend_shamt_q = mid_pipe_add_shamt_q[(0 >= NUM_MID_REGS ? NUM_MID_REGS : NUM_MID_REGS - NUM_MID_REGS) * SHIFT_AMOUNT_WIDTH+:SHIFT_AMOUNT_WIDTH];
+	assign sticky_before_add_q = mid_pipe_sticky_q[NUM_MID_REGS];
+	assign sum_q = mid_pipe_sum_q[(((3 * PRECISION_BITS) + 3) >= 0 ? 0 : (3 * PRECISION_BITS) + 3) + ((0 >= NUM_MID_REGS ? NUM_MID_REGS : NUM_MID_REGS - NUM_MID_REGS) * (((3 * PRECISION_BITS) + 3) >= 0 ? (3 * PRECISION_BITS) + 4 : 1 - ((3 * PRECISION_BITS) + 3)))+:(((3 * PRECISION_BITS) + 3) >= 0 ? (3 * PRECISION_BITS) + 4 : 1 - ((3 * PRECISION_BITS) + 3))];
+	assign final_sign_q = mid_pipe_final_sign_q[NUM_MID_REGS];
+	assign rnd_mode_q = mid_pipe_rnd_mode_q[(0 >= NUM_MID_REGS ? NUM_MID_REGS : NUM_MID_REGS - NUM_MID_REGS) * 3+:3];
+	assign result_is_special_q = mid_pipe_res_is_spec_q[NUM_MID_REGS];
+	assign special_result_q = mid_pipe_spec_res_q[(0 >= NUM_MID_REGS ? NUM_MID_REGS : NUM_MID_REGS - NUM_MID_REGS) * ((1 + EXP_BITS) + MAN_BITS)+:(1 + EXP_BITS) + MAN_BITS];
+	assign special_status_q = mid_pipe_spec_stat_q[(0 >= NUM_MID_REGS ? NUM_MID_REGS : NUM_MID_REGS - NUM_MID_REGS) * 5+:5];
+	wire [LOWER_SUM_WIDTH - 1:0] sum_lower;
+	wire [LZC_RESULT_WIDTH - 1:0] leading_zero_count;
+	wire signed [LZC_RESULT_WIDTH:0] leading_zero_count_sgn;
+	wire lzc_zeroes;
+	reg [SHIFT_AMOUNT_WIDTH - 1:0] norm_shamt;
+	reg signed [EXP_WIDTH - 1:0] normalized_exponent;
+	wire [(3 * PRECISION_BITS) + 4:0] sum_shifted;
+	reg [PRECISION_BITS:0] final_mantissa;
+	reg [(2 * PRECISION_BITS) + 2:0] sum_sticky_bits;
+	wire sticky_after_norm;
+	reg signed [EXP_WIDTH - 1:0] final_exponent;
+	assign sum_lower = sum_q[LOWER_SUM_WIDTH - 1:0];
+	lzc #(
+		.WIDTH(LOWER_SUM_WIDTH),
+		.MODE(1)
+	) i_lzc(
+		.in_i(sum_lower),
+		.cnt_o(leading_zero_count),
+		.empty_o(lzc_zeroes)
+	);
+	assign leading_zero_count_sgn = $signed({1'b0, leading_zero_count});
+	always @(*) begin : norm_shift_amount
+		if ((exponent_difference_q <= 0) || (effective_subtraction_q && (exponent_difference_q <= 2))) begin
+			if ((((exponent_product_q - leading_zero_count_sgn) + 1) >= 0) && !lzc_zeroes) begin
+				norm_shamt = (PRECISION_BITS + 2) + leading_zero_count;
+				normalized_exponent = (exponent_product_q - leading_zero_count_sgn) + 1;
+			end
+			else begin
+				norm_shamt = $unsigned(($signed(PRECISION_BITS) + 2) + exponent_product_q);
+				normalized_exponent = 0;
+			end
+		end
+		else begin
+			norm_shamt = addend_shamt_q;
+			normalized_exponent = tentative_exponent_q;
+		end
+	end
+	assign sum_shifted = sum_q << norm_shamt;
+	always @(*) begin : small_norm
+		{final_mantissa[23:0], sum_sticky_bits} = sum_shifted;
+		final_exponent = normalized_exponent;
+		if (sum_shifted[(3 * PRECISION_BITS) + 4]) begin
+			{final_mantissa, sum_sticky_bits} = sum_shifted >> 1;
+			final_exponent = normalized_exponent + 1;
+		end
+		else if (sum_shifted[(3 * PRECISION_BITS) + 3])
+			;
+		else if (normalized_exponent > 1) begin
+			{final_mantissa, sum_sticky_bits} = sum_shifted << 1;
+			final_exponent = normalized_exponent - 1;
+		end
+		else
+			final_exponent = {EXP_WIDTH {1'sb0}};
+	end
+	assign sticky_after_norm = |{sum_sticky_bits} | sticky_before_add_q;
+	wire pre_round_sign;
+	wire [EXP_BITS - 1:0] pre_round_exponent;
+	wire [MAN_BITS - 1:0] pre_round_mantissa;
+	wire [(EXP_BITS + MAN_BITS) - 1:0] pre_round_abs;
+	wire [1:0] round_sticky_bits;
+	wire of_before_round;
+	wire of_after_round;
+	wire uf_before_round;
+	wire uf_after_round;
+	wire result_zero;
+	wire rounded_sign;
+	wire [(EXP_BITS + MAN_BITS) - 1:0] rounded_abs;
+	assign of_before_round = final_exponent >= ((2 ** EXP_BITS) - 1);
+	assign uf_before_round = final_exponent == 0;
+	assign pre_round_sign = final_sign_q;
+	assign pre_round_exponent = (of_before_round ? (2 ** EXP_BITS) - 2 : $unsigned(final_exponent[EXP_BITS - 1:0]));
+	assign pre_round_mantissa = (of_before_round ? {MAN_BITS {1'sb1}} : final_mantissa[MAN_BITS:1]);
+	assign pre_round_abs = {pre_round_exponent, pre_round_mantissa};
+	assign round_sticky_bits = (of_before_round ? 2'b11 : {final_mantissa[0], sticky_after_norm});
+	fpnew_rounding #(.AbsWidth(EXP_BITS + MAN_BITS)) i_fpnew_rounding(
+		.abs_value_i(pre_round_abs),
+		.sign_i(pre_round_sign),
+		.round_sticky_bits_i(round_sticky_bits),
+		.rnd_mode_i(rnd_mode_q),
+		.effective_subtraction_i(effective_subtraction_q),
+		.abs_rounded_o(rounded_abs),
+		.sign_o(rounded_sign),
+		.exact_zero_o(result_zero)
+	);
+	assign uf_after_round = rounded_abs[(EXP_BITS + MAN_BITS) - 1:MAN_BITS] == {(((EXP_BITS + MAN_BITS) - 1) >= MAN_BITS ? (((EXP_BITS + MAN_BITS) - 1) - MAN_BITS) + 1 : (MAN_BITS - ((EXP_BITS + MAN_BITS) - 1)) + 1) {1'sb0}};
+	assign of_after_round = rounded_abs[(EXP_BITS + MAN_BITS) - 1:MAN_BITS] == {(((EXP_BITS + MAN_BITS) - 1) >= MAN_BITS ? (((EXP_BITS + MAN_BITS) - 1) - MAN_BITS) + 1 : (MAN_BITS - ((EXP_BITS + MAN_BITS) - 1)) + 1) {1'sb1}};
+	wire [WIDTH - 1:0] regular_result;
+	wire [4:0] regular_status;
+	assign regular_result = {rounded_sign, rounded_abs};
+	assign regular_status[4] = 1'b0;
+	assign regular_status[3] = 1'b0;
+	assign regular_status[2] = of_before_round | of_after_round;
+	assign regular_status[1] = uf_after_round & regular_status[0];
+	assign regular_status[0] = (|round_sticky_bits | of_before_round) | of_after_round;
+	wire [((1 + EXP_BITS) + MAN_BITS) - 1:0] result_d;
+	wire [4:0] status_d;
+	assign result_d = (result_is_special_q ? special_result_q : regular_result);
+	assign status_d = (result_is_special_q ? special_status_q : regular_status);
+	wire [(0 >= NUM_OUT_REGS ? ((1 - NUM_OUT_REGS) * ((1 + EXP_BITS) + MAN_BITS)) + ((NUM_OUT_REGS * ((1 + EXP_BITS) + MAN_BITS)) - 1) : ((NUM_OUT_REGS + 1) * ((1 + EXP_BITS) + MAN_BITS)) - 1):(0 >= NUM_OUT_REGS ? NUM_OUT_REGS * ((1 + EXP_BITS) + MAN_BITS) : 0)] out_pipe_result_q;
+	wire [(0 >= NUM_OUT_REGS ? ((1 - NUM_OUT_REGS) * 5) + ((NUM_OUT_REGS * 5) - 1) : ((NUM_OUT_REGS + 1) * 5) - 1):(0 >= NUM_OUT_REGS ? NUM_OUT_REGS * 5 : 0)] out_pipe_status_q;
+	wire [0:NUM_OUT_REGS] out_pipe_tag_q;
+	wire [0:NUM_OUT_REGS] out_pipe_aux_q;
+	wire [0:NUM_OUT_REGS] out_pipe_valid_q;
+	wire [0:NUM_OUT_REGS] out_pipe_ready;
+	assign out_pipe_result_q[(0 >= NUM_OUT_REGS ? 0 : NUM_OUT_REGS) * ((1 + EXP_BITS) + MAN_BITS)+:(1 + EXP_BITS) + MAN_BITS] = result_d;
+	assign out_pipe_status_q[(0 >= NUM_OUT_REGS ? 0 : NUM_OUT_REGS) * 5+:5] = status_d;
+	assign out_pipe_tag_q[0] = mid_pipe_tag_q[NUM_MID_REGS];
+	assign out_pipe_aux_q[0] = mid_pipe_aux_q[NUM_MID_REGS];
+	assign out_pipe_valid_q[0] = mid_pipe_valid_q[NUM_MID_REGS];
+	assign mid_pipe_ready[NUM_MID_REGS] = out_pipe_ready[0];
+	generate
+		for (i = 0; i < NUM_OUT_REGS; i = i + 1) begin : gen_output_pipeline
+			wire reg_ena;
+			assign out_pipe_ready[i] = out_pipe_ready[i + 1] | ~out_pipe_valid_q[i + 1];
+			assign reg_ena = out_pipe_ready[i] & out_pipe_valid_q[i];
+		end
+	endgenerate
+	assign out_pipe_ready[NUM_OUT_REGS] = out_ready_i;
+	assign result_o = out_pipe_result_q[(0 >= NUM_OUT_REGS ? NUM_OUT_REGS : NUM_OUT_REGS - NUM_OUT_REGS) * ((1 + EXP_BITS) + MAN_BITS)+:(1 + EXP_BITS) + MAN_BITS];
+	assign status_o = out_pipe_status_q[(0 >= NUM_OUT_REGS ? NUM_OUT_REGS : NUM_OUT_REGS - NUM_OUT_REGS) * 5+:5];
+	assign extension_bit_o = 1'b1;
+	assign tag_o = out_pipe_tag_q[NUM_OUT_REGS];
+	assign aux_o = out_pipe_aux_q[NUM_OUT_REGS];
+	assign out_valid_o = out_pipe_valid_q[NUM_OUT_REGS];
+	assign busy_o = |{inp_pipe_valid_q, mid_pipe_valid_q, out_pipe_valid_q};
+endmodule
+module fpnew_noncomp_6DFAC (
+	clk_i,
+	rst_ni,
+	operands_i,
+	is_boxed_i,
+	rnd_mode_i,
+	op_i,
+	op_mod_i,
+	tag_i,
+	aux_i,
+	in_valid_i,
+	in_ready_o,
+	flush_i,
+	result_o,
+	status_o,
+	extension_bit_o,
+	class_mask_o,
+	is_class_o,
+	tag_o,
+	aux_o,
+	out_valid_o,
+	out_ready_i,
+	busy_o
+);
+	localparam [31:0] fpnew_pkg_NUM_FP_FORMATS = 4;
+	localparam [31:0] fpnew_pkg_FP_FORMAT_BITS = 2;
+	function automatic [1:0] sv2v_cast_F7742;
+		input reg [1:0] inp;
+		sv2v_cast_F7742 = inp;
+	endfunction
+	parameter [1:0] FpFormat = sv2v_cast_F7742(0);
+	parameter [31:0] NumPipeRegs = 0;
+	localparam [1:0] fpnew_pkg_BEFORE = 0;
+	parameter [1:0] PipeConfig = fpnew_pkg_BEFORE;
+	localparam [255:0] fpnew_pkg_FP_ENCODINGS = 256'h00000008000000170000000b00000034000000050000000a0000000500000002;
+	function automatic [31:0] fpnew_pkg_fp_width;
+		input reg [1:0] fmt;
+		fpnew_pkg_fp_width = (fpnew_pkg_FP_ENCODINGS[((3 - fmt) * 64) + 63-:32] + fpnew_pkg_FP_ENCODINGS[((3 - fmt) * 64) + 31-:32]) + 1;
+	endfunction
+	localparam [31:0] WIDTH = fpnew_pkg_fp_width(FpFormat);
+	input wire clk_i;
+	input wire rst_ni;
+	input wire [(2 * WIDTH) - 1:0] operands_i;
+	input wire [1:0] is_boxed_i;
+	input wire [2:0] rnd_mode_i;
+	localparam [31:0] fpnew_pkg_OP_BITS = 4;
+	input wire [3:0] op_i;
+	input wire op_mod_i;
+	input wire tag_i;
+	input wire aux_i;
+	input wire in_valid_i;
+	output wire in_ready_o;
+	input wire flush_i;
+	output wire [WIDTH - 1:0] result_o;
+	output wire [4:0] status_o;
+	output wire extension_bit_o;
+	output wire [9:0] class_mask_o;
+	output wire is_class_o;
+	output wire tag_o;
+	output wire aux_o;
+	output wire out_valid_o;
+	input wire out_ready_i;
+	output wire busy_o;
+	function automatic [31:0] fpnew_pkg_exp_bits;
+		input reg [1:0] fmt;
+		fpnew_pkg_exp_bits = fpnew_pkg_FP_ENCODINGS[((3 - fmt) * 64) + 63-:32];
+	endfunction
+	localparam [31:0] EXP_BITS = fpnew_pkg_exp_bits(FpFormat);
+	function automatic [31:0] fpnew_pkg_man_bits;
+		input reg [1:0] fmt;
+		fpnew_pkg_man_bits = fpnew_pkg_FP_ENCODINGS[((3 - fmt) * 64) + 31-:32];
+	endfunction
+	localparam [31:0] MAN_BITS = fpnew_pkg_man_bits(FpFormat);
+	localparam [1:0] fpnew_pkg_DISTRIBUTED = 3;
+	localparam [1:0] fpnew_pkg_INSIDE = 2;
+	localparam NUM_INP_REGS = ((PipeConfig == fpnew_pkg_BEFORE) || (PipeConfig == fpnew_pkg_INSIDE) ? NumPipeRegs : (PipeConfig == fpnew_pkg_DISTRIBUTED ? (NumPipeRegs + 1) / 2 : 0));
+	localparam [1:0] fpnew_pkg_AFTER = 1;
+	localparam NUM_OUT_REGS = (PipeConfig == fpnew_pkg_AFTER ? NumPipeRegs : (PipeConfig == fpnew_pkg_DISTRIBUTED ? NumPipeRegs / 2 : 0));
+	wire [((0 >= NUM_INP_REGS ? ((1 - NUM_INP_REGS) * 2) + ((NUM_INP_REGS * 2) - 1) : ((NUM_INP_REGS + 1) * 2) - 1) >= (0 >= NUM_INP_REGS ? NUM_INP_REGS * 2 : 0) ? ((((0 >= NUM_INP_REGS ? ((1 - NUM_INP_REGS) * 2) + ((NUM_INP_REGS * 2) - 1) : ((NUM_INP_REGS + 1) * 2) - 1) - (0 >= NUM_INP_REGS ? NUM_INP_REGS * 2 : 0)) + 1) * WIDTH) + (((0 >= NUM_INP_REGS ? NUM_INP_REGS * 2 : 0) * WIDTH) - 1) : ((((0 >= NUM_INP_REGS ? NUM_INP_REGS * 2 : 0) - (0 >= NUM_INP_REGS ? ((1 - NUM_INP_REGS) * 2) + ((NUM_INP_REGS * 2) - 1) : ((NUM_INP_REGS + 1) * 2) - 1)) + 1) * WIDTH) + (((0 >= NUM_INP_REGS ? ((1 - NUM_INP_REGS) * 2) + ((NUM_INP_REGS * 2) - 1) : ((NUM_INP_REGS + 1) * 2) - 1) * WIDTH) - 1)):((0 >= NUM_INP_REGS ? ((1 - NUM_INP_REGS) * 2) + ((NUM_INP_REGS * 2) - 1) : ((NUM_INP_REGS + 1) * 2) - 1) >= (0 >= NUM_INP_REGS ? NUM_INP_REGS * 2 : 0) ? (0 >= NUM_INP_REGS ? NUM_INP_REGS * 2 : 0) * WIDTH : (0 >= NUM_INP_REGS ? ((1 - NUM_INP_REGS) * 2) + ((NUM_INP_REGS * 2) - 1) : ((NUM_INP_REGS + 1) * 2) - 1) * WIDTH)] inp_pipe_operands_q;
+	wire [(0 >= NUM_INP_REGS ? ((1 - NUM_INP_REGS) * 2) + ((NUM_INP_REGS * 2) - 1) : ((NUM_INP_REGS + 1) * 2) - 1):(0 >= NUM_INP_REGS ? NUM_INP_REGS * 2 : 0)] inp_pipe_is_boxed_q;
+	wire [(0 >= NUM_INP_REGS ? ((1 - NUM_INP_REGS) * 3) + ((NUM_INP_REGS * 3) - 1) : ((NUM_INP_REGS + 1) * 3) - 1):(0 >= NUM_INP_REGS ? NUM_INP_REGS * 3 : 0)] inp_pipe_rnd_mode_q;
+	wire [(0 >= NUM_INP_REGS ? ((1 - NUM_INP_REGS) * fpnew_pkg_OP_BITS) + ((NUM_INP_REGS * fpnew_pkg_OP_BITS) - 1) : ((NUM_INP_REGS + 1) * fpnew_pkg_OP_BITS) - 1):(0 >= NUM_INP_REGS ? NUM_INP_REGS * fpnew_pkg_OP_BITS : 0)] inp_pipe_op_q;
+	wire [0:NUM_INP_REGS] inp_pipe_op_mod_q;
+	wire [0:NUM_INP_REGS] inp_pipe_tag_q;
+	wire [0:NUM_INP_REGS] inp_pipe_aux_q;
+	wire [0:NUM_INP_REGS] inp_pipe_valid_q;
+	wire [0:NUM_INP_REGS] inp_pipe_ready;
+	assign inp_pipe_operands_q[WIDTH * ((0 >= NUM_INP_REGS ? ((1 - NUM_INP_REGS) * 2) + ((NUM_INP_REGS * 2) - 1) : ((NUM_INP_REGS + 1) * 2) - 1) >= (0 >= NUM_INP_REGS ? NUM_INP_REGS * 2 : 0) ? ((0 >= NUM_INP_REGS ? ((1 - NUM_INP_REGS) * 2) + ((NUM_INP_REGS * 2) - 1) : ((NUM_INP_REGS + 1) * 2) - 1) >= (0 >= NUM_INP_REGS ? NUM_INP_REGS * 2 : 0) ? (0 >= NUM_INP_REGS ? 0 : NUM_INP_REGS) * 2 : ((0 >= NUM_INP_REGS ? 0 : NUM_INP_REGS) * 2) + 1) : (0 >= NUM_INP_REGS ? NUM_INP_REGS * 2 : 0) - (((0 >= NUM_INP_REGS ? ((1 - NUM_INP_REGS) * 2) + ((NUM_INP_REGS * 2) - 1) : ((NUM_INP_REGS + 1) * 2) - 1) >= (0 >= NUM_INP_REGS ? NUM_INP_REGS * 2 : 0) ? (0 >= NUM_INP_REGS ? 0 : NUM_INP_REGS) * 2 : ((0 >= NUM_INP_REGS ? 0 : NUM_INP_REGS) * 2) + 1) - (0 >= NUM_INP_REGS ? ((1 - NUM_INP_REGS) * 2) + ((NUM_INP_REGS * 2) - 1) : ((NUM_INP_REGS + 1) * 2) - 1)))+:WIDTH * 2] = operands_i;
+	assign inp_pipe_is_boxed_q[(0 >= NUM_INP_REGS ? 0 : NUM_INP_REGS) * 2+:2] = is_boxed_i;
+	assign inp_pipe_rnd_mode_q[(0 >= NUM_INP_REGS ? 0 : NUM_INP_REGS) * 3+:3] = rnd_mode_i;
+	assign inp_pipe_op_q[(0 >= NUM_INP_REGS ? 0 : NUM_INP_REGS) * fpnew_pkg_OP_BITS+:fpnew_pkg_OP_BITS] = op_i;
+	assign inp_pipe_op_mod_q[0] = op_mod_i;
+	assign inp_pipe_tag_q[0] = tag_i;
+	assign inp_pipe_aux_q[0] = aux_i;
+	assign inp_pipe_valid_q[0] = in_valid_i;
+	assign in_ready_o = inp_pipe_ready[0];
+	generate
+		genvar i;
+		for (i = 0; i < NUM_INP_REGS; i = i + 1) begin : gen_input_pipeline
+			wire reg_ena;
+			assign inp_pipe_ready[i] = inp_pipe_ready[i + 1] | ~inp_pipe_valid_q[i + 1];
+			assign reg_ena = inp_pipe_ready[i] & inp_pipe_valid_q[i];
+		end
+	endgenerate
+	wire [15:0] info_q;
+	fpnew_classifier #(
+		.FpFormat(FpFormat),
+		.NumOperands(2)
+	) i_class_a(
+		.operands_i(inp_pipe_operands_q[WIDTH * ((0 >= NUM_INP_REGS ? ((1 - NUM_INP_REGS) * 2) + ((NUM_INP_REGS * 2) - 1) : ((NUM_INP_REGS + 1) * 2) - 1) >= (0 >= NUM_INP_REGS ? NUM_INP_REGS * 2 : 0) ? ((0 >= NUM_INP_REGS ? ((1 - NUM_INP_REGS) * 2) + ((NUM_INP_REGS * 2) - 1) : ((NUM_INP_REGS + 1) * 2) - 1) >= (0 >= NUM_INP_REGS ? NUM_INP_REGS * 2 : 0) ? (0 >= NUM_INP_REGS ? NUM_INP_REGS : NUM_INP_REGS - NUM_INP_REGS) * 2 : ((0 >= NUM_INP_REGS ? NUM_INP_REGS : NUM_INP_REGS - NUM_INP_REGS) * 2) + 1) : (0 >= NUM_INP_REGS ? NUM_INP_REGS * 2 : 0) - (((0 >= NUM_INP_REGS ? ((1 - NUM_INP_REGS) * 2) + ((NUM_INP_REGS * 2) - 1) : ((NUM_INP_REGS + 1) * 2) - 1) >= (0 >= NUM_INP_REGS ? NUM_INP_REGS * 2 : 0) ? (0 >= NUM_INP_REGS ? NUM_INP_REGS : NUM_INP_REGS - NUM_INP_REGS) * 2 : ((0 >= NUM_INP_REGS ? NUM_INP_REGS : NUM_INP_REGS - NUM_INP_REGS) * 2) + 1) - (0 >= NUM_INP_REGS ? ((1 - NUM_INP_REGS) * 2) + ((NUM_INP_REGS * 2) - 1) : ((NUM_INP_REGS + 1) * 2) - 1)))+:WIDTH * 2]),
+		.is_boxed_i(inp_pipe_is_boxed_q[(0 >= NUM_INP_REGS ? NUM_INP_REGS : NUM_INP_REGS - NUM_INP_REGS) * 2+:2]),
+		.info_o(info_q)
+	);
+	wire [((1 + EXP_BITS) + MAN_BITS) - 1:0] operand_a;
+	wire [((1 + EXP_BITS) + MAN_BITS) - 1:0] operand_b;
+	wire [7:0] info_a;
+	wire [7:0] info_b;
+	assign operand_a = inp_pipe_operands_q[((0 >= NUM_INP_REGS ? ((1 - NUM_INP_REGS) * 2) + ((NUM_INP_REGS * 2) - 1) : ((NUM_INP_REGS + 1) * 2) - 1) >= (0 >= NUM_INP_REGS ? NUM_INP_REGS * 2 : 0) ? (0 >= NUM_INP_REGS ? NUM_INP_REGS : NUM_INP_REGS - NUM_INP_REGS) * 2 : (0 >= NUM_INP_REGS ? NUM_INP_REGS * 2 : 0) - (((0 >= NUM_INP_REGS ? NUM_INP_REGS : NUM_INP_REGS - NUM_INP_REGS) * 2) - (0 >= NUM_INP_REGS ? ((1 - NUM_INP_REGS) * 2) + ((NUM_INP_REGS * 2) - 1) : ((NUM_INP_REGS + 1) * 2) - 1))) * WIDTH+:WIDTH];
+	assign operand_b = inp_pipe_operands_q[((0 >= NUM_INP_REGS ? ((1 - NUM_INP_REGS) * 2) + ((NUM_INP_REGS * 2) - 1) : ((NUM_INP_REGS + 1) * 2) - 1) >= (0 >= NUM_INP_REGS ? NUM_INP_REGS * 2 : 0) ? ((0 >= NUM_INP_REGS ? NUM_INP_REGS : NUM_INP_REGS - NUM_INP_REGS) * 2) + 1 : (0 >= NUM_INP_REGS ? NUM_INP_REGS * 2 : 0) - ((((0 >= NUM_INP_REGS ? NUM_INP_REGS : NUM_INP_REGS - NUM_INP_REGS) * 2) + 1) - (0 >= NUM_INP_REGS ? ((1 - NUM_INP_REGS) * 2) + ((NUM_INP_REGS * 2) - 1) : ((NUM_INP_REGS + 1) * 2) - 1))) * WIDTH+:WIDTH];
+	assign info_a = info_q[0+:8];
+	assign info_b = info_q[8+:8];
+	wire any_operand_inf;
+	wire any_operand_nan;
+	wire signalling_nan;
+	assign any_operand_inf = |{info_a[4], info_b[4]};
+	assign any_operand_nan = |{info_a[3], info_b[3]};
+	assign signalling_nan = |{info_a[2], info_b[2]};
+	wire operands_equal;
+	wire operand_a_smaller;
+	assign operands_equal = (operand_a == operand_b) || (info_a[5] && info_b[5]);
+	assign operand_a_smaller = (operand_a < operand_b) ^ (operand_a[1 + (EXP_BITS + (MAN_BITS - 1))] || operand_b[1 + (EXP_BITS + (MAN_BITS - 1))]);
+	reg [((1 + EXP_BITS) + MAN_BITS) - 1:0] sgnj_result;
+	wire [4:0] sgnj_status;
+	wire sgnj_extension_bit;
+	localparam [0:0] fpnew_pkg_DONT_CARE = 1'b1;
+	localparam [2:0] fpnew_pkg_RDN = 3'b010;
+	localparam [2:0] fpnew_pkg_RNE = 3'b000;
+	localparam [2:0] fpnew_pkg_RTZ = 3'b001;
+	localparam [2:0] fpnew_pkg_RUP = 3'b011;
+	function automatic [EXP_BITS - 1:0] sv2v_cast_92F9C;
+		input reg [EXP_BITS - 1:0] inp;
+		sv2v_cast_92F9C = inp;
+	endfunction
+	function automatic [MAN_BITS - 1:0] sv2v_cast_5145F;
+		input reg [MAN_BITS - 1:0] inp;
+		sv2v_cast_5145F = inp;
+	endfunction
+	always @(*) begin : sign_injections
+		reg sign_a;
+		reg sign_b;
+		sgnj_result = operand_a;
+		if (!info_a[0])
+			sgnj_result = {1'b0, sv2v_cast_92F9C(1'sb1), sv2v_cast_5145F(2 ** (MAN_BITS - 1))};
+		sign_a = operand_a[1 + (EXP_BITS + (MAN_BITS - 1))] & info_a[0];
+		sign_b = operand_b[1 + (EXP_BITS + (MAN_BITS - 1))] & info_b[0];
+		case (inp_pipe_rnd_mode_q[(0 >= NUM_INP_REGS ? NUM_INP_REGS : NUM_INP_REGS - NUM_INP_REGS) * 3+:3])
+			fpnew_pkg_RNE: sgnj_result[1 + (EXP_BITS + (MAN_BITS - 1))] = sign_b;
+			fpnew_pkg_RTZ: sgnj_result[1 + (EXP_BITS + (MAN_BITS - 1))] = ~sign_b;
+			fpnew_pkg_RDN: sgnj_result[1 + (EXP_BITS + (MAN_BITS - 1))] = sign_a ^ sign_b;
+			fpnew_pkg_RUP: sgnj_result = operand_a;
+			default: sgnj_result = {fpnew_pkg_DONT_CARE, sv2v_cast_92F9C(fpnew_pkg_DONT_CARE), sv2v_cast_5145F(fpnew_pkg_DONT_CARE)};
+		endcase
+	end
+	assign sgnj_status = {5 {1'sb0}};
+	assign sgnj_extension_bit = (inp_pipe_op_mod_q[NUM_INP_REGS] ? sgnj_result[1 + (EXP_BITS + (MAN_BITS - 1))] : 1'b1);
+	reg [((1 + EXP_BITS) + MAN_BITS) - 1:0] minmax_result;
+	reg [4:0] minmax_status;
+	wire minmax_extension_bit;
+	always @(*) begin : min_max
+		minmax_status = {5 {1'sb0}};
+		minmax_status[4] = signalling_nan;
+		if (info_a[3] && info_b[3])
+			minmax_result = {1'b0, sv2v_cast_92F9C(1'sb1), sv2v_cast_5145F(2 ** (MAN_BITS - 1))};
+		else if (info_a[3])
+			minmax_result = operand_b;
+		else if (info_b[3])
+			minmax_result = operand_a;
+		else
+			case (inp_pipe_rnd_mode_q[(0 >= NUM_INP_REGS ? NUM_INP_REGS : NUM_INP_REGS - NUM_INP_REGS) * 3+:3])
+				fpnew_pkg_RNE: minmax_result = (operand_a_smaller ? operand_a : operand_b);
+				fpnew_pkg_RTZ: minmax_result = (operand_a_smaller ? operand_b : operand_a);
+				default: minmax_result = {fpnew_pkg_DONT_CARE, sv2v_cast_92F9C(fpnew_pkg_DONT_CARE), sv2v_cast_5145F(fpnew_pkg_DONT_CARE)};
+			endcase
+	end
+	assign minmax_extension_bit = 1'b1;
+	reg [((1 + EXP_BITS) + MAN_BITS) - 1:0] cmp_result;
+	reg [4:0] cmp_status;
+	wire cmp_extension_bit;
+	always @(*) begin : comparisons
+		cmp_result = {(1 + EXP_BITS) + MAN_BITS {1'sb0}};
+		cmp_status = {5 {1'sb0}};
+		if (signalling_nan)
+			cmp_status[4] = 1'b1;
+		else
+			case (inp_pipe_rnd_mode_q[(0 >= NUM_INP_REGS ? NUM_INP_REGS : NUM_INP_REGS - NUM_INP_REGS) * 3+:3])
+				fpnew_pkg_RNE:
+					if (any_operand_nan)
+						cmp_status[4] = 1'b1;
+					else
+						cmp_result = (operand_a_smaller | operands_equal) ^ inp_pipe_op_mod_q[NUM_INP_REGS];
+				fpnew_pkg_RTZ:
+					if (any_operand_nan)
+						cmp_status[4] = 1'b1;
+					else
+						cmp_result = (operand_a_smaller & ~operands_equal) ^ inp_pipe_op_mod_q[NUM_INP_REGS];
+				fpnew_pkg_RDN:
+					if (any_operand_nan)
+						cmp_result = inp_pipe_op_mod_q[NUM_INP_REGS];
+					else
+						cmp_result = operands_equal ^ inp_pipe_op_mod_q[NUM_INP_REGS];
+				default: cmp_result = {fpnew_pkg_DONT_CARE, sv2v_cast_92F9C(fpnew_pkg_DONT_CARE), sv2v_cast_5145F(fpnew_pkg_DONT_CARE)};
+			endcase
+	end
+	assign cmp_extension_bit = 1'b0;
+	wire [4:0] class_status;
+	wire class_extension_bit;
+	reg [9:0] class_mask_d;
+	localparam [9:0] fpnew_pkg_NEGINF = 10'b0000000001;
+	localparam [9:0] fpnew_pkg_NEGNORM = 10'b0000000010;
+	localparam [9:0] fpnew_pkg_NEGSUBNORM = 10'b0000000100;
+	localparam [9:0] fpnew_pkg_NEGZERO = 10'b0000001000;
+	localparam [9:0] fpnew_pkg_POSINF = 10'b0010000000;
+	localparam [9:0] fpnew_pkg_POSNORM = 10'b0001000000;
+	localparam [9:0] fpnew_pkg_POSSUBNORM = 10'b0000100000;
+	localparam [9:0] fpnew_pkg_POSZERO = 10'b0000010000;
+	localparam [9:0] fpnew_pkg_QNAN = 10'b1000000000;
+	localparam [9:0] fpnew_pkg_SNAN = 10'b0100000000;
+	always @(*) begin : classify
+		if (info_a[7])
+			class_mask_d = (operand_a[1 + (EXP_BITS + (MAN_BITS - 1))] ? fpnew_pkg_NEGNORM : fpnew_pkg_POSNORM);
+		else if (info_a[6])
+			class_mask_d = (operand_a[1 + (EXP_BITS + (MAN_BITS - 1))] ? fpnew_pkg_NEGSUBNORM : fpnew_pkg_POSSUBNORM);
+		else if (info_a[5])
+			class_mask_d = (operand_a[1 + (EXP_BITS + (MAN_BITS - 1))] ? fpnew_pkg_NEGZERO : fpnew_pkg_POSZERO);
+		else if (info_a[4])
+			class_mask_d = (operand_a[1 + (EXP_BITS + (MAN_BITS - 1))] ? fpnew_pkg_NEGINF : fpnew_pkg_POSINF);
+		else if (info_a[3])
+			class_mask_d = (info_a[2] ? fpnew_pkg_SNAN : fpnew_pkg_QNAN);
+		else
+			class_mask_d = fpnew_pkg_QNAN;
+	end
+	assign class_status = {5 {1'sb0}};
+	assign class_extension_bit = 1'b0;
+	reg [((1 + EXP_BITS) + MAN_BITS) - 1:0] result_d;
+	reg [4:0] status_d;
+	reg extension_bit_d;
+	wire is_class_d;
+	localparam [3:0] fpnew_pkg_CLASSIFY = 9;
+	localparam [3:0] fpnew_pkg_CMP = 8;
+	localparam [3:0] fpnew_pkg_MINMAX = 7;
+	localparam [3:0] fpnew_pkg_SGNJ = 6;
+	always @(*) begin : select_result
+		case (inp_pipe_op_q[(0 >= NUM_INP_REGS ? NUM_INP_REGS : NUM_INP_REGS - NUM_INP_REGS) * fpnew_pkg_OP_BITS+:fpnew_pkg_OP_BITS])
+			fpnew_pkg_SGNJ: begin
+				result_d = sgnj_result;
+				status_d = sgnj_status;
+				extension_bit_d = sgnj_extension_bit;
+			end
+			fpnew_pkg_MINMAX: begin
+				result_d = minmax_result;
+				status_d = minmax_status;
+				extension_bit_d = minmax_extension_bit;
+			end
+			fpnew_pkg_CMP: begin
+				result_d = cmp_result;
+				status_d = cmp_status;
+				extension_bit_d = cmp_extension_bit;
+			end
+			fpnew_pkg_CLASSIFY: begin
+				result_d = {fpnew_pkg_DONT_CARE, sv2v_cast_92F9C(fpnew_pkg_DONT_CARE), sv2v_cast_5145F(fpnew_pkg_DONT_CARE)};
+				status_d = class_status;
+				extension_bit_d = class_extension_bit;
+			end
+			default: begin
+				result_d = {fpnew_pkg_DONT_CARE, sv2v_cast_92F9C(fpnew_pkg_DONT_CARE), sv2v_cast_5145F(fpnew_pkg_DONT_CARE)};
+				status_d = {fpnew_pkg_DONT_CARE, fpnew_pkg_DONT_CARE, fpnew_pkg_DONT_CARE, fpnew_pkg_DONT_CARE, fpnew_pkg_DONT_CARE};
+				extension_bit_d = fpnew_pkg_DONT_CARE;
+			end
+		endcase
+	end
+	assign is_class_d = inp_pipe_op_q[(0 >= NUM_INP_REGS ? NUM_INP_REGS : NUM_INP_REGS - NUM_INP_REGS) * fpnew_pkg_OP_BITS+:fpnew_pkg_OP_BITS] == fpnew_pkg_CLASSIFY;
+	wire [(0 >= NUM_OUT_REGS ? ((1 - NUM_OUT_REGS) * ((1 + EXP_BITS) + MAN_BITS)) + ((NUM_OUT_REGS * ((1 + EXP_BITS) + MAN_BITS)) - 1) : ((NUM_OUT_REGS + 1) * ((1 + EXP_BITS) + MAN_BITS)) - 1):(0 >= NUM_OUT_REGS ? NUM_OUT_REGS * ((1 + EXP_BITS) + MAN_BITS) : 0)] out_pipe_result_q;
+	wire [(0 >= NUM_OUT_REGS ? ((1 - NUM_OUT_REGS) * 5) + ((NUM_OUT_REGS * 5) - 1) : ((NUM_OUT_REGS + 1) * 5) - 1):(0 >= NUM_OUT_REGS ? NUM_OUT_REGS * 5 : 0)] out_pipe_status_q;
+	wire [0:NUM_OUT_REGS] out_pipe_extension_bit_q;
+	wire [(0 >= NUM_OUT_REGS ? ((1 - NUM_OUT_REGS) * 10) + ((NUM_OUT_REGS * 10) - 1) : ((NUM_OUT_REGS + 1) * 10) - 1):(0 >= NUM_OUT_REGS ? NUM_OUT_REGS * 10 : 0)] out_pipe_class_mask_q;
+	wire [0:NUM_OUT_REGS] out_pipe_is_class_q;
+	wire [0:NUM_OUT_REGS] out_pipe_tag_q;
+	wire [0:NUM_OUT_REGS] out_pipe_aux_q;
+	wire [0:NUM_OUT_REGS] out_pipe_valid_q;
+	wire [0:NUM_OUT_REGS] out_pipe_ready;
+	assign out_pipe_result_q[(0 >= NUM_OUT_REGS ? 0 : NUM_OUT_REGS) * ((1 + EXP_BITS) + MAN_BITS)+:(1 + EXP_BITS) + MAN_BITS] = result_d;
+	assign out_pipe_status_q[(0 >= NUM_OUT_REGS ? 0 : NUM_OUT_REGS) * 5+:5] = status_d;
+	assign out_pipe_extension_bit_q[0] = extension_bit_d;
+	assign out_pipe_class_mask_q[(0 >= NUM_OUT_REGS ? 0 : NUM_OUT_REGS) * 10+:10] = class_mask_d;
+	assign out_pipe_is_class_q[0] = is_class_d;
+	assign out_pipe_tag_q[0] = inp_pipe_tag_q[NUM_INP_REGS];
+	assign out_pipe_aux_q[0] = inp_pipe_aux_q[NUM_INP_REGS];
+	assign out_pipe_valid_q[0] = inp_pipe_valid_q[NUM_INP_REGS];
+	assign inp_pipe_ready[NUM_INP_REGS] = out_pipe_ready[0];
+	generate
+		for (i = 0; i < NUM_OUT_REGS; i = i + 1) begin : gen_output_pipeline
+			wire reg_ena;
+			assign out_pipe_ready[i] = out_pipe_ready[i + 1] | ~out_pipe_valid_q[i + 1];
+			assign reg_ena = out_pipe_ready[i] & out_pipe_valid_q[i];
+		end
+	endgenerate
+	assign out_pipe_ready[NUM_OUT_REGS] = out_ready_i;
+	assign result_o = out_pipe_result_q[(0 >= NUM_OUT_REGS ? NUM_OUT_REGS : NUM_OUT_REGS - NUM_OUT_REGS) * ((1 + EXP_BITS) + MAN_BITS)+:(1 + EXP_BITS) + MAN_BITS];
+	assign status_o = out_pipe_status_q[(0 >= NUM_OUT_REGS ? NUM_OUT_REGS : NUM_OUT_REGS - NUM_OUT_REGS) * 5+:5];
+	assign extension_bit_o = out_pipe_extension_bit_q[NUM_OUT_REGS];
+	assign class_mask_o = out_pipe_class_mask_q[(0 >= NUM_OUT_REGS ? NUM_OUT_REGS : NUM_OUT_REGS - NUM_OUT_REGS) * 10+:10];
+	assign is_class_o = out_pipe_is_class_q[NUM_OUT_REGS];
+	assign tag_o = out_pipe_tag_q[NUM_OUT_REGS];
+	assign aux_o = out_pipe_aux_q[NUM_OUT_REGS];
+	assign out_valid_o = out_pipe_valid_q[NUM_OUT_REGS];
+	assign busy_o = |{inp_pipe_valid_q, out_pipe_valid_q};
+endmodule
+/*
+module fpnew_opgroup_block_BE2AB (
+	clk_i,
+	rst_ni,
+	IS_FIRST_MERGED,
+	operands_i,
+	is_boxed_i,
+	rnd_mode_i,
+	op_i,
+	op_mod_i,
+	src_fmt_i,
+	dst_fmt_i,
+	int_fmt_i,
+	vectorial_op_i,
+	tag_i,
+	in_valid_i,
+	in_ready_o,
+	flush_i,
+	result_o,
+	status_o,
+	extension_bit_o,
+	tag_o,
+	out_valid_o,
+	out_ready_i,
+	busy_o
+);
+	localparam [1:0] fpnew_pkg_ADDMUL = 0;
+	parameter [1:0] OpGroup = fpnew_pkg_ADDMUL;
+	parameter [31:0] Width = 32;
+	parameter [0:0] EnableVectors = 1'b1;
+	localparam [31:0] fpnew_pkg_NUM_FP_FORMATS = 4;
+	parameter [0:3] FpFmtMask = 1'sb1;
+	localparam [31:0] fpnew_pkg_NUM_INT_FORMATS = 4;
+	parameter [0:3] IntFmtMask = 1'sb1;
+	parameter [127:0] FmtPipeRegs = {fpnew_pkg_NUM_FP_FORMATS {32'd0}};
+	localparam [1:0] fpnew_pkg_PARALLEL = 1;
+	parameter [7:0] FmtUnitTypes = {fpnew_pkg_NUM_FP_FORMATS {fpnew_pkg_PARALLEL}};
+	localparam [1:0] fpnew_pkg_BEFORE = 0;
+	parameter [1:0] PipeConfig = fpnew_pkg_BEFORE;
+	localparam [31:0] NUM_FORMATS = fpnew_pkg_NUM_FP_FORMATS;
+	localparam [1:0] fpnew_pkg_CONV = 3;
+	localparam [1:0] fpnew_pkg_DIVSQRT = 1;
+	localparam [1:0] fpnew_pkg_NONCOMP = 2;
+	function automatic [31:0] fpnew_pkg_num_operands;
+		input reg [1:0] grp;
+		case (grp)
+			fpnew_pkg_ADDMUL: fpnew_pkg_num_operands = 3;
+			fpnew_pkg_DIVSQRT: fpnew_pkg_num_operands = 2;
+			fpnew_pkg_NONCOMP: fpnew_pkg_num_operands = 2;
+			fpnew_pkg_CONV: fpnew_pkg_num_operands = 3;
+			default: fpnew_pkg_num_operands = 0;
+		endcase
+	endfunction
+	localparam [31:0] NUM_OPERANDS = fpnew_pkg_num_operands(OpGroup);
+	input wire IS_FIRST_MERGED;
+	input wire clk_i;
+	input wire rst_ni;
+	input wire [(NUM_OPERANDS * Width) - 1:0] operands_i;
+	input wire [(NUM_FORMATS * NUM_OPERANDS) - 1:0] is_boxed_i;
+	input wire [2:0] rnd_mode_i;
+	localparam [31:0] fpnew_pkg_OP_BITS = 4;
+	input wire [3:0] op_i;
+	input wire op_mod_i;
+	localparam [31:0] fpnew_pkg_FP_FORMAT_BITS = 2;
+	input wire [1:0] src_fmt_i;
+	input wire [1:0] dst_fmt_i;
+	localparam [31:0] fpnew_pkg_INT_FORMAT_BITS = 2;
+	input wire [1:0] int_fmt_i;
+	input wire vectorial_op_i;
+	input wire tag_i;
+	input wire in_valid_i;
+	output wire in_ready_o;
+	input wire flush_i;
+	output wire [Width - 1:0] result_o;
+	output wire [4:0] status_o;
+	output wire extension_bit_o;
+	output wire tag_o;
+	output wire out_valid_o;
+	input wire out_ready_i;
+	output wire busy_o;
+	wire [3:0] fmt_in_ready;
+	wire [3:0] fmt_out_valid;
+	wire [3:0] fmt_out_ready;
+	wire [3:0] fmt_busy;
+	wire [((Width + 6) >= 0 ? (4 * (Width + 7)) - 1 : (4 * (1 - (Width + 6))) + (Width + 5)):((Width + 6) >= 0 ? 0 : Width + 6)] fmt_outputs;
+	assign in_ready_o = in_valid_i & fmt_in_ready[dst_fmt_i];
+	localparam [0:0] fpnew_pkg_DONT_CARE = 1'b1;
+	localparam [1:0] fpnew_pkg_MERGED = 2;
+	function automatic fpnew_pkg_any_enabled_multi;
+		input reg [7:0] types;
+		input reg [0:3] cfg;
+		reg [0:1] _sv2v_jump;
+		begin
+			_sv2v_jump = 2'b00;
+			begin : sv2v_autoblock_115
+				reg [31:0] i;
+				for (i = 0; i < fpnew_pkg_NUM_FP_FORMATS; i = i + 1)
+					if (_sv2v_jump < 2'b10) begin
+						_sv2v_jump = 2'b00;
+						if (cfg[i] && (types[(3 - i) * 2+:2] == fpnew_pkg_MERGED)) begin
+							fpnew_pkg_any_enabled_multi = 1'b1;
+							_sv2v_jump = 2'b11;
+						end
+					end
+			end
+			if (_sv2v_jump != 2'b11)
+				_sv2v_jump = 2'b00;
+			if (_sv2v_jump == 2'b00) begin
+				fpnew_pkg_any_enabled_multi = 1'b0;
+				_sv2v_jump = 2'b11;
+			end
+		end
+	endfunction
+	function automatic [1:0] sv2v_cast_F6DD6;
+		input reg [1:0] inp;
+		sv2v_cast_F6DD6 = inp;
+	endfunction
+	function automatic [1:0] fpnew_pkg_get_first_enabled_multi;
+		input reg [7:0] types;
+		input reg [0:3] cfg;
+		reg [0:1] _sv2v_jump;
+		begin
+			_sv2v_jump = 2'b00;
+			begin : sv2v_autoblock_116
+				reg [31:0] i;
+				for (i = 0; i < fpnew_pkg_NUM_FP_FORMATS; i = i + 1)
+					if (_sv2v_jump < 2'b10) begin
+						_sv2v_jump = 2'b00;
+						if (cfg[i] && (types[(3 - i) * 2+:2] == fpnew_pkg_MERGED)) begin
+							fpnew_pkg_get_first_enabled_multi = sv2v_cast_F6DD6(i);
+							_sv2v_jump = 2'b11;
+						end
+					end
+			end
+			if (_sv2v_jump != 2'b11)
+				_sv2v_jump = 2'b00;
+			if (_sv2v_jump == 2'b00) begin
+				fpnew_pkg_get_first_enabled_multi = sv2v_cast_F6DD6(0);
+				_sv2v_jump = 2'b11;
+			end
+		end
+	endfunction
+	function automatic fpnew_pkg_is_first_enabled_multi;
+		input reg [1:0] fmt;
+		input reg [7:0] types;
+		input reg [0:3] cfg;
+		//reg [0:1] _sv2v_jump;
+		reg temp;
+		reg [1:0] check;
+		reg [31:0] i;
+		begin: checking
+			check[0]=00;
+			check[1]=01;
+			check[2]=10;
+			check[3]=11;
+		end
+		begin: func
+			check[0]=00;
+                        check[1]=01;
+                        check[2]=10;
+                        check[3]=11;
+			//_sv2v_jump = 2'b00;
+			//begin : sv2v_autoblock_117
+				//reg [31:0] i;
+				for (i = 0; i < fpnew_pkg_NUM_FP_FORMATS; i = i + 1) begin
+					//if (_sv2v_jump < 2'b10) begin
+						//_sv2v_jump = 2'b00;
+						if (cfg[i] && (types[(3 - i) * 2+:2] == fpnew_pkg_MERGED)) begin
+							temp = check[i]==fmt; // (sv2v_cast_F6DD6(i) == fmt);
+							//_sv2v_jump = 2'b11;
+						end else begin
+							temp = 1'b0;
+						end
+					//end
+				end
+				fpnew_pkg_is_first_enabled_multi = temp;
+			//end
+			//if (_sv2v_jump != 2'b11)
+				//_sv2v_jump = 2'b00;
+			//if (_sv2v_jump == 2'b00) begin
+				//fpnew_pkg_is_first_enabled_multi = 1'b0;
+				//_sv2v_jump = 2'b11;
+			//end
+		end
+	endfunction
+	localparam [1:0] fpnew_pkg_DISABLED = 0;
+	function automatic signed [31:0] sv2v_cast_32_signed;
+                input reg signed [31:0] inp;
+        	sv2v_cast_32_signed = inp;
+        endfunction
+	generate
+		genvar fmt;
+		function automatic signed [31:0] sv2v_cast_32_signed;
+			input reg signed [31:0] inp;
+			sv2v_cast_32_signed = inp;
+		endfunction
+		for (fmt = 0; fmt < sv2v_cast_32_signed(NUM_FORMATS); fmt = fmt + 1) begin : gen_parallel_slices
+			localparam [0:0] ANY_MERGED = fpnew_pkg_any_enabled_multi(FmtUnitTypes, FpFmtMask);
+			function automatic [1:0] sv2v_cast_F6DD6;
+				input reg [1:0] inp;
+				sv2v_cast_F6DD6 = inp;
+			endfunction
+			//localparam [0:0] IS_FIRST_MERGED = fpnew_pkg_is_first_enabled_multi(sv2v_cast_F6DD6(fmt), FmtUnitTypes, FpFmtMask);
+			if (FpFmtMask[fmt] && (FmtUnitTypes[(3 - fmt) * 2+:2] == fpnew_pkg_PARALLEL)) begin : active_format
+				wire in_valid;
+				assign in_valid = in_valid_i & (dst_fmt_i == fmt);
+				function automatic [1:0] sv2v_cast_F6DD6;
+					input reg [1:0] inp;
+					sv2v_cast_F6DD6 = inp;
+				endfunction
+				fpnew_opgroup_fmt_slice_30528 #(
+					.OpGroup(OpGroup),
+					.FpFormat(sv2v_cast_F6DD6(fmt)),
+					.Width(Width),
+					.EnableVectors(EnableVectors),
+					.NumPipeRegs(FmtPipeRegs[(3 - fmt) * 32+:32]),
+					.PipeConfig(PipeConfig)
+				) i_fmt_slice(
+					.clk_i(clk_i),
+					.rst_ni(rst_ni),
+					.operands_i(operands_i),
+					.is_boxed_i(is_boxed_i[fmt * NUM_OPERANDS+:NUM_OPERANDS]),
+					.rnd_mode_i(rnd_mode_i),
+					.op_i(op_i),
+					.op_mod_i(op_mod_i),
+					.vectorial_op_i(vectorial_op_i),
+					.tag_i(tag_i),
+					.in_valid_i(in_valid),
+					.in_ready_o(fmt_in_ready[fmt]),
+					.flush_i(flush_i),
+					.result_o(fmt_outputs[((Width + 6) >= 0 ? (fmt * ((Width + 6) >= 0 ? Width + 7 : 1 - (Width + 6))) + ((Width + 6) >= 0 ? Width + 6 : (Width + 6) - (Width + 6)) : (((fmt * ((Width + 6) >= 0 ? Width + 7 : 1 - (Width + 6))) + ((Width + 6) >= 0 ? Width + 6 : (Width + 6) - (Width + 6))) + ((Width + 6) >= 7 ? Width : 8 - (Width + 6))) - 1)-:((Width + 6) >= 7 ? Width : 8 - (Width + 6))]),
+					.status_o(fmt_outputs[((Width + 6) >= 0 ? (fmt * ((Width + 6) >= 0 ? Width + 7 : 1 - (Width + 6))) + ((Width + 6) >= 0 ? 6 : Width) : ((fmt * ((Width + 6) >= 0 ? Width + 7 : 1 - (Width + 6))) + ((Width + 6) >= 0 ? 6 : Width)) + 4)-:5]),
+					.extension_bit_o(fmt_outputs[(fmt * ((Width + 6) >= 0 ? Width + 7 : 1 - (Width + 6))) + ((Width + 6) >= 0 ? 1 : Width + 5)]),
+					.tag_o(fmt_outputs[(fmt * ((Width + 6) >= 0 ? Width + 7 : 1 - (Width + 6))) + ((Width + 6) >= 0 ? 0 : Width + 6)]),
+					.out_valid_o(fmt_out_valid[fmt]),
+					.out_ready_i(fmt_out_ready[fmt]),
+					.busy_o(fmt_busy[fmt])
+				);
+			end
+			else if ((FpFmtMask[fmt] && ANY_MERGED) && !IS_FIRST_MERGED) begin : merged_unused
+				localparam FMT = fpnew_pkg_get_first_enabled_multi(FmtUnitTypes, FpFmtMask);
+				function automatic signed [31:0] sv2v_cast_32_signed;
+					input reg signed [31:0] inp;
+					sv2v_cast_32_signed = inp;
+				endfunction
+				assign fmt_in_ready[fmt] = fmt_in_ready[sv2v_cast_32_signed(FMT)];
+				assign fmt_out_valid[fmt] = 1'b0;
+				assign fmt_busy[fmt] = 1'b0;
+				assign fmt_outputs[((Width + 6) >= 0 ? (fmt * ((Width + 6) >= 0 ? Width + 7 : 1 - (Width + 6))) + ((Width + 6) >= 0 ? Width + 6 : (Width + 6) - (Width + 6)) : (((fmt * ((Width + 6) >= 0 ? Width + 7 : 1 - (Width + 6))) + ((Width + 6) >= 0 ? Width + 6 : (Width + 6) - (Width + 6))) + ((Width + 6) >= 7 ? Width : 8 - (Width + 6))) - 1)-:((Width + 6) >= 7 ? Width : 8 - (Width + 6))] = {Width {fpnew_pkg_DONT_CARE}};
+				assign fmt_outputs[((Width + 6) >= 0 ? (fmt * ((Width + 6) >= 0 ? Width + 7 : 1 - (Width + 6))) + ((Width + 6) >= 0 ? 6 : Width) : ((fmt * ((Width + 6) >= 0 ? Width + 7 : 1 - (Width + 6))) + ((Width + 6) >= 0 ? 6 : Width)) + 4)-:5] = {fpnew_pkg_DONT_CARE, fpnew_pkg_DONT_CARE, fpnew_pkg_DONT_CARE, fpnew_pkg_DONT_CARE, fpnew_pkg_DONT_CARE};
+				assign fmt_outputs[(fmt * ((Width + 6) >= 0 ? Width + 7 : 1 - (Width + 6))) + ((Width + 6) >= 0 ? 1 : Width + 5)] = fpnew_pkg_DONT_CARE;
+				assign fmt_outputs[(fmt * ((Width + 6) >= 0 ? Width + 7 : 1 - (Width + 6))) + ((Width + 6) >= 0 ? 0 : Width + 6)] = fpnew_pkg_DONT_CARE;
+			end
+			else if (!FpFmtMask[fmt] || (FmtUnitTypes[(3 - fmt) * 2+:2] == fpnew_pkg_DISABLED)) begin : disable_fmt
+				assign fmt_in_ready[fmt] = 1'b0;
+				assign fmt_out_valid[fmt] = 1'b0;
+				assign fmt_busy[fmt] = 1'b0;
+				assign fmt_outputs[((Width + 6) >= 0 ? (fmt * ((Width + 6) >= 0 ? Width + 7 : 1 - (Width + 6))) + ((Width + 6) >= 0 ? Width + 6 : (Width + 6) - (Width + 6)) : (((fmt * ((Width + 6) >= 0 ? Width + 7 : 1 - (Width + 6))) + ((Width + 6) >= 0 ? Width + 6 : (Width + 6) - (Width + 6))) + ((Width + 6) >= 7 ? Width : 8 - (Width + 6))) - 1)-:((Width + 6) >= 7 ? Width : 8 - (Width + 6))] = {Width {fpnew_pkg_DONT_CARE}};
+				assign fmt_outputs[((Width + 6) >= 0 ? (fmt * ((Width + 6) >= 0 ? Width + 7 : 1 - (Width + 6))) + ((Width + 6) >= 0 ? 6 : Width) : ((fmt * ((Width + 6) >= 0 ? Width + 7 : 1 - (Width + 6))) + ((Width + 6) >= 0 ? 6 : Width)) + 4)-:5] = {fpnew_pkg_DONT_CARE, fpnew_pkg_DONT_CARE, fpnew_pkg_DONT_CARE, fpnew_pkg_DONT_CARE, fpnew_pkg_DONT_CARE};
+				assign fmt_outputs[(fmt * ((Width + 6) >= 0 ? Width + 7 : 1 - (Width + 6))) + ((Width + 6) >= 0 ? 1 : Width + 5)] = fpnew_pkg_DONT_CARE;
+				assign fmt_outputs[(fmt * ((Width + 6) >= 0 ? Width + 7 : 1 - (Width + 6))) + ((Width + 6) >= 0 ? 0 : Width + 6)] = fpnew_pkg_DONT_CARE;
+			end
+		end
+	endgenerate
+	function automatic signed [31:0] fpnew_pkg_maximum;
+		input reg signed [31:0] a;
+		input reg signed [31:0] b;
+		fpnew_pkg_maximum = (a > b ? a : b);
+	endfunction
+	function automatic [31:0] fpnew_pkg_get_num_regs_multi;
+		input reg [127:0] regs;
+		input reg [7:0] types;
+		input reg [0:3] cfg;
+		reg [31:0] res;
+		begin
+			res = 0;
+			begin : sv2v_autoblock_118
+				reg [31:0] i;
+				for (i = 0; i < fpnew_pkg_NUM_FP_FORMATS; i = i + 1)
+					if (cfg[i] && (types[(3 - i) * 2+:2] == fpnew_pkg_MERGED))
+						res = fpnew_pkg_maximum(res, regs[(3 - i) * 32+:32]);
+			end
+			fpnew_pkg_get_num_regs_multi = res;
+		end
+	endfunction
+	generate
+		if (fpnew_pkg_any_enabled_multi(FmtUnitTypes, FpFmtMask)) begin : gen_merged_slice
+			localparam FMT = fpnew_pkg_get_first_enabled_multi(FmtUnitTypes, FpFmtMask);
+			localparam REG = fpnew_pkg_get_num_regs_multi(FmtPipeRegs, FmtUnitTypes, FpFmtMask);
+			wire in_valid;
+			assign in_valid = in_valid_i & (FmtUnitTypes[(3 - dst_fmt_i) * 2+:2] == fpnew_pkg_MERGED);
+			fpnew_opgroup_multifmt_slice_7C482 #(
+				.OpGroup(OpGroup),
+				.Width(Width),
+				.FpFmtConfig(FpFmtMask),
+				.IntFmtConfig(IntFmtMask),
+				.EnableVectors(EnableVectors),
+				.NumPipeRegs(REG),
+				.PipeConfig(PipeConfig)
+			) i_multifmt_slice(
+				.clk_i(clk_i),
+				.rst_ni(rst_ni),
+				.operands_i(operands_i),
+				.is_boxed_i(is_boxed_i),
+				.rnd_mode_i(rnd_mode_i),
+				.op_i(op_i),
+				.op_mod_i(op_mod_i),
+				.src_fmt_i(src_fmt_i),
+				.dst_fmt_i(dst_fmt_i),
+				.int_fmt_i(int_fmt_i),
+				.vectorial_op_i(vectorial_op_i),
+				.tag_i(tag_i),
+				.in_valid_i(in_valid),
+				.in_ready_o(fmt_in_ready[FMT]),
+				.flush_i(flush_i),
+				.result_o(fmt_outputs[((Width + 6) >= 0 ? (FMT * ((Width + 6) >= 0 ? Width + 7 : 1 - (Width + 6))) + ((Width + 6) >= 0 ? Width + 6 : (Width + 6) - (Width + 6)) : (((FMT * ((Width + 6) >= 0 ? Width + 7 : 1 - (Width + 6))) + ((Width + 6) >= 0 ? Width + 6 : (Width + 6) - (Width + 6))) + ((Width + 6) >= 7 ? Width : 8 - (Width + 6))) - 1)-:((Width + 6) >= 7 ? Width : 8 - (Width + 6))]),
+				.status_o(fmt_outputs[((Width + 6) >= 0 ? (FMT * ((Width + 6) >= 0 ? Width + 7 : 1 - (Width + 6))) + ((Width + 6) >= 0 ? 6 : Width) : ((FMT * ((Width + 6) >= 0 ? Width + 7 : 1 - (Width + 6))) + ((Width + 6) >= 0 ? 6 : Width)) + 4)-:5]),
+				.extension_bit_o(fmt_outputs[(FMT * ((Width + 6) >= 0 ? Width + 7 : 1 - (Width + 6))) + ((Width + 6) >= 0 ? 1 : Width + 5)]),
+				.tag_o(fmt_outputs[(FMT * ((Width + 6) >= 0 ? Width + 7 : 1 - (Width + 6))) + ((Width + 6) >= 0 ? 0 : Width + 6)]),
+				.out_valid_o(fmt_out_valid[FMT]),
+				.out_ready_i(fmt_out_ready[FMT]),
+				.busy_o(fmt_busy[FMT])
+			);
+		end
+	endgenerate
+	wire [Width + 6:0] arbiter_output;
+	rr_arb_tree_252F1_F315E #(
+		.DataType_Width(Width),
+		.NumIn(NUM_FORMATS),
+		.AxiVldRdy(1'b1)
+	) i_arbiter(
+		.clk_i(clk_i),
+		.rst_ni(rst_ni),
+		.flush_i(flush_i),
+		.rr_i({$unsigned(2) {1'sb0}}),
+		.req_i(fmt_out_valid),
+		.gnt_o(fmt_out_ready),
+		.data_i(fmt_outputs),
+		.gnt_i(out_ready_i),
+		.req_o(out_valid_o),
+		.data_o(arbiter_output),
+		.idx_o()
+	);
+	assign result_o = arbiter_output[Width + 6-:((Width + 6) >= 7 ? Width : 8 - (Width + 6))];
+	assign status_o = arbiter_output[6-:5];
+	assign extension_bit_o = arbiter_output[1];
+	assign tag_o = arbiter_output[0];
+	assign busy_o = |fmt_busy;
+endmodule*/
+module fpnew_opgroup_block_BE2AB (
+	clk_i,
+	rst_ni,
+	operands_i,
+	is_boxed_i,
+	rnd_mode_i,
+	op_i,
+	op_mod_i,
+	src_fmt_i,
+	dst_fmt_i,
+	int_fmt_i,
+	vectorial_op_i,
+	tag_i,
+	in_valid_i,
+	in_ready_o,
+	flush_i,
+	result_o,
+	status_o,
+	extension_bit_o,
+	tag_o,
+	out_valid_o,
+	out_ready_i,
+	busy_o
+);
+	localparam [1:0] fpnew_pkg_ADDMUL = 0;
+	parameter [1:0] OpGroup = fpnew_pkg_ADDMUL;
+	parameter [31:0] Width = 32;
+	parameter [0:0] EnableVectors = 1'b1;
+	localparam [31:0] fpnew_pkg_NUM_FP_FORMATS = 4;
+	parameter [0:3] FpFmtMask = 1'sb1;
+	localparam [31:0] fpnew_pkg_NUM_INT_FORMATS = 4;
+	parameter [0:3] IntFmtMask = 1'sb1;
+	parameter [127:0] FmtPipeRegs = {fpnew_pkg_NUM_FP_FORMATS {32'd0}};
+	localparam [1:0] fpnew_pkg_PARALLEL = 1;
+	parameter [7:0] FmtUnitTypes = {fpnew_pkg_NUM_FP_FORMATS {fpnew_pkg_PARALLEL}};
+	localparam [1:0] fpnew_pkg_BEFORE = 0;
+	parameter [1:0] PipeConfig = fpnew_pkg_BEFORE;
+	localparam [31:0] NUM_FORMATS = fpnew_pkg_NUM_FP_FORMATS;
+	localparam [1:0] fpnew_pkg_CONV = 3;
+	localparam [1:0] fpnew_pkg_DIVSQRT = 1;
+	localparam [1:0] fpnew_pkg_NONCOMP = 2;
+	function automatic [31:0] fpnew_pkg_num_operands;
+		input reg [1:0] grp;
+		case (grp)
+			fpnew_pkg_ADDMUL: fpnew_pkg_num_operands = 3;
+			fpnew_pkg_DIVSQRT: fpnew_pkg_num_operands = 2;
+			fpnew_pkg_NONCOMP: fpnew_pkg_num_operands = 2;
+			fpnew_pkg_CONV: fpnew_pkg_num_operands = 3;
+			default: fpnew_pkg_num_operands = 0;
+		endcase
+	endfunction
+	localparam [31:0] NUM_OPERANDS = fpnew_pkg_num_operands(OpGroup);
+	input wire clk_i;
+	input wire rst_ni;
+	input wire [(NUM_OPERANDS * Width) - 1:0] operands_i;
+	input wire [(NUM_FORMATS * NUM_OPERANDS) - 1:0] is_boxed_i;
+	input wire [2:0] rnd_mode_i;
+	localparam [31:0] fpnew_pkg_OP_BITS = 4;
+	input wire [3:0] op_i;
+	input wire op_mod_i;
+	localparam [31:0] fpnew_pkg_FP_FORMAT_BITS = 2;
+	input wire [1:0] src_fmt_i;
+	input wire [1:0] dst_fmt_i;
+	localparam [31:0] fpnew_pkg_INT_FORMAT_BITS = 2;
+	input wire [1:0] int_fmt_i;
+	input wire vectorial_op_i;
+	input wire tag_i;
+	input wire in_valid_i;
+	output wire in_ready_o;
+	input wire flush_i;
+	output wire [Width - 1:0] result_o;
+	output wire [4:0] status_o;
+	output wire extension_bit_o;
+	output wire tag_o;
+	output wire out_valid_o;
+	input wire out_ready_i;
+	output wire busy_o;
+	wire [3:0] fmt_in_ready;
+	wire [3:0] fmt_out_valid;
+	wire [3:0] fmt_out_ready;
+	wire [3:0] fmt_busy;
+	wire [((Width + 6) >= 0 ? (4 * (Width + 7)) - 1 : (4 * (1 - (Width + 6))) + (Width + 5)):((Width + 6) >= 0 ? 0 : Width + 6)] fmt_outputs;
+	assign in_ready_o = in_valid_i & fmt_in_ready[dst_fmt_i];
+	localparam [0:0] fpnew_pkg_DONT_CARE = 1'b1;
+	localparam [1:0] fpnew_pkg_MERGED = 2;
+	function automatic fpnew_pkg_any_enabled_multi;
+		input reg [7:0] types;
+		input reg [0:3] cfg;
+		reg [0:1] _sv2v_jump;
+		begin
+			_sv2v_jump = 2'b00;
+			begin : sv2v_autoblock_115
+				reg [31:0] i;
+				for (i = 0; i < fpnew_pkg_NUM_FP_FORMATS; i = i + 1)
+					if (_sv2v_jump < 2'b10) begin
+						_sv2v_jump = 2'b00;
+						if (cfg[i] && (types[(3 - i) * 2+:2] == fpnew_pkg_MERGED)) begin
+							fpnew_pkg_any_enabled_multi = 1'b1;
+							_sv2v_jump = 2'b11;
+						end
+					end
+			end
+			if (_sv2v_jump != 2'b11)
+				_sv2v_jump = 2'b00;
+			if (_sv2v_jump == 2'b00) begin
+				fpnew_pkg_any_enabled_multi = 1'b0;
+				_sv2v_jump = 2'b11;
+			end
+		end
+	endfunction
+	function automatic [1:0] sv2v_cast_F6DD6;
+		input reg [1:0] inp;
+		sv2v_cast_F6DD6 = inp;
+	endfunction
+	function automatic [1:0] fpnew_pkg_get_first_enabled_multi;
+		input reg [7:0] types;
+		input reg [0:3] cfg;
+		reg [0:1] _sv2v_jump;
+		begin
+			_sv2v_jump = 2'b00;
+			begin : sv2v_autoblock_116
+				reg [31:0] i;
+				for (i = 0; i < fpnew_pkg_NUM_FP_FORMATS; i = i + 1)
+					if (_sv2v_jump < 2'b10) begin
+						_sv2v_jump = 2'b00;
+						if (cfg[i] && (types[(3 - i) * 2+:2] == fpnew_pkg_MERGED)) begin
+							fpnew_pkg_get_first_enabled_multi = sv2v_cast_F6DD6(i);
+							_sv2v_jump = 2'b11;
+						end
+					end
+			end
+			if (_sv2v_jump != 2'b11)
+				_sv2v_jump = 2'b00;
+			if (_sv2v_jump == 2'b00) begin
+				fpnew_pkg_get_first_enabled_multi = sv2v_cast_F6DD6(0);
+				_sv2v_jump = 2'b11;
+			end
+		end
+	endfunction
+	function automatic [31:0] fpnew_pkg_merged_gen;
+		input reg [1:0] grp;
+		case (grp)
+			fpnew_pkg_ADDMUL, fpnew_pkg_NONCOMP: fpnew_pkg_merged_gen = 0;
+			fpnew_pkg_DIVSQRT, fpnew_pkg_CONV: fpnew_pkg_merged_gen = 1;
+			default: fpnew_pkg_merged_gen = 0;
+		endcase
+	endfunction
+	localparam [1:0] fpnew_pkg_DISABLED = 0;
+	generate
+		genvar fmt;
+		function automatic signed [31:0] sv2v_cast_32_signed;
+			input reg signed [31:0] inp;
+			sv2v_cast_32_signed = inp;
+		endfunction
+		for (fmt = 0; fmt < sv2v_cast_32_signed(NUM_FORMATS); fmt = fmt + 1) begin : gen_parallel_slices
+			localparam [0:0] ANY_MERGED = fpnew_pkg_any_enabled_multi(FmtUnitTypes, FpFmtMask);
+			localparam [0:0] IS_FIRST_MERGED = fpnew_pkg_merged_gen(OpGroup);
+			if (FpFmtMask[fmt] && (FmtUnitTypes[(3 - fmt) * 2+:2] == fpnew_pkg_PARALLEL)) begin : active_format
+				wire in_valid;
+				assign in_valid = in_valid_i & (dst_fmt_i == fmt);
+				function automatic [1:0] sv2v_cast_F6DD6;
+					input reg [1:0] inp;
+					sv2v_cast_F6DD6 = inp;
+				endfunction
+				fpnew_opgroup_fmt_slice_30528 #(
+					.OpGroup(OpGroup),
+					.FpFormat(sv2v_cast_F6DD6(fmt)),
+					.Width(Width),
+					.EnableVectors(EnableVectors),
+					.NumPipeRegs(FmtPipeRegs[(3 - fmt) * 32+:32]),
+					.PipeConfig(PipeConfig)
+				) i_fmt_slice(
+					.clk_i(clk_i),
+					.rst_ni(rst_ni),
+					.operands_i(operands_i),
+					.is_boxed_i(is_boxed_i[fmt * NUM_OPERANDS+:NUM_OPERANDS]),
+					.rnd_mode_i(rnd_mode_i),
+					.op_i(op_i),
+					.op_mod_i(op_mod_i),
+					.vectorial_op_i(vectorial_op_i),
+					.tag_i(tag_i),
+					.in_valid_i(in_valid),
+					.in_ready_o(fmt_in_ready[fmt]),
+					.flush_i(flush_i),
+					.result_o(fmt_outputs[((Width + 6) >= 0 ? (fmt * ((Width + 6) >= 0 ? Width + 7 : 1 - (Width + 6))) + ((Width + 6) >= 0 ? Width + 6 : (Width + 6) - (Width + 6)) : (((fmt * ((Width + 6) >= 0 ? Width + 7 : 1 - (Width + 6))) + ((Width + 6) >= 0 ? Width + 6 : (Width + 6) - (Width + 6))) + ((Width + 6) >= 7 ? Width : 8 - (Width + 6))) - 1)-:((Width + 6) >= 7 ? Width : 8 - (Width + 6))]),
+					.status_o(fmt_outputs[((Width + 6) >= 0 ? (fmt * ((Width + 6) >= 0 ? Width + 7 : 1 - (Width + 6))) + ((Width + 6) >= 0 ? 6 : Width) : ((fmt * ((Width + 6) >= 0 ? Width + 7 : 1 - (Width + 6))) + ((Width + 6) >= 0 ? 6 : Width)) + 4)-:5]),
+					.extension_bit_o(fmt_outputs[(fmt * ((Width + 6) >= 0 ? Width + 7 : 1 - (Width + 6))) + ((Width + 6) >= 0 ? 1 : Width + 5)]),
+					.tag_o(fmt_outputs[(fmt * ((Width + 6) >= 0 ? Width + 7 : 1 - (Width + 6))) + ((Width + 6) >= 0 ? 0 : Width + 6)]),
+					.out_valid_o(fmt_out_valid[fmt]),
+					.out_ready_i(fmt_out_ready[fmt]),
+					.busy_o(fmt_busy[fmt])
+				);
+			end
+			else if ((FpFmtMask[fmt] && ANY_MERGED) && !IS_FIRST_MERGED) begin : merged_unused
+				localparam FMT = fpnew_pkg_get_first_enabled_multi(FmtUnitTypes, FpFmtMask);
+				function automatic signed [31:0] sv2v_cast_32_signed;
+					input reg signed [31:0] inp;
+					sv2v_cast_32_signed = inp;
+				endfunction
+				assign fmt_in_ready[fmt] = fmt_in_ready[sv2v_cast_32_signed(FMT)];
+				assign fmt_out_valid[fmt] = 1'b0;
+				assign fmt_busy[fmt] = 1'b0;
+				assign fmt_outputs[((Width + 6) >= 0 ? (fmt * ((Width + 6) >= 0 ? Width + 7 : 1 - (Width + 6))) + ((Width + 6) >= 0 ? Width + 6 : (Width + 6) - (Width + 6)) : (((fmt * ((Width + 6) >= 0 ? Width + 7 : 1 - (Width + 6))) + ((Width + 6) >= 0 ? Width + 6 : (Width + 6) - (Width + 6))) + ((Width + 6) >= 7 ? Width : 8 - (Width + 6))) - 1)-:((Width + 6) >= 7 ? Width : 8 - (Width + 6))] = {Width {fpnew_pkg_DONT_CARE}};
+				assign fmt_outputs[((Width + 6) >= 0 ? (fmt * ((Width + 6) >= 0 ? Width + 7 : 1 - (Width + 6))) + ((Width + 6) >= 0 ? 6 : Width) : ((fmt * ((Width + 6) >= 0 ? Width + 7 : 1 - (Width + 6))) + ((Width + 6) >= 0 ? 6 : Width)) + 4)-:5] = {fpnew_pkg_DONT_CARE, fpnew_pkg_DONT_CARE, fpnew_pkg_DONT_CARE, fpnew_pkg_DONT_CARE, fpnew_pkg_DONT_CARE};
+				assign fmt_outputs[(fmt * ((Width + 6) >= 0 ? Width + 7 : 1 - (Width + 6))) + ((Width + 6) >= 0 ? 1 : Width + 5)] = fpnew_pkg_DONT_CARE;
+				assign fmt_outputs[(fmt * ((Width + 6) >= 0 ? Width + 7 : 1 - (Width + 6))) + ((Width + 6) >= 0 ? 0 : Width + 6)] = fpnew_pkg_DONT_CARE;
+			end
+			else if (!FpFmtMask[fmt] || (FmtUnitTypes[(3 - fmt) * 2+:2] == fpnew_pkg_DISABLED)) begin : disable_fmt
+				assign fmt_in_ready[fmt] = 1'b0;
+				assign fmt_out_valid[fmt] = 1'b0;
+				assign fmt_busy[fmt] = 1'b0;
+				assign fmt_outputs[((Width + 6) >= 0 ? (fmt * ((Width + 6) >= 0 ? Width + 7 : 1 - (Width + 6))) + ((Width + 6) >= 0 ? Width + 6 : (Width + 6) - (Width + 6)) : (((fmt * ((Width + 6) >= 0 ? Width + 7 : 1 - (Width + 6))) + ((Width + 6) >= 0 ? Width + 6 : (Width + 6) - (Width + 6))) + ((Width + 6) >= 7 ? Width : 8 - (Width + 6))) - 1)-:((Width + 6) >= 7 ? Width : 8 - (Width + 6))] = {Width {fpnew_pkg_DONT_CARE}};
+				assign fmt_outputs[((Width + 6) >= 0 ? (fmt * ((Width + 6) >= 0 ? Width + 7 : 1 - (Width + 6))) + ((Width + 6) >= 0 ? 6 : Width) : ((fmt * ((Width + 6) >= 0 ? Width + 7 : 1 - (Width + 6))) + ((Width + 6) >= 0 ? 6 : Width)) + 4)-:5] = {fpnew_pkg_DONT_CARE, fpnew_pkg_DONT_CARE, fpnew_pkg_DONT_CARE, fpnew_pkg_DONT_CARE, fpnew_pkg_DONT_CARE};
+				assign fmt_outputs[(fmt * ((Width + 6) >= 0 ? Width + 7 : 1 - (Width + 6))) + ((Width + 6) >= 0 ? 1 : Width + 5)] = fpnew_pkg_DONT_CARE;
+				assign fmt_outputs[(fmt * ((Width + 6) >= 0 ? Width + 7 : 1 - (Width + 6))) + ((Width + 6) >= 0 ? 0 : Width + 6)] = fpnew_pkg_DONT_CARE;
+			end
+		end
+	endgenerate
+	function automatic signed [31:0] fpnew_pkg_maximum;
+		input reg signed [31:0] a;
+		input reg signed [31:0] b;
+		fpnew_pkg_maximum = (a > b ? a : b);
+	endfunction
+	function automatic [31:0] fpnew_pkg_get_num_regs_multi;
+		input reg [127:0] regs;
+		input reg [7:0] types;
+		input reg [0:3] cfg;
+		reg [31:0] res;
+		begin
+			res = 0;
+			begin : sv2v_autoblock_117
+				reg [31:0] i;
+				for (i = 0; i < fpnew_pkg_NUM_FP_FORMATS; i = i + 1)
+					if (cfg[i] && (types[(3 - i) * 2+:2] == fpnew_pkg_MERGED))
+						res = fpnew_pkg_maximum(res, regs[(3 - i) * 32+:32]);
+			end
+			fpnew_pkg_get_num_regs_multi = res;
+		end
+	endfunction
+	generate
+		if (fpnew_pkg_any_enabled_multi(FmtUnitTypes, FpFmtMask)) begin : gen_merged_slice
+			localparam FMT = fpnew_pkg_get_first_enabled_multi(FmtUnitTypes, FpFmtMask);
+			localparam REG = fpnew_pkg_get_num_regs_multi(FmtPipeRegs, FmtUnitTypes, FpFmtMask);
+			wire in_valid;
+			assign in_valid = in_valid_i & (FmtUnitTypes[(3 - dst_fmt_i) * 2+:2] == fpnew_pkg_MERGED);
+			fpnew_opgroup_multifmt_slice_7C482 #(
+				.OpGroup(OpGroup),
+				.Width(Width),
+				.FpFmtConfig(FpFmtMask),
+				.IntFmtConfig(IntFmtMask),
+				.EnableVectors(EnableVectors),
+				.NumPipeRegs(REG),
+				.PipeConfig(PipeConfig)
+			) i_multifmt_slice(
+				.clk_i(clk_i),
+				.rst_ni(rst_ni),
+				.operands_i(operands_i),
+				.is_boxed_i(is_boxed_i),
+				.rnd_mode_i(rnd_mode_i),
+				.op_i(op_i),
+				.op_mod_i(op_mod_i),
+				.src_fmt_i(src_fmt_i),
+				.dst_fmt_i(dst_fmt_i),
+				.int_fmt_i(int_fmt_i),
+				.vectorial_op_i(vectorial_op_i),
+				.tag_i(tag_i),
+				.in_valid_i(in_valid),
+				.in_ready_o(fmt_in_ready[FMT]),
+				.flush_i(flush_i),
+				.result_o(fmt_outputs[((Width + 6) >= 0 ? (FMT * ((Width + 6) >= 0 ? Width + 7 : 1 - (Width + 6))) + ((Width + 6) >= 0 ? Width + 6 : (Width + 6) - (Width + 6)) : (((FMT * ((Width + 6) >= 0 ? Width + 7 : 1 - (Width + 6))) + ((Width + 6) >= 0 ? Width + 6 : (Width + 6) - (Width + 6))) + ((Width + 6) >= 7 ? Width : 8 - (Width + 6))) - 1)-:((Width + 6) >= 7 ? Width : 8 - (Width + 6))]),
+				.status_o(fmt_outputs[((Width + 6) >= 0 ? (FMT * ((Width + 6) >= 0 ? Width + 7 : 1 - (Width + 6))) + ((Width + 6) >= 0 ? 6 : Width) : ((FMT * ((Width + 6) >= 0 ? Width + 7 : 1 - (Width + 6))) + ((Width + 6) >= 0 ? 6 : Width)) + 4)-:5]),
+				.extension_bit_o(fmt_outputs[(FMT * ((Width + 6) >= 0 ? Width + 7 : 1 - (Width + 6))) + ((Width + 6) >= 0 ? 1 : Width + 5)]),
+				.tag_o(fmt_outputs[(FMT * ((Width + 6) >= 0 ? Width + 7 : 1 - (Width + 6))) + ((Width + 6) >= 0 ? 0 : Width + 6)]),
+				.out_valid_o(fmt_out_valid[FMT]),
+				.out_ready_i(fmt_out_ready[FMT]),
+				.busy_o(fmt_busy[FMT])
+			);
+		end
+	endgenerate
+	wire [Width + 6:0] arbiter_output;
+	rr_arb_tree_252F1_F315E #(
+		.DataType_Width(Width),
+		.NumIn(NUM_FORMATS),
+		.AxiVldRdy(1'b1)
+	) i_arbiter(
+		.clk_i(clk_i),
+		.rst_ni(rst_ni),
+		.flush_i(flush_i),
+		.rr_i({$unsigned(2) {1'sb0}}),
+		.req_i(fmt_out_valid),
+		.gnt_o(fmt_out_ready),
+		.data_i(fmt_outputs),
+		.gnt_i(out_ready_i),
+		.req_o(out_valid_o),
+		.data_o(arbiter_output),
+		.idx_o()
+	);
+	assign result_o = arbiter_output[Width + 6-:((Width + 6) >= 7 ? Width : 8 - (Width + 6))];
+	assign status_o = arbiter_output[6-:5];
+	assign extension_bit_o = arbiter_output[1];
+	assign tag_o = arbiter_output[0];
+	assign busy_o = |fmt_busy;
+endmodule
+module fpnew_opgroup_fmt_slice_30528 (
+	clk_i,
+	rst_ni,
+	operands_i,
+	is_boxed_i,
+	rnd_mode_i,
+	op_i,
+	op_mod_i,
+	vectorial_op_i,
+	tag_i,
+	in_valid_i,
+	in_ready_o,
+	flush_i,
+	result_o,
+	status_o,
+	extension_bit_o,
+	tag_o,
+	out_valid_o,
+	out_ready_i,
+	busy_o
+);
+	localparam [1:0] fpnew_pkg_ADDMUL = 0;
+	parameter [1:0] OpGroup = fpnew_pkg_ADDMUL;
+	localparam [31:0] fpnew_pkg_NUM_FP_FORMATS = 4;
+	localparam [31:0] fpnew_pkg_FP_FORMAT_BITS = 2;
+	function automatic [1:0] sv2v_cast_CA66C;
+		input reg [1:0] inp;
+		sv2v_cast_CA66C = inp;
+	endfunction
+	parameter [1:0] FpFormat = sv2v_cast_CA66C(0);
+	parameter [31:0] Width = 32;
+	parameter [0:0] EnableVectors = 1'b1;
+	parameter [31:0] NumPipeRegs = 0;
+	localparam [1:0] fpnew_pkg_BEFORE = 0;
+	parameter [1:0] PipeConfig = fpnew_pkg_BEFORE;
+	localparam [1:0] fpnew_pkg_CONV = 3;
+	localparam [1:0] fpnew_pkg_DIVSQRT = 1;
+	localparam [1:0] fpnew_pkg_NONCOMP = 2;
+	function automatic [31:0] fpnew_pkg_num_operands;
+		input reg [1:0] grp;
+		case (grp)
+			fpnew_pkg_ADDMUL: fpnew_pkg_num_operands = 3;
+			fpnew_pkg_DIVSQRT: fpnew_pkg_num_operands = 2;
+			fpnew_pkg_NONCOMP: fpnew_pkg_num_operands = 2;
+			fpnew_pkg_CONV: fpnew_pkg_num_operands = 3;
+			default: fpnew_pkg_num_operands = 0;
+		endcase
+	endfunction
+	localparam [31:0] NUM_OPERANDS = fpnew_pkg_num_operands(OpGroup);
+	input wire clk_i;
+	input wire rst_ni;
+	input wire [(NUM_OPERANDS * Width) - 1:0] operands_i;
+	input wire [NUM_OPERANDS - 1:0] is_boxed_i;
+	input wire [2:0] rnd_mode_i;
+	localparam [31:0] fpnew_pkg_OP_BITS = 4;
+	input wire [3:0] op_i;
+	input wire op_mod_i;
+	input wire vectorial_op_i;
+	input wire tag_i;
+	input wire in_valid_i;
+	output wire in_ready_o;
+	input wire flush_i;
+	output wire [Width - 1:0] result_o;
+	output reg [4:0] status_o;
+	output wire extension_bit_o;
+	output wire tag_o;
+	output wire out_valid_o;
+	input wire out_ready_i;
+	output wire busy_o;
+	localparam [255:0] fpnew_pkg_FP_ENCODINGS = 256'h00000008000000170000000b00000034000000050000000a0000000500000002;
+	function automatic [31:0] fpnew_pkg_fp_width;
+		input reg [1:0] fmt;
+		fpnew_pkg_fp_width = (fpnew_pkg_FP_ENCODINGS[((3 - fmt) * 64) + 63-:32] + fpnew_pkg_FP_ENCODINGS[((3 - fmt) * 64) + 31-:32]) + 1;
+	endfunction
+	localparam [31:0] FP_WIDTH = fpnew_pkg_fp_width(FpFormat);
+	function automatic [31:0] fpnew_pkg_num_lanes;
+		input reg [31:0] width;
+		input reg [1:0] fmt;
+		input reg vec;
+		fpnew_pkg_num_lanes = (vec ? width / fpnew_pkg_fp_width(fmt) : 1);
+	endfunction
+	localparam [31:0] NUM_LANES = fpnew_pkg_num_lanes(Width, FpFormat, EnableVectors);
+	wire [NUM_LANES - 1:0] lane_in_ready;
+	wire [NUM_LANES - 1:0] lane_out_valid;
+	wire vectorial_op;
+	wire [(NUM_LANES * FP_WIDTH) - 1:0] slice_result;
+	wire [Width - 1:0] slice_regular_result;
+	wire [Width - 1:0] slice_class_result;
+	wire [Width - 1:0] slice_vec_class_result;
+	wire [(NUM_LANES * 5) - 1:0] lane_status;
+	wire [NUM_LANES - 1:0] lane_ext_bit;
+	wire [(NUM_LANES * 10) - 1:0] lane_class_mask;
+	wire [NUM_LANES - 1:0] lane_tags;
+	wire [NUM_LANES - 1:0] lane_vectorial;
+	wire [NUM_LANES - 1:0] lane_busy;
+	wire [NUM_LANES - 1:0] lane_is_class;
+	wire result_is_vector;
+	wire result_is_class;
+	assign in_ready_o = lane_in_ready[0];
+	assign vectorial_op = vectorial_op_i & EnableVectors;
+	localparam [9:0] fpnew_pkg_NEGINF = 10'b0000000001;
+	localparam [9:0] fpnew_pkg_NEGNORM = 10'b0000000010;
+	localparam [9:0] fpnew_pkg_NEGSUBNORM = 10'b0000000100;
+	localparam [9:0] fpnew_pkg_NEGZERO = 10'b0000001000;
+	localparam [9:0] fpnew_pkg_POSINF = 10'b0010000000;
+	localparam [9:0] fpnew_pkg_POSNORM = 10'b0001000000;
+	localparam [9:0] fpnew_pkg_POSSUBNORM = 10'b0000100000;
+	localparam [9:0] fpnew_pkg_POSZERO = 10'b0000010000;
+	localparam [9:0] fpnew_pkg_QNAN = 10'b1000000000;
+	localparam [9:0] fpnew_pkg_SNAN = 10'b0100000000;
+	generate
+		genvar lane;
+		function automatic signed [31:0] sv2v_cast_32_signed;
+			input reg signed [31:0] inp;
+			sv2v_cast_32_signed = inp;
+		endfunction
+		for (lane = 0; lane < sv2v_cast_32_signed(NUM_LANES); lane = lane + 1) begin : gen_num_lanes
+			wire [FP_WIDTH - 1:0] local_result;
+			wire local_sign;
+			if ((lane == 0) || EnableVectors) begin : active_lane
+				wire in_valid;
+				wire out_valid;
+				wire out_ready;
+				reg [(NUM_OPERANDS * FP_WIDTH) - 1:0] local_operands;
+				wire [FP_WIDTH - 1:0] op_result;
+				wire [4:0] op_status;
+				assign in_valid = in_valid_i & ((lane == 0) | vectorial_op);
+				function automatic signed [31:0] sv2v_cast_32_signed;
+					input reg signed [31:0] inp;
+					sv2v_cast_32_signed = inp;
+				endfunction
+				always @(*) begin : prepare_input
+					begin : sv2v_autoblock_119
+						reg signed [31:0] i;
+						for (i = 0; i < sv2v_cast_32_signed(NUM_OPERANDS); i = i + 1)
+							local_operands[i * FP_WIDTH+:FP_WIDTH] = operands_i[(i * Width) + (((($unsigned(lane) + 1) * FP_WIDTH) - 1) >= ($unsigned(lane) * FP_WIDTH) ? (($unsigned(lane) + 1) * FP_WIDTH) - 1 : (((($unsigned(lane) + 1) * FP_WIDTH) - 1) + (((($unsigned(lane) + 1) * FP_WIDTH) - 1) >= ($unsigned(lane) * FP_WIDTH) ? (((($unsigned(lane) + 1) * FP_WIDTH) - 1) - ($unsigned(lane) * FP_WIDTH)) + 1 : (($unsigned(lane) * FP_WIDTH) - ((($unsigned(lane) + 1) * FP_WIDTH) - 1)) + 1)) - 1)-:(((($unsigned(lane) + 1) * FP_WIDTH) - 1) >= ($unsigned(lane) * FP_WIDTH) ? (((($unsigned(lane) + 1) * FP_WIDTH) - 1) - ($unsigned(lane) * FP_WIDTH)) + 1 : (($unsigned(lane) * FP_WIDTH) - ((($unsigned(lane) + 1) * FP_WIDTH) - 1)) + 1)];
+					end
+				end
+				if (OpGroup == fpnew_pkg_ADDMUL) begin : lane_instance
+					fpnew_fma_B2D03 #(
+						.FpFormat(FpFormat),
+						.NumPipeRegs(NumPipeRegs),
+						.PipeConfig(PipeConfig)
+					) i_fma(
+						.clk_i(clk_i),
+						.rst_ni(rst_ni),
+						.operands_i(local_operands),
+						.is_boxed_i(is_boxed_i[NUM_OPERANDS - 1:0]),
+						.rnd_mode_i(rnd_mode_i),
+						.op_i(op_i),
+						.op_mod_i(op_mod_i),
+						.tag_i(tag_i),
+						.aux_i(vectorial_op),
+						.in_valid_i(in_valid),
+						.in_ready_o(lane_in_ready[lane]),
+						.flush_i(flush_i),
+						.result_o(op_result),
+						.status_o(op_status),
+						.extension_bit_o(lane_ext_bit[lane]),
+						.tag_o(lane_tags[lane]),
+						.aux_o(lane_vectorial[lane]),
+						.out_valid_o(out_valid),
+						.out_ready_i(out_ready),
+						.busy_o(lane_busy[lane])
+					);
+					assign lane_is_class[lane] = 1'b0;
+					assign lane_class_mask[lane * 10+:10] = fpnew_pkg_NEGINF;
+				end
+				else if (OpGroup == fpnew_pkg_DIVSQRT) ;
+				else if (OpGroup == fpnew_pkg_NONCOMP) begin : lane_instance
+					fpnew_noncomp_6DFAC #(
+						.FpFormat(FpFormat),
+						.NumPipeRegs(NumPipeRegs),
+						.PipeConfig(PipeConfig)
+					) i_noncomp(
+						.clk_i(clk_i),
+						.rst_ni(rst_ni),
+						.operands_i(local_operands),
+						.is_boxed_i(is_boxed_i[NUM_OPERANDS - 1:0]),
+						.rnd_mode_i(rnd_mode_i),
+						.op_i(op_i),
+						.op_mod_i(op_mod_i),
+						.tag_i(tag_i),
+						.aux_i(vectorial_op),
+						.in_valid_i(in_valid),
+						.in_ready_o(lane_in_ready[lane]),
+						.flush_i(flush_i),
+						.result_o(op_result),
+						.status_o(op_status),
+						.extension_bit_o(lane_ext_bit[lane]),
+						.class_mask_o(lane_class_mask[lane * 10+:10]),
+						.is_class_o(lane_is_class[lane]),
+						.tag_o(lane_tags[lane]),
+						.aux_o(lane_vectorial[lane]),
+						.out_valid_o(out_valid),
+						.out_ready_i(out_ready),
+						.busy_o(lane_busy[lane])
+					);
+				end
+				assign out_ready = out_ready_i & ((lane == 0) | result_is_vector);
+				assign lane_out_valid[lane] = out_valid & ((lane == 0) | result_is_vector);
+				assign local_result = (lane_out_valid[lane] ? op_result : {FP_WIDTH {lane_ext_bit[0]}});
+				assign lane_status[lane * 5+:5] = (lane_out_valid[lane] ? op_status : {5 {1'sb0}});
+			end
+			else begin
+				assign lane_out_valid[lane] = 1'b0;
+				assign lane_in_ready[lane] = 1'b0;
+				assign local_result = {FP_WIDTH {lane_ext_bit[0]}};
+				assign lane_status[lane * 5+:5] = {5 {1'sb0}};
+				assign lane_busy[lane] = 1'b0;
+				assign lane_is_class[lane] = 1'b0;
+			end
+			assign slice_result[(($unsigned(lane) + 1) * FP_WIDTH) - 1:$unsigned(lane) * FP_WIDTH] = local_result;
+			if (((lane + 1) * 8) <= Width) begin : vectorial_class
+				assign local_sign = (((lane_class_mask[lane * 10+:10] == fpnew_pkg_NEGINF) || (lane_class_mask[lane * 10+:10] == fpnew_pkg_NEGNORM)) || (lane_class_mask[lane * 10+:10] == fpnew_pkg_NEGSUBNORM)) || (lane_class_mask[lane * 10+:10] == fpnew_pkg_NEGZERO);
+				assign slice_vec_class_result[((lane + 1) * 8) - 1:lane * 8] = {local_sign, ~local_sign, lane_class_mask[lane * 10+:10] == fpnew_pkg_QNAN, lane_class_mask[lane * 10+:10] == fpnew_pkg_SNAN, (lane_class_mask[lane * 10+:10] == fpnew_pkg_POSZERO) || (lane_class_mask[lane * 10+:10] == fpnew_pkg_NEGZERO), (lane_class_mask[lane * 10+:10] == fpnew_pkg_POSSUBNORM) || (lane_class_mask[lane * 10+:10] == fpnew_pkg_NEGSUBNORM), (lane_class_mask[lane * 10+:10] == fpnew_pkg_POSNORM) || (lane_class_mask[lane * 10+:10] == fpnew_pkg_NEGNORM), (lane_class_mask[lane * 10+:10] == fpnew_pkg_POSINF) || (lane_class_mask[lane * 10+:10] == fpnew_pkg_NEGINF)};
+			end
+		end
+	endgenerate
+	assign result_is_vector = lane_vectorial[0];
+	assign result_is_class = lane_is_class[0];
+	assign slice_regular_result = $signed({extension_bit_o, slice_result});
+	localparam [31:0] CLASS_VEC_BITS = ((NUM_LANES * 8) > Width ? 8 * (Width / 8) : NUM_LANES * 8);
+	generate
+		if (CLASS_VEC_BITS < Width) begin : pad_vectorial_class
+			assign slice_vec_class_result[Width - 1:CLASS_VEC_BITS] = {((Width - 1) >= CLASS_VEC_BITS ? ((Width - 1) - CLASS_VEC_BITS) + 1 : (CLASS_VEC_BITS - (Width - 1)) + 1) {1'sb0}};
+		end
+	endgenerate
+	assign slice_class_result = (result_is_vector ? slice_vec_class_result : lane_class_mask[0+:10]);
+	assign result_o = (result_is_class ? slice_class_result : slice_regular_result);
+	assign extension_bit_o = lane_ext_bit[0];
+	assign tag_o = lane_tags[0];
+	assign busy_o = |lane_busy;
+	assign out_valid_o = lane_out_valid[0];
+	always @(*) begin : output_processing
+		reg [4:0] temp_status;
+		temp_status = {5 {1'sb0}};
+		begin : sv2v_autoblock_120
+			reg signed [31:0] i;
+			for (i = 0; i < sv2v_cast_32_signed(NUM_LANES); i = i + 1)
+				temp_status = temp_status | lane_status[i * 5+:5];
+		end
+		status_o = temp_status;
+	end
+endmodule
+module fpnew_opgroup_multifmt_slice_7C482 (
+	clk_i,
+	rst_ni,
+	operands_i,
+	is_boxed_i,
+	rnd_mode_i,
+	op_i,
+	op_mod_i,
+	src_fmt_i,
+	dst_fmt_i,
+	int_fmt_i,
+	vectorial_op_i,
+	tag_i,
+	in_valid_i,
+	in_ready_o,
+	flush_i,
+	result_o,
+	status_o,
+	extension_bit_o,
+	tag_o,
+	out_valid_o,
+	out_ready_i,
+	busy_o
+);
+	localparam [1:0] fpnew_pkg_CONV = 3;
+	parameter [1:0] OpGroup = fpnew_pkg_CONV;
+	parameter [31:0] Width = 64;
+	localparam [31:0] fpnew_pkg_NUM_FP_FORMATS = 4;
+	parameter [0:3] FpFmtConfig = 1'sb1;
+	localparam [31:0] fpnew_pkg_NUM_INT_FORMATS = 4;
+	parameter [0:3] IntFmtConfig = 1'sb1;
+	parameter [0:0] EnableVectors = 1'b1;
+	parameter [31:0] NumPipeRegs = 0;
+	localparam [1:0] fpnew_pkg_BEFORE = 0;
+	parameter [1:0] PipeConfig = fpnew_pkg_BEFORE;
+	localparam [1:0] fpnew_pkg_ADDMUL = 0;
+	localparam [1:0] fpnew_pkg_DIVSQRT = 1;
+	localparam [1:0] fpnew_pkg_NONCOMP = 2;
+	function automatic [31:0] fpnew_pkg_num_operands;
+		input reg [1:0] grp;
+		case (grp)
+			fpnew_pkg_ADDMUL: fpnew_pkg_num_operands = 3;
+			fpnew_pkg_DIVSQRT: fpnew_pkg_num_operands = 2;
+			fpnew_pkg_NONCOMP: fpnew_pkg_num_operands = 2;
+			fpnew_pkg_CONV: fpnew_pkg_num_operands = 3;
+			default: fpnew_pkg_num_operands = 0;
+		endcase
+	endfunction
+	localparam [31:0] NUM_OPERANDS = fpnew_pkg_num_operands(OpGroup);
+	localparam [31:0] NUM_FORMATS = fpnew_pkg_NUM_FP_FORMATS;
+	input wire clk_i;
+	input wire rst_ni;
+	input wire [(NUM_OPERANDS * Width) - 1:0] operands_i;
+	input wire [(NUM_FORMATS * NUM_OPERANDS) - 1:0] is_boxed_i;
+	input wire [2:0] rnd_mode_i;
+	localparam [31:0] fpnew_pkg_OP_BITS = 4;
+	input wire [3:0] op_i;
+	input wire op_mod_i;
+	localparam [31:0] fpnew_pkg_FP_FORMAT_BITS = 2;
+	input wire [1:0] src_fmt_i;
+	input wire [1:0] dst_fmt_i;
+	localparam [31:0] fpnew_pkg_INT_FORMAT_BITS = 2;
+	input wire [1:0] int_fmt_i;
+	input wire vectorial_op_i;
+	input wire tag_i;
+	input wire in_valid_i;
+	output wire in_ready_o;
+	input wire flush_i;
+	output wire [Width - 1:0] result_o;
+	output reg [4:0] status_o;
+	output wire extension_bit_o;
+	output wire tag_o;
+	output wire out_valid_o;
+	input wire out_ready_i;
+	output wire busy_o;
+	localparam [255:0] fpnew_pkg_FP_ENCODINGS = 256'h00000008000000170000000b00000034000000050000000a0000000500000002;
+	function automatic [31:0] fpnew_pkg_fp_width;
+		input reg [1:0] fmt;
+		fpnew_pkg_fp_width = (fpnew_pkg_FP_ENCODINGS[((3 - fmt) * 64) + 63-:32] + fpnew_pkg_FP_ENCODINGS[((3 - fmt) * 64) + 31-:32]) + 1;
+	endfunction
+	function automatic signed [31:0] fpnew_pkg_maximum;
+		input reg signed [31:0] a;
+		input reg signed [31:0] b;
+		fpnew_pkg_maximum = (a > b ? a : b);
+	endfunction
+	function automatic [1:0] sv2v_cast_38622;
+		input reg [1:0] inp;
+		sv2v_cast_38622 = inp;
+	endfunction
+	function automatic [31:0] fpnew_pkg_max_fp_width;
+		input reg [0:3] cfg;
+		reg [31:0] res;
+		begin
+			res = 0;
+			begin : sv2v_autoblock_121
+				reg [31:0] i;
+				for (i = 0; i < fpnew_pkg_NUM_FP_FORMATS; i = i + 1)
+					if (cfg[i])
+						res = $unsigned(fpnew_pkg_maximum(res, fpnew_pkg_fp_width(sv2v_cast_38622(i))));
+			end
+			fpnew_pkg_max_fp_width = res;
+		end
+	endfunction
+	localparam [31:0] MAX_FP_WIDTH = fpnew_pkg_max_fp_width(FpFmtConfig);
+	localparam [1:0] fpnew_pkg_INT16 = 1;
+	localparam [1:0] fpnew_pkg_INT32 = 2;
+	localparam [1:0] fpnew_pkg_INT64 = 3;
+	localparam [1:0] fpnew_pkg_INT8 = 0;
+	function automatic [31:0] fpnew_pkg_int_width;
+		input reg [1:0] ifmt;
+		case (ifmt)
+			fpnew_pkg_INT8: fpnew_pkg_int_width = 8;
+			fpnew_pkg_INT16: fpnew_pkg_int_width = 16;
+			fpnew_pkg_INT32: fpnew_pkg_int_width = 32;
+			fpnew_pkg_INT64: fpnew_pkg_int_width = 64;
+		endcase
+	endfunction
+	function automatic [1:0] sv2v_cast_E880F;
+		input reg [1:0] inp;
+		sv2v_cast_E880F = inp;
+	endfunction
+	function automatic [31:0] fpnew_pkg_max_int_width;
+		input reg [0:3] cfg;
+		reg [31:0] res;
+		begin
+			res = 0;
+			begin : sv2v_autoblock_122
+				reg signed [31:0] ifmt;
+				for (ifmt = 0; ifmt < fpnew_pkg_NUM_INT_FORMATS; ifmt = ifmt + 1)
+					if (cfg[ifmt])
+						res = fpnew_pkg_maximum(res, fpnew_pkg_int_width(sv2v_cast_E880F(ifmt)));
+			end
+			fpnew_pkg_max_int_width = res;
+		end
+	endfunction
+	localparam [31:0] MAX_INT_WIDTH = fpnew_pkg_max_int_width(IntFmtConfig);
+	function automatic signed [31:0] fpnew_pkg_minimum;
+		input reg signed [31:0] a;
+		input reg signed [31:0] b;
+		fpnew_pkg_minimum = (a < b ? a : b);
+	endfunction
+	function automatic [31:0] fpnew_pkg_min_fp_width;
+		input reg [0:3] cfg;
+		reg [31:0] res;
+		begin
+			res = fpnew_pkg_max_fp_width(cfg);
+			begin : sv2v_autoblock_123
+				reg [31:0] i;
+				for (i = 0; i < fpnew_pkg_NUM_FP_FORMATS; i = i + 1)
+					if (cfg[i])
+						res = $unsigned(fpnew_pkg_minimum(res, fpnew_pkg_fp_width(sv2v_cast_38622(i))));
+			end
+			fpnew_pkg_min_fp_width = res;
+		end
+	endfunction
+	function automatic [31:0] fpnew_pkg_max_num_lanes;
+		input reg [31:0] width;
+		input reg [0:3] cfg;
+		input reg vec;
+		fpnew_pkg_max_num_lanes = (vec ? width / fpnew_pkg_min_fp_width(cfg) : 1);
+	endfunction
+	localparam [31:0] NUM_LANES = fpnew_pkg_max_num_lanes(Width, FpFmtConfig, 1'b1);
+	localparam [31:0] NUM_INT_FORMATS = fpnew_pkg_NUM_INT_FORMATS;
+	localparam [31:0] FMT_BITS = fpnew_pkg_maximum(2, 2);
+	localparam [31:0] AUX_BITS = FMT_BITS + 2;
+	wire [NUM_LANES - 1:0] lane_in_ready;
+	wire [NUM_LANES - 1:0] lane_out_valid;
+	wire vectorial_op;
+	wire [FMT_BITS - 1:0] dst_fmt;
+	wire [AUX_BITS - 1:0] aux_data;
+	wire dst_fmt_is_int;
+	wire dst_is_cpk;
+	wire [1:0] dst_vec_op;
+	wire [2:0] target_aux_d;
+	wire [2:0] target_aux_q;
+	wire is_up_cast;
+	wire is_down_cast;
+	wire [(NUM_FORMATS * Width) - 1:0] fmt_slice_result;
+	wire [(NUM_INT_FORMATS * Width) - 1:0] ifmt_slice_result;
+	wire [Width - 1:0] conv_slice_result;
+	wire [Width - 1:0] conv_target_d;
+	wire [Width - 1:0] conv_target_q;
+	wire [(NUM_LANES * 5) - 1:0] lane_status;
+	wire [NUM_LANES - 1:0] lane_ext_bit;
+	wire [NUM_LANES - 1:0] lane_tags;
+	wire [(NUM_LANES * AUX_BITS) - 1:0] lane_aux;
+	wire [NUM_LANES - 1:0] lane_busy;
+	wire result_is_vector;
+	wire [FMT_BITS - 1:0] result_fmt;
+	wire result_fmt_is_int;
+	wire result_is_cpk;
+	wire [1:0] result_vec_op;
+	assign in_ready_o = lane_in_ready[0];
+	assign vectorial_op = vectorial_op_i & EnableVectors;
+	localparam [3:0] fpnew_pkg_F2I = 11;
+	assign dst_fmt_is_int = (OpGroup == fpnew_pkg_CONV) & (op_i == fpnew_pkg_F2I);
+	localparam [3:0] fpnew_pkg_CPKAB = 13;
+	localparam [3:0] fpnew_pkg_CPKCD = 14;
+	assign dst_is_cpk = (OpGroup == fpnew_pkg_CONV) & ((op_i == fpnew_pkg_CPKAB) || (op_i == fpnew_pkg_CPKCD));
+	assign dst_vec_op = (OpGroup == fpnew_pkg_CONV) & {op_i == fpnew_pkg_CPKCD, op_mod_i};
+	assign is_up_cast = fpnew_pkg_fp_width(dst_fmt_i) > fpnew_pkg_fp_width(src_fmt_i);
+	assign is_down_cast = fpnew_pkg_fp_width(dst_fmt_i) < fpnew_pkg_fp_width(src_fmt_i);
+	assign dst_fmt = (dst_fmt_is_int ? int_fmt_i : dst_fmt_i);
+	assign aux_data = {dst_fmt_is_int, vectorial_op, dst_fmt};
+	assign target_aux_d = {dst_vec_op, dst_is_cpk};
+	generate
+		if (OpGroup == fpnew_pkg_CONV) begin : conv_target
+			assign conv_target_d = (dst_is_cpk ? operands_i[2 * Width+:Width] : operands_i[Width+:Width]);
+		end
+	endgenerate
+	reg [3:0] is_boxed_1op;
+	reg [7:0] is_boxed_2op;
+	always @(*) begin : boxed_2op
+		begin : sv2v_autoblock_124
+			reg signed [31:0] fmt;
+			for (fmt = 0; fmt < NUM_FORMATS; fmt = fmt + 1)
+				begin
+					is_boxed_1op[fmt] = is_boxed_i[fmt * NUM_OPERANDS];
+					is_boxed_2op[fmt * 2+:2] = is_boxed_i[(fmt * NUM_OPERANDS) + 1-:2];
+				end
+		end
+	end
+	localparam [0:3] fpnew_pkg_CPK_FORMATS = 5'b11000;
+	function automatic [0:3] fpnew_pkg_get_conv_lane_formats;
+		input reg [31:0] width;
+		input reg [0:3] cfg;
+		input reg [31:0] lane_no;
+		reg [0:3] res;
+		reg [31:0] fmt;
+		begin
+			for (fmt = 0; fmt < fpnew_pkg_NUM_FP_FORMATS; fmt = fmt + 1)
+				res[fmt] = cfg[fmt] && (((width / fpnew_pkg_fp_width(sv2v_cast_38622(fmt))) > lane_no) || (fpnew_pkg_CPK_FORMATS[fmt] && (lane_no < 2)));
+			fpnew_pkg_get_conv_lane_formats = res;
+		end
+	endfunction
+	function automatic [0:3] fpnew_pkg_get_conv_lane_int_formats;
+		input reg [31:0] width;
+		input reg [0:3] cfg;
+		input reg [0:3] icfg;
+		input reg [31:0] lane_no;
+		reg [0:3] res;
+		reg [0:3] lanefmts;
+		begin
+			res = {4 {1'sb0}};
+			lanefmts = fpnew_pkg_get_conv_lane_formats(width, cfg, lane_no);
+			begin : sv2v_autoblock_125
+				reg [31:0] ifmt;
+				for (ifmt = 0; ifmt < fpnew_pkg_NUM_INT_FORMATS; ifmt = ifmt + 1)
+					begin : sv2v_autoblock_126
+						reg [31:0] fmt;
+						for (fmt = 0; fmt < fpnew_pkg_NUM_FP_FORMATS; fmt = fmt + 1)
+							res[ifmt] = res[ifmt] | ((icfg[ifmt] && lanefmts[fmt]) && (fpnew_pkg_fp_width(sv2v_cast_38622(fmt)) == fpnew_pkg_int_width(sv2v_cast_E880F(ifmt))));
+					end
+			end
+			fpnew_pkg_get_conv_lane_int_formats = res;
+		end
+	endfunction
+	function automatic [0:3] fpnew_pkg_get_lane_formats;
+		input reg [31:0] width;
+		input reg [0:3] cfg;
+		input reg [31:0] lane_no;
+		reg [0:3] res;
+		reg [31:0] fmt;
+		begin
+			for (fmt = 0; fmt < fpnew_pkg_NUM_FP_FORMATS; fmt = fmt + 1)
+				res[fmt] = cfg[fmt] & ((width / fpnew_pkg_fp_width(sv2v_cast_38622(fmt))) > lane_no);
+			fpnew_pkg_get_lane_formats = res;
+		end
+	endfunction
+	function automatic [0:3] fpnew_pkg_get_lane_int_formats;
+		input reg [31:0] width;
+		input reg [0:3] cfg;
+		input reg [0:3] icfg;
+		input reg [31:0] lane_no;
+		reg [0:3] res;
+		reg [0:3] lanefmts;
+		begin
+			res = {4 {1'sb0}};
+			lanefmts = fpnew_pkg_get_lane_formats(width, cfg, lane_no);
+			begin : sv2v_autoblock_127
+				reg [31:0] ifmt;
+				for (ifmt = 0; ifmt < fpnew_pkg_NUM_INT_FORMATS; ifmt = ifmt + 1)
+					begin : sv2v_autoblock_128
+						reg [31:0] fmt;
+						for (fmt = 0; fmt < fpnew_pkg_NUM_FP_FORMATS; fmt = fmt + 1)
+							if (fpnew_pkg_fp_width(sv2v_cast_38622(fmt)) == fpnew_pkg_int_width(sv2v_cast_E880F(ifmt)))
+								res[ifmt] = res[ifmt] | (icfg[ifmt] && lanefmts[fmt]);
+					end
+			end
+			fpnew_pkg_get_lane_int_formats = res;
+		end
+	endfunction
+	localparam [3:0] fpnew_pkg_F2F = 10;
+	localparam [3:0] fpnew_pkg_I2F = 12;
+	generate
+		genvar lane;
+		function automatic signed [31:0] sv2v_cast_32_signed;
+			input reg signed [31:0] inp;
+			sv2v_cast_32_signed = inp;
+		endfunction
+		for (lane = 0; lane < sv2v_cast_32_signed(NUM_LANES); lane = lane + 1) begin : gen_num_lanes
+			localparam [31:0] LANE = $unsigned(lane);
+			localparam [0:3] ACTIVE_FORMATS = fpnew_pkg_get_lane_formats(Width, FpFmtConfig, LANE);
+			localparam [0:3] ACTIVE_INT_FORMATS = fpnew_pkg_get_lane_int_formats(Width, FpFmtConfig, IntFmtConfig, LANE);
+			localparam [31:0] MAX_WIDTH = fpnew_pkg_max_fp_width(ACTIVE_FORMATS);
+			localparam [0:3] CONV_FORMATS = fpnew_pkg_get_conv_lane_formats(Width, FpFmtConfig, LANE);
+			localparam [0:3] CONV_INT_FORMATS = fpnew_pkg_get_conv_lane_int_formats(Width, FpFmtConfig, IntFmtConfig, LANE);
+			localparam [31:0] CONV_WIDTH = fpnew_pkg_max_fp_width(CONV_FORMATS);
+			localparam [0:3] LANE_FORMATS = (OpGroup == fpnew_pkg_CONV ? CONV_FORMATS : ACTIVE_FORMATS);
+			localparam [31:0] LANE_WIDTH = (OpGroup == fpnew_pkg_CONV ? CONV_WIDTH : MAX_WIDTH);
+			wire [LANE_WIDTH - 1:0] local_result;
+			if ((lane == 0) || EnableVectors) begin : active_lane
+				wire in_valid;
+				wire out_valid;
+				wire out_ready;
+				reg [(NUM_OPERANDS * LANE_WIDTH) - 1:0] local_operands;
+				wire [LANE_WIDTH - 1:0] op_result;
+				wire [4:0] op_status;
+				assign in_valid = in_valid_i & ((lane == 0) | vectorial_op);
+				function automatic [31:0] sv2v_cast_32;
+					input reg [31:0] inp;
+					sv2v_cast_32 = inp;
+				endfunction
+				function automatic [3:0] sv2v_cast_4;
+					input reg [3:0] inp;
+					sv2v_cast_4 = inp;
+				endfunction
+				always @(*) begin : prepare_input
+					begin : sv2v_autoblock_129
+						reg [31:0] i;
+						for (i = 0; i < NUM_OPERANDS; i = i + 1)
+							local_operands[i * sv2v_cast_32((OpGroup == fpnew_pkg_CONV ? sv2v_cast_32(fpnew_pkg_max_fp_width(sv2v_cast_4(fpnew_pkg_get_conv_lane_formats(Width, FpFmtConfig, sv2v_cast_32($unsigned(lane)))))) : sv2v_cast_32(fpnew_pkg_max_fp_width(sv2v_cast_4(fpnew_pkg_get_lane_formats(Width, FpFmtConfig, sv2v_cast_32($unsigned(lane))))))))+:sv2v_cast_32((OpGroup == fpnew_pkg_CONV ? sv2v_cast_32(fpnew_pkg_max_fp_width(sv2v_cast_4(fpnew_pkg_get_conv_lane_formats(Width, FpFmtConfig, sv2v_cast_32($unsigned(lane)))))) : sv2v_cast_32(fpnew_pkg_max_fp_width(sv2v_cast_4(fpnew_pkg_get_lane_formats(Width, FpFmtConfig, sv2v_cast_32($unsigned(lane))))))))] = operands_i[i * Width+:Width] >> (LANE * fpnew_pkg_fp_width(src_fmt_i));
+					end
+					if (OpGroup == fpnew_pkg_CONV)
+						if (op_i == fpnew_pkg_I2F)
+							local_operands[0+:sv2v_cast_32((OpGroup == fpnew_pkg_CONV ? sv2v_cast_32(fpnew_pkg_max_fp_width(sv2v_cast_4(fpnew_pkg_get_conv_lane_formats(Width, FpFmtConfig, sv2v_cast_32($unsigned(lane)))))) : sv2v_cast_32(fpnew_pkg_max_fp_width(sv2v_cast_4(fpnew_pkg_get_lane_formats(Width, FpFmtConfig, sv2v_cast_32($unsigned(lane))))))))] = operands_i[0+:Width] >> (LANE * fpnew_pkg_int_width(int_fmt_i));
+						else if (op_i == fpnew_pkg_F2F) begin
+							if ((vectorial_op && op_mod_i) && is_up_cast)
+								local_operands[0+:sv2v_cast_32((OpGroup == fpnew_pkg_CONV ? sv2v_cast_32(fpnew_pkg_max_fp_width(sv2v_cast_4(fpnew_pkg_get_conv_lane_formats(Width, FpFmtConfig, sv2v_cast_32($unsigned(lane)))))) : sv2v_cast_32(fpnew_pkg_max_fp_width(sv2v_cast_4(fpnew_pkg_get_lane_formats(Width, FpFmtConfig, sv2v_cast_32($unsigned(lane))))))))] = operands_i[0+:Width] >> ((LANE * fpnew_pkg_fp_width(src_fmt_i)) + (MAX_FP_WIDTH / 2));
+						end
+						else if (dst_is_cpk)
+							if (lane == 1)
+								local_operands[0+:sv2v_cast_32((OpGroup == fpnew_pkg_CONV ? sv2v_cast_32(fpnew_pkg_max_fp_width(sv2v_cast_4(fpnew_pkg_get_conv_lane_formats(Width, FpFmtConfig, sv2v_cast_32($unsigned(lane)))))) : sv2v_cast_32(fpnew_pkg_max_fp_width(sv2v_cast_4(fpnew_pkg_get_lane_formats(Width, FpFmtConfig, sv2v_cast_32($unsigned(lane))))))))] = operands_i[Width + (LANE_WIDTH - 1)-:LANE_WIDTH];
+				end
+				if (OpGroup == fpnew_pkg_ADDMUL) begin : lane_instance
+					fpnew_fma_multi_E4D0A_BE123 #(
+						.AuxType_AUX_BITS(AUX_BITS),
+						.FpFmtConfig(LANE_FORMATS),
+						.NumPipeRegs(NumPipeRegs),
+						.PipeConfig(PipeConfig)
+					) i_fpnew_fma_multi(
+						.clk_i(clk_i),
+						.rst_ni(rst_ni),
+						.operands_i(local_operands),
+						.is_boxed_i(is_boxed_i),
+						.rnd_mode_i(rnd_mode_i),
+						.op_i(op_i),
+						.op_mod_i(op_mod_i),
+						.src_fmt_i(src_fmt_i),
+						.dst_fmt_i(dst_fmt_i),
+						.tag_i(tag_i),
+						.aux_i(aux_data),
+						.in_valid_i(in_valid),
+						.in_ready_o(lane_in_ready[lane]),
+						.flush_i(flush_i),
+						.result_o(op_result),
+						.status_o(op_status),
+						.extension_bit_o(lane_ext_bit[lane]),
+						.tag_o(lane_tags[lane]),
+						.aux_o(lane_aux[lane * AUX_BITS+:AUX_BITS]),
+						.out_valid_o(out_valid),
+						.out_ready_i(out_ready),
+						.busy_o(lane_busy[lane])
+					);
+				end
+				else if (OpGroup == fpnew_pkg_DIVSQRT) begin : lane_instance
+					function automatic [31:0] sv2v_cast_32;
+						input reg [31:0] inp;
+						sv2v_cast_32 = inp;
+					endfunction
+					function automatic [3:0] sv2v_cast_4;
+						input reg [3:0] inp;
+						sv2v_cast_4 = inp;
+					endfunction
+					fpnew_divsqrt_multi_28154_735ED #(
+						.AuxType_AUX_BITS(AUX_BITS),
+						.FpFmtConfig(LANE_FORMATS),
+						.NumPipeRegs(NumPipeRegs),
+						.PipeConfig(PipeConfig)
+					) i_fpnew_divsqrt_multi(
+						.clk_i(clk_i),
+						.rst_ni(rst_ni),
+						.operands_i(local_operands[0+:sv2v_cast_32((OpGroup == fpnew_pkg_CONV ? sv2v_cast_32(fpnew_pkg_max_fp_width(sv2v_cast_4(fpnew_pkg_get_conv_lane_formats(Width, FpFmtConfig, sv2v_cast_32($unsigned(lane)))))) : sv2v_cast_32(fpnew_pkg_max_fp_width(sv2v_cast_4(fpnew_pkg_get_lane_formats(Width, FpFmtConfig, sv2v_cast_32($unsigned(lane)))))))) * 2]),
+						.is_boxed_i(is_boxed_2op),
+						.rnd_mode_i(rnd_mode_i),
+						.op_i(op_i),
+						.dst_fmt_i(dst_fmt_i),
+						.tag_i(tag_i),
+						.aux_i(aux_data),
+						.in_valid_i(in_valid),
+						.in_ready_o(lane_in_ready[lane]),
+						.flush_i(flush_i),
+						.result_o(op_result),
+						.status_o(op_status),
+						.extension_bit_o(lane_ext_bit[lane]),
+						.tag_o(lane_tags[lane]),
+						.aux_o(lane_aux[lane * AUX_BITS+:AUX_BITS]),
+						.out_valid_o(out_valid),
+						.out_ready_i(out_ready),
+						.busy_o(lane_busy[lane])
+					);
+				end
+				else if (OpGroup == fpnew_pkg_NONCOMP) ;
+				else if (OpGroup == fpnew_pkg_CONV) begin : lane_instance
+					function automatic [31:0] sv2v_cast_32;
+						input reg [31:0] inp;
+						sv2v_cast_32 = inp;
+					endfunction
+					function automatic [3:0] sv2v_cast_4;
+						input reg [3:0] inp;
+						sv2v_cast_4 = inp;
+					endfunction
+					fpnew_cast_multi_8A35C_87530 #(
+						.AuxType_AUX_BITS(AUX_BITS),
+						.FpFmtConfig(LANE_FORMATS),
+						.IntFmtConfig(CONV_INT_FORMATS),
+						.NumPipeRegs(NumPipeRegs),
+						.PipeConfig(PipeConfig)
+					) i_fpnew_cast_multi(
+						.clk_i(clk_i),
+						.rst_ni(rst_ni),
+						.operands_i(local_operands[0+:sv2v_cast_32((OpGroup == fpnew_pkg_CONV ? sv2v_cast_32(fpnew_pkg_max_fp_width(sv2v_cast_4(fpnew_pkg_get_conv_lane_formats(Width, FpFmtConfig, sv2v_cast_32($unsigned(lane)))))) : sv2v_cast_32(fpnew_pkg_max_fp_width(sv2v_cast_4(fpnew_pkg_get_lane_formats(Width, FpFmtConfig, sv2v_cast_32($unsigned(lane))))))))]),
+						.is_boxed_i(is_boxed_1op),
+						.rnd_mode_i(rnd_mode_i),
+						.op_i(op_i),
+						.op_mod_i(op_mod_i),
+						.src_fmt_i(src_fmt_i),
+						.dst_fmt_i(dst_fmt_i),
+						.int_fmt_i(int_fmt_i),
+						.tag_i(tag_i),
+						.aux_i(aux_data),
+						.in_valid_i(in_valid),
+						.in_ready_o(lane_in_ready[lane]),
+						.flush_i(flush_i),
+						.result_o(op_result),
+						.status_o(op_status),
+						.extension_bit_o(lane_ext_bit[lane]),
+						.tag_o(lane_tags[lane]),
+						.aux_o(lane_aux[lane * AUX_BITS+:AUX_BITS]),
+						.out_valid_o(out_valid),
+						.out_ready_i(out_ready),
+						.busy_o(lane_busy[lane])
+					);
+				end
+				assign out_ready = out_ready_i & ((lane == 0) | result_is_vector);
+				assign lane_out_valid[lane] = out_valid & ((lane == 0) | result_is_vector);
+				function automatic [3:0] sv2v_cast_18C91;
+					input reg [3:0] inp;
+					sv2v_cast_18C91 = inp;
+				endfunction
+				assign local_result = (lane_out_valid[lane] ? op_result : {(OpGroup == fpnew_pkg_CONV ? fpnew_pkg_max_fp_width(sv2v_cast_18C91(fpnew_pkg_get_conv_lane_formats(Width, FpFmtConfig, sv2v_cast_32($unsigned(lane))))) : fpnew_pkg_max_fp_width(sv2v_cast_18C91(fpnew_pkg_get_lane_formats(Width, FpFmtConfig, sv2v_cast_32($unsigned(lane)))))) {lane_ext_bit[0]}});
+				assign lane_status[lane * 5+:5] = (lane_out_valid[lane] ? op_status : {5 {1'sb0}});
+			end
+			else begin : inactive_lane
+				assign lane_out_valid[lane] = 1'b0;
+				assign lane_in_ready[lane] = 1'b0;
+				function automatic [3:0] sv2v_cast_18C91;
+					input reg [3:0] inp;
+					sv2v_cast_18C91 = inp;
+				endfunction
+				function automatic [31:0] sv2v_cast_32;
+					input reg [31:0] inp;
+					sv2v_cast_32 = inp;
+				endfunction
+				assign local_result = {(OpGroup == fpnew_pkg_CONV ? fpnew_pkg_max_fp_width(sv2v_cast_18C91(fpnew_pkg_get_conv_lane_formats(Width, FpFmtConfig, sv2v_cast_32($unsigned(lane))))) : fpnew_pkg_max_fp_width(sv2v_cast_18C91(fpnew_pkg_get_lane_formats(Width, FpFmtConfig, sv2v_cast_32($unsigned(lane)))))) {lane_ext_bit[0]}};
+				assign lane_status[lane * 5+:5] = {5 {1'sb0}};
+				assign lane_busy[lane] = 1'b0;
+			end
+			genvar fmt;
+			for (fmt = 0; fmt < NUM_FORMATS; fmt = fmt + 1) begin : pack_fp_result
+				function automatic [1:0] sv2v_cast_38622;
+					input reg [1:0] inp;
+					sv2v_cast_38622 = inp;
+				endfunction
+				localparam [31:0] FP_WIDTH = fpnew_pkg_fp_width(sv2v_cast_38622(fmt));
+				if (ACTIVE_FORMATS[fmt]) begin
+					assign fmt_slice_result[(fmt * Width) + ((((LANE + 1) * FP_WIDTH) - 1) >= (LANE * FP_WIDTH) ? ((LANE + 1) * FP_WIDTH) - 1 : ((((LANE + 1) * FP_WIDTH) - 1) + ((((LANE + 1) * FP_WIDTH) - 1) >= (LANE * FP_WIDTH) ? ((((LANE + 1) * FP_WIDTH) - 1) - (LANE * FP_WIDTH)) + 1 : ((LANE * FP_WIDTH) - (((LANE + 1) * FP_WIDTH) - 1)) + 1)) - 1)-:((((LANE + 1) * FP_WIDTH) - 1) >= (LANE * FP_WIDTH) ? ((((LANE + 1) * FP_WIDTH) - 1) - (LANE * FP_WIDTH)) + 1 : ((LANE * FP_WIDTH) - (((LANE + 1) * FP_WIDTH) - 1)) + 1)] = local_result[FP_WIDTH - 1:0];
+				end
+				else if (((LANE + 1) * FP_WIDTH) <= Width) begin
+					assign fmt_slice_result[(fmt * Width) + ((((LANE + 1) * FP_WIDTH) - 1) >= (LANE * FP_WIDTH) ? ((LANE + 1) * FP_WIDTH) - 1 : ((((LANE + 1) * FP_WIDTH) - 1) + ((((LANE + 1) * FP_WIDTH) - 1) >= (LANE * FP_WIDTH) ? ((((LANE + 1) * FP_WIDTH) - 1) - (LANE * FP_WIDTH)) + 1 : ((LANE * FP_WIDTH) - (((LANE + 1) * FP_WIDTH) - 1)) + 1)) - 1)-:((((LANE + 1) * FP_WIDTH) - 1) >= (LANE * FP_WIDTH) ? ((((LANE + 1) * FP_WIDTH) - 1) - (LANE * FP_WIDTH)) + 1 : ((LANE * FP_WIDTH) - (((LANE + 1) * FP_WIDTH) - 1)) + 1)] = {((((LANE + 1) * FP_WIDTH) - 1) >= (LANE * FP_WIDTH) ? ((((LANE + 1) * FP_WIDTH) - 1) - (LANE * FP_WIDTH)) + 1 : ((LANE * FP_WIDTH) - (((LANE + 1) * FP_WIDTH) - 1)) + 1) {lane_ext_bit[LANE]}};
+				end
+				else if ((LANE * FP_WIDTH) < Width) assign fmt_slice_result[(fmt * Width) + ((Width - 1) >= (LANE * FP_WIDTH) ? Width - 1 : ((Width - 1) + ((Width - 1) >= (LANE * FP_WIDTH) ? ((Width - 1) - (LANE * FP_WIDTH)) + 1 : ((LANE * FP_WIDTH) - (Width - 1)) + 1)) - 1)-:((Width - 1) >= (LANE * FP_WIDTH) ? ((Width - 1) - (LANE * FP_WIDTH)) + 1 : ((LANE * FP_WIDTH) - (Width - 1)) + 1)] = {((Width - 1) >= (LANE * FP_WIDTH) ? ((Width - 1) - (LANE * FP_WIDTH)) + 1 : ((LANE * FP_WIDTH) - (Width - 1)) + 1) {lane_ext_bit[LANE]}};
+			end
+			if (OpGroup == fpnew_pkg_CONV) begin : int_results_enabled
+				genvar ifmt;
+				for (ifmt = 0; ifmt < NUM_INT_FORMATS; ifmt = ifmt + 1) begin : pack_int_result
+					function automatic [1:0] sv2v_cast_E880F;
+						input reg [1:0] inp;
+						sv2v_cast_E880F = inp;
+					endfunction
+					localparam [31:0] INT_WIDTH = fpnew_pkg_int_width(sv2v_cast_E880F(ifmt));
+					if (ACTIVE_INT_FORMATS[ifmt]) begin
+						assign ifmt_slice_result[(ifmt * Width) + ((((LANE + 1) * INT_WIDTH) - 1) >= (LANE * INT_WIDTH) ? ((LANE + 1) * INT_WIDTH) - 1 : ((((LANE + 1) * INT_WIDTH) - 1) + ((((LANE + 1) * INT_WIDTH) - 1) >= (LANE * INT_WIDTH) ? ((((LANE + 1) * INT_WIDTH) - 1) - (LANE * INT_WIDTH)) + 1 : ((LANE * INT_WIDTH) - (((LANE + 1) * INT_WIDTH) - 1)) + 1)) - 1)-:((((LANE + 1) * INT_WIDTH) - 1) >= (LANE * INT_WIDTH) ? ((((LANE + 1) * INT_WIDTH) - 1) - (LANE * INT_WIDTH)) + 1 : ((LANE * INT_WIDTH) - (((LANE + 1) * INT_WIDTH) - 1)) + 1)] = local_result[INT_WIDTH - 1:0];
+					end
+					else if (((LANE + 1) * INT_WIDTH) <= Width) begin
+						assign ifmt_slice_result[(ifmt * Width) + ((((LANE + 1) * INT_WIDTH) - 1) >= (LANE * INT_WIDTH) ? ((LANE + 1) * INT_WIDTH) - 1 : ((((LANE + 1) * INT_WIDTH) - 1) + ((((LANE + 1) * INT_WIDTH) - 1) >= (LANE * INT_WIDTH) ? ((((LANE + 1) * INT_WIDTH) - 1) - (LANE * INT_WIDTH)) + 1 : ((LANE * INT_WIDTH) - (((LANE + 1) * INT_WIDTH) - 1)) + 1)) - 1)-:((((LANE + 1) * INT_WIDTH) - 1) >= (LANE * INT_WIDTH) ? ((((LANE + 1) * INT_WIDTH) - 1) - (LANE * INT_WIDTH)) + 1 : ((LANE * INT_WIDTH) - (((LANE + 1) * INT_WIDTH) - 1)) + 1)] = {((((LANE + 1) * INT_WIDTH) - 1) >= (LANE * INT_WIDTH) ? ((((LANE + 1) * INT_WIDTH) - 1) - (LANE * INT_WIDTH)) + 1 : ((LANE * INT_WIDTH) - (((LANE + 1) * INT_WIDTH) - 1)) + 1) {1'sb0}};
+					end
+					else if ((LANE * INT_WIDTH) < Width) assign ifmt_slice_result[(ifmt * Width) + ((Width - 1) >= (LANE * INT_WIDTH) ? Width - 1 : ((Width - 1) + ((Width - 1) >= (LANE * INT_WIDTH) ? ((Width - 1) - (LANE * INT_WIDTH)) + 1 : ((LANE * INT_WIDTH) - (Width - 1)) + 1)) - 1)-:((Width - 1) >= (LANE * INT_WIDTH) ? ((Width - 1) - (LANE * INT_WIDTH)) + 1 : ((LANE * INT_WIDTH) - (Width - 1)) + 1)] = {((Width - 1) >= (LANE * INT_WIDTH) ? ((Width - 1) - (LANE * INT_WIDTH)) + 1 : ((LANE * INT_WIDTH) - (Width - 1)) + 1) {1'sb0}};
+				end
+			end
+		end
+	endgenerate
+	generate
+		genvar fmt;
+		for (fmt = 0; fmt < NUM_FORMATS; fmt = fmt + 1) begin : extend_fp_result
+			function automatic [1:0] sv2v_cast_38622;
+				input reg [1:0] inp;
+				sv2v_cast_38622 = inp;
+			endfunction
+			localparam [31:0] FP_WIDTH = fpnew_pkg_fp_width(sv2v_cast_38622(fmt));
+			if ((NUM_LANES * FP_WIDTH) < Width) assign fmt_slice_result[(fmt * Width) + ((Width - 1) >= (NUM_LANES * FP_WIDTH) ? Width - 1 : ((Width - 1) + ((Width - 1) >= (NUM_LANES * FP_WIDTH) ? ((Width - 1) - (NUM_LANES * FP_WIDTH)) + 1 : ((NUM_LANES * FP_WIDTH) - (Width - 1)) + 1)) - 1)-:((Width - 1) >= (NUM_LANES * FP_WIDTH) ? ((Width - 1) - (NUM_LANES * FP_WIDTH)) + 1 : ((NUM_LANES * FP_WIDTH) - (Width - 1)) + 1)] = {((Width - 1) >= (NUM_LANES * FP_WIDTH) ? ((Width - 1) - (NUM_LANES * FP_WIDTH)) + 1 : ((NUM_LANES * FP_WIDTH) - (Width - 1)) + 1) {lane_ext_bit[0]}};
+		end
+	endgenerate
+	generate
+		genvar ifmt;
+		for (ifmt = 0; ifmt < NUM_INT_FORMATS; ifmt = ifmt + 1) begin : int_results_disabled
+			if (OpGroup != fpnew_pkg_CONV) begin : mute_int_result
+				assign ifmt_slice_result[ifmt * Width+:Width] = {Width {1'sb0}};
+			end
+		end
+	endgenerate
+	generate
+		if (OpGroup == fpnew_pkg_CONV) begin : target_regs
+			wire [(0 >= NumPipeRegs ? ((1 - NumPipeRegs) * Width) + ((NumPipeRegs * Width) - 1) : ((NumPipeRegs + 1) * Width) - 1):(0 >= NumPipeRegs ? NumPipeRegs * Width : 0)] byp_pipe_target_q;
+			wire [(0 >= NumPipeRegs ? ((1 - NumPipeRegs) * 3) + ((NumPipeRegs * 3) - 1) : ((NumPipeRegs + 1) * 3) - 1):(0 >= NumPipeRegs ? NumPipeRegs * 3 : 0)] byp_pipe_aux_q;
+			wire [0:NumPipeRegs] byp_pipe_valid_q;
+			wire [0:NumPipeRegs] byp_pipe_ready;
+			assign byp_pipe_target_q[(0 >= NumPipeRegs ? 0 : NumPipeRegs) * Width+:Width] = conv_target_d;
+			assign byp_pipe_aux_q[(0 >= NumPipeRegs ? 0 : NumPipeRegs) * 3+:3] = target_aux_d;
+			assign byp_pipe_valid_q[0] = in_valid_i & vectorial_op;
+			genvar i;
+			for (i = 0; i < NumPipeRegs; i = i + 1) begin : gen_bypass_pipeline
+				wire reg_ena;
+				assign byp_pipe_ready[i] = byp_pipe_ready[i + 1] | ~byp_pipe_valid_q[i + 1];
+				assign reg_ena = byp_pipe_ready[i] & byp_pipe_valid_q[i];
+			end
+			assign byp_pipe_ready[NumPipeRegs] = out_ready_i & result_is_vector;
+			assign conv_target_q = byp_pipe_target_q[(0 >= NumPipeRegs ? NumPipeRegs : NumPipeRegs - NumPipeRegs) * Width+:Width];
+			assign {result_vec_op, result_is_cpk} = byp_pipe_aux_q[(0 >= NumPipeRegs ? NumPipeRegs : NumPipeRegs - NumPipeRegs) * 3+:3];
+		end
+		else begin : no_conv
+			assign {result_vec_op, result_is_cpk} = {3 {1'sb0}};
+		end
+	endgenerate
+	assign {result_fmt_is_int, result_is_vector, result_fmt} = lane_aux[0+:AUX_BITS];
+	assign result_o = (result_fmt_is_int ? ifmt_slice_result[result_fmt * Width+:Width] : fmt_slice_result[result_fmt * Width+:Width]);
+	assign extension_bit_o = lane_ext_bit[0];
+	assign tag_o = lane_tags[0];
+	assign busy_o = |lane_busy;
+	assign out_valid_o = lane_out_valid[0];
+	always @(*) begin : output_processing
+		reg [4:0] temp_status;
+		temp_status = {5 {1'sb0}};
+		begin : sv2v_autoblock_130
+			reg signed [31:0] i;
+			for (i = 0; i < sv2v_cast_32_signed(NUM_LANES); i = i + 1)
+				temp_status = temp_status | lane_status[i * 5+:5];
+		end
+		status_o = temp_status;
+	end
+endmodule
+module fpnew_rounding (
+	abs_value_i,
+	sign_i,
+	round_sticky_bits_i,
+	rnd_mode_i,
+	effective_subtraction_i,
+	abs_rounded_o,
+	sign_o,
+	exact_zero_o
+);
+	parameter [31:0] AbsWidth = 2;
+	input wire [AbsWidth - 1:0] abs_value_i;
+	input wire sign_i;
+	input wire [1:0] round_sticky_bits_i;
+	input wire [2:0] rnd_mode_i;
+	input wire effective_subtraction_i;
+	output wire [AbsWidth - 1:0] abs_rounded_o;
+	output wire sign_o;
+	output wire exact_zero_o;
+	reg round_up;
+	localparam [0:0] fpnew_pkg_DONT_CARE = 1'b1;
+	localparam [2:0] fpnew_pkg_RDN = 3'b010;
+	localparam [2:0] fpnew_pkg_RMM = 3'b100;
+	localparam [2:0] fpnew_pkg_RNE = 3'b000;
+	localparam [2:0] fpnew_pkg_RTZ = 3'b001;
+	localparam [2:0] fpnew_pkg_RUP = 3'b011;
+	always @(*) begin : rounding_decision
+		case (rnd_mode_i)
+			fpnew_pkg_RNE:
+				case (round_sticky_bits_i)
+					2'b00, 2'b01: round_up = 1'b0;
+					2'b10: round_up = abs_value_i[0];
+					2'b11: round_up = 1'b1;
+				endcase
+			fpnew_pkg_RTZ: round_up = 1'b0;
+			fpnew_pkg_RDN: round_up = (|round_sticky_bits_i ? sign_i : 1'b0);
+			fpnew_pkg_RUP: round_up = (|round_sticky_bits_i ? ~sign_i : 1'b0);
+			fpnew_pkg_RMM: round_up = round_sticky_bits_i[1];
+			default: round_up = fpnew_pkg_DONT_CARE;
+		endcase
+	end
+	assign abs_rounded_o = abs_value_i + round_up;
+	assign exact_zero_o = (abs_value_i == {AbsWidth {1'sb0}}) && (round_sticky_bits_i == {2 {1'sb0}});
+	assign sign_o = (exact_zero_o && effective_subtraction_i ? rnd_mode_i == fpnew_pkg_RDN : sign_i);
+endmodule
+module fpnew_top_F1920 (
+	clk_i,
+	rst_ni,
+	operands_i,
+	rnd_mode_i,
+	op_i,
+	op_mod_i,
+	src_fmt_i,
+	dst_fmt_i,
+	int_fmt_i,
+	vectorial_op_i,
+	tag_i,
+	in_valid_i,
+	in_ready_o,
+	flush_i,
+	result_o,
+	status_o,
+	tag_o,
+	out_valid_o,
+	out_ready_i,
+	busy_o
+);
+	localparam [31:0] fpnew_pkg_NUM_FP_FORMATS = 4;
+	localparam [31:0] fpnew_pkg_NUM_INT_FORMATS = 4;
+	function automatic [3:0] sv2v_cast_4;
+		input reg [3:0] inp;
+		sv2v_cast_4 = inp;
+	endfunction
+	localparam [41:0] fpnew_pkg_RV64D_Xsflt = {34'b0000000000000000000000000100000011, sv2v_cast_4(5'b11111), 4'b1111};
+	parameter [41:0] Features = fpnew_pkg_RV64D_Xsflt;
+	localparam [31:0] fpnew_pkg_NUM_OPGROUPS = 4;
+	localparam [1:0] fpnew_pkg_BEFORE = 0;
+	localparam [1:0] fpnew_pkg_MERGED = 2;
+	localparam [1:0] fpnew_pkg_PARALLEL = 1;
+	function automatic [127:0] sv2v_cast_33F2F;
+		input reg [127:0] inp;
+		sv2v_cast_33F2F = inp;
+	endfunction
+	function automatic [511:0] sv2v_cast_512;
+		input reg [511:0] inp;
+		sv2v_cast_512 = inp;
+	endfunction
+	function automatic [31:0] sv2v_cast_32;
+		input reg [31:0] inp;
+		sv2v_cast_32 = inp;
+	endfunction
+	localparam [545:0] fpnew_pkg_DEFAULT_NOREGS = {sv2v_cast_512({fpnew_pkg_NUM_OPGROUPS {sv2v_cast_33F2F(0)}}), sv2v_cast_32({{fpnew_pkg_NUM_FP_FORMATS {fpnew_pkg_PARALLEL}}, {fpnew_pkg_NUM_FP_FORMATS {fpnew_pkg_MERGED}}, {fpnew_pkg_NUM_FP_FORMATS {fpnew_pkg_PARALLEL}}, {fpnew_pkg_NUM_FP_FORMATS {fpnew_pkg_MERGED}}}), fpnew_pkg_BEFORE};
+	parameter [545:0] Implementation = fpnew_pkg_DEFAULT_NOREGS;
+	localparam [31:0] WIDTH = Features[41-:32];
+	localparam [31:0] NUM_OPERANDS = 3;
+	input wire clk_i;
+	input wire rst_ni;
+	input wire [(NUM_OPERANDS * WIDTH) - 1:0] operands_i;
+	input wire [2:0] rnd_mode_i;
+	localparam [31:0] fpnew_pkg_OP_BITS = 4;
+	input wire [3:0] op_i;
+	input wire op_mod_i;
+	localparam [31:0] fpnew_pkg_FP_FORMAT_BITS = 2;
+	input wire [1:0] src_fmt_i;
+	input wire [1:0] dst_fmt_i;
+	localparam [31:0] fpnew_pkg_INT_FORMAT_BITS = 2;
+	input wire [1:0] int_fmt_i;
+	input wire vectorial_op_i;
+	input wire tag_i;
+	input wire in_valid_i;
+	output wire in_ready_o;
+	input wire flush_i;
+	output wire [WIDTH - 1:0] result_o;
+	output wire [4:0] status_o;
+	output wire tag_o;
+	output wire out_valid_o;
+	input wire out_ready_i;
+	output wire busy_o;
+	localparam [31:0] NUM_OPGROUPS = fpnew_pkg_NUM_OPGROUPS;
+	localparam [31:0] NUM_FORMATS = fpnew_pkg_NUM_FP_FORMATS;
+	wire [3:0] opgrp_in_ready;
+	wire [3:0] opgrp_out_valid;
+	wire [3:0] opgrp_out_ready;
+	wire [3:0] opgrp_ext;
+	wire [3:0] opgrp_busy;
+	wire [((WIDTH + 5) >= 0 ? (4 * (WIDTH + 6)) - 1 : (4 * (1 - (WIDTH + 5))) + (WIDTH + 4)):((WIDTH + 5) >= 0 ? 0 : WIDTH + 5)] opgrp_outputs;
+	wire [11:0] is_boxed;
+	localparam [3:0] fpnew_pkg_ADD = 2;
+	localparam [1:0] fpnew_pkg_ADDMUL = 0;
+	localparam [3:0] fpnew_pkg_CLASSIFY = 9;
+	localparam [3:0] fpnew_pkg_CMP = 8;
+	localparam [1:0] fpnew_pkg_CONV = 3;
+	localparam [3:0] fpnew_pkg_CPKAB = 13;
+	localparam [3:0] fpnew_pkg_CPKCD = 14;
+	localparam [3:0] fpnew_pkg_DIV = 4;
+	localparam [1:0] fpnew_pkg_DIVSQRT = 1;
+	localparam [3:0] fpnew_pkg_F2F = 10;
+	localparam [3:0] fpnew_pkg_F2I = 11;
+	localparam [3:0] fpnew_pkg_FMADD = 0;
+	localparam [3:0] fpnew_pkg_FNMSUB = 1;
+	localparam [3:0] fpnew_pkg_I2F = 12;
+	localparam [3:0] fpnew_pkg_MINMAX = 7;
+	localparam [3:0] fpnew_pkg_MUL = 3;
+	localparam [1:0] fpnew_pkg_NONCOMP = 2;
+	localparam [3:0] fpnew_pkg_SGNJ = 6;
+	localparam [3:0] fpnew_pkg_SQRT = 5;
+	function automatic [1:0] fpnew_pkg_get_opgroup;
+		input reg [3:0] op;
+		case (op)
+			fpnew_pkg_FMADD, fpnew_pkg_FNMSUB, fpnew_pkg_ADD, fpnew_pkg_MUL: fpnew_pkg_get_opgroup = fpnew_pkg_ADDMUL;
+			fpnew_pkg_DIV, fpnew_pkg_SQRT: fpnew_pkg_get_opgroup = fpnew_pkg_DIVSQRT;
+			fpnew_pkg_SGNJ, fpnew_pkg_MINMAX, fpnew_pkg_CMP, fpnew_pkg_CLASSIFY: fpnew_pkg_get_opgroup = fpnew_pkg_NONCOMP;
+			fpnew_pkg_F2F, fpnew_pkg_F2I, fpnew_pkg_I2F, fpnew_pkg_CPKAB, fpnew_pkg_CPKCD: fpnew_pkg_get_opgroup = fpnew_pkg_CONV;
+			default: fpnew_pkg_get_opgroup = fpnew_pkg_NONCOMP;
+		endcase
+	endfunction
+	assign in_ready_o = in_valid_i & opgrp_in_ready[fpnew_pkg_get_opgroup(op_i)];
+	localparam [255:0] fpnew_pkg_FP_ENCODINGS = 256'h00000008000000170000000b00000034000000050000000a0000000500000002;
+	function automatic [31:0] fpnew_pkg_fp_width;
+		input reg [1:0] fmt;
+		fpnew_pkg_fp_width = (fpnew_pkg_FP_ENCODINGS[((3 - fmt) * 64) + 63-:32] + fpnew_pkg_FP_ENCODINGS[((3 - fmt) * 64) + 31-:32]) + 1;
+	endfunction
+	function automatic signed [31:0] sv2v_cast_32_signed;
+                input reg signed [31:0] inp;
+	        sv2v_cast_32_signed = inp;
+        endfunction
+	function automatic [1:0] sv2v_cast_B5DD5;
+                input reg [1:0] inp;
+        	sv2v_cast_B5DD5 = inp;
+        endfunction
+	generate
+		genvar fmt;
+		/*function automatic signed [31:0] sv2v_cast_32_signed;
+			input reg signed [31:0] inp;
+			sv2v_cast_32_signed = inp;
+		endfunction*/
+		for (fmt = 0; fmt < sv2v_cast_32_signed(NUM_FORMATS); fmt = fmt + 1) begin : gen_nanbox_check
+			localparam [31:0] FP_WIDTH = fpnew_pkg_fp_width(sv2v_cast_B5DD5(fmt));
+			if (Features[8] && (FP_WIDTH < WIDTH)) begin : check
+				genvar op;
+				for (op = 0; op < sv2v_cast_32_signed(NUM_OPERANDS); op = op + 1) begin : operands
+					assign is_boxed[(fmt * NUM_OPERANDS) + op] = (!vectorial_op_i ? operands_i[(op * WIDTH) + ((WIDTH - 1) >= FP_WIDTH ? WIDTH - 1 : ((WIDTH - 1) + ((WIDTH - 1) >= FP_WIDTH ? ((WIDTH - 1) - FP_WIDTH) + 1 : (FP_WIDTH - (WIDTH - 1)) + 1)) - 1)-:((WIDTH - 1) >= FP_WIDTH ? ((WIDTH - 1) - FP_WIDTH) + 1 : (FP_WIDTH - (WIDTH - 1)) + 1)] == {((WIDTH - 1) >= FP_WIDTH ? ((WIDTH - 1) - FP_WIDTH) + 1 : (FP_WIDTH - (WIDTH - 1)) + 1) {1'sb1}} : 1'b1);
+				end
+			end
+			else begin : no_check
+				assign is_boxed[fmt * NUM_OPERANDS+:NUM_OPERANDS] = {3 {1'sb1}};
+			end
+		end
+	endgenerate
+	function automatic [31:0] fpnew_pkg_num_operands;
+		input reg [1:0] grp;
+		case (grp)
+			fpnew_pkg_ADDMUL: fpnew_pkg_num_operands = 3;
+			fpnew_pkg_DIVSQRT: fpnew_pkg_num_operands = 2;
+			fpnew_pkg_NONCOMP: fpnew_pkg_num_operands = 2;
+			fpnew_pkg_CONV: fpnew_pkg_num_operands = 3;
+			default: fpnew_pkg_num_operands = 0;
+		endcase
+	endfunction
+	generate
+		genvar opgrp;
+		for (opgrp = 0; opgrp < sv2v_cast_32_signed(NUM_OPGROUPS); opgrp = opgrp + 1) begin : gen_operation_groups
+			function automatic [1:0] sv2v_cast_2;
+				input reg [1:0] inp;
+				sv2v_cast_2 = inp;
+			endfunction
+			localparam [31:0] NUM_OPS = fpnew_pkg_num_operands(sv2v_cast_2(opgrp));
+			wire in_valid;
+			reg [(NUM_FORMATS * NUM_OPS) - 1:0] input_boxed;
+			assign in_valid = in_valid_i & (fpnew_pkg_get_opgroup(op_i) == sv2v_cast_2(opgrp));
+			function automatic [31:0] sv2v_cast_32;
+				input reg [31:0] inp;
+				sv2v_cast_32 = inp;
+			endfunction
+			always @(*) begin : slice_inputs
+				begin : sv2v_autoblock_131
+					reg [31:0] fmt;
+					for (fmt = 0; fmt < NUM_FORMATS; fmt = fmt + 1)
+						input_boxed[fmt * sv2v_cast_32(fpnew_pkg_num_operands(sv2v_cast_2(opgrp)))+:sv2v_cast_32(fpnew_pkg_num_operands(sv2v_cast_2(opgrp)))] = is_boxed[(fmt * 3) + (NUM_OPS - 1)-:NUM_OPS];
+				end
+			end
+			
+			fpnew_opgroup_block_BE2AB #(
+				.OpGroup(sv2v_cast_2(opgrp)),
+				.Width(WIDTH),
+				.EnableVectors(Features[9]),
+				.FpFmtMask(Features[7-:4]),
+				.IntFmtMask(Features[3-:4]),
+				.FmtPipeRegs(Implementation[34 + (32 * ((3 - opgrp) * fpnew_pkg_NUM_FP_FORMATS))+:128]),
+				.FmtUnitTypes(Implementation[2 + (2 * ((3 - opgrp) * fpnew_pkg_NUM_FP_FORMATS))+:8]),
+				.PipeConfig(Implementation[1-:2])
+			) i_opgroup_block(
+				.clk_i(clk_i),
+				.rst_ni(rst_ni),
+				.operands_i(operands_i[WIDTH * ((NUM_OPS - 1) - (NUM_OPS - 1))+:WIDTH * NUM_OPS]),
+				.is_boxed_i(input_boxed),
+				.rnd_mode_i(rnd_mode_i),
+				.op_i(op_i),
+				.op_mod_i(op_mod_i),
+				.src_fmt_i(src_fmt_i),
+				.dst_fmt_i(dst_fmt_i),
+				.int_fmt_i(int_fmt_i),
+				.vectorial_op_i(vectorial_op_i),
+				.tag_i(tag_i),
+				.in_valid_i(in_valid),
+				.in_ready_o(opgrp_in_ready[opgrp]),
+				.flush_i(flush_i),
+				.result_o(opgrp_outputs[((WIDTH + 5) >= 0 ? (opgrp * ((WIDTH + 5) >= 0 ? WIDTH + 6 : 1 - (WIDTH + 5))) + ((WIDTH + 5) >= 0 ? WIDTH + 5 : (WIDTH + 5) - (WIDTH + 5)) : (((opgrp * ((WIDTH + 5) >= 0 ? WIDTH + 6 : 1 - (WIDTH + 5))) + ((WIDTH + 5) >= 0 ? WIDTH + 5 : (WIDTH + 5) - (WIDTH + 5))) + ((WIDTH + 5) >= 6 ? WIDTH : 7 - (WIDTH + 5))) - 1)-:((WIDTH + 5) >= 6 ? WIDTH : 7 - (WIDTH + 5))]),
+				.status_o(opgrp_outputs[((WIDTH + 5) >= 0 ? (opgrp * ((WIDTH + 5) >= 0 ? WIDTH + 6 : 1 - (WIDTH + 5))) + ((WIDTH + 5) >= 0 ? 5 : WIDTH) : ((opgrp * ((WIDTH + 5) >= 0 ? WIDTH + 6 : 1 - (WIDTH + 5))) + ((WIDTH + 5) >= 0 ? 5 : WIDTH)) + 4)-:5]),
+				.extension_bit_o(opgrp_ext[opgrp]),
+				.tag_o(opgrp_outputs[(opgrp * ((WIDTH + 5) >= 0 ? WIDTH + 6 : 1 - (WIDTH + 5))) + ((WIDTH + 5) >= 0 ? 0 : WIDTH + 5)]),
+				.out_valid_o(opgrp_out_valid[opgrp]),
+				.out_ready_i(opgrp_out_ready[opgrp]),
+				.busy_o(opgrp_busy[opgrp])
+			);
+		end
+	endgenerate
+	wire [WIDTH + 5:0] arbiter_output;
+	rr_arb_tree_CBEBF_6E668 #(
+		.DataType_WIDTH(WIDTH),
+		.NumIn(NUM_OPGROUPS),
+		.AxiVldRdy(1'b1)
+	) i_arbiter(
+		.clk_i(clk_i),
+		.rst_ni(rst_ni),
+		.flush_i(flush_i),
+		.rr_i({$unsigned(2) {1'sb0}}),
+		.req_i(opgrp_out_valid),
+		.gnt_o(opgrp_out_ready),
+		.data_i(opgrp_outputs),
+		.gnt_i(out_ready_i),
+		.req_o(out_valid_o),
+		.data_o(arbiter_output),
+		.idx_o()
+	);
+	assign result_o = arbiter_output[WIDTH + 5-:((WIDTH + 5) >= 6 ? WIDTH : 7 - (WIDTH + 5))];
+	assign status_o = arbiter_output[5-:5];
+	assign tag_o = arbiter_output[0];
+	assign busy_o = |opgrp_busy;
+endmodule
+module gpio_reg_top (
+	clk_i,
+	rst_ni,
+	tl_i,
+	tl_o,
+	reg2hw,
+	hw2reg,
+	devmode_i
+);
+	input wire clk_i;
+	input wire rst_ni;
+	localparam signed [31:0] tlul_pkg_TL_AIW = 8;
+	localparam signed [31:0] tlul_pkg_TL_AW = 32;
+	localparam signed [31:0] tlul_pkg_TL_DW = 32;
+	localparam signed [31:0] tlul_pkg_TL_DBW = 4;
+	localparam signed [31:0] tlul_pkg_TL_SZW = 2;
+	input wire [85:0] tl_i;
+	localparam signed [31:0] tlul_pkg_TL_DIW = 1;
+	output wire [51:0] tl_o;
+	output wire [458:0] reg2hw;
+	input wire [257:0] hw2reg;
+	input devmode_i;
+	localparam signed [31:0] AW = 6;
+	localparam signed [31:0] DW = 32;
+	localparam signed [31:0] DBW = 4;
+	wire reg_we;
+	wire reg_re;
+	wire [5:0] reg_addr;
+	wire [31:0] reg_wdata;
+	wire [3:0] reg_be;
+	wire [31:0] reg_rdata;
+	wire reg_error;
+	wire addrmiss;
+	reg wr_err;
+	reg [31:0] reg_rdata_next;
+	wire [85:0] tl_reg_h2d;
+	wire [51:0] tl_reg_d2h;
+	assign tl_reg_h2d = tl_i;
+	assign tl_o = tl_reg_d2h;
+	tlul_adapter_reg #(
+		.RegAw(AW),
+		.RegDw(DW)
+	) u_reg_if(
+		.clk_i(clk_i),
+		.rst_ni(rst_ni),
+		.tl_i(tl_reg_h2d),
+		.tl_o(tl_reg_d2h),
+		.we_o(reg_we),
+		.re_o(reg_re),
+		.addr_o(reg_addr),
+		.wdata_o(reg_wdata),
+		.be_o(reg_be),
+		.rdata_i(reg_rdata),
+		.error_i(reg_error)
+	);
+	assign reg_rdata = reg_rdata_next;
+	assign reg_error = (devmode_i & addrmiss) | wr_err;
+	wire [31:0] intr_state_qs;
+	wire [31:0] intr_state_wd;
+	wire intr_state_we;
+	wire [31:0] intr_enable_qs;
+	wire [31:0] intr_enable_wd;
+	wire intr_enable_we;
+	wire [31:0] intr_test_wd;
+	wire intr_test_we;
+	wire [31:0] data_in_qs;
+	wire [31:0] direct_out_qs;
+	wire [31:0] direct_out_wd;
+	wire direct_out_we;
+	wire direct_out_re;
+	wire [15:0] masked_out_lower_data_qs;
+	wire [15:0] masked_out_lower_data_wd;
+	wire masked_out_lower_data_we;
+	wire masked_out_lower_data_re;
+	wire [15:0] masked_out_lower_mask_wd;
+	wire masked_out_lower_mask_we;
+	wire [15:0] masked_out_upper_data_qs;
+	wire [15:0] masked_out_upper_data_wd;
+	wire masked_out_upper_data_we;
+	wire masked_out_upper_data_re;
+	wire [15:0] masked_out_upper_mask_wd;
+	wire masked_out_upper_mask_we;
+	wire [31:0] direct_oe_qs;
+	wire [31:0] direct_oe_wd;
+	wire direct_oe_we;
+	wire direct_oe_re;
+	wire [15:0] masked_oe_lower_data_qs;
+	wire [15:0] masked_oe_lower_data_wd;
+	wire masked_oe_lower_data_we;
+	wire masked_oe_lower_data_re;
+	wire [15:0] masked_oe_lower_mask_qs;
+	wire [15:0] masked_oe_lower_mask_wd;
+	wire masked_oe_lower_mask_we;
+	wire masked_oe_lower_mask_re;
+	wire [15:0] masked_oe_upper_data_qs;
+	wire [15:0] masked_oe_upper_data_wd;
+	wire masked_oe_upper_data_we;
+	wire masked_oe_upper_data_re;
+	wire [15:0] masked_oe_upper_mask_qs;
+	wire [15:0] masked_oe_upper_mask_wd;
+	wire masked_oe_upper_mask_we;
+	wire masked_oe_upper_mask_re;
+	wire [31:0] intr_ctrl_en_rising_qs;
+	wire [31:0] intr_ctrl_en_rising_wd;
+	wire intr_ctrl_en_rising_we;
+	wire [31:0] intr_ctrl_en_falling_qs;
+	wire [31:0] intr_ctrl_en_falling_wd;
+	wire intr_ctrl_en_falling_we;
+	wire [31:0] intr_ctrl_en_lvlhigh_qs;
+	wire [31:0] intr_ctrl_en_lvlhigh_wd;
+	wire intr_ctrl_en_lvlhigh_we;
+	wire [31:0] intr_ctrl_en_lvllow_qs;
+	wire [31:0] intr_ctrl_en_lvllow_wd;
+	wire intr_ctrl_en_lvllow_we;
+	wire [31:0] ctrl_en_input_filter_qs;
+	wire [31:0] ctrl_en_input_filter_wd;
+	wire ctrl_en_input_filter_we;
+	prim_subreg #(
+		.DW(32),
+		.SWACCESS("W1C"),
+		.RESVAL(32'h00000000)
+	) u_intr_state(
+		.clk_i(clk_i),
+		.rst_ni(rst_ni),
+		.we(intr_state_we),
+		.wd(intr_state_wd),
+		.de(hw2reg[225]),
+		.d(hw2reg[257-:32]),
+		.qe(),
+		.q(reg2hw[458-:32]),
+		.qs(intr_state_qs)
+	);
+	prim_subreg #(
+		.DW(32),
+		.SWACCESS("RW"),
+		.RESVAL(32'h00000000)
+	) u_intr_enable(
+		.clk_i(clk_i),
+		.rst_ni(rst_ni),
+		.we(intr_enable_we),
+		.wd(intr_enable_wd),
+		.de(1'b0),
+		.d({32 {1'sb0}}),
+		.qe(),
+		.q(reg2hw[426-:32]),
+		.qs(intr_enable_qs)
+	);
+	prim_subreg_ext #(.DW(32)) u_intr_test(
+		.re(1'b0),
+		.we(intr_test_we),
+		.wd(intr_test_wd),
+		.d({32 {1'sb0}}),
+		.qre(),
+		.qe(reg2hw[362]),
+		.q(reg2hw[394-:32]),
+		.qs()
+	);
+	prim_subreg #(
+		.DW(32),
+		.SWACCESS("RO"),
+		.RESVAL(32'h00000000)
+	) u_data_in(
+		.clk_i(clk_i),
+		.rst_ni(rst_ni),
+		.we(1'b0),
+		.wd({32 {1'sb0}}),
+		.de(hw2reg[192]),
+		.d(hw2reg[224-:32]),
+		.qe(),
+		.q(),
+		.qs(data_in_qs)
+	);
+	prim_subreg_ext #(.DW(32)) u_direct_out(
+		.re(direct_out_re),
+		.we(direct_out_we),
+		.wd(direct_out_wd),
+		.d(hw2reg[191-:32]),
+		.qre(),
+		.qe(reg2hw[329]),
+		.q(reg2hw[361-:32]),
+		.qs(direct_out_qs)
+	);
+	prim_subreg_ext #(.DW(16)) u_masked_out_lower_data(
+		.re(masked_out_lower_data_re),
+		.we(masked_out_lower_data_we),
+		.wd(masked_out_lower_data_wd),
+		.d(hw2reg[159-:16]),
+		.qre(),
+		.qe(reg2hw[312]),
+		.q(reg2hw[328-:16]),
+		.qs(masked_out_lower_data_qs)
+	);
+	prim_subreg_ext #(.DW(16)) u_masked_out_lower_mask(
+		.re(1'b0),
+		.we(masked_out_lower_mask_we),
+		.wd(masked_out_lower_mask_wd),
+		.d(hw2reg[143-:16]),
+		.qre(),
+		.qe(reg2hw[295]),
+		.q(reg2hw[311-:16]),
+		.qs()
+	);
+	prim_subreg_ext #(.DW(16)) u_masked_out_upper_data(
+		.re(masked_out_upper_data_re),
+		.we(masked_out_upper_data_we),
+		.wd(masked_out_upper_data_wd),
+		.d(hw2reg[127-:16]),
+		.qre(),
+		.qe(reg2hw[278]),
+		.q(reg2hw[294-:16]),
+		.qs(masked_out_upper_data_qs)
+	);
+	prim_subreg_ext #(.DW(16)) u_masked_out_upper_mask(
+		.re(1'b0),
+		.we(masked_out_upper_mask_we),
+		.wd(masked_out_upper_mask_wd),
+		.d(hw2reg[111-:16]),
+		.qre(),
+		.qe(reg2hw[261]),
+		.q(reg2hw[277-:16]),
+		.qs()
+	);
+	prim_subreg_ext #(.DW(32)) u_direct_oe(
+		.re(direct_oe_re),
+		.we(direct_oe_we),
+		.wd(direct_oe_wd),
+		.d(hw2reg[95-:32]),
+		.qre(),
+		.qe(reg2hw[228]),
+		.q(reg2hw[260-:32]),
+		.qs(direct_oe_qs)
+	);
+	prim_subreg_ext #(.DW(16)) u_masked_oe_lower_data(
+		.re(masked_oe_lower_data_re),
+		.we(masked_oe_lower_data_we),
+		.wd(masked_oe_lower_data_wd),
+		.d(hw2reg[63-:16]),
+		.qre(),
+		.qe(reg2hw[211]),
+		.q(reg2hw[227-:16]),
+		.qs(masked_oe_lower_data_qs)
+	);
+	prim_subreg_ext #(.DW(16)) u_masked_oe_lower_mask(
+		.re(masked_oe_lower_mask_re),
+		.we(masked_oe_lower_mask_we),
+		.wd(masked_oe_lower_mask_wd),
+		.d(hw2reg[47-:16]),
+		.qre(),
+		.qe(reg2hw[194]),
+		.q(reg2hw[210-:16]),
+		.qs(masked_oe_lower_mask_qs)
+	);
+	prim_subreg_ext #(.DW(16)) u_masked_oe_upper_data(
+		.re(masked_oe_upper_data_re),
+		.we(masked_oe_upper_data_we),
+		.wd(masked_oe_upper_data_wd),
+		.d(hw2reg[31-:16]),
+		.qre(),
+		.qe(reg2hw[177]),
+		.q(reg2hw[193-:16]),
+		.qs(masked_oe_upper_data_qs)
+	);
+	prim_subreg_ext #(.DW(16)) u_masked_oe_upper_mask(
+		.re(masked_oe_upper_mask_re),
+		.we(masked_oe_upper_mask_we),
+		.wd(masked_oe_upper_mask_wd),
+		.d(hw2reg[15-:16]),
+		.qre(),
+		.qe(reg2hw[160]),
+		.q(reg2hw[176-:16]),
+		.qs(masked_oe_upper_mask_qs)
+	);
+	prim_subreg #(
+		.DW(32),
+		.SWACCESS("RW"),
+		.RESVAL(32'h00000000)
+	) u_intr_ctrl_en_rising(
+		.clk_i(clk_i),
+		.rst_ni(rst_ni),
+		.we(intr_ctrl_en_rising_we),
+		.wd(intr_ctrl_en_rising_wd),
+		.de(1'b0),
+		.d({32 {1'sb0}}),
+		.qe(),
+		.q(reg2hw[159-:32]),
+		.qs(intr_ctrl_en_rising_qs)
+	);
+	prim_subreg #(
+		.DW(32),
+		.SWACCESS("RW"),
+		.RESVAL(32'h00000000)
+	) u_intr_ctrl_en_falling(
+		.clk_i(clk_i),
+		.rst_ni(rst_ni),
+		.we(intr_ctrl_en_falling_we),
+		.wd(intr_ctrl_en_falling_wd),
+		.de(1'b0),
+		.d({32 {1'sb0}}),
+		.qe(),
+		.q(reg2hw[127-:32]),
+		.qs(intr_ctrl_en_falling_qs)
+	);
+	prim_subreg #(
+		.DW(32),
+		.SWACCESS("RW"),
+		.RESVAL(32'h00000000)
+	) u_intr_ctrl_en_lvlhigh(
+		.clk_i(clk_i),
+		.rst_ni(rst_ni),
+		.we(intr_ctrl_en_lvlhigh_we),
+		.wd(intr_ctrl_en_lvlhigh_wd),
+		.de(1'b0),
+		.d({32 {1'sb0}}),
+		.qe(),
+		.q(reg2hw[95-:32]),
+		.qs(intr_ctrl_en_lvlhigh_qs)
+	);
+	prim_subreg #(
+		.DW(32),
+		.SWACCESS("RW"),
+		.RESVAL(32'h00000000)
+	) u_intr_ctrl_en_lvllow(
+		.clk_i(clk_i),
+		.rst_ni(rst_ni),
+		.we(intr_ctrl_en_lvllow_we),
+		.wd(intr_ctrl_en_lvllow_wd),
+		.de(1'b0),
+		.d({32 {1'sb0}}),
+		.qe(),
+		.q(reg2hw[63-:32]),
+		.qs(intr_ctrl_en_lvllow_qs)
+	);
+	prim_subreg #(
+		.DW(32),
+		.SWACCESS("RW"),
+		.RESVAL(32'h00000000)
+	) u_ctrl_en_input_filter(
+		.clk_i(clk_i),
+		.rst_ni(rst_ni),
+		.we(ctrl_en_input_filter_we),
+		.wd(ctrl_en_input_filter_wd),
+		.de(1'b0),
+		.d({32 {1'sb0}}),
+		.qe(),
+		.q(reg2hw[31-:32]),
+		.qs(ctrl_en_input_filter_qs)
+	);
+	reg [14:0] addr_hit;
+	localparam signed [31:0] gpio_reg_pkg_BlockAw = 6;
+	localparam [5:0] gpio_reg_pkg_GPIO_CTRL_EN_INPUT_FILTER_OFFSET = 6'h38;
+	localparam [5:0] gpio_reg_pkg_GPIO_DATA_IN_OFFSET = 6'h0c;
+	localparam [5:0] gpio_reg_pkg_GPIO_DIRECT_OE_OFFSET = 6'h1c;
+	localparam [5:0] gpio_reg_pkg_GPIO_DIRECT_OUT_OFFSET = 6'h10;
+	localparam [5:0] gpio_reg_pkg_GPIO_INTR_CTRL_EN_FALLING_OFFSET = 6'h2c;
+	localparam [5:0] gpio_reg_pkg_GPIO_INTR_CTRL_EN_LVLHIGH_OFFSET = 6'h30;
+	localparam [5:0] gpio_reg_pkg_GPIO_INTR_CTRL_EN_LVLLOW_OFFSET = 6'h34;
+	localparam [5:0] gpio_reg_pkg_GPIO_INTR_CTRL_EN_RISING_OFFSET = 6'h28;
+	localparam [5:0] gpio_reg_pkg_GPIO_INTR_ENABLE_OFFSET = 6'h04;
+	localparam [5:0] gpio_reg_pkg_GPIO_INTR_STATE_OFFSET = 6'h00;
+	localparam [5:0] gpio_reg_pkg_GPIO_INTR_TEST_OFFSET = 6'h08;
+	localparam [5:0] gpio_reg_pkg_GPIO_MASKED_OE_LOWER_OFFSET = 6'h20;
+	localparam [5:0] gpio_reg_pkg_GPIO_MASKED_OE_UPPER_OFFSET = 6'h24;
+	localparam [5:0] gpio_reg_pkg_GPIO_MASKED_OUT_LOWER_OFFSET = 6'h14;
+	localparam [5:0] gpio_reg_pkg_GPIO_MASKED_OUT_UPPER_OFFSET = 6'h18;
+	always @(*) begin
+		addr_hit = {15 {1'sb0}};
+		addr_hit[0] = reg_addr == gpio_reg_pkg_GPIO_INTR_STATE_OFFSET;
+		addr_hit[1] = reg_addr == gpio_reg_pkg_GPIO_INTR_ENABLE_OFFSET;
+		addr_hit[2] = reg_addr == gpio_reg_pkg_GPIO_INTR_TEST_OFFSET;
+		addr_hit[3] = reg_addr == gpio_reg_pkg_GPIO_DATA_IN_OFFSET;
+		addr_hit[4] = reg_addr == gpio_reg_pkg_GPIO_DIRECT_OUT_OFFSET;
+		addr_hit[5] = reg_addr == gpio_reg_pkg_GPIO_MASKED_OUT_LOWER_OFFSET;
+		addr_hit[6] = reg_addr == gpio_reg_pkg_GPIO_MASKED_OUT_UPPER_OFFSET;
+		addr_hit[7] = reg_addr == gpio_reg_pkg_GPIO_DIRECT_OE_OFFSET;
+		addr_hit[8] = reg_addr == gpio_reg_pkg_GPIO_MASKED_OE_LOWER_OFFSET;
+		addr_hit[9] = reg_addr == gpio_reg_pkg_GPIO_MASKED_OE_UPPER_OFFSET;
+		addr_hit[10] = reg_addr == gpio_reg_pkg_GPIO_INTR_CTRL_EN_RISING_OFFSET;
+		addr_hit[11] = reg_addr == gpio_reg_pkg_GPIO_INTR_CTRL_EN_FALLING_OFFSET;
+		addr_hit[12] = reg_addr == gpio_reg_pkg_GPIO_INTR_CTRL_EN_LVLHIGH_OFFSET;
+		addr_hit[13] = reg_addr == gpio_reg_pkg_GPIO_INTR_CTRL_EN_LVLLOW_OFFSET;
+		addr_hit[14] = reg_addr == gpio_reg_pkg_GPIO_CTRL_EN_INPUT_FILTER_OFFSET;
+	end
+	assign addrmiss = (reg_re || reg_we ? ~|addr_hit : 1'b0);
+	localparam [59:0] gpio_reg_pkg_GPIO_PERMIT = 60'b111111111111111111111111111111111111111111111111111111111111;
+	always @(*) begin
+		wr_err = 1'b0;
+		if ((addr_hit[0] && reg_we) && (gpio_reg_pkg_GPIO_PERMIT[56+:4] != (gpio_reg_pkg_GPIO_PERMIT[56+:4] & reg_be)))
+			wr_err = 1'b1;
+		if ((addr_hit[1] && reg_we) && (gpio_reg_pkg_GPIO_PERMIT[52+:4] != (gpio_reg_pkg_GPIO_PERMIT[52+:4] & reg_be)))
+			wr_err = 1'b1;
+		if ((addr_hit[2] && reg_we) && (gpio_reg_pkg_GPIO_PERMIT[48+:4] != (gpio_reg_pkg_GPIO_PERMIT[48+:4] & reg_be)))
+			wr_err = 1'b1;
+		if ((addr_hit[3] && reg_we) && (gpio_reg_pkg_GPIO_PERMIT[44+:4] != (gpio_reg_pkg_GPIO_PERMIT[44+:4] & reg_be)))
+			wr_err = 1'b1;
+		if ((addr_hit[4] && reg_we) && (gpio_reg_pkg_GPIO_PERMIT[40+:4] != (gpio_reg_pkg_GPIO_PERMIT[40+:4] & reg_be)))
+			wr_err = 1'b1;
+		if ((addr_hit[5] && reg_we) && (gpio_reg_pkg_GPIO_PERMIT[36+:4] != (gpio_reg_pkg_GPIO_PERMIT[36+:4] & reg_be)))
+			wr_err = 1'b1;
+		if ((addr_hit[6] && reg_we) && (gpio_reg_pkg_GPIO_PERMIT[32+:4] != (gpio_reg_pkg_GPIO_PERMIT[32+:4] & reg_be)))
+			wr_err = 1'b1;
+		if ((addr_hit[7] && reg_we) && (gpio_reg_pkg_GPIO_PERMIT[28+:4] != (gpio_reg_pkg_GPIO_PERMIT[28+:4] & reg_be)))
+			wr_err = 1'b1;
+		if ((addr_hit[8] && reg_we) && (gpio_reg_pkg_GPIO_PERMIT[24+:4] != (gpio_reg_pkg_GPIO_PERMIT[24+:4] & reg_be)))
+			wr_err = 1'b1;
+		if ((addr_hit[9] && reg_we) && (gpio_reg_pkg_GPIO_PERMIT[20+:4] != (gpio_reg_pkg_GPIO_PERMIT[20+:4] & reg_be)))
+			wr_err = 1'b1;
+		if ((addr_hit[10] && reg_we) && (gpio_reg_pkg_GPIO_PERMIT[16+:4] != (gpio_reg_pkg_GPIO_PERMIT[16+:4] & reg_be)))
+			wr_err = 1'b1;
+		if ((addr_hit[11] && reg_we) && (gpio_reg_pkg_GPIO_PERMIT[12+:4] != (gpio_reg_pkg_GPIO_PERMIT[12+:4] & reg_be)))
+			wr_err = 1'b1;
+		if ((addr_hit[12] && reg_we) && (gpio_reg_pkg_GPIO_PERMIT[8+:4] != (gpio_reg_pkg_GPIO_PERMIT[8+:4] & reg_be)))
+			wr_err = 1'b1;
+		if ((addr_hit[13] && reg_we) && (gpio_reg_pkg_GPIO_PERMIT[4+:4] != (gpio_reg_pkg_GPIO_PERMIT[4+:4] & reg_be)))
+			wr_err = 1'b1;
+		if ((addr_hit[14] && reg_we) && (gpio_reg_pkg_GPIO_PERMIT[0+:4] != (gpio_reg_pkg_GPIO_PERMIT[0+:4] & reg_be)))
+			wr_err = 1'b1;
+	end
+	assign intr_state_we = (addr_hit[0] & reg_we) & ~wr_err;
+	assign intr_state_wd = reg_wdata[31:0];
+	assign intr_enable_we = (addr_hit[1] & reg_we) & ~wr_err;
+	assign intr_enable_wd = reg_wdata[31:0];
+	assign intr_test_we = (addr_hit[2] & reg_we) & ~wr_err;
+	assign intr_test_wd = reg_wdata[31:0];
+	assign direct_out_we = (addr_hit[4] & reg_we) & ~wr_err;
+	assign direct_out_wd = reg_wdata[31:0];
+	assign direct_out_re = addr_hit[4] && reg_re;
+	assign masked_out_lower_data_we = (addr_hit[5] & reg_we) & ~wr_err;
+	assign masked_out_lower_data_wd = reg_wdata[15:0];
+	assign masked_out_lower_data_re = addr_hit[5] && reg_re;
+	assign masked_out_lower_mask_we = (addr_hit[5] & reg_we) & ~wr_err;
+	assign masked_out_lower_mask_wd = reg_wdata[31:16];
+	assign masked_out_upper_data_we = (addr_hit[6] & reg_we) & ~wr_err;
+	assign masked_out_upper_data_wd = reg_wdata[15:0];
+	assign masked_out_upper_data_re = addr_hit[6] && reg_re;
+	assign masked_out_upper_mask_we = (addr_hit[6] & reg_we) & ~wr_err;
+	assign masked_out_upper_mask_wd = reg_wdata[31:16];
+	assign direct_oe_we = (addr_hit[7] & reg_we) & ~wr_err;
+	assign direct_oe_wd = reg_wdata[31:0];
+	assign direct_oe_re = addr_hit[7] && reg_re;
+	assign masked_oe_lower_data_we = (addr_hit[8] & reg_we) & ~wr_err;
+	assign masked_oe_lower_data_wd = reg_wdata[15:0];
+	assign masked_oe_lower_data_re = addr_hit[8] && reg_re;
+	assign masked_oe_lower_mask_we = (addr_hit[8] & reg_we) & ~wr_err;
+	assign masked_oe_lower_mask_wd = reg_wdata[31:16];
+	assign masked_oe_lower_mask_re = addr_hit[8] && reg_re;
+	assign masked_oe_upper_data_we = (addr_hit[9] & reg_we) & ~wr_err;
+	assign masked_oe_upper_data_wd = reg_wdata[15:0];
+	assign masked_oe_upper_data_re = addr_hit[9] && reg_re;
+	assign masked_oe_upper_mask_we = (addr_hit[9] & reg_we) & ~wr_err;
+	assign masked_oe_upper_mask_wd = reg_wdata[31:16];
+	assign masked_oe_upper_mask_re = addr_hit[9] && reg_re;
+	assign intr_ctrl_en_rising_we = (addr_hit[10] & reg_we) & ~wr_err;
+	assign intr_ctrl_en_rising_wd = reg_wdata[31:0];
+	assign intr_ctrl_en_falling_we = (addr_hit[11] & reg_we) & ~wr_err;
+	assign intr_ctrl_en_falling_wd = reg_wdata[31:0];
+	assign intr_ctrl_en_lvlhigh_we = (addr_hit[12] & reg_we) & ~wr_err;
+	assign intr_ctrl_en_lvlhigh_wd = reg_wdata[31:0];
+	assign intr_ctrl_en_lvllow_we = (addr_hit[13] & reg_we) & ~wr_err;
+	assign intr_ctrl_en_lvllow_wd = reg_wdata[31:0];
+	assign ctrl_en_input_filter_we = (addr_hit[14] & reg_we) & ~wr_err;
+	assign ctrl_en_input_filter_wd = reg_wdata[31:0];
+	always @(*) begin
+		reg_rdata_next = {32 {1'sb0}};
+		case (1'b1)
+			addr_hit[0]: reg_rdata_next[31:0] = intr_state_qs;
+			addr_hit[1]: reg_rdata_next[31:0] = intr_enable_qs;
+			addr_hit[2]: reg_rdata_next[31:0] = {32 {1'sb0}};
+			addr_hit[3]: reg_rdata_next[31:0] = data_in_qs;
+			addr_hit[4]: reg_rdata_next[31:0] = direct_out_qs;
+			addr_hit[5]: begin
+				reg_rdata_next[15:0] = masked_out_lower_data_qs;
+				reg_rdata_next[31:16] = {16 {1'sb0}};
+			end
+			addr_hit[6]: begin
+				reg_rdata_next[15:0] = masked_out_upper_data_qs;
+				reg_rdata_next[31:16] = {16 {1'sb0}};
+			end
+			addr_hit[7]: reg_rdata_next[31:0] = direct_oe_qs;
+			addr_hit[8]: begin
+				reg_rdata_next[15:0] = masked_oe_lower_data_qs;
+				reg_rdata_next[31:16] = masked_oe_lower_mask_qs;
+			end
+			addr_hit[9]: begin
+				reg_rdata_next[15:0] = masked_oe_upper_data_qs;
+				reg_rdata_next[31:16] = masked_oe_upper_mask_qs;
+			end
+			addr_hit[10]: reg_rdata_next[31:0] = intr_ctrl_en_rising_qs;
+			addr_hit[11]: reg_rdata_next[31:0] = intr_ctrl_en_falling_qs;
+			addr_hit[12]: reg_rdata_next[31:0] = intr_ctrl_en_lvlhigh_qs;
+			addr_hit[13]: reg_rdata_next[31:0] = intr_ctrl_en_lvllow_qs;
+			addr_hit[14]: reg_rdata_next[31:0] = ctrl_en_input_filter_qs;
+			default: reg_rdata_next = {32 {1'sb1}};
+		endcase
+	end
+endmodule
+module gpio (
+	clk_i,
+	rst_ni,
+	tl_i,
+	tl_o,
+	cio_gpio_i,
+	cio_gpio_o,
+	cio_gpio_en_o,
+	intr_gpio_o
+);
+	input wire clk_i;
+	input wire rst_ni;
+	localparam signed [31:0] tlul_pkg_TL_AIW = 8;
+	localparam signed [31:0] tlul_pkg_TL_AW = 32;
+	localparam signed [31:0] tlul_pkg_TL_DW = 32;
+	localparam signed [31:0] tlul_pkg_TL_DBW = 4;
+	localparam signed [31:0] tlul_pkg_TL_SZW = 2;
+	input wire [85:0] tl_i;
+	localparam signed [31:0] tlul_pkg_TL_DIW = 1;
+	output wire [51:0] tl_o;
+	input wire [31:0] cio_gpio_i;
+	output wire [31:0] cio_gpio_o;
+	output wire [31:0] cio_gpio_en_o;
+	output wire [31:0] intr_gpio_o;
+	wire [458:0] reg2hw;
+	wire [257:0] hw2reg;
+	reg [31:0] cio_gpio_q;
+	reg [31:0] cio_gpio_en_q;
+	wire [31:0] data_in_d;
+	generate
+		genvar i;
+		for (i = 0; i < 32; i = i + 1) begin : gen_filter
+			prim_filter_ctr #(.Cycles(16)) filter(
+				.clk_i(clk_i),
+				.rst_ni(rst_ni),
+				.enable_i(reg2hw[i]),
+				.filter_i(cio_gpio_i[i]),
+				.filter_o(data_in_d[i])
+			);
+		end
+	endgenerate
+	assign hw2reg[192] = 1'b1;
+	assign hw2reg[224-:32] = data_in_d;
+	assign cio_gpio_o = cio_gpio_q;
+	assign cio_gpio_en_o = cio_gpio_en_q;
+	assign hw2reg[191-:32] = cio_gpio_q;
+	assign hw2reg[127-:16] = cio_gpio_q[31:16];
+	assign hw2reg[111-:16] = 16'h0000;
+	assign hw2reg[159-:16] = cio_gpio_q[15:0];
+	assign hw2reg[143-:16] = 16'h0000;
+	always @(posedge clk_i or negedge rst_ni)
+		if (!rst_ni)
+			cio_gpio_q <= {32 {1'sb0}};
+		else if (reg2hw[329])
+			cio_gpio_q <= reg2hw[361-:32];
+		else if (reg2hw[278])
+			cio_gpio_q[31:16] <= (reg2hw[277-:16] & reg2hw[294-:16]) | (~reg2hw[277-:16] & cio_gpio_q[31:16]);
+		else if (reg2hw[312])
+			cio_gpio_q[15:0] <= (reg2hw[311-:16] & reg2hw[328-:16]) | (~reg2hw[311-:16] & cio_gpio_q[15:0]);
+	assign hw2reg[95-:32] = cio_gpio_en_q;
+	assign hw2reg[31-:16] = cio_gpio_en_q[31:16];
+	assign hw2reg[15-:16] = 16'h0000;
+	assign hw2reg[63-:16] = cio_gpio_en_q[15:0];
+	assign hw2reg[47-:16] = 16'h0000;
+	always @(posedge clk_i or negedge rst_ni)
+		if (!rst_ni)
+			cio_gpio_en_q <= {32 {1'sb0}};
+		else if (reg2hw[228])
+			cio_gpio_en_q <= reg2hw[260-:32];
+		else if (reg2hw[177])
+			cio_gpio_en_q[31:16] <= (reg2hw[176-:16] & reg2hw[193-:16]) | (~reg2hw[176-:16] & cio_gpio_en_q[31:16]);
+		else if (reg2hw[211])
+			cio_gpio_en_q[15:0] <= (reg2hw[210-:16] & reg2hw[227-:16]) | (~reg2hw[210-:16] & cio_gpio_en_q[15:0]);
+	reg [31:0] data_in_q;
+	always @(posedge clk_i) data_in_q <= data_in_d;
+	wire [31:0] event_intr_rise;
+	wire [31:0] event_intr_fall;
+	wire [31:0] event_intr_actlow;
+	wire [31:0] event_intr_acthigh;
+	wire [31:0] event_intr_combined;
+	prim_intr_hw #(.Width(32)) intr_hw(
+		.clk_i(clk_i),
+		.rst_ni(rst_ni),
+		.event_intr_i(event_intr_combined),
+		.reg2hw_intr_enable_q_i(reg2hw[426-:32]),
+		.reg2hw_intr_test_q_i(reg2hw[394-:32]),
+		.reg2hw_intr_test_qe_i(reg2hw[362]),
+		.reg2hw_intr_state_q_i(reg2hw[458-:32]),
+		.hw2reg_intr_state_de_o(hw2reg[225]),
+		.hw2reg_intr_state_d_o(hw2reg[257-:32]),
+		.intr_o(intr_gpio_o)
+	);
+	assign event_intr_rise = (~data_in_q & data_in_d) & reg2hw[159-:32];
+	assign event_intr_fall = (data_in_q & ~data_in_d) & reg2hw[127-:32];
+	assign event_intr_acthigh = data_in_d & reg2hw[95-:32];
+	assign event_intr_actlow = ~data_in_d & reg2hw[63-:32];
+	assign event_intr_combined = ((event_intr_rise | event_intr_fall) | event_intr_actlow) | event_intr_acthigh;
+	gpio_reg_top u_reg(
+		.clk_i(clk_i),
+		.rst_ni(rst_ni),
+		.tl_i(tl_i),
+		.tl_o(tl_o),
+		.reg2hw(reg2hw),
+		.hw2reg(hw2reg),
+		.devmode_i(1'b1)
+	);
+endmodule
+
+module iccm_controller (
+	clk_i,
+	rst_ni,
+	prog_i,
+	rx_dv_i,
+	rx_byte_i,
+	we_o,
+	addr_o,
+	wdata_o,
+	reset_o
+);
+	input wire clk_i;
+	input wire rst_ni;
+	input wire prog_i;
+	input wire rx_dv_i;
+	input wire [7:0] rx_byte_i;
+	output wire we_o;
+	output wire [11: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 [11:0] addr_q;
+	reg [11: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 || (!rst_ni)) 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 <= 12'b000000000000;
+			rx_byte_q0 <= 8'b00000000;
+			rx_byte_q1 <= 8'b00000000;
+			rx_byte_q2 <= 8'b00000000;
+			rx_byte_q3 <= 8'b00000000;
+			reset_q <= 1'b1;
+			byte_count <= 2'b00;
+			ctrl_fsm_cs <= DONE;
+		end 
+		else if (prog_i) begin
+            we_q <= 1'b0;
+            addr_q <= 12'b000000000000;
+            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 + 1'b1;
+			reset_q <= reset_d;
+			ctrl_fsm_cs <= ctrl_fsm_ns;
+		end
+endmodule
+module instr_mem_top (
+	clk_i,
+	rst_ni,
+	tl_i,
+	tl_o,
+	iccm_ctrl_addr,
+	iccm_ctrl_wdata,
+	iccm_ctrl_we,
+	prog_rst_ni,
+	csb,
+	addr_o,
+	wdata_o,
+	wmask_o,
+	we_o,
+	rdata_i
+);
+	input wire clk_i;
+	input wire rst_ni;
+	localparam signed [31:0] tlul_pkg_TL_AIW = 8;
+	localparam signed [31:0] tlul_pkg_TL_AW = 32;
+	localparam signed [31:0] tlul_pkg_TL_DW = 32;
+	localparam signed [31:0] tlul_pkg_TL_DBW = 4;
+	localparam signed [31:0] tlul_pkg_TL_SZW = 2;
+	input wire [85:0] tl_i;
+	localparam signed [31:0] tlul_pkg_TL_DIW = 1;
+	output wire [51:0] tl_o;
+	input [11:0] iccm_ctrl_addr;
+	input [31:0] iccm_ctrl_wdata;
+	input wire iccm_ctrl_we;
+	input wire prog_rst_ni;
+	output wire csb;
+	output wire [11:0] addr_o;
+	output wire [31:0] wdata_o;
+	output wire [3:0] wmask_o;
+	output wire we_o;
+	input wire [31:0] rdata_i;
+	reg rvalid;
+	wire tl_we;
+	wire [31:0] tl_wmask;
+	wire [31:0] tl_wdata;
+	wire [11:0] tl_addr;
+	wire tl_req;
+	wire [3:0] mask_sel;
+	assign mask_sel[0] = (tl_wmask[7:0] != 8'b00000000 ? 1'b1 : 1'b0);
+	assign mask_sel[1] = (tl_wmask[15:8] != 8'b00000000 ? 1'b1 : 1'b0);
+	assign mask_sel[2] = (tl_wmask[23:16] != 8'b00000000 ? 1'b1 : 1'b0);
+	assign mask_sel[3] = (tl_wmask[31:24] != 8'b00000000 ? 1'b1 : 1'b0);
+	assign csb = ~1'b1;
+	assign addr_o = (prog_rst_ni ? tl_addr : iccm_ctrl_addr);
+	assign wdata_o = (prog_rst_ni ? tl_wdata : iccm_ctrl_wdata);
+	assign we_o = ~(prog_rst_ni ? tl_we : iccm_ctrl_we);
+	assign wmask_o = (prog_rst_ni ? mask_sel : 4'b1111);
+	tlul_sram_adapter #(
+		.SramAw(12),
+		.SramDw(32),
+		.Outstanding(2),
+		.ByteAccess(1),
+		.ErrOnWrite(0),
+		.ErrOnRead(0)
+	) inst_mem(
+		.clk_i(clk_i),
+		.rst_ni(rst_ni),
+		.tl_i(tl_i),
+		.tl_o(tl_o),
+		.req_o(tl_req),
+		.gnt_i(1'b1),
+		.we_o(tl_we),
+		.addr_o(tl_addr),
+		.wdata_o(tl_wdata),
+		.wmask_o(tl_wmask),
+		.rdata_i((rst_ni ? rdata_i : {32 {1'sb0}})),
+		.rvalid_i(rvalid),
+		.rerror_i(2'b00)
+	);
+	always @(posedge clk_i)
+		if (!rst_ni)
+			rvalid <= 1'b0;
+		else if (iccm_ctrl_we | tl_we)
+			rvalid <= 1'b0;
+		else
+			rvalid <= tl_req;
+endmodule
+module iteration_div_sqrt_mvp (
+	A_DI,
+	B_DI,
+	Div_enable_SI,
+	Div_start_dly_SI,
+	Sqrt_enable_SI,
+	D_DI,
+	D_DO,
+	Sum_DO,
+	Carry_out_DO
+);
+	parameter WIDTH = 25;
+	input wire [WIDTH - 1:0] A_DI;
+	input wire [WIDTH - 1:0] B_DI;
+	input wire Div_enable_SI;
+	input wire Div_start_dly_SI;
+	input wire Sqrt_enable_SI;
+	input wire [1:0] D_DI;
+	output wire [1:0] D_DO;
+	output wire [WIDTH - 1:0] Sum_DO;
+	output wire Carry_out_DO;
+	wire D_carry_D;
+	wire Sqrt_cin_D;
+	wire Cin_D;
+	assign D_DO[0] = ~D_DI[0];
+	assign D_DO[1] = ~(D_DI[1] ^ D_DI[0]);
+	assign D_carry_D = D_DI[1] | D_DI[0];
+	assign Sqrt_cin_D = Sqrt_enable_SI && D_carry_D;
+	assign Cin_D = (Div_enable_SI ? 1'b0 : Sqrt_cin_D);
+	assign {Carry_out_DO, Sum_DO} = (A_DI + B_DI) + Cin_D;
+endmodule
+module lzc (
+	in_i,
+	cnt_o,
+	empty_o
+);
+	parameter [31:0] WIDTH = 2;
+	parameter [0:0] MODE = 1'b0;
+	function automatic [31:0] cf_math_pkg_idx_width;
+		input reg [31:0] num_idx;
+		cf_math_pkg_idx_width = (num_idx > 32'd1 ? $unsigned($clog2(num_idx)) : 32'd1);
+	endfunction
+	parameter [31:0] CNT_WIDTH = cf_math_pkg_idx_width(WIDTH);
+	input wire [WIDTH - 1:0] in_i;
+	output wire [CNT_WIDTH - 1:0] cnt_o;
+	output wire empty_o;
+	generate
+		if (WIDTH == 1) begin : gen_degenerate_lzc
+			assign cnt_o[0] = !in_i[0];
+			assign empty_o = !in_i[0];
+		end
+		else begin : gen_lzc
+			localparam [31:0] NumLevels = $clog2(WIDTH);
+			wire [(WIDTH * NumLevels) - 1:0] index_lut;
+			wire [(2 ** NumLevels) - 1:0] sel_nodes;
+			wire [((2 ** NumLevels) * NumLevels) - 1:0] index_nodes;
+			reg [WIDTH - 1:0] in_tmp;
+			always @(*) begin : flip_vector
+				begin : sv2v_autoblock_132
+					reg [31:0] i;
+					for (i = 0; i < WIDTH; i = i + 1)
+						in_tmp[i] = (MODE ? in_i[(WIDTH - 1) - i] : in_i[i]);
+				end
+			end
+			genvar j;
+			for (j = 0; $unsigned(j) < WIDTH; j = j + 1) begin : g_index_lut
+				function automatic [NumLevels - 1:0] sv2v_cast_4C5E6;
+					input reg [NumLevels - 1:0] inp;
+					sv2v_cast_4C5E6 = inp;
+				endfunction
+				assign index_lut[j * NumLevels+:NumLevels] = sv2v_cast_4C5E6($unsigned(j));
+			end
+			genvar level;
+			for (level = 0; $unsigned(level) < NumLevels; level = level + 1) begin : g_levels
+				if ($unsigned(level) == (NumLevels - 1)) begin : g_last_level
+					genvar k;
+					for (k = 0; k < (2 ** level); k = k + 1) begin : g_level
+						if (($unsigned(k) * 2) < (WIDTH - 1)) begin : g_reduce
+							assign sel_nodes[((2 ** level) - 1) + k] = in_tmp[k * 2] | in_tmp[(k * 2) + 1];
+							assign index_nodes[(((2 ** level) - 1) + k) * NumLevels+:NumLevels] = (in_tmp[k * 2] == 1'b1 ? index_lut[(k * 2) * NumLevels+:NumLevels] : index_lut[((k * 2) + 1) * NumLevels+:NumLevels]);
+						end
+						if (($unsigned(k) * 2) == (WIDTH - 1)) begin : g_base
+							assign sel_nodes[((2 ** level) - 1) + k] = in_tmp[k * 2];
+							assign index_nodes[(((2 ** level) - 1) + k) * NumLevels+:NumLevels] = index_lut[(k * 2) * NumLevels+:NumLevels];
+						end
+						if (($unsigned(k) * 2) > (WIDTH - 1)) begin : g_out_of_range
+							assign sel_nodes[((2 ** level) - 1) + k] = 1'b0;
+							assign index_nodes[(((2 ** level) - 1) + k) * NumLevels+:NumLevels] = {NumLevels {1'sb0}};
+						end
+					end
+				end
+				else begin : g_not_last_level
+					genvar l;
+					for (l = 0; l < (2 ** level); l = l + 1) begin : g_level
+						assign sel_nodes[((2 ** level) - 1) + l] = sel_nodes[((2 ** (level + 1)) - 1) + (l * 2)] | sel_nodes[(((2 ** (level + 1)) - 1) + (l * 2)) + 1];
+						assign index_nodes[(((2 ** level) - 1) + l) * NumLevels+:NumLevels] = (sel_nodes[((2 ** (level + 1)) - 1) + (l * 2)] == 1'b1 ? index_nodes[(((2 ** (level + 1)) - 1) + (l * 2)) * NumLevels+:NumLevels] : index_nodes[((((2 ** (level + 1)) - 1) + (l * 2)) + 1) * NumLevels+:NumLevels]);
+					end
+				end
+			end
+			assign cnt_o = (NumLevels > $unsigned(0) ? index_nodes[0+:NumLevels] : {$clog2(WIDTH) {1'b0}});
+			assign empty_o = (NumLevels > $unsigned(0) ? ~sel_nodes[0] : ~(|in_i));
+		end
+	endgenerate
+endmodule
+module norm_div_sqrt_mvp (
+	Mant_in_DI,
+	Exp_in_DI,
+	Sign_in_DI,
+	Div_enable_SI,
+	Sqrt_enable_SI,
+	Inf_a_SI,
+	Inf_b_SI,
+	Zero_a_SI,
+	Zero_b_SI,
+	NaN_a_SI,
+	NaN_b_SI,
+	SNaN_SI,
+	RM_SI,
+	Full_precision_SI,
+	FP32_SI,
+	FP64_SI,
+	FP16_SI,
+	FP16ALT_SI,
+	Result_DO,
+	Fflags_SO
+);
+	localparam defs_div_sqrt_mvp_C_MANT_FP64 = 52;
+	input wire [56:0] Mant_in_DI;
+	localparam defs_div_sqrt_mvp_C_EXP_FP64 = 11;
+	input wire signed [12:0] Exp_in_DI;
+	input wire Sign_in_DI;
+	input wire Div_enable_SI;
+	input wire Sqrt_enable_SI;
+	input wire Inf_a_SI;
+	input wire Inf_b_SI;
+	input wire Zero_a_SI;
+	input wire Zero_b_SI;
+	input wire NaN_a_SI;
+	input wire NaN_b_SI;
+	input wire SNaN_SI;
+	localparam defs_div_sqrt_mvp_C_RM = 3;
+	input wire [2:0] RM_SI;
+	input wire Full_precision_SI;
+	input wire FP32_SI;
+	input wire FP64_SI;
+	input wire FP16_SI;
+	input wire FP16ALT_SI;
+	output reg [63:0] Result_DO;
+	output wire [4:0] Fflags_SO;
+	reg Sign_res_D;
+	reg NV_OP_S;
+	reg Exp_OF_S;
+	reg Exp_UF_S;
+	reg Div_Zero_S;
+	wire In_Exact_S;
+	reg [defs_div_sqrt_mvp_C_MANT_FP64:0] Mant_res_norm_D;
+	reg [10:0] Exp_res_norm_D;
+	wire [12:0] Exp_Max_RS_FP64_D;
+	localparam defs_div_sqrt_mvp_C_EXP_FP32 = 8;
+	wire [9:0] Exp_Max_RS_FP32_D;
+	localparam defs_div_sqrt_mvp_C_EXP_FP16 = 5;
+	wire [6:0] Exp_Max_RS_FP16_D;
+	localparam defs_div_sqrt_mvp_C_EXP_FP16ALT = 8;
+	wire [9:0] Exp_Max_RS_FP16ALT_D;
+	assign Exp_Max_RS_FP64_D = (Exp_in_DI[defs_div_sqrt_mvp_C_EXP_FP64:0] + defs_div_sqrt_mvp_C_MANT_FP64) + 1;
+	localparam defs_div_sqrt_mvp_C_MANT_FP32 = 23;
+	assign Exp_Max_RS_FP32_D = (Exp_in_DI[defs_div_sqrt_mvp_C_EXP_FP32:0] + defs_div_sqrt_mvp_C_MANT_FP32) + 1;
+	localparam defs_div_sqrt_mvp_C_MANT_FP16 = 10;
+	assign Exp_Max_RS_FP16_D = (Exp_in_DI[defs_div_sqrt_mvp_C_EXP_FP16:0] + defs_div_sqrt_mvp_C_MANT_FP16) + 1;
+	localparam defs_div_sqrt_mvp_C_MANT_FP16ALT = 7;
+	assign Exp_Max_RS_FP16ALT_D = (Exp_in_DI[defs_div_sqrt_mvp_C_EXP_FP16ALT:0] + defs_div_sqrt_mvp_C_MANT_FP16ALT) + 1;
+	wire [12:0] Num_RS_D;
+	assign Num_RS_D = ~Exp_in_DI + 2;
+	wire [defs_div_sqrt_mvp_C_MANT_FP64:0] Mant_RS_D;
+	wire [56:0] Mant_forsticky_D;
+	assign {Mant_RS_D, Mant_forsticky_D} = {Mant_in_DI, {53 {1'b0}}} >> Num_RS_D;
+	wire [12:0] Exp_subOne_D;
+	assign Exp_subOne_D = Exp_in_DI - 1;
+	reg [1:0] Mant_lower_D;
+	reg Mant_sticky_bit_D;
+	reg [56:0] Mant_forround_D;
+	localparam defs_div_sqrt_mvp_C_EXP_ONE_FP64 = 13'h0001;
+	localparam defs_div_sqrt_mvp_C_MANT_NAN_FP64 = 52'h8000000000000;
+	always @(*)
+		if (NaN_a_SI) begin
+			Div_Zero_S = 1'b0;
+			Exp_OF_S = 1'b0;
+			Exp_UF_S = 1'b0;
+			Mant_res_norm_D = {1'b0, defs_div_sqrt_mvp_C_MANT_NAN_FP64};
+			Exp_res_norm_D = {11 {1'sb1}};
+			Mant_forround_D = {57 {1'sb0}};
+			Sign_res_D = 1'b0;
+			NV_OP_S = SNaN_SI;
+		end
+		else if (NaN_b_SI) begin
+			Div_Zero_S = 1'b0;
+			Exp_OF_S = 1'b0;
+			Exp_UF_S = 1'b0;
+			Mant_res_norm_D = {1'b0, defs_div_sqrt_mvp_C_MANT_NAN_FP64};
+			Exp_res_norm_D = {11 {1'sb1}};
+			Mant_forround_D = {57 {1'sb0}};
+			Sign_res_D = 1'b0;
+			NV_OP_S = SNaN_SI;
+		end
+		else if (Inf_a_SI) begin
+			if (Div_enable_SI && Inf_b_SI) begin
+				Div_Zero_S = 1'b0;
+				Exp_OF_S = 1'b0;
+				Exp_UF_S = 1'b0;
+				Mant_res_norm_D = {1'b0, defs_div_sqrt_mvp_C_MANT_NAN_FP64};
+				Exp_res_norm_D = {11 {1'sb1}};
+				Mant_forround_D = {57 {1'sb0}};
+				Sign_res_D = 1'b0;
+				NV_OP_S = 1'b1;
+			end
+			else if (Sqrt_enable_SI && Sign_in_DI) begin
+				Div_Zero_S = 1'b0;
+				Exp_OF_S = 1'b0;
+				Exp_UF_S = 1'b0;
+				Mant_res_norm_D = {1'b0, defs_div_sqrt_mvp_C_MANT_NAN_FP64};
+				Exp_res_norm_D = {11 {1'sb1}};
+				Mant_forround_D = {57 {1'sb0}};
+				Sign_res_D = 1'b0;
+				NV_OP_S = 1'b1;
+			end
+			else begin
+				Div_Zero_S = 1'b0;
+				Exp_OF_S = 1'b1;
+				Exp_UF_S = 1'b0;
+				Mant_res_norm_D = {53 {1'sb0}};
+				Exp_res_norm_D = {11 {1'sb1}};
+				Mant_forround_D = {57 {1'sb0}};
+				Sign_res_D = Sign_in_DI;
+				NV_OP_S = 1'b0;
+			end
+		end
+		else if (Div_enable_SI && Inf_b_SI) begin
+			Div_Zero_S = 1'b0;
+			Exp_OF_S = 1'b1;
+			Exp_UF_S = 1'b0;
+			Mant_res_norm_D = {53 {1'sb0}};
+			Exp_res_norm_D = {11 {1'sb0}};
+			Mant_forround_D = {57 {1'sb0}};
+			Sign_res_D = Sign_in_DI;
+			NV_OP_S = 1'b0;
+		end
+		else if (Zero_a_SI) begin
+			if (Div_enable_SI && Zero_b_SI) begin
+				Div_Zero_S = 1'b1;
+				Exp_OF_S = 1'b0;
+				Exp_UF_S = 1'b0;
+				Mant_res_norm_D = {1'b0, defs_div_sqrt_mvp_C_MANT_NAN_FP64};
+				Exp_res_norm_D = {11 {1'sb1}};
+				Mant_forround_D = {57 {1'sb0}};
+				Sign_res_D = 1'b0;
+				NV_OP_S = 1'b1;
+			end
+			else begin
+				Div_Zero_S = 1'b0;
+				Exp_OF_S = 1'b0;
+				Exp_UF_S = 1'b0;
+				Mant_res_norm_D = {53 {1'sb0}};
+				Exp_res_norm_D = {11 {1'sb0}};
+				Mant_forround_D = {57 {1'sb0}};
+				Sign_res_D = Sign_in_DI;
+				NV_OP_S = 1'b0;
+			end
+		end
+		else if (Div_enable_SI && Zero_b_SI) begin
+			Div_Zero_S = 1'b1;
+			Exp_OF_S = 1'b0;
+			Exp_UF_S = 1'b0;
+			Mant_res_norm_D = {53 {1'sb0}};
+			Exp_res_norm_D = {11 {1'sb1}};
+			Mant_forround_D = {57 {1'sb0}};
+			Sign_res_D = Sign_in_DI;
+			NV_OP_S = 1'b0;
+		end
+		else if (Sign_in_DI && Sqrt_enable_SI) begin
+			Div_Zero_S = 1'b0;
+			Exp_OF_S = 1'b0;
+			Exp_UF_S = 1'b0;
+			Mant_res_norm_D = {1'b0, defs_div_sqrt_mvp_C_MANT_NAN_FP64};
+			Exp_res_norm_D = {11 {1'sb1}};
+			Mant_forround_D = {57 {1'sb0}};
+			Sign_res_D = 1'b0;
+			NV_OP_S = 1'b1;
+		end
+		else if (Exp_in_DI[defs_div_sqrt_mvp_C_EXP_FP64:0] == {12 {1'sb0}}) begin
+			if (Mant_in_DI != {57 {1'sb0}}) begin
+				Div_Zero_S = 1'b0;
+				Exp_OF_S = 1'b0;
+				Exp_UF_S = 1'b1;
+				Mant_res_norm_D = {1'b0, Mant_in_DI[56:5]};
+				Exp_res_norm_D = {11 {1'sb0}};
+				Mant_forround_D = {Mant_in_DI[4:0], {defs_div_sqrt_mvp_C_MANT_FP64 {1'b0}}};
+				Sign_res_D = Sign_in_DI;
+				NV_OP_S = 1'b0;
+			end
+			else begin
+				Div_Zero_S = 1'b0;
+				Exp_OF_S = 1'b0;
+				Exp_UF_S = 1'b0;
+				Mant_res_norm_D = {53 {1'sb0}};
+				Exp_res_norm_D = {11 {1'sb0}};
+				Mant_forround_D = {57 {1'sb0}};
+				Sign_res_D = Sign_in_DI;
+				NV_OP_S = 1'b0;
+			end
+		end
+		else if ((Exp_in_DI[defs_div_sqrt_mvp_C_EXP_FP64:0] == defs_div_sqrt_mvp_C_EXP_ONE_FP64) && ~Mant_in_DI[56]) begin
+			Div_Zero_S = 1'b0;
+			Exp_OF_S = 1'b0;
+			Exp_UF_S = 1'b1;
+			Mant_res_norm_D = Mant_in_DI[56:4];
+			Exp_res_norm_D = {11 {1'sb0}};
+			Mant_forround_D = {Mant_in_DI[3:0], {53 {1'b0}}};
+			Sign_res_D = Sign_in_DI;
+			NV_OP_S = 1'b0;
+		end
+		else if (Exp_in_DI[12]) begin
+			Div_Zero_S = 1'b0;
+			Exp_OF_S = 1'b0;
+			Exp_UF_S = 1'b1;
+			Mant_res_norm_D = {Mant_RS_D[defs_div_sqrt_mvp_C_MANT_FP64:0]};
+			Exp_res_norm_D = {11 {1'sb0}};
+			Mant_forround_D = {Mant_forsticky_D[56:0]};
+			Sign_res_D = Sign_in_DI;
+			NV_OP_S = 1'b0;
+		end
+		else if ((((Exp_in_DI[defs_div_sqrt_mvp_C_EXP_FP32] && FP32_SI) | (Exp_in_DI[defs_div_sqrt_mvp_C_EXP_FP64] && FP64_SI)) | (Exp_in_DI[defs_div_sqrt_mvp_C_EXP_FP16] && FP16_SI)) | (Exp_in_DI[defs_div_sqrt_mvp_C_EXP_FP16ALT] && FP16ALT_SI)) begin
+			Div_Zero_S = 1'b0;
+			Exp_OF_S = 1'b1;
+			Exp_UF_S = 1'b0;
+			Mant_res_norm_D = {53 {1'sb0}};
+			Exp_res_norm_D = {11 {1'sb1}};
+			Mant_forround_D = {57 {1'sb0}};
+			Sign_res_D = Sign_in_DI;
+			NV_OP_S = 1'b0;
+		end
+		else if (((((Exp_in_DI[7:0] == {8 {1'sb1}}) && FP32_SI) | ((Exp_in_DI[10:0] == {11 {1'sb1}}) && FP64_SI)) | ((Exp_in_DI[4:0] == {5 {1'sb1}}) && FP16_SI)) | ((Exp_in_DI[7:0] == {8 {1'sb1}}) && FP16ALT_SI)) begin
+			if (~Mant_in_DI[56]) begin
+				Div_Zero_S = 1'b0;
+				Exp_OF_S = 1'b0;
+				Exp_UF_S = 1'b0;
+				Mant_res_norm_D = Mant_in_DI[55:3];
+				Exp_res_norm_D = Exp_subOne_D;
+				Mant_forround_D = {Mant_in_DI[2:0], {54 {1'b0}}};
+				Sign_res_D = Sign_in_DI;
+				NV_OP_S = 1'b0;
+			end
+			else if (Mant_in_DI != {57 {1'sb0}}) begin
+				Div_Zero_S = 1'b0;
+				Exp_OF_S = 1'b1;
+				Exp_UF_S = 1'b0;
+				Mant_res_norm_D = {53 {1'sb0}};
+				Exp_res_norm_D = {11 {1'sb1}};
+				Mant_forround_D = {57 {1'sb0}};
+				Sign_res_D = Sign_in_DI;
+				NV_OP_S = 1'b0;
+			end
+			else begin
+				Div_Zero_S = 1'b0;
+				Exp_OF_S = 1'b1;
+				Exp_UF_S = 1'b0;
+				Mant_res_norm_D = {53 {1'sb0}};
+				Exp_res_norm_D = {11 {1'sb1}};
+				Mant_forround_D = {57 {1'sb0}};
+				Sign_res_D = Sign_in_DI;
+				NV_OP_S = 1'b0;
+			end
+		end
+		else if (Mant_in_DI[56]) begin
+			Div_Zero_S = 1'b0;
+			Exp_OF_S = 1'b0;
+			Exp_UF_S = 1'b0;
+			Mant_res_norm_D = Mant_in_DI[56:4];
+			Exp_res_norm_D = Exp_in_DI[10:0];
+			Mant_forround_D = {Mant_in_DI[3:0], {53 {1'b0}}};
+			Sign_res_D = Sign_in_DI;
+			NV_OP_S = 1'b0;
+		end
+		else begin
+			Div_Zero_S = 1'b0;
+			Exp_OF_S = 1'b0;
+			Exp_UF_S = 1'b0;
+			Mant_res_norm_D = Mant_in_DI[55:3];
+			Exp_res_norm_D = Exp_subOne_D;
+			Mant_forround_D = {Mant_in_DI[2:0], {54 {1'b0}}};
+			Sign_res_D = Sign_in_DI;
+			NV_OP_S = 1'b0;
+		end
+	reg [defs_div_sqrt_mvp_C_MANT_FP64:0] Mant_upper_D;
+	wire [53:0] Mant_upperRounded_D;
+	reg Mant_roundUp_S;
+	wire Mant_rounded_S;
+	always @(*)
+		if (FP32_SI) begin
+			Mant_upper_D = {Mant_res_norm_D[defs_div_sqrt_mvp_C_MANT_FP64:29], {29 {1'b0}}};
+			Mant_lower_D = Mant_res_norm_D[28:27];
+			Mant_sticky_bit_D = |Mant_res_norm_D[26:0];
+		end
+		else if (FP64_SI) begin
+			Mant_upper_D = Mant_res_norm_D[defs_div_sqrt_mvp_C_MANT_FP64:0];
+			Mant_lower_D = Mant_forround_D[56:55];
+			Mant_sticky_bit_D = |Mant_forround_D[55:0];
+		end
+		else if (FP16_SI) begin
+			Mant_upper_D = {Mant_res_norm_D[defs_div_sqrt_mvp_C_MANT_FP64:42], {42 {1'b0}}};
+			Mant_lower_D = Mant_res_norm_D[41:40];
+			Mant_sticky_bit_D = |Mant_res_norm_D[39:30];
+		end
+		else begin
+			Mant_upper_D = {Mant_res_norm_D[defs_div_sqrt_mvp_C_MANT_FP64:45], {45 {1'b0}}};
+			Mant_lower_D = Mant_res_norm_D[44:43];
+			Mant_sticky_bit_D = |Mant_res_norm_D[42:30];
+		end
+	assign Mant_rounded_S = |Mant_lower_D | Mant_sticky_bit_D;
+	localparam defs_div_sqrt_mvp_C_RM_MINUSINF = 3'h3;
+	localparam defs_div_sqrt_mvp_C_RM_NEAREST = 3'h0;
+	localparam defs_div_sqrt_mvp_C_RM_PLUSINF = 3'h2;
+	localparam defs_div_sqrt_mvp_C_RM_TRUNC = 3'h1;
+	always @(*) begin
+		Mant_roundUp_S = 1'b0;
+		case (RM_SI)
+			defs_div_sqrt_mvp_C_RM_NEAREST: Mant_roundUp_S = Mant_lower_D[1] && ((Mant_lower_D[0] | Mant_sticky_bit_D) | ((((FP32_SI && Mant_upper_D[29]) | (FP64_SI && Mant_upper_D[0])) | (FP16_SI && Mant_upper_D[42])) | (FP16ALT_SI && Mant_upper_D[45])));
+			defs_div_sqrt_mvp_C_RM_TRUNC: Mant_roundUp_S = 0;
+			defs_div_sqrt_mvp_C_RM_PLUSINF: Mant_roundUp_S = Mant_rounded_S & ~Sign_in_DI;
+			defs_div_sqrt_mvp_C_RM_MINUSINF: Mant_roundUp_S = Mant_rounded_S & Sign_in_DI;
+			default: Mant_roundUp_S = 0;
+		endcase
+	end
+	wire Mant_renorm_S;
+	wire [defs_div_sqrt_mvp_C_MANT_FP64:0] Mant_roundUp_Vector_S;
+	assign Mant_roundUp_Vector_S = {7'h00, FP16ALT_SI && Mant_roundUp_S, 2'h0, FP16_SI && Mant_roundUp_S, 12'h000, FP32_SI && Mant_roundUp_S, 28'h0000000, FP64_SI && Mant_roundUp_S};
+	assign Mant_upperRounded_D = Mant_upper_D + Mant_roundUp_Vector_S;
+	assign Mant_renorm_S = Mant_upperRounded_D[53];
+	wire [51:0] Mant_res_round_D;
+	wire [10:0] Exp_res_round_D;
+	assign Mant_res_round_D = (Mant_renorm_S ? Mant_upperRounded_D[defs_div_sqrt_mvp_C_MANT_FP64:1] : Mant_upperRounded_D[51:0]);
+	assign Exp_res_round_D = Exp_res_norm_D + Mant_renorm_S;
+	wire [51:0] Mant_before_format_ctl_D;
+	wire [10:0] Exp_before_format_ctl_D;
+	assign Mant_before_format_ctl_D = (Full_precision_SI ? Mant_res_round_D : Mant_res_norm_D);
+	assign Exp_before_format_ctl_D = (Full_precision_SI ? Exp_res_round_D : Exp_res_norm_D);
+	always @(*)
+		if (FP32_SI)
+			Result_DO = {32'hffffffff, Sign_res_D, Exp_before_format_ctl_D[7:0], Mant_before_format_ctl_D[51:29]};
+		else if (FP64_SI)
+			Result_DO = {Sign_res_D, Exp_before_format_ctl_D[10:0], Mant_before_format_ctl_D[51:0]};
+		else if (FP16_SI)
+			Result_DO = {48'hffffffffffff, Sign_res_D, Exp_before_format_ctl_D[4:0], Mant_before_format_ctl_D[51:42]};
+		else
+			Result_DO = {48'hffffffffffff, Sign_res_D, Exp_before_format_ctl_D[7:0], Mant_before_format_ctl_D[51:45]};
+	assign In_Exact_S = ~Full_precision_SI | Mant_rounded_S;
+	assign Fflags_SO = {NV_OP_S, Div_Zero_S, Exp_OF_S, Exp_UF_S, In_Exact_S};
+endmodule
+module nrbd_nrsc_mvp (
+	Clk_CI,
+	Rst_RBI,
+	Div_start_SI,
+	Sqrt_start_SI,
+	Start_SI,
+	Kill_SI,
+	Special_case_SBI,
+	Special_case_dly_SBI,
+	Precision_ctl_SI,
+	Format_sel_SI,
+	Mant_a_DI,
+	Mant_b_DI,
+	Exp_a_DI,
+	Exp_b_DI,
+	Div_enable_SO,
+	Sqrt_enable_SO,
+	Full_precision_SO,
+	FP32_SO,
+	FP64_SO,
+	FP16_SO,
+	FP16ALT_SO,
+	Ready_SO,
+	Done_SO,
+	Mant_z_DO,
+	Exp_z_DO
+);
+	input wire Clk_CI;
+	input wire Rst_RBI;
+	input wire Div_start_SI;
+	input wire Sqrt_start_SI;
+	input wire Start_SI;
+	input wire Kill_SI;
+	input wire Special_case_SBI;
+	input wire Special_case_dly_SBI;
+	localparam defs_div_sqrt_mvp_C_PC = 6;
+	input wire [5:0] Precision_ctl_SI;
+	input wire [1:0] Format_sel_SI;
+	localparam defs_div_sqrt_mvp_C_MANT_FP64 = 52;
+	input wire [defs_div_sqrt_mvp_C_MANT_FP64:0] Mant_a_DI;
+	input wire [defs_div_sqrt_mvp_C_MANT_FP64:0] Mant_b_DI;
+	localparam defs_div_sqrt_mvp_C_EXP_FP64 = 11;
+	input wire [defs_div_sqrt_mvp_C_EXP_FP64:0] Exp_a_DI;
+	input wire [defs_div_sqrt_mvp_C_EXP_FP64:0] Exp_b_DI;
+	output wire Div_enable_SO;
+	output wire Sqrt_enable_SO;
+	output wire Full_precision_SO;
+	output wire FP32_SO;
+	output wire FP64_SO;
+	output wire FP16_SO;
+	output wire FP16ALT_SO;
+	output wire Ready_SO;
+	output wire Done_SO;
+	output wire [56:0] Mant_z_DO;
+	output wire [12:0] Exp_z_DO;
+	wire Div_start_dly_S;
+	wire Sqrt_start_dly_S;
+	control_mvp control_U0(
+		.Clk_CI(Clk_CI),
+		.Rst_RBI(Rst_RBI),
+		.Div_start_SI(Div_start_SI),
+		.Sqrt_start_SI(Sqrt_start_SI),
+		.Start_SI(Start_SI),
+		.Kill_SI(Kill_SI),
+		.Special_case_SBI(Special_case_SBI),
+		.Special_case_dly_SBI(Special_case_dly_SBI),
+		.Precision_ctl_SI(Precision_ctl_SI),
+		.Format_sel_SI(Format_sel_SI),
+		.Numerator_DI(Mant_a_DI),
+		.Exp_num_DI(Exp_a_DI),
+		.Denominator_DI(Mant_b_DI),
+		.Exp_den_DI(Exp_b_DI),
+		.Div_start_dly_SO(Div_start_dly_S),
+		.Sqrt_start_dly_SO(Sqrt_start_dly_S),
+		.Div_enable_SO(Div_enable_SO),
+		.Sqrt_enable_SO(Sqrt_enable_SO),
+		.Full_precision_SO(Full_precision_SO),
+		.FP32_SO(FP32_SO),
+		.FP64_SO(FP64_SO),
+		.FP16_SO(FP16_SO),
+		.FP16ALT_SO(FP16ALT_SO),
+		.Ready_SO(Ready_SO),
+		.Done_SO(Done_SO),
+		.Mant_result_prenorm_DO(Mant_z_DO),
+		.Exp_result_prenorm_DO(Exp_z_DO)
+	);
+endmodule
+module preprocess_mvp (
+	Clk_CI,
+	Rst_RBI,
+	Div_start_SI,
+	Sqrt_start_SI,
+	Ready_SI,
+	Operand_a_DI,
+	Operand_b_DI,
+	RM_SI,
+	Format_sel_SI,
+	Start_SO,
+	Exp_a_DO_norm,
+	Exp_b_DO_norm,
+	Mant_a_DO_norm,
+	Mant_b_DO_norm,
+	RM_dly_SO,
+	Sign_z_DO,
+	Inf_a_SO,
+	Inf_b_SO,
+	Zero_a_SO,
+	Zero_b_SO,
+	NaN_a_SO,
+	NaN_b_SO,
+	SNaN_SO,
+	Special_case_SBO,
+	Special_case_dly_SBO
+);
+	input wire Clk_CI;
+	input wire Rst_RBI;
+	input wire Div_start_SI;
+	input wire Sqrt_start_SI;
+	input wire Ready_SI;
+	localparam defs_div_sqrt_mvp_C_OP_FP64 = 64;
+	input wire [63:0] Operand_a_DI;
+	input wire [63:0] Operand_b_DI;
+	localparam defs_div_sqrt_mvp_C_RM = 3;
+	input wire [2:0] RM_SI;
+	localparam defs_div_sqrt_mvp_C_FS = 2;
+	input wire [1:0] Format_sel_SI;
+	output wire Start_SO;
+	localparam defs_div_sqrt_mvp_C_EXP_FP64 = 11;
+	output wire [defs_div_sqrt_mvp_C_EXP_FP64:0] Exp_a_DO_norm;
+	output wire [defs_div_sqrt_mvp_C_EXP_FP64:0] Exp_b_DO_norm;
+	localparam defs_div_sqrt_mvp_C_MANT_FP64 = 52;
+	output wire [defs_div_sqrt_mvp_C_MANT_FP64:0] Mant_a_DO_norm;
+	output wire [defs_div_sqrt_mvp_C_MANT_FP64:0] Mant_b_DO_norm;
+	output wire [2:0] RM_dly_SO;
+	output wire Sign_z_DO;
+	output wire Inf_a_SO;
+	output wire Inf_b_SO;
+	output wire Zero_a_SO;
+	output wire Zero_b_SO;
+	output wire NaN_a_SO;
+	output wire NaN_b_SO;
+	output wire SNaN_SO;
+	output wire Special_case_SBO;
+	output reg Special_case_dly_SBO;
+	wire Hb_a_D;
+	wire Hb_b_D;
+	reg [10:0] Exp_a_D;
+	reg [10:0] Exp_b_D;
+	reg [51:0] Mant_a_NonH_D;
+	reg [51:0] Mant_b_NonH_D;
+	wire [defs_div_sqrt_mvp_C_MANT_FP64:0] Mant_a_D;
+	wire [defs_div_sqrt_mvp_C_MANT_FP64:0] Mant_b_D;
+	reg Sign_a_D;
+	reg Sign_b_D;
+	wire Start_S;
+	localparam defs_div_sqrt_mvp_C_MANT_FP16 = 10;
+	localparam defs_div_sqrt_mvp_C_MANT_FP16ALT = 7;
+	localparam defs_div_sqrt_mvp_C_MANT_FP32 = 23;
+	localparam defs_div_sqrt_mvp_C_OP_FP16 = 16;
+	localparam defs_div_sqrt_mvp_C_OP_FP16ALT = 16;
+	localparam defs_div_sqrt_mvp_C_OP_FP32 = 32;
+	always @(*)
+		case (Format_sel_SI)
+			2'b00: begin
+				Sign_a_D = Operand_a_DI[31];
+				Sign_b_D = Operand_b_DI[31];
+				Exp_a_D = {3'h0, Operand_a_DI[30:defs_div_sqrt_mvp_C_MANT_FP32]};
+				Exp_b_D = {3'h0, Operand_b_DI[30:defs_div_sqrt_mvp_C_MANT_FP32]};
+				Mant_a_NonH_D = {Operand_a_DI[22:0], 29'h00000000};
+				Mant_b_NonH_D = {Operand_b_DI[22:0], 29'h00000000};
+			end
+			2'b01: begin
+				Sign_a_D = Operand_a_DI[63];
+				Sign_b_D = Operand_b_DI[63];
+				Exp_a_D = Operand_a_DI[62:defs_div_sqrt_mvp_C_MANT_FP64];
+				Exp_b_D = Operand_b_DI[62:defs_div_sqrt_mvp_C_MANT_FP64];
+				Mant_a_NonH_D = Operand_a_DI[51:0];
+				Mant_b_NonH_D = Operand_b_DI[51:0];
+			end
+			2'b10: begin
+				Sign_a_D = Operand_a_DI[15];
+				Sign_b_D = Operand_b_DI[15];
+				Exp_a_D = {6'h00, Operand_a_DI[14:defs_div_sqrt_mvp_C_MANT_FP16]};
+				Exp_b_D = {6'h00, Operand_b_DI[14:defs_div_sqrt_mvp_C_MANT_FP16]};
+				Mant_a_NonH_D = {Operand_a_DI[9:0], 42'h00000000000};
+				Mant_b_NonH_D = {Operand_b_DI[9:0], 42'h00000000000};
+			end
+			2'b11: begin
+				Sign_a_D = Operand_a_DI[15];
+				Sign_b_D = Operand_b_DI[15];
+				Exp_a_D = {3'h0, Operand_a_DI[14:defs_div_sqrt_mvp_C_MANT_FP16ALT]};
+				Exp_b_D = {3'h0, Operand_b_DI[14:defs_div_sqrt_mvp_C_MANT_FP16ALT]};
+				Mant_a_NonH_D = {Operand_a_DI[6:0], 45'h000000000000};
+				Mant_b_NonH_D = {Operand_b_DI[6:0], 45'h000000000000};
+			end
+		endcase
+	assign Mant_a_D = {Hb_a_D, Mant_a_NonH_D};
+	assign Mant_b_D = {Hb_b_D, Mant_b_NonH_D};
+	assign Hb_a_D = |Exp_a_D;
+	assign Hb_b_D = |Exp_b_D;
+	assign Start_S = Div_start_SI | Sqrt_start_SI;
+	reg Mant_a_prenorm_zero_S;
+	reg Mant_b_prenorm_zero_S;
+	wire Exp_a_prenorm_zero_S;
+	wire Exp_b_prenorm_zero_S;
+	assign Exp_a_prenorm_zero_S = ~Hb_a_D;
+	assign Exp_b_prenorm_zero_S = ~Hb_b_D;
+	reg Exp_a_prenorm_Inf_NaN_S;
+	reg Exp_b_prenorm_Inf_NaN_S;
+	wire Mant_a_prenorm_QNaN_S;
+	wire Mant_a_prenorm_SNaN_S;
+	wire Mant_b_prenorm_QNaN_S;
+	wire Mant_b_prenorm_SNaN_S;
+	assign Mant_a_prenorm_QNaN_S = Mant_a_NonH_D[51] && ~(|Mant_a_NonH_D[50:0]);
+	assign Mant_a_prenorm_SNaN_S = ~Mant_a_NonH_D[51] && |Mant_a_NonH_D[50:0];
+	assign Mant_b_prenorm_QNaN_S = Mant_b_NonH_D[51] && ~(|Mant_b_NonH_D[50:0]);
+	assign Mant_b_prenorm_SNaN_S = ~Mant_b_NonH_D[51] && |Mant_b_NonH_D[50:0];
+	localparam defs_div_sqrt_mvp_C_EXP_INF_FP16 = 5'h1f;
+	localparam defs_div_sqrt_mvp_C_EXP_INF_FP16ALT = 8'hff;
+	localparam defs_div_sqrt_mvp_C_EXP_INF_FP32 = 8'hff;
+	localparam defs_div_sqrt_mvp_C_EXP_INF_FP64 = 11'h7ff;
+	localparam defs_div_sqrt_mvp_C_MANT_ZERO_FP16 = 10'h000;
+	localparam defs_div_sqrt_mvp_C_MANT_ZERO_FP16ALT = 7'h00;
+	localparam defs_div_sqrt_mvp_C_MANT_ZERO_FP32 = 23'h000000;
+	localparam defs_div_sqrt_mvp_C_MANT_ZERO_FP64 = 52'h0000000000000;
+	always @(*)
+		case (Format_sel_SI)
+			2'b00: begin
+				Mant_a_prenorm_zero_S = Operand_a_DI[22:0] == defs_div_sqrt_mvp_C_MANT_ZERO_FP32;
+				Mant_b_prenorm_zero_S = Operand_b_DI[22:0] == defs_div_sqrt_mvp_C_MANT_ZERO_FP32;
+				Exp_a_prenorm_Inf_NaN_S = Operand_a_DI[30:defs_div_sqrt_mvp_C_MANT_FP32] == defs_div_sqrt_mvp_C_EXP_INF_FP32;
+				Exp_b_prenorm_Inf_NaN_S = Operand_b_DI[30:defs_div_sqrt_mvp_C_MANT_FP32] == defs_div_sqrt_mvp_C_EXP_INF_FP32;
+			end
+			2'b01: begin
+				Mant_a_prenorm_zero_S = Operand_a_DI[51:0] == defs_div_sqrt_mvp_C_MANT_ZERO_FP64;
+				Mant_b_prenorm_zero_S = Operand_b_DI[51:0] == defs_div_sqrt_mvp_C_MANT_ZERO_FP64;
+				Exp_a_prenorm_Inf_NaN_S = Operand_a_DI[62:defs_div_sqrt_mvp_C_MANT_FP64] == defs_div_sqrt_mvp_C_EXP_INF_FP64;
+				Exp_b_prenorm_Inf_NaN_S = Operand_b_DI[62:defs_div_sqrt_mvp_C_MANT_FP64] == defs_div_sqrt_mvp_C_EXP_INF_FP64;
+			end
+			2'b10: begin
+				Mant_a_prenorm_zero_S = Operand_a_DI[9:0] == defs_div_sqrt_mvp_C_MANT_ZERO_FP16;
+				Mant_b_prenorm_zero_S = Operand_b_DI[9:0] == defs_div_sqrt_mvp_C_MANT_ZERO_FP16;
+				Exp_a_prenorm_Inf_NaN_S = Operand_a_DI[14:defs_div_sqrt_mvp_C_MANT_FP16] == defs_div_sqrt_mvp_C_EXP_INF_FP16;
+				Exp_b_prenorm_Inf_NaN_S = Operand_b_DI[14:defs_div_sqrt_mvp_C_MANT_FP16] == defs_div_sqrt_mvp_C_EXP_INF_FP16;
+			end
+			2'b11: begin
+				Mant_a_prenorm_zero_S = Operand_a_DI[6:0] == defs_div_sqrt_mvp_C_MANT_ZERO_FP16ALT;
+				Mant_b_prenorm_zero_S = Operand_b_DI[6:0] == defs_div_sqrt_mvp_C_MANT_ZERO_FP16ALT;
+				Exp_a_prenorm_Inf_NaN_S = Operand_a_DI[14:defs_div_sqrt_mvp_C_MANT_FP16ALT] == defs_div_sqrt_mvp_C_EXP_INF_FP16ALT;
+				Exp_b_prenorm_Inf_NaN_S = Operand_b_DI[14:defs_div_sqrt_mvp_C_MANT_FP16ALT] == defs_div_sqrt_mvp_C_EXP_INF_FP16ALT;
+			end
+		endcase
+	wire Zero_a_SN;
+	reg Zero_a_SP;
+	wire Zero_b_SN;
+	reg Zero_b_SP;
+	wire Inf_a_SN;
+	reg Inf_a_SP;
+	wire Inf_b_SN;
+	reg Inf_b_SP;
+	wire NaN_a_SN;
+	reg NaN_a_SP;
+	wire NaN_b_SN;
+	reg NaN_b_SP;
+	wire SNaN_SN;
+	reg SNaN_SP;
+	assign Zero_a_SN = (Start_S && Ready_SI ? Exp_a_prenorm_zero_S && Mant_a_prenorm_zero_S : Zero_a_SP);
+	assign Zero_b_SN = (Start_S && Ready_SI ? Exp_b_prenorm_zero_S && Mant_b_prenorm_zero_S : Zero_b_SP);
+	assign Inf_a_SN = (Start_S && Ready_SI ? Exp_a_prenorm_Inf_NaN_S && Mant_a_prenorm_zero_S : Inf_a_SP);
+	assign Inf_b_SN = (Start_S && Ready_SI ? Exp_b_prenorm_Inf_NaN_S && Mant_b_prenorm_zero_S : Inf_b_SP);
+	assign NaN_a_SN = (Start_S && Ready_SI ? Exp_a_prenorm_Inf_NaN_S && ~Mant_a_prenorm_zero_S : NaN_a_SP);
+	assign NaN_b_SN = (Start_S && Ready_SI ? Exp_b_prenorm_Inf_NaN_S && ~Mant_b_prenorm_zero_S : NaN_b_SP);
+	assign SNaN_SN = (Start_S && Ready_SI ? (Mant_a_prenorm_SNaN_S && NaN_a_SN) | (Mant_b_prenorm_SNaN_S && NaN_b_SN) : SNaN_SP);
+	always @(posedge Clk_CI or negedge Rst_RBI)
+		if (~Rst_RBI) begin
+			Zero_a_SP <= 1'b0;
+			Zero_b_SP <= 1'b0;
+			Inf_a_SP <= 1'b0;
+			Inf_b_SP <= 1'b0;
+			NaN_a_SP <= 1'b0;
+			NaN_b_SP <= 1'b0;
+			SNaN_SP <= 1'b0;
+		end
+		else begin
+			Inf_a_SP <= Inf_a_SN;
+			Inf_b_SP <= Inf_b_SN;
+			Zero_a_SP <= Zero_a_SN;
+			Zero_b_SP <= Zero_b_SN;
+			NaN_a_SP <= NaN_a_SN;
+			NaN_b_SP <= NaN_b_SN;
+			SNaN_SP <= SNaN_SN;
+		end
+	assign Special_case_SBO = ~{(Div_start_SI ? ((((Zero_a_SN | Zero_b_SN) | Inf_a_SN) | Inf_b_SN) | NaN_a_SN) | NaN_b_SN : ((Zero_a_SN | Inf_a_SN) | NaN_a_SN) | Sign_a_D)} && (Start_S && Ready_SI);
+	always @(posedge Clk_CI or negedge Rst_RBI)
+		if (~Rst_RBI)
+			Special_case_dly_SBO <= 1'b0;
+		else if (Start_S && Ready_SI)
+			Special_case_dly_SBO <= Special_case_SBO;
+		else if (Special_case_dly_SBO)
+			Special_case_dly_SBO <= 1'b1;
+		else
+			Special_case_dly_SBO <= 1'b0;
+	reg Sign_z_DN;
+	reg Sign_z_DP;
+	always @(*)
+		if (Div_start_SI && Ready_SI)
+			Sign_z_DN = Sign_a_D ^ Sign_b_D;
+		else if (Sqrt_start_SI && Ready_SI)
+			Sign_z_DN = Sign_a_D;
+		else
+			Sign_z_DN = Sign_z_DP;
+	always @(posedge Clk_CI or negedge Rst_RBI)
+		if (~Rst_RBI)
+			Sign_z_DP <= 1'b0;
+		else
+			Sign_z_DP <= Sign_z_DN;
+	reg [2:0] RM_DN;
+	reg [2:0] RM_DP;
+	always @(*)
+		if (Start_S && Ready_SI)
+			RM_DN = RM_SI;
+		else
+			RM_DN = RM_DP;
+	always @(posedge Clk_CI or negedge Rst_RBI)
+		if (~Rst_RBI)
+			RM_DP <= {3 {1'sb0}};
+		else
+			RM_DP <= RM_DN;
+	assign RM_dly_SO = RM_DP;
+	wire [5:0] Mant_leadingOne_a;
+	wire [5:0] Mant_leadingOne_b;
+	wire Mant_zero_S_a;
+	wire Mant_zero_S_b;
+	lzc #(
+		.WIDTH(53),
+		.MODE(1)
+	) LOD_Ua(
+		.in_i(Mant_a_D),
+		.cnt_o(Mant_leadingOne_a),
+		.empty_o(Mant_zero_S_a)
+	);
+	wire [defs_div_sqrt_mvp_C_MANT_FP64:0] Mant_a_norm_DN;
+	reg [defs_div_sqrt_mvp_C_MANT_FP64:0] Mant_a_norm_DP;
+	assign Mant_a_norm_DN = (Start_S && Ready_SI ? Mant_a_D << Mant_leadingOne_a : Mant_a_norm_DP);
+	always @(posedge Clk_CI or negedge Rst_RBI)
+		if (~Rst_RBI)
+			Mant_a_norm_DP <= {53 {1'sb0}};
+		else
+			Mant_a_norm_DP <= Mant_a_norm_DN;
+	wire [defs_div_sqrt_mvp_C_EXP_FP64:0] Exp_a_norm_DN;
+	reg [defs_div_sqrt_mvp_C_EXP_FP64:0] Exp_a_norm_DP;
+	assign Exp_a_norm_DN = (Start_S && Ready_SI ? (Exp_a_D - Mant_leadingOne_a) + |Mant_leadingOne_a : Exp_a_norm_DP);
+	always @(posedge Clk_CI or negedge Rst_RBI)
+		if (~Rst_RBI)
+			Exp_a_norm_DP <= {12 {1'sb0}};
+		else
+			Exp_a_norm_DP <= Exp_a_norm_DN;
+	lzc #(
+		.WIDTH(53),
+		.MODE(1)
+	) LOD_Ub(
+		.in_i(Mant_b_D),
+		.cnt_o(Mant_leadingOne_b),
+		.empty_o(Mant_zero_S_b)
+	);
+	wire [defs_div_sqrt_mvp_C_MANT_FP64:0] Mant_b_norm_DN;
+	reg [defs_div_sqrt_mvp_C_MANT_FP64:0] Mant_b_norm_DP;
+	assign Mant_b_norm_DN = (Start_S && Ready_SI ? Mant_b_D << Mant_leadingOne_b : Mant_b_norm_DP);
+	always @(posedge Clk_CI or negedge Rst_RBI)
+		if (~Rst_RBI)
+			Mant_b_norm_DP <= {53 {1'sb0}};
+		else
+			Mant_b_norm_DP <= Mant_b_norm_DN;
+	wire [defs_div_sqrt_mvp_C_EXP_FP64:0] Exp_b_norm_DN;
+	reg [defs_div_sqrt_mvp_C_EXP_FP64:0] Exp_b_norm_DP;
+	assign Exp_b_norm_DN = (Start_S && Ready_SI ? (Exp_b_D - Mant_leadingOne_b) + |Mant_leadingOne_b : Exp_b_norm_DP);
+	always @(posedge Clk_CI or negedge Rst_RBI)
+		if (~Rst_RBI)
+			Exp_b_norm_DP <= {12 {1'sb0}};
+		else
+			Exp_b_norm_DP <= Exp_b_norm_DN;
+	assign Start_SO = Start_S;
+	assign Exp_a_DO_norm = Exp_a_norm_DP;
+	assign Exp_b_DO_norm = Exp_b_norm_DP;
+	assign Mant_a_DO_norm = Mant_a_norm_DP;
+	assign Mant_b_DO_norm = Mant_b_norm_DP;
+	assign Sign_z_DO = Sign_z_DP;
+	assign Inf_a_SO = Inf_a_SP;
+	assign Inf_b_SO = Inf_b_SP;
+	assign Zero_a_SO = Zero_a_SP;
+	assign Zero_b_SO = Zero_b_SP;
+	assign NaN_a_SO = NaN_a_SP;
+	assign NaN_b_SO = NaN_b_SP;
+	assign SNaN_SO = SNaN_SP;
+endmodule
+
+module prim_clock_gating (
+	clk_i,
+	en_i,
+	test_en_i,
+	clk_o
+);
+	input wire clk_i;
+	input wire en_i;
+	input wire test_en_i;
+	output wire clk_o;
+	sky130_fd_sc_hd__dlclkp_1 CG(
+		.CLK(clk_i),
+		.GCLK(clk_o),
+		.GATE(en_i | test_en_i)
+	);
+  /*reg en_latch;
+  always @(*) begin
+    if (!clk_i) begin
+      en_latch = en_i | test_en_i;
+    end
+  end
+  assign clk_o = en_latch & clk_i;*/
+endmodule
+module prim_filter_ctr (
+	clk_i,
+	rst_ni,
+	enable_i,
+	filter_i,
+	filter_o
+);
+	parameter [31:0] Cycles = 4;
+	input wire clk_i;
+	input wire rst_ni;
+	input wire enable_i;
+	input wire filter_i;
+	output wire filter_o;
+	localparam [31:0] CTR_WIDTH = $clog2(Cycles);
+	function automatic [CTR_WIDTH - 1:0] sv2v_cast_FC6F8;
+		input reg [CTR_WIDTH - 1:0] inp;
+		sv2v_cast_FC6F8 = inp;
+	endfunction
+	localparam [CTR_WIDTH - 1:0] CYCLESM1 = sv2v_cast_FC6F8(Cycles - 1);
+	reg [CTR_WIDTH - 1:0] diff_ctr_q;
+	wire [CTR_WIDTH - 1:0] diff_ctr_d;
+	reg filter_q;
+	reg stored_value_q;
+	wire update_stored_value;
+	always @(posedge clk_i or negedge rst_ni)
+		if (!rst_ni)
+			filter_q <= 1'b0;
+		else
+			filter_q <= filter_i;
+	always @(posedge clk_i or negedge rst_ni)
+		if (!rst_ni)
+			stored_value_q <= 1'b0;
+		else if (update_stored_value)
+			stored_value_q <= filter_i;
+	always @(posedge clk_i or negedge rst_ni)
+		if (!rst_ni)
+			diff_ctr_q <= {CTR_WIDTH {1'sb0}};
+		else
+			diff_ctr_q <= diff_ctr_d;
+	assign diff_ctr_d = (filter_i != filter_q ? {CTR_WIDTH {1'sb0}} : (diff_ctr_q == CYCLESM1 ? CYCLESM1 : diff_ctr_q + 1'b1));
+	assign update_stored_value = diff_ctr_d == CYCLESM1;
+	assign filter_o = (enable_i ? stored_value_q : filter_i);
+endmodule
+module prim_generic_clock_inv (
+	clk_i,
+	scanmode_i,
+	clk_no
+);
+	parameter [0:0] HasScanMode = 1'b1;
+	input wire clk_i;
+	input wire scanmode_i;
+	output wire clk_no;
+	generate
+		if (HasScanMode) begin : gen_scan
+			prim_generic_clock_mux2 i_dft_tck_mux(
+				.clk0_i(~clk_i),
+				.clk1_i(clk_i),
+				.sel_i(scanmode_i),
+				.clk_o(clk_no)
+			);
+		end
+		else begin : gen_noscan
+			wire unused_scanmode;
+			assign unused_scanmode = scanmode_i;
+			assign clk_no = ~clk_i;
+		end
+	endgenerate
+endmodule
+module prim_generic_clock_mux2 (
+	clk0_i,
+	clk1_i,
+	sel_i,
+	clk_o
+);
+	parameter [0:0] NoFpgaBufG = 1'b0;
+	input wire clk0_i;
+	input wire clk1_i;
+	input wire sel_i;
+	output wire clk_o;
+	assign clk_o = (sel_i ? clk1_i : clk0_i);
+endmodule
+module prim_generic_flop_2sync (
+	clk_i,
+	rst_ni,
+	d_i,
+	q_o
+);
+	parameter signed [31:0] Width = 16;
+	localparam signed [31:0] WidthSubOne = Width - 1;
+	parameter [WidthSubOne:0] ResetValue = 1'sb0;
+	input wire clk_i;
+	input wire rst_ni;
+	input wire [Width - 1:0] d_i;
+	output wire [Width - 1:0] q_o;
+	wire [Width - 1:0] intq;
+	prim_generic_flop #(
+		.Width(Width),
+		.ResetValue(ResetValue)
+	) u_sync_1(
+		.clk_i(clk_i),
+		.rst_ni(rst_ni),
+		.d_i(d_i),
+		.q_o(intq)
+	);
+	prim_generic_flop #(
+		.Width(Width),
+		.ResetValue(ResetValue)
+	) u_sync_2(
+		.clk_i(clk_i),
+		.rst_ni(rst_ni),
+		.d_i(intq),
+		.q_o(q_o)
+	);
+endmodule
+module prim_generic_flop (
+	clk_i,
+	rst_ni,
+	d_i,
+	q_o
+);
+	parameter signed [31:0] Width = 1;
+	localparam signed [31:0] WidthSubOne = Width - 1;
+	parameter [WidthSubOne:0] ResetValue = 0;
+	input wire clk_i;
+	input wire rst_ni;
+	input wire [Width - 1:0] d_i;
+	output reg [Width - 1:0] q_o;
+	always @(posedge clk_i or negedge rst_ni)
+		if (!rst_ni)
+			q_o <= ResetValue;
+		else
+			q_o <= d_i;
+endmodule
+module prim_intr_hw (
+	clk_i,
+	rst_ni,
+	event_intr_i,
+	reg2hw_intr_enable_q_i,
+	reg2hw_intr_test_q_i,
+	reg2hw_intr_test_qe_i,
+	reg2hw_intr_state_q_i,
+	hw2reg_intr_state_de_o,
+	hw2reg_intr_state_d_o,
+	intr_o
+);
+	parameter [31:0] Width = 1;
+	parameter [0:0] FlopOutput = 1;
+	input wire clk_i;
+	input wire rst_ni;
+	input wire [Width - 1:0] event_intr_i;
+	input wire [Width - 1:0] reg2hw_intr_enable_q_i;
+	input wire [Width - 1:0] reg2hw_intr_test_q_i;
+	input wire reg2hw_intr_test_qe_i;
+	input wire [Width - 1:0] reg2hw_intr_state_q_i;
+	output wire hw2reg_intr_state_de_o;
+	output wire [Width - 1:0] hw2reg_intr_state_d_o;
+	output reg [Width - 1:0] intr_o;
+	wire [Width - 1:0] new_event;
+	assign new_event = ({Width {reg2hw_intr_test_qe_i}} & reg2hw_intr_test_q_i) | event_intr_i;
+	assign hw2reg_intr_state_de_o = |new_event;
+	assign hw2reg_intr_state_d_o = new_event | reg2hw_intr_state_q_i;
+	generate
+		if (FlopOutput == 1) begin : gen_flop_intr_output
+			always @(posedge clk_i or negedge rst_ni)
+				if (!rst_ni)
+					intr_o <= 1'b0;
+				else
+					intr_o <= reg2hw_intr_state_q_i & reg2hw_intr_enable_q_i;
+		end
+		else begin : gen_intr_passthrough_output
+			wire unused_clk;
+			wire unused_rst_n;
+			assign unused_clk = clk_i;
+			assign unused_rst_n = rst_ni;
+			wire [Width:1] sv2v_tmp_BA45F;
+			assign sv2v_tmp_BA45F = reg2hw_intr_state_q_i & reg2hw_intr_enable_q_i;
+			always @(*) intr_o = sv2v_tmp_BA45F;
+		end
+	endgenerate
+endmodule
+module prim_subreg_arb (
+	we,
+	wd,
+	de,
+	d,
+	q,
+	wr_en,
+	wr_data
+);
+	parameter signed [31:0] DW = 32;
+	parameter SWACCESS = "RW";
+	input wire we;
+	input wire [DW - 1:0] wd;
+	input wire de;
+	input wire [DW - 1:0] d;
+	input wire [DW - 1:0] q;
+	output wire wr_en;
+	output wire [DW - 1:0] wr_data;
+	generate
+		if ((SWACCESS == "RW") || (SWACCESS == "WO")) begin : gen_w
+			assign wr_en = we | de;
+			assign wr_data = (we == 1'b1 ? wd : d);
+			wire [DW - 1:0] unused_q;
+			assign unused_q = q;
+		end
+		else if (SWACCESS == "RO") begin : gen_ro
+			assign wr_en = de;
+			assign wr_data = d;
+			wire unused_we;
+			wire [DW - 1:0] unused_wd;
+			wire [DW - 1:0] unused_q;
+			assign unused_we = we;
+			assign unused_wd = wd;
+			assign unused_q = q;
+		end
+		else if (SWACCESS == "W1S") begin : gen_w1s
+			assign wr_en = we | de;
+			assign wr_data = (de ? d : q) | (we ? wd : {DW {1'sb0}});
+		end
+		else if (SWACCESS == "W1C") begin : gen_w1c
+			assign wr_en = we | de;
+			assign wr_data = (de ? d : q) & (we ? ~wd : {DW {1'sb1}});
+		end
+		else if (SWACCESS == "W0C") begin : gen_w0c
+			assign wr_en = we | de;
+			assign wr_data = (de ? d : q) & (we ? wd : {DW {1'sb1}});
+		end
+		else if (SWACCESS == "RC") begin : gen_rc
+			assign wr_en = we | de;
+			assign wr_data = (de ? d : q) & (we ? {DW {1'sb0}} : {DW {1'sb1}});
+			wire [DW - 1:0] unused_wd;
+			assign unused_wd = wd;
+		end
+		else begin : gen_hw
+			assign wr_en = de;
+			assign wr_data = d;
+			wire unused_we;
+			wire [DW - 1:0] unused_wd;
+			wire [DW - 1:0] unused_q;
+			assign unused_we = we;
+			assign unused_wd = wd;
+			assign unused_q = q;
+		end
+	endgenerate
+endmodule
+module prim_subreg_ext (
+	re,
+	we,
+	wd,
+	d,
+	qe,
+	qre,
+	q,
+	qs
+);
+	parameter [31:0] DW = 32;
+	input wire re;
+	input wire we;
+	input wire [DW - 1:0] wd;
+	input wire [DW - 1:0] d;
+	output wire qe;
+	output wire qre;
+	output wire [DW - 1:0] q;
+	output wire [DW - 1:0] qs;
+	assign qs = d;
+	assign q = wd;
+	assign qe = we;
+	assign qre = re;
+endmodule
+module prim_subreg (
+	clk_i,
+	rst_ni,
+	we,
+	wd,
+	de,
+	d,
+	qe,
+	q,
+	qs
+);
+	parameter signed [31:0] DW = 32;
+	parameter SWACCESS = "RW";
+	parameter [DW - 1:0] RESVAL = 1'sb0;
+	input wire clk_i;
+	input wire rst_ni;
+	input wire we;
+	input wire [DW - 1:0] wd;
+	input wire de;
+	input wire [DW - 1:0] d;
+	output reg qe;
+	output reg [DW - 1:0] q;
+	output wire [DW - 1:0] qs;
+	wire wr_en;
+	wire [DW - 1:0] wr_data;
+	prim_subreg_arb #(
+		.DW(DW),
+		.SWACCESS(SWACCESS)
+	) wr_en_data_arb(
+		.we(we),
+		.wd(wd),
+		.de(de),
+		.d(d),
+		.q(q),
+		.wr_en(wr_en),
+		.wr_data(wr_data)
+	);
+	always @(posedge clk_i or negedge rst_ni)
+		if (!rst_ni)
+			qe <= 1'b0;
+		else
+			qe <= we;
+	always @(posedge clk_i or negedge rst_ni)
+		if (!rst_ni)
+			q <= RESVAL;
+		else if (wr_en)
+			q <= wr_data;
+	assign qs = q;
+endmodule
+module pwm_top (
+	clk_i,
+	rst_ni,
+	tl_i,
+	tl_o,
+	pwm_o,
+	pwm_o_2,
+	pwm1_oe,
+	pwm2_oe
+);
+	input wire clk_i;
+	input wire rst_ni;
+	localparam signed [31:0] tlul_pkg_TL_AIW = 8;
+	localparam signed [31:0] tlul_pkg_TL_AW = 32;
+	localparam signed [31:0] tlul_pkg_TL_DW = 32;
+	localparam signed [31:0] tlul_pkg_TL_DBW = 4;
+	localparam signed [31:0] tlul_pkg_TL_SZW = 2;
+	input wire [85:0] tl_i;
+	localparam signed [31:0] tlul_pkg_TL_DIW = 1;
+	output wire [51:0] tl_o;
+	output wire pwm_o;
+	output wire pwm_o_2;
+	output wire pwm1_oe;
+	output wire pwm2_oe;
+	localparam signed [31:0] AW = 8;
+	localparam signed [31:0] DW = 32;
+	localparam signed [31:0] DBW = 4;
+	wire re;
+	wire we;
+	wire [7:0] addr;
+	wire [31:0] wdata;
+	wire [3:0] be;
+	wire [31:0] rdata;
+	wire err;
+	pwm pwm_core(
+		.clk_i(clk_i),
+		.rst_ni(rst_ni),
+		.re_i(re),
+		.we_i(we),
+		.addr_i(addr),
+		.wdata_i(wdata),
+		.be_i(be),
+		.rdata_o(rdata),
+		.o_pwm(pwm_o),
+		.o_pwm_2(pwm_o_2),
+		.oe_pwm1(pwm1_oe),
+		.oe_pwm2(pwm2_oe)
+	);
+	tlul_adapter_reg #(
+		.RegAw(AW),
+		.RegDw(DW)
+	) u_reg_if(
+		.clk_i(clk_i),
+		.rst_ni(rst_ni),
+		.tl_i(tl_i),
+		.tl_o(tl_o),
+		.we_o(we),
+		.re_o(re),
+		.addr_o(addr),
+		.wdata_o(wdata),
+		.be_o(be),
+		.rdata_i(rdata),
+		.error_i(1'b0)
+	);
+endmodule
+module pwm (
+	clk_i,
+	rst_ni,
+	re_i,
+	we_i,
+	addr_i,
+	wdata_i,
+	be_i,
+	rdata_o,
+	o_pwm,
+	o_pwm_2,
+	oe_pwm1,
+	oe_pwm2
+);
+	input wire clk_i;
+	input wire rst_ni;
+	input wire re_i;
+	input wire we_i;
+	input wire [7:0] addr_i;
+	input wire [31:0] wdata_i;
+	input wire [3:0] be_i;
+	output wire [31:0] rdata_o;
+	output wire o_pwm;
+	output wire o_pwm_2;
+	output reg oe_pwm1;
+	output reg oe_pwm2;
+	parameter adr_ctrl_1 = 0;
+	parameter adr_divisor_1 = 4;
+	parameter adr_period_1 = 8;
+	parameter adr_DC_1 = 12;
+	parameter adr_ctrl_2 = 16;
+	parameter adr_divisor_2 = 20;
+	parameter adr_period_2 = 24;
+	parameter adr_DC_2 = 28;
+	reg [7:0] ctrl;
+	reg [15:0] period;
+	reg [15:0] DC_1;
+	reg [15:0] divisor;
+	reg [7:0] ctrl_2;
+	reg [15:0] period_2;
+	reg [15:0] DC_2;
+	reg [15:0] divisor_2;
+	wire write;
+	assign write = we_i & ~re_i;
+	always @(posedge clk_i)
+		if (~rst_ni) begin
+			ctrl[4:2] <= 3'b000;
+			ctrl[0] <= 1'b0;
+			ctrl[1] <= 1'b0;
+			ctrl[7:5] <= 3'b000;
+			DC_1 <= 16'b0000000000000000;
+			period <= 16'b0000000000000000;
+			divisor <= 16'b0000000000000000;
+			ctrl_2[4:2] <= 3'b000;
+			ctrl_2[0] <= 1'b0;
+			ctrl_2[7:5] <= 3'b000;
+			ctrl_2[1] <= 1'b0;
+			DC_2 <= 16'b0000000000000000;
+			period_2 <= 16'b0000000000000000;
+			divisor_2 <= 16'b0000000000000000;
+		end
+		else if (write)
+			case (addr_i)
+				adr_ctrl_1: begin
+					ctrl[0] <= wdata_i[0];
+					ctrl[1] <= 1'b1;
+					ctrl[4:2] <= wdata_i[4:2];
+					ctrl[7:5] <= wdata_i[7:5];
+				end
+				adr_ctrl_2: begin
+					ctrl_2[0] <= wdata_i[0];
+					ctrl_2[1] <= 1'b1;
+					ctrl_2[4:2] <= wdata_i[4:2];
+					ctrl_2[7:5] <= wdata_i[7:5];
+				end
+				adr_divisor_1: divisor <= wdata_i[15:0];
+				adr_period_1: period <= wdata_i[15:0];
+				adr_DC_1: DC_1 <= wdata_i[15:0];
+				adr_divisor_2: divisor_2 <= wdata_i[15:0];
+				adr_period_2: period_2 <= wdata_i[15:0];
+				adr_DC_2: DC_2 <= wdata_i[15:0];
+			endcase
+	wire pwm_1;
+	assign pwm_1 = ctrl[1];
+	wire pwm_2;
+	assign pwm_2 = ctrl_2[1];
+	reg clock_p1;
+	reg clock_p2;
+	reg [15:0] counter_p1;
+	reg [15:0] counter_p2;
+	reg [15:0] period_counter1;
+	reg [15:0] period_counter2;
+	reg pts;
+	reg pts_2;
+	always @(posedge clk_i or negedge rst_ni)
+		if (~rst_ni) begin
+			clock_p1 <= 1'b0;
+			clock_p2 <= 1'b0;
+			counter_p1 <= 16'b0000000000000000;
+			counter_p2 <= 16'b0000000000000000;
+		end
+		else begin
+			if (pwm_1) begin
+				counter_p1 <= counter_p1 + 16'b0000000000000001;
+				if (counter_p1 == (divisor - 1)) begin
+					counter_p1 <= 16'b0000000000000000;
+					clock_p1 <= ~clock_p1;
+				end
+			end
+			if (pwm_2) begin
+				counter_p2 <= counter_p2 + 16'b0000000000000001;
+				if (counter_p2 == (divisor_2 - 1)) begin
+					counter_p2 <= 16'b0000000000000000;
+					clock_p2 <= ~clock_p2;
+				end
+			end
+		end
+	always @(posedge clock_p1)
+		if (~rst_ni) begin
+			pts <= 1'b0;
+			period_counter1 <= 16'b0000000000000000;
+		end
+		else if (ctrl[2]) begin
+			if (pwm_1) begin
+				oe_pwm1 <= 1'b1;
+				if (period_counter1 >= period)
+					period_counter1 <= 16'b0000000000000000;
+				else
+					period_counter1 <= period_counter1 + 16'b0000000000000001;
+				if (period_counter1 < DC_1)
+					pts <= 1'b1;
+				else
+					pts <= 1'b0;
+			end
+		end
+		else begin
+			pts <= 1'b0;
+			period_counter1 <= 16'b0000000000000000;
+			oe_pwm1 <= 1'b0;
+		end
+	always @(posedge clock_p2)
+		if (~rst_ni) begin
+			pts_2 <= 1'b0;
+			period_counter2 <= 16'b0000000000000000;
+		end
+		else if (ctrl_2[2]) begin
+			if (pwm_2) begin
+				oe_pwm2 <= 1'b1;
+				if (period_counter2 >= period_2)
+					period_counter2 <= 16'b0000000000000000;
+				else
+					period_counter2 <= period_counter2 + 16'b0000000000000001;
+				if (period_counter2 < DC_2)
+					pts_2 <= 1'b1;
+				else
+					pts_2 <= 1'b0;
+			end
+		end
+		else begin
+			pts_2 <= 1'b0;
+			period_counter2 <= 16'b0000000000000000;
+			oe_pwm2 <= 1'b0;
+		end
+	assign o_pwm = (ctrl[4] ? pts : 1'b0);
+	assign o_pwm_2 = (ctrl_2[4] ? pts_2 : 1'b0);
+	assign rdata_o = (addr_i == adr_ctrl_1 ? {8'h00, ctrl} : (addr_i == adr_divisor_1 ? divisor : (addr_i == adr_period_1 ? period : (addr_i == adr_DC_1 ? DC_1 : (addr_i == adr_DC_2 ? DC_2 : (addr_i == adr_period_2 ? period_2 : (addr_i == adr_divisor_2 ? divisor_2 : (addr_i == adr_ctrl_2 ? {8'h00, ctrl_2} : 32'b00000000000000000000000000000000))))))));
+endmodule
+module rr_arb_tree_252F1_F315E (
+	clk_i,
+	rst_ni,
+	flush_i,
+	rr_i,
+	req_i,
+	gnt_o,
+	data_i,
+	req_o,
+	gnt_i,
+	data_o,
+	idx_o
+);
+	parameter [31:0] DataType_Width = 0;
+	parameter [31:0] NumIn = 64;
+	parameter [31:0] DataWidth = 32;
+	parameter [0:0] ExtPrio = 1'b0;
+	parameter [0:0] AxiVldRdy = 1'b0;
+	parameter [0:0] LockIn = 1'b0;
+	parameter [0:0] FairArb = 1'b1;
+	parameter [31:0] IdxWidth = (NumIn > 32'd1 ? $unsigned($clog2(NumIn)) : 32'd1);
+	input wire clk_i;
+	input wire rst_ni;
+	input wire flush_i;
+	input wire [IdxWidth - 1:0] rr_i;
+	input wire [NumIn - 1:0] req_i;
+	output wire [NumIn - 1:0] gnt_o;
+	input wire [((DataType_Width + 6) >= 0 ? (NumIn * (DataType_Width + 7)) - 1 : (NumIn * (1 - (DataType_Width + 6))) + (DataType_Width + 5)):((DataType_Width + 6) >= 0 ? 0 : DataType_Width + 6)] data_i;
+	output wire req_o;
+	input wire gnt_i;
+	output wire [DataType_Width + 6:0] data_o;
+	output wire [IdxWidth - 1:0] idx_o;
+	generate
+		if (NumIn == $unsigned(1)) begin : gen_pass_through
+			assign req_o = req_i[0];
+			assign gnt_o[0] = gnt_i;
+			assign data_o = data_i[((DataType_Width + 6) >= 0 ? 0 : DataType_Width + 6)+:((DataType_Width + 6) >= 0 ? DataType_Width + 7 : 1 - (DataType_Width + 6))];
+			assign idx_o = {IdxWidth {1'sb0}};
+		end
+		else begin : gen_arbiter
+			localparam [31:0] NumLevels = $unsigned($clog2(NumIn));
+			wire [(((2 ** NumLevels) - 2) >= 0 ? (((2 ** NumLevels) - 1) * IdxWidth) - 1 : ((3 - (2 ** NumLevels)) * IdxWidth) + ((((2 ** NumLevels) - 2) * IdxWidth) - 1)):(((2 ** NumLevels) - 2) >= 0 ? 0 : ((2 ** NumLevels) - 2) * IdxWidth)] index_nodes;
+			wire [(((2 ** NumLevels) - 2) >= 0 ? ((DataType_Width + 6) >= 0 ? (((2 ** NumLevels) - 1) * (DataType_Width + 7)) - 1 : (((2 ** NumLevels) - 1) * (1 - (DataType_Width + 6))) + (DataType_Width + 5)) : ((DataType_Width + 6) >= 0 ? ((3 - (2 ** NumLevels)) * (DataType_Width + 7)) + ((((2 ** NumLevels) - 2) * (DataType_Width + 7)) - 1) : ((3 - (2 ** NumLevels)) * (1 - (DataType_Width + 6))) + (((DataType_Width + 6) + (((2 ** NumLevels) - 2) * (1 - (DataType_Width + 6)))) - 1))):(((2 ** NumLevels) - 2) >= 0 ? ((DataType_Width + 6) >= 0 ? 0 : DataType_Width + 6) : ((DataType_Width + 6) >= 0 ? ((2 ** NumLevels) - 2) * (DataType_Width + 7) : (DataType_Width + 6) + (((2 ** NumLevels) - 2) * (1 - (DataType_Width + 6)))))] data_nodes;
+			wire [(2 ** NumLevels) - 2:0] gnt_nodes;
+			wire [(2 ** NumLevels) - 2:0] req_nodes;
+			reg [IdxWidth - 1:0] rr_q;
+			wire [NumIn - 1:0] req_d;
+			assign req_o = req_nodes[0];
+			assign data_o = data_nodes[((DataType_Width + 6) >= 0 ? 0 : DataType_Width + 6) + ((((2 ** NumLevels) - 2) >= 0 ? 0 : (2 ** NumLevels) - 2) * ((DataType_Width + 6) >= 0 ? DataType_Width + 7 : 1 - (DataType_Width + 6)))+:((DataType_Width + 6) >= 0 ? DataType_Width + 7 : 1 - (DataType_Width + 6))];
+			assign idx_o = index_nodes[(((2 ** NumLevels) - 2) >= 0 ? 0 : (2 ** NumLevels) - 2) * IdxWidth+:IdxWidth];
+			if (ExtPrio) begin : gen_ext_rr
+				wire [IdxWidth:1] sv2v_tmp_48DE0;
+				assign sv2v_tmp_48DE0 = rr_i;
+				always @(*) rr_q = sv2v_tmp_48DE0;
+				assign req_d = req_i;
+			end
+			else begin : gen_int_rr
+				wire [IdxWidth - 1:0] rr_d;
+				if (LockIn) begin : gen_lock
+					wire lock_d;
+					reg lock_q;
+					reg [NumIn - 1:0] req_q;
+					assign lock_d = req_o & ~gnt_i;
+					assign req_d = (lock_q ? req_q : req_i);
+					always @(posedge clk_i or negedge rst_ni) begin : p_lock_reg
+						if (!rst_ni)
+							lock_q <= 1'b0;
+						else if (flush_i)
+							lock_q <= 1'b0;
+						else
+							lock_q <= lock_d;
+					end
+					always @(posedge clk_i or negedge rst_ni) begin : p_req_regs
+						if (!rst_ni)
+							req_q <= {NumIn {1'sb0}};
+						else if (flush_i)
+							req_q <= {NumIn {1'sb0}};
+						else
+							req_q <= req_d;
+					end
+				end
+				else begin : gen_no_lock
+					assign req_d = req_i;
+				end
+				if (FairArb) begin : gen_fair_arb
+					wire [NumIn - 1:0] upper_mask;
+					wire [NumIn - 1:0] lower_mask;
+					wire [IdxWidth - 1:0] upper_idx;
+					wire [IdxWidth - 1:0] lower_idx;
+					wire [IdxWidth - 1:0] next_idx;
+					wire upper_empty;
+					wire lower_empty;
+					genvar i;
+					for (i = 0; i < NumIn; i = i + 1) begin : gen_mask
+						assign upper_mask[i] = (i > rr_q ? req_d[i] : 1'b0);
+						assign lower_mask[i] = (i <= rr_q ? req_d[i] : 1'b0);
+					end
+					lzc #(
+						.WIDTH(NumIn),
+						.MODE(1'b0)
+					) i_lzc_upper(
+						.in_i(upper_mask),
+						.cnt_o(upper_idx),
+						.empty_o(upper_empty)
+					);
+					lzc #(
+						.WIDTH(NumIn),
+						.MODE(1'b0)
+					) i_lzc_lower(
+						.in_i(lower_mask),
+						.cnt_o(lower_idx),
+						.empty_o()
+					);
+					assign next_idx = (upper_empty ? lower_idx : upper_idx);
+					assign rr_d = (gnt_i && req_o ? next_idx : rr_q);
+				end
+				else begin : gen_unfair_arb
+					function automatic [IdxWidth - 1:0] sv2v_cast_40B81;
+						input reg [IdxWidth - 1:0] inp;
+						sv2v_cast_40B81 = inp;
+					endfunction
+					assign rr_d = (gnt_i && req_o ? (rr_q == sv2v_cast_40B81(NumIn - 1) ? {IdxWidth {1'sb0}} : rr_q + 1'b1) : rr_q);
+				end
+				always @(posedge clk_i or negedge rst_ni) begin : p_rr_regs
+					if (!rst_ni)
+						rr_q <= {IdxWidth {1'sb0}};
+					else if (flush_i)
+						rr_q <= {IdxWidth {1'sb0}};
+					else
+						rr_q <= rr_d;
+				end
+			end
+			assign gnt_nodes[0] = gnt_i;
+			genvar level;
+			for (level = 0; $unsigned(level) < NumLevels; level = level + 1) begin : gen_levels
+				genvar l;
+				for (l = 0; l < (2 ** level); l = l + 1) begin : gen_level
+					wire sel;
+					localparam [31:0] Idx0 = ((2 ** level) - 1) + l;
+					localparam [31:0] Idx1 = ((2 ** (level + 1)) - 1) + (l * 2);
+					if ($unsigned(level) == (NumLevels - 1)) begin : gen_first_level
+						if (($unsigned(l) * 2) < (NumIn - 1)) begin : gen_reduce
+							assign req_nodes[Idx0] = req_d[l * 2] | req_d[(l * 2) + 1];
+							assign sel = ~req_d[l * 2] | (req_d[(l * 2) + 1] & rr_q[(NumLevels - 1) - level]);
+							function automatic [IdxWidth - 1:0] sv2v_cast_40B81;
+								input reg [IdxWidth - 1:0] inp;
+								sv2v_cast_40B81 = inp;
+							endfunction
+							assign index_nodes[(((2 ** NumLevels) - 2) >= 0 ? Idx0 : ((2 ** NumLevels) - 2) - Idx0) * IdxWidth+:IdxWidth] = sv2v_cast_40B81(sel);
+							assign data_nodes[((DataType_Width + 6) >= 0 ? 0 : DataType_Width + 6) + ((((2 ** NumLevels) - 2) >= 0 ? Idx0 : ((2 ** NumLevels) - 2) - Idx0) * ((DataType_Width + 6) >= 0 ? DataType_Width + 7 : 1 - (DataType_Width + 6)))+:((DataType_Width + 6) >= 0 ? DataType_Width + 7 : 1 - (DataType_Width + 6))] = (sel ? data_i[((DataType_Width + 6) >= 0 ? 0 : DataType_Width + 6) + (((l * 2) + 1) * ((DataType_Width + 6) >= 0 ? DataType_Width + 7 : 1 - (DataType_Width + 6)))+:((DataType_Width + 6) >= 0 ? DataType_Width + 7 : 1 - (DataType_Width + 6))] : data_i[((DataType_Width + 6) >= 0 ? 0 : DataType_Width + 6) + ((l * 2) * ((DataType_Width + 6) >= 0 ? DataType_Width + 7 : 1 - (DataType_Width + 6)))+:((DataType_Width + 6) >= 0 ? DataType_Width + 7 : 1 - (DataType_Width + 6))]);
+							assign gnt_o[l * 2] = (gnt_nodes[Idx0] & (AxiVldRdy | req_d[l * 2])) & ~sel;
+							assign gnt_o[(l * 2) + 1] = (gnt_nodes[Idx0] & (AxiVldRdy | req_d[(l * 2) + 1])) & sel;
+						end
+						if (($unsigned(l) * 2) == (NumIn - 1)) begin : gen_first
+							assign req_nodes[Idx0] = req_d[l * 2];
+							assign index_nodes[(((2 ** NumLevels) - 2) >= 0 ? Idx0 : ((2 ** NumLevels) - 2) - Idx0) * IdxWidth+:IdxWidth] = {IdxWidth {1'sb0}};
+							assign data_nodes[((DataType_Width + 6) >= 0 ? 0 : DataType_Width + 6) + ((((2 ** NumLevels) - 2) >= 0 ? Idx0 : ((2 ** NumLevels) - 2) - Idx0) * ((DataType_Width + 6) >= 0 ? DataType_Width + 7 : 1 - (DataType_Width + 6)))+:((DataType_Width + 6) >= 0 ? DataType_Width + 7 : 1 - (DataType_Width + 6))] = data_i[((DataType_Width + 6) >= 0 ? 0 : DataType_Width + 6) + ((l * 2) * ((DataType_Width + 6) >= 0 ? DataType_Width + 7 : 1 - (DataType_Width + 6)))+:((DataType_Width + 6) >= 0 ? DataType_Width + 7 : 1 - (DataType_Width + 6))];
+							assign gnt_o[l * 2] = gnt_nodes[Idx0] & (AxiVldRdy | req_d[l * 2]);
+						end
+						if (($unsigned(l) * 2) > (NumIn - 1)) begin : gen_out_of_range
+							assign req_nodes[Idx0] = 1'b0;
+							function automatic [IdxWidth - 1:0] sv2v_cast_40B81;
+								input reg [IdxWidth - 1:0] inp;
+								sv2v_cast_40B81 = inp;
+							endfunction
+							assign index_nodes[(((2 ** NumLevels) - 2) >= 0 ? Idx0 : ((2 ** NumLevels) - 2) - Idx0) * IdxWidth+:IdxWidth] = sv2v_cast_40B81(1'sb0);
+							function automatic [((DataType_Width + 6) >= 0 ? DataType_Width + 7 : 1 - (DataType_Width + 6)) - 1:0] sv2v_cast_69F84;
+								input reg [((DataType_Width + 6) >= 0 ? DataType_Width + 7 : 1 - (DataType_Width + 6)) - 1:0] inp;
+								sv2v_cast_69F84 = inp;
+							endfunction
+							assign data_nodes[((DataType_Width + 6) >= 0 ? 0 : DataType_Width + 6) + ((((2 ** NumLevels) - 2) >= 0 ? Idx0 : ((2 ** NumLevels) - 2) - Idx0) * ((DataType_Width + 6) >= 0 ? DataType_Width + 7 : 1 - (DataType_Width + 6)))+:((DataType_Width + 6) >= 0 ? DataType_Width + 7 : 1 - (DataType_Width + 6))] = sv2v_cast_69F84(1'sb0);
+						end
+					end
+					else begin : gen_other_levels
+						assign req_nodes[Idx0] = req_nodes[Idx1] | req_nodes[Idx1 + 1];
+						assign sel = ~req_nodes[Idx1] | (req_nodes[Idx1 + 1] & rr_q[(NumLevels - 1) - level]);
+						function automatic [IdxWidth - 1:0] sv2v_cast_40B81;
+							input reg [IdxWidth - 1:0] inp;
+							sv2v_cast_40B81 = inp;
+						endfunction
+						assign index_nodes[(((2 ** NumLevels) - 2) >= 0 ? Idx0 : ((2 ** NumLevels) - 2) - Idx0) * IdxWidth+:IdxWidth] = (sel ? sv2v_cast_40B81({1'b1, index_nodes[((((2 ** NumLevels) - 2) >= 0 ? Idx1 + 1 : ((2 ** NumLevels) - 2) - (Idx1 + 1)) * IdxWidth) + (((NumLevels - $unsigned(level)) - 2) >= 0 ? (NumLevels - $unsigned(level)) - 2 : (((NumLevels - $unsigned(level)) - 2) + (((NumLevels - $unsigned(level)) - 2) >= 0 ? (NumLevels - $unsigned(level)) - 1 : 3 - (NumLevels - $unsigned(level)))) - 1)-:(((NumLevels - $unsigned(level)) - 2) >= 0 ? (NumLevels - $unsigned(level)) - 1 : 3 - (NumLevels - $unsigned(level)))]}) : sv2v_cast_40B81({1'b0, index_nodes[((((2 ** NumLevels) - 2) >= 0 ? Idx1 : ((2 ** NumLevels) - 2) - Idx1) * IdxWidth) + (((NumLevels - $unsigned(level)) - 2) >= 0 ? (NumLevels - $unsigned(level)) - 2 : (((NumLevels - $unsigned(level)) - 2) + (((NumLevels - $unsigned(level)) - 2) >= 0 ? (NumLevels - $unsigned(level)) - 1 : 3 - (NumLevels - $unsigned(level)))) - 1)-:(((NumLevels - $unsigned(level)) - 2) >= 0 ? (NumLevels - $unsigned(level)) - 1 : 3 - (NumLevels - $unsigned(level)))]}));
+						assign data_nodes[((DataType_Width + 6) >= 0 ? 0 : DataType_Width + 6) + ((((2 ** NumLevels) - 2) >= 0 ? Idx0 : ((2 ** NumLevels) - 2) - Idx0) * ((DataType_Width + 6) >= 0 ? DataType_Width + 7 : 1 - (DataType_Width + 6)))+:((DataType_Width + 6) >= 0 ? DataType_Width + 7 : 1 - (DataType_Width + 6))] = (sel ? data_nodes[((DataType_Width + 6) >= 0 ? 0 : DataType_Width + 6) + ((((2 ** NumLevels) - 2) >= 0 ? Idx1 + 1 : ((2 ** NumLevels) - 2) - (Idx1 + 1)) * ((DataType_Width + 6) >= 0 ? DataType_Width + 7 : 1 - (DataType_Width + 6)))+:((DataType_Width + 6) >= 0 ? DataType_Width + 7 : 1 - (DataType_Width + 6))] : data_nodes[((DataType_Width + 6) >= 0 ? 0 : DataType_Width + 6) + ((((2 ** NumLevels) - 2) >= 0 ? Idx1 : ((2 ** NumLevels) - 2) - Idx1) * ((DataType_Width + 6) >= 0 ? DataType_Width + 7 : 1 - (DataType_Width + 6)))+:((DataType_Width + 6) >= 0 ? DataType_Width + 7 : 1 - (DataType_Width + 6))]);
+						assign gnt_nodes[Idx1] = gnt_nodes[Idx0] & ~sel;
+						assign gnt_nodes[Idx1 + 1] = gnt_nodes[Idx0] & sel;
+					end
+				end
+			end
+		end
+	endgenerate
+endmodule
+module rr_arb_tree_CBEBF_6E668 (
+	clk_i,
+	rst_ni,
+	flush_i,
+	rr_i,
+	req_i,
+	gnt_o,
+	data_i,
+	req_o,
+	gnt_i,
+	data_o,
+	idx_o
+);
+	parameter [31:0] DataType_WIDTH = 0;
+	parameter [31:0] NumIn = 64;
+	parameter [31:0] DataWidth = 32;
+	parameter [0:0] ExtPrio = 1'b0;
+	parameter [0:0] AxiVldRdy = 1'b0;
+	parameter [0:0] LockIn = 1'b0;
+	parameter [0:0] FairArb = 1'b1;
+	parameter [31:0] IdxWidth = (NumIn > 32'd1 ? $unsigned($clog2(NumIn)) : 32'd1);
+	input wire clk_i;
+	input wire rst_ni;
+	input wire flush_i;
+	input wire [IdxWidth - 1:0] rr_i;
+	input wire [NumIn - 1:0] req_i;
+	output wire [NumIn - 1:0] gnt_o;
+	input wire [((DataType_WIDTH + 5) >= 0 ? (NumIn * (DataType_WIDTH + 6)) - 1 : (NumIn * (1 - (DataType_WIDTH + 5))) + (DataType_WIDTH + 4)):((DataType_WIDTH + 5) >= 0 ? 0 : DataType_WIDTH + 5)] data_i;
+	output wire req_o;
+	input wire gnt_i;
+	output wire [DataType_WIDTH + 5:0] data_o;
+	output wire [IdxWidth - 1:0] idx_o;
+	generate
+		if (NumIn == $unsigned(1)) begin : gen_pass_through
+			assign req_o = req_i[0];
+			assign gnt_o[0] = gnt_i;
+			assign data_o = data_i[((DataType_WIDTH + 5) >= 0 ? 0 : DataType_WIDTH + 5)+:((DataType_WIDTH + 5) >= 0 ? DataType_WIDTH + 6 : 1 - (DataType_WIDTH + 5))];
+			assign idx_o = {IdxWidth {1'sb0}};
+		end
+		else begin : gen_arbiter
+			localparam [31:0] NumLevels = $unsigned($clog2(NumIn));
+			wire [(((2 ** NumLevels) - 2) >= 0 ? (((2 ** NumLevels) - 1) * IdxWidth) - 1 : ((3 - (2 ** NumLevels)) * IdxWidth) + ((((2 ** NumLevels) - 2) * IdxWidth) - 1)):(((2 ** NumLevels) - 2) >= 0 ? 0 : ((2 ** NumLevels) - 2) * IdxWidth)] index_nodes;
+			wire [(((2 ** NumLevels) - 2) >= 0 ? ((DataType_WIDTH + 5) >= 0 ? (((2 ** NumLevels) - 1) * (DataType_WIDTH + 6)) - 1 : (((2 ** NumLevels) - 1) * (1 - (DataType_WIDTH + 5))) + (DataType_WIDTH + 4)) : ((DataType_WIDTH + 5) >= 0 ? ((3 - (2 ** NumLevels)) * (DataType_WIDTH + 6)) + ((((2 ** NumLevels) - 2) * (DataType_WIDTH + 6)) - 1) : ((3 - (2 ** NumLevels)) * (1 - (DataType_WIDTH + 5))) + (((DataType_WIDTH + 5) + (((2 ** NumLevels) - 2) * (1 - (DataType_WIDTH + 5)))) - 1))):(((2 ** NumLevels) - 2) >= 0 ? ((DataType_WIDTH + 5) >= 0 ? 0 : DataType_WIDTH + 5) : ((DataType_WIDTH + 5) >= 0 ? ((2 ** NumLevels) - 2) * (DataType_WIDTH + 6) : (DataType_WIDTH + 5) + (((2 ** NumLevels) - 2) * (1 - (DataType_WIDTH + 5)))))] data_nodes;
+			wire [(2 ** NumLevels) - 2:0] gnt_nodes;
+			wire [(2 ** NumLevels) - 2:0] req_nodes;
+			reg [IdxWidth - 1:0] rr_q;
+			wire [NumIn - 1:0] req_d;
+			assign req_o = req_nodes[0];
+			assign data_o = data_nodes[((DataType_WIDTH + 5) >= 0 ? 0 : DataType_WIDTH + 5) + ((((2 ** NumLevels) - 2) >= 0 ? 0 : (2 ** NumLevels) - 2) * ((DataType_WIDTH + 5) >= 0 ? DataType_WIDTH + 6 : 1 - (DataType_WIDTH + 5)))+:((DataType_WIDTH + 5) >= 0 ? DataType_WIDTH + 6 : 1 - (DataType_WIDTH + 5))];
+			assign idx_o = index_nodes[(((2 ** NumLevels) - 2) >= 0 ? 0 : (2 ** NumLevels) - 2) * IdxWidth+:IdxWidth];
+			if (ExtPrio) begin : gen_ext_rr
+				wire [IdxWidth:1] sv2v_tmp_48DE0;
+				assign sv2v_tmp_48DE0 = rr_i;
+				always @(*) rr_q = sv2v_tmp_48DE0;
+				assign req_d = req_i;
+			end
+			else begin : gen_int_rr
+				wire [IdxWidth - 1:0] rr_d;
+				if (LockIn) begin : gen_lock
+					wire lock_d;
+					reg lock_q;
+					reg [NumIn - 1:0] req_q;
+					assign lock_d = req_o & ~gnt_i;
+					assign req_d = (lock_q ? req_q : req_i);
+					always @(posedge clk_i or negedge rst_ni) begin : p_lock_reg
+						if (!rst_ni)
+							lock_q <= 1'b0;
+						else if (flush_i)
+							lock_q <= 1'b0;
+						else
+							lock_q <= lock_d;
+					end
+					always @(posedge clk_i or negedge rst_ni) begin : p_req_regs
+						if (!rst_ni)
+							req_q <= {NumIn {1'sb0}};
+						else if (flush_i)
+							req_q <= {NumIn {1'sb0}};
+						else
+							req_q <= req_d;
+					end
+				end
+				else begin : gen_no_lock
+					assign req_d = req_i;
+				end
+				if (FairArb) begin : gen_fair_arb
+					wire [NumIn - 1:0] upper_mask;
+					wire [NumIn - 1:0] lower_mask;
+					wire [IdxWidth - 1:0] upper_idx;
+					wire [IdxWidth - 1:0] lower_idx;
+					wire [IdxWidth - 1:0] next_idx;
+					wire upper_empty;
+					wire lower_empty;
+					genvar i;
+					for (i = 0; i < NumIn; i = i + 1) begin : gen_mask
+						assign upper_mask[i] = (i > rr_q ? req_d[i] : 1'b0);
+						assign lower_mask[i] = (i <= rr_q ? req_d[i] : 1'b0);
+					end
+					lzc #(
+						.WIDTH(NumIn),
+						.MODE(1'b0)
+					) i_lzc_upper(
+						.in_i(upper_mask),
+						.cnt_o(upper_idx),
+						.empty_o(upper_empty)
+					);
+					lzc #(
+						.WIDTH(NumIn),
+						.MODE(1'b0)
+					) i_lzc_lower(
+						.in_i(lower_mask),
+						.cnt_o(lower_idx),
+						.empty_o()
+					);
+					assign next_idx = (upper_empty ? lower_idx : upper_idx);
+					assign rr_d = (gnt_i && req_o ? next_idx : rr_q);
+				end
+				else begin : gen_unfair_arb
+					function automatic [IdxWidth - 1:0] sv2v_cast_15989;
+						input reg [IdxWidth - 1:0] inp;
+						sv2v_cast_15989 = inp;
+					endfunction
+					assign rr_d = (gnt_i && req_o ? (rr_q == sv2v_cast_15989(NumIn - 1) ? {IdxWidth {1'sb0}} : rr_q + 1'b1) : rr_q);
+				end
+				always @(posedge clk_i or negedge rst_ni) begin : p_rr_regs
+					if (!rst_ni)
+						rr_q <= {IdxWidth {1'sb0}};
+					else if (flush_i)
+						rr_q <= {IdxWidth {1'sb0}};
+					else
+						rr_q <= rr_d;
+				end
+			end
+			assign gnt_nodes[0] = gnt_i;
+			genvar level;
+			for (level = 0; $unsigned(level) < NumLevels; level = level + 1) begin : gen_levels
+				genvar l;
+				for (l = 0; l < (2 ** level); l = l + 1) begin : gen_level
+					wire sel;
+					localparam [31:0] Idx0 = ((2 ** level) - 1) + l;
+					localparam [31:0] Idx1 = ((2 ** (level + 1)) - 1) + (l * 2);
+					if ($unsigned(level) == (NumLevels - 1)) begin : gen_first_level
+						if (($unsigned(l) * 2) < (NumIn - 1)) begin : gen_reduce
+							assign req_nodes[Idx0] = req_d[l * 2] | req_d[(l * 2) + 1];
+							assign sel = ~req_d[l * 2] | (req_d[(l * 2) + 1] & rr_q[(NumLevels - 1) - level]);
+							function automatic [IdxWidth - 1:0] sv2v_cast_15989;
+								input reg [IdxWidth - 1:0] inp;
+								sv2v_cast_15989 = inp;
+							endfunction
+							assign index_nodes[(((2 ** NumLevels) - 2) >= 0 ? Idx0 : ((2 ** NumLevels) - 2) - Idx0) * IdxWidth+:IdxWidth] = sv2v_cast_15989(sel);
+							assign data_nodes[((DataType_WIDTH + 5) >= 0 ? 0 : DataType_WIDTH + 5) + ((((2 ** NumLevels) - 2) >= 0 ? Idx0 : ((2 ** NumLevels) - 2) - Idx0) * ((DataType_WIDTH + 5) >= 0 ? DataType_WIDTH + 6 : 1 - (DataType_WIDTH + 5)))+:((DataType_WIDTH + 5) >= 0 ? DataType_WIDTH + 6 : 1 - (DataType_WIDTH + 5))] = (sel ? data_i[((DataType_WIDTH + 5) >= 0 ? 0 : DataType_WIDTH + 5) + (((l * 2) + 1) * ((DataType_WIDTH + 5) >= 0 ? DataType_WIDTH + 6 : 1 - (DataType_WIDTH + 5)))+:((DataType_WIDTH + 5) >= 0 ? DataType_WIDTH + 6 : 1 - (DataType_WIDTH + 5))] : data_i[((DataType_WIDTH + 5) >= 0 ? 0 : DataType_WIDTH + 5) + ((l * 2) * ((DataType_WIDTH + 5) >= 0 ? DataType_WIDTH + 6 : 1 - (DataType_WIDTH + 5)))+:((DataType_WIDTH + 5) >= 0 ? DataType_WIDTH + 6 : 1 - (DataType_WIDTH + 5))]);
+							assign gnt_o[l * 2] = (gnt_nodes[Idx0] & (AxiVldRdy | req_d[l * 2])) & ~sel;
+							assign gnt_o[(l * 2) + 1] = (gnt_nodes[Idx0] & (AxiVldRdy | req_d[(l * 2) + 1])) & sel;
+						end
+						if (($unsigned(l) * 2) == (NumIn - 1)) begin : gen_first
+							assign req_nodes[Idx0] = req_d[l * 2];
+							assign index_nodes[(((2 ** NumLevels) - 2) >= 0 ? Idx0 : ((2 ** NumLevels) - 2) - Idx0) * IdxWidth+:IdxWidth] = {IdxWidth {1'sb0}};
+							assign data_nodes[((DataType_WIDTH + 5) >= 0 ? 0 : DataType_WIDTH + 5) + ((((2 ** NumLevels) - 2) >= 0 ? Idx0 : ((2 ** NumLevels) - 2) - Idx0) * ((DataType_WIDTH + 5) >= 0 ? DataType_WIDTH + 6 : 1 - (DataType_WIDTH + 5)))+:((DataType_WIDTH + 5) >= 0 ? DataType_WIDTH + 6 : 1 - (DataType_WIDTH + 5))] = data_i[((DataType_WIDTH + 5) >= 0 ? 0 : DataType_WIDTH + 5) + ((l * 2) * ((DataType_WIDTH + 5) >= 0 ? DataType_WIDTH + 6 : 1 - (DataType_WIDTH + 5)))+:((DataType_WIDTH + 5) >= 0 ? DataType_WIDTH + 6 : 1 - (DataType_WIDTH + 5))];
+							assign gnt_o[l * 2] = gnt_nodes[Idx0] & (AxiVldRdy | req_d[l * 2]);
+						end
+						if (($unsigned(l) * 2) > (NumIn - 1)) begin : gen_out_of_range
+							assign req_nodes[Idx0] = 1'b0;
+							function automatic [IdxWidth - 1:0] sv2v_cast_15989;
+								input reg [IdxWidth - 1:0] inp;
+								sv2v_cast_15989 = inp;
+							endfunction
+							assign index_nodes[(((2 ** NumLevels) - 2) >= 0 ? Idx0 : ((2 ** NumLevels) - 2) - Idx0) * IdxWidth+:IdxWidth] = sv2v_cast_15989(1'sb0);
+							function automatic [((DataType_WIDTH + 5) >= 0 ? DataType_WIDTH + 6 : 1 - (DataType_WIDTH + 5)) - 1:0] sv2v_cast_FF7FF;
+								input reg [((DataType_WIDTH + 5) >= 0 ? DataType_WIDTH + 6 : 1 - (DataType_WIDTH + 5)) - 1:0] inp;
+								sv2v_cast_FF7FF = inp;
+							endfunction
+							assign data_nodes[((DataType_WIDTH + 5) >= 0 ? 0 : DataType_WIDTH + 5) + ((((2 ** NumLevels) - 2) >= 0 ? Idx0 : ((2 ** NumLevels) - 2) - Idx0) * ((DataType_WIDTH + 5) >= 0 ? DataType_WIDTH + 6 : 1 - (DataType_WIDTH + 5)))+:((DataType_WIDTH + 5) >= 0 ? DataType_WIDTH + 6 : 1 - (DataType_WIDTH + 5))] = sv2v_cast_FF7FF(1'sb0);
+						end
+					end
+					else begin : gen_other_levels
+						assign req_nodes[Idx0] = req_nodes[Idx1] | req_nodes[Idx1 + 1];
+						assign sel = ~req_nodes[Idx1] | (req_nodes[Idx1 + 1] & rr_q[(NumLevels - 1) - level]);
+						function automatic [IdxWidth - 1:0] sv2v_cast_15989;
+							input reg [IdxWidth - 1:0] inp;
+							sv2v_cast_15989 = inp;
+						endfunction
+						assign index_nodes[(((2 ** NumLevels) - 2) >= 0 ? Idx0 : ((2 ** NumLevels) - 2) - Idx0) * IdxWidth+:IdxWidth] = (sel ? sv2v_cast_15989({1'b1, index_nodes[((((2 ** NumLevels) - 2) >= 0 ? Idx1 + 1 : ((2 ** NumLevels) - 2) - (Idx1 + 1)) * IdxWidth) + (((NumLevels - $unsigned(level)) - 2) >= 0 ? (NumLevels - $unsigned(level)) - 2 : (((NumLevels - $unsigned(level)) - 2) + (((NumLevels - $unsigned(level)) - 2) >= 0 ? (NumLevels - $unsigned(level)) - 1 : 3 - (NumLevels - $unsigned(level)))) - 1)-:(((NumLevels - $unsigned(level)) - 2) >= 0 ? (NumLevels - $unsigned(level)) - 1 : 3 - (NumLevels - $unsigned(level)))]}) : sv2v_cast_15989({1'b0, index_nodes[((((2 ** NumLevels) - 2) >= 0 ? Idx1 : ((2 ** NumLevels) - 2) - Idx1) * IdxWidth) + (((NumLevels - $unsigned(level)) - 2) >= 0 ? (NumLevels - $unsigned(level)) - 2 : (((NumLevels - $unsigned(level)) - 2) + (((NumLevels - $unsigned(level)) - 2) >= 0 ? (NumLevels - $unsigned(level)) - 1 : 3 - (NumLevels - $unsigned(level)))) - 1)-:(((NumLevels - $unsigned(level)) - 2) >= 0 ? (NumLevels - $unsigned(level)) - 1 : 3 - (NumLevels - $unsigned(level)))]}));
+						assign data_nodes[((DataType_WIDTH + 5) >= 0 ? 0 : DataType_WIDTH + 5) + ((((2 ** NumLevels) - 2) >= 0 ? Idx0 : ((2 ** NumLevels) - 2) - Idx0) * ((DataType_WIDTH + 5) >= 0 ? DataType_WIDTH + 6 : 1 - (DataType_WIDTH + 5)))+:((DataType_WIDTH + 5) >= 0 ? DataType_WIDTH + 6 : 1 - (DataType_WIDTH + 5))] = (sel ? data_nodes[((DataType_WIDTH + 5) >= 0 ? 0 : DataType_WIDTH + 5) + ((((2 ** NumLevels) - 2) >= 0 ? Idx1 + 1 : ((2 ** NumLevels) - 2) - (Idx1 + 1)) * ((DataType_WIDTH + 5) >= 0 ? DataType_WIDTH + 6 : 1 - (DataType_WIDTH + 5)))+:((DataType_WIDTH + 5) >= 0 ? DataType_WIDTH + 6 : 1 - (DataType_WIDTH + 5))] : data_nodes[((DataType_WIDTH + 5) >= 0 ? 0 : DataType_WIDTH + 5) + ((((2 ** NumLevels) - 2) >= 0 ? Idx1 : ((2 ** NumLevels) - 2) - Idx1) * ((DataType_WIDTH + 5) >= 0 ? DataType_WIDTH + 6 : 1 - (DataType_WIDTH + 5)))+:((DataType_WIDTH + 5) >= 0 ? DataType_WIDTH + 6 : 1 - (DataType_WIDTH + 5))]);
+						assign gnt_nodes[Idx1] = gnt_nodes[Idx0] & ~sel;
+						assign gnt_nodes[Idx1 + 1] = gnt_nodes[Idx0] & sel;
+					end
+				end
+			end
+		end
+	endgenerate
+endmodule
+
+module rv_plic_gateway (
+	clk_i,
+	rst_ni,
+	src_i,
+	le_i,
+	claim_i,
+	complete_i,
+	ip_o
+);
+	parameter signed [31:0] N_SOURCE = 32;
+	input wire clk_i;
+	input wire rst_ni;
+	input wire [N_SOURCE - 1:0] src_i;
+	input wire [N_SOURCE - 1:0] le_i;
+	input wire [N_SOURCE - 1:0] claim_i;
+	input wire [N_SOURCE - 1:0] complete_i;
+	output reg [N_SOURCE - 1:0] ip_o;
+	reg [N_SOURCE - 1:0] ia;
+	reg [N_SOURCE - 1:0] set;
+	reg [N_SOURCE - 1:0] src_q;
+	always @(posedge clk_i or negedge rst_ni)
+		if (!rst_ni)
+			src_q <= {N_SOURCE {1'sb0}};
+		else
+			src_q <= src_i;
+	always @(*) begin : sv2v_autoblock_136
+		reg signed [31:0] i;
+		for (i = 0; i < N_SOURCE; i = i + 1)
+			set[i] = (le_i[i] ? src_i[i] & ~src_q[i] : src_i[i]);
+	end
+	always @(posedge clk_i or negedge rst_ni)
+		if (!rst_ni)
+			ip_o <= {N_SOURCE {1'sb0}};
+		else
+			ip_o <= (ip_o | ((set & ~ia) & ~ip_o)) & ~(ip_o & claim_i);
+	always @(posedge clk_i or negedge rst_ni)
+		if (!rst_ni)
+			ia <= {N_SOURCE {1'sb0}};
+		else
+			ia <= (ia | (set & ~ia)) & ~((ia & complete_i) & ~ip_o);
+endmodule
+module rv_plic_reg_top (
+	clk_i,
+	rst_ni,
+	tl_i,
+	tl_o,
+	reg2hw,
+	hw2reg,
+	devmode_i
+);
+	input wire clk_i;
+	input wire rst_ni;
+	localparam signed [31:0] tlul_pkg_TL_AIW = 8;
+	localparam signed [31:0] tlul_pkg_TL_AW = 32;
+	localparam signed [31:0] tlul_pkg_TL_DW = 32;
+	localparam signed [31:0] tlul_pkg_TL_DBW = 4;
+	localparam signed [31:0] tlul_pkg_TL_SZW = 2;
+	input wire [85:0] tl_i;
+	localparam signed [31:0] tlul_pkg_TL_DIW = 1;
+	output wire [51:0] tl_o;
+	output wire [154:0] reg2hw;
+	input wire [77:0] hw2reg;
+	input devmode_i;
+	localparam signed [31:0] AW = 10;
+	localparam signed [31:0] DW = 32;
+	localparam signed [31:0] DBW = 4;
+	wire reg_we;
+	wire reg_re;
+	wire [9:0] reg_addr;
+	wire [31:0] reg_wdata;
+	wire [3:0] reg_be;
+	wire [31:0] reg_rdata;
+	wire reg_error;
+	wire addrmiss;
+	reg wr_err;
+	reg [31:0] reg_rdata_next;
+	wire [85:0] tl_reg_h2d;
+	wire [51:0] tl_reg_d2h;
+	assign tl_reg_h2d = tl_i;
+	assign tl_o = tl_reg_d2h;
+	tlul_adapter_reg #(
+		.RegAw(AW),
+		.RegDw(DW)
+	) u_reg_if(
+		.clk_i(clk_i),
+		.rst_ni(rst_ni),
+		.tl_i(tl_reg_h2d),
+		.tl_o(tl_reg_d2h),
+		.we_o(reg_we),
+		.re_o(reg_re),
+		.addr_o(reg_addr),
+		.wdata_o(reg_wdata),
+		.be_o(reg_be),
+		.rdata_i(reg_rdata),
+		.error_i(reg_error)
+	);
+	assign reg_rdata = reg_rdata_next;
+	assign reg_error = (devmode_i & addrmiss) | wr_err;
+	wire ip_0_p_0_qs;
+	wire ip_0_p_1_qs;
+	wire ip_0_p_2_qs;
+	wire ip_0_p_3_qs;
+	wire ip_0_p_4_qs;
+	wire ip_0_p_5_qs;
+	wire ip_0_p_6_qs;
+	wire ip_0_p_7_qs;
+	wire ip_0_p_8_qs;
+	wire ip_0_p_9_qs;
+	wire ip_0_p_10_qs;
+	wire ip_0_p_11_qs;
+	wire ip_0_p_12_qs;
+	wire ip_0_p_13_qs;
+	wire ip_0_p_14_qs;
+	wire ip_0_p_15_qs;
+	wire ip_0_p_16_qs;
+	wire ip_0_p_17_qs;
+	wire ip_0_p_18_qs;
+	wire ip_0_p_19_qs;
+	wire ip_0_p_20_qs;
+	wire ip_0_p_21_qs;
+	wire ip_0_p_22_qs;
+	wire ip_0_p_23_qs;
+	wire ip_0_p_24_qs;
+	wire ip_0_p_25_qs;
+	wire ip_0_p_26_qs;
+	wire ip_0_p_27_qs;
+	wire ip_0_p_28_qs;
+	wire ip_0_p_29_qs;
+	wire ip_0_p_30_qs;
+	wire ip_0_p_31_qs;
+	wire ip_1_p_32_qs;
+	wire ip_1_p_33_qs;
+	wire ip_1_p_34_qs;
+	wire ip_1_p_35_qs;
+	wire ip_1_p_36_qs;
+	wire ip_1_p_37_qs;
+	wire ip_1_p_38_qs;
+	wire ip_1_p_39_qs;
+	wire ip_1_p_40_qs;
+	wire ip_1_p_41_qs;
+	wire ip_1_p_42_qs;
+	wire ip_1_p_43_qs;
+	wire le_0_le_0_qs;
+	wire le_0_le_0_wd;
+	wire le_0_le_0_we;
+	wire le_0_le_1_qs;
+	wire le_0_le_1_wd;
+	wire le_0_le_1_we;
+	wire le_0_le_2_qs;
+	wire le_0_le_2_wd;
+	wire le_0_le_2_we;
+	wire le_0_le_3_qs;
+	wire le_0_le_3_wd;
+	wire le_0_le_3_we;
+	wire le_0_le_4_qs;
+	wire le_0_le_4_wd;
+	wire le_0_le_4_we;
+	wire le_0_le_5_qs;
+	wire le_0_le_5_wd;
+	wire le_0_le_5_we;
+	wire le_0_le_6_qs;
+	wire le_0_le_6_wd;
+	wire le_0_le_6_we;
+	wire le_0_le_7_qs;
+	wire le_0_le_7_wd;
+	wire le_0_le_7_we;
+	wire le_0_le_8_qs;
+	wire le_0_le_8_wd;
+	wire le_0_le_8_we;
+	wire le_0_le_9_qs;
+	wire le_0_le_9_wd;
+	wire le_0_le_9_we;
+	wire le_0_le_10_qs;
+	wire le_0_le_10_wd;
+	wire le_0_le_10_we;
+	wire le_0_le_11_qs;
+	wire le_0_le_11_wd;
+	wire le_0_le_11_we;
+	wire le_0_le_12_qs;
+	wire le_0_le_12_wd;
+	wire le_0_le_12_we;
+	wire le_0_le_13_qs;
+	wire le_0_le_13_wd;
+	wire le_0_le_13_we;
+	wire le_0_le_14_qs;
+	wire le_0_le_14_wd;
+	wire le_0_le_14_we;
+	wire le_0_le_15_qs;
+	wire le_0_le_15_wd;
+	wire le_0_le_15_we;
+	wire le_0_le_16_qs;
+	wire le_0_le_16_wd;
+	wire le_0_le_16_we;
+	wire le_0_le_17_qs;
+	wire le_0_le_17_wd;
+	wire le_0_le_17_we;
+	wire le_0_le_18_qs;
+	wire le_0_le_18_wd;
+	wire le_0_le_18_we;
+	wire le_0_le_19_qs;
+	wire le_0_le_19_wd;
+	wire le_0_le_19_we;
+	wire le_0_le_20_qs;
+	wire le_0_le_20_wd;
+	wire le_0_le_20_we;
+	wire le_0_le_21_qs;
+	wire le_0_le_21_wd;
+	wire le_0_le_21_we;
+	wire le_0_le_22_qs;
+	wire le_0_le_22_wd;
+	wire le_0_le_22_we;
+	wire le_0_le_23_qs;
+	wire le_0_le_23_wd;
+	wire le_0_le_23_we;
+	wire le_0_le_24_qs;
+	wire le_0_le_24_wd;
+	wire le_0_le_24_we;
+	wire le_0_le_25_qs;
+	wire le_0_le_25_wd;
+	wire le_0_le_25_we;
+	wire le_0_le_26_qs;
+	wire le_0_le_26_wd;
+	wire le_0_le_26_we;
+	wire le_0_le_27_qs;
+	wire le_0_le_27_wd;
+	wire le_0_le_27_we;
+	wire le_0_le_28_qs;
+	wire le_0_le_28_wd;
+	wire le_0_le_28_we;
+	wire le_0_le_29_qs;
+	wire le_0_le_29_wd;
+	wire le_0_le_29_we;
+	wire le_0_le_30_qs;
+	wire le_0_le_30_wd;
+	wire le_0_le_30_we;
+	wire le_0_le_31_qs;
+	wire le_0_le_31_wd;
+	wire le_0_le_31_we;
+	wire le_1_le_32_qs;
+	wire le_1_le_32_wd;
+	wire le_1_le_32_we;
+	wire le_1_le_33_qs;
+	wire le_1_le_33_wd;
+	wire le_1_le_33_we;
+	wire le_1_le_34_qs;
+	wire le_1_le_34_wd;
+	wire le_1_le_34_we;
+	wire le_1_le_35_qs;
+	wire le_1_le_35_wd;
+	wire le_1_le_35_we;
+	wire [1:0] prio0_qs;
+	wire [1:0] prio0_wd;
+	wire prio0_we;
+	wire [1:0] prio1_qs;
+	wire [1:0] prio1_wd;
+	wire prio1_we;
+	wire [1:0] prio2_qs;
+	wire [1:0] prio2_wd;
+	wire prio2_we;
+	wire [1:0] prio3_qs;
+	wire [1:0] prio3_wd;
+	wire prio3_we;
+	wire [1:0] prio4_qs;
+	wire [1:0] prio4_wd;
+	wire prio4_we;
+	wire [1:0] prio5_qs;
+	wire [1:0] prio5_wd;
+	wire prio5_we;
+	wire [1:0] prio6_qs;
+	wire [1:0] prio6_wd;
+	wire prio6_we;
+	wire [1:0] prio7_qs;
+	wire [1:0] prio7_wd;
+	wire prio7_we;
+	wire [1:0] prio8_qs;
+	wire [1:0] prio8_wd;
+	wire prio8_we;
+	wire [1:0] prio9_qs;
+	wire [1:0] prio9_wd;
+	wire prio9_we;
+	wire [1:0] prio10_qs;
+	wire [1:0] prio10_wd;
+	wire prio10_we;
+	wire [1:0] prio11_qs;
+	wire [1:0] prio11_wd;
+	wire prio11_we;
+	wire [1:0] prio12_qs;
+	wire [1:0] prio12_wd;
+	wire prio12_we;
+	wire [1:0] prio13_qs;
+	wire [1:0] prio13_wd;
+	wire prio13_we;
+	wire [1:0] prio14_qs;
+	wire [1:0] prio14_wd;
+	wire prio14_we;
+	wire [1:0] prio15_qs;
+	wire [1:0] prio15_wd;
+	wire prio15_we;
+	wire [1:0] prio16_qs;
+	wire [1:0] prio16_wd;
+	wire prio16_we;
+	wire [1:0] prio17_qs;
+	wire [1:0] prio17_wd;
+	wire prio17_we;
+	wire [1:0] prio18_qs;
+	wire [1:0] prio18_wd;
+	wire prio18_we;
+	wire [1:0] prio19_qs;
+	wire [1:0] prio19_wd;
+	wire prio19_we;
+	wire [1:0] prio20_qs;
+	wire [1:0] prio20_wd;
+	wire prio20_we;
+	wire [1:0] prio21_qs;
+	wire [1:0] prio21_wd;
+	wire prio21_we;
+	wire [1:0] prio22_qs;
+	wire [1:0] prio22_wd;
+	wire prio22_we;
+	wire [1:0] prio23_qs;
+	wire [1:0] prio23_wd;
+	wire prio23_we;
+	wire [1:0] prio24_qs;
+	wire [1:0] prio24_wd;
+	wire prio24_we;
+	wire [1:0] prio25_qs;
+	wire [1:0] prio25_wd;
+	wire prio25_we;
+	wire [1:0] prio26_qs;
+	wire [1:0] prio26_wd;
+	wire prio26_we;
+	wire [1:0] prio27_qs;
+	wire [1:0] prio27_wd;
+	wire prio27_we;
+	wire [1:0] prio28_qs;
+	wire [1:0] prio28_wd;
+	wire prio28_we;
+	wire [1:0] prio29_qs;
+	wire [1:0] prio29_wd;
+	wire prio29_we;
+	wire [1:0] prio30_qs;
+	wire [1:0] prio30_wd;
+	wire prio30_we;
+	wire [1:0] prio31_qs;
+	wire [1:0] prio31_wd;
+	wire prio31_we;
+	wire [1:0] prio32_qs;
+	wire [1:0] prio32_wd;
+	wire prio32_we;
+	wire [1:0] prio33_qs;
+	wire [1:0] prio33_wd;
+	wire prio33_we;
+	wire [1:0] prio34_qs;
+	wire [1:0] prio34_wd;
+	wire prio34_we;
+	wire [1:0] prio35_qs;
+	wire [1:0] prio35_wd;
+	wire prio35_we;
+	wire ie0_0_e_0_qs;
+	wire ie0_0_e_0_wd;
+	wire ie0_0_e_0_we;
+	wire ie0_0_e_1_qs;
+	wire ie0_0_e_1_wd;
+	wire ie0_0_e_1_we;
+	wire ie0_0_e_2_qs;
+	wire ie0_0_e_2_wd;
+	wire ie0_0_e_2_we;
+	wire ie0_0_e_3_qs;
+	wire ie0_0_e_3_wd;
+	wire ie0_0_e_3_we;
+	wire ie0_0_e_4_qs;
+	wire ie0_0_e_4_wd;
+	wire ie0_0_e_4_we;
+	wire ie0_0_e_5_qs;
+	wire ie0_0_e_5_wd;
+	wire ie0_0_e_5_we;
+	wire ie0_0_e_6_qs;
+	wire ie0_0_e_6_wd;
+	wire ie0_0_e_6_we;
+	wire ie0_0_e_7_qs;
+	wire ie0_0_e_7_wd;
+	wire ie0_0_e_7_we;
+	wire ie0_0_e_8_qs;
+	wire ie0_0_e_8_wd;
+	wire ie0_0_e_8_we;
+	wire ie0_0_e_9_qs;
+	wire ie0_0_e_9_wd;
+	wire ie0_0_e_9_we;
+	wire ie0_0_e_10_qs;
+	wire ie0_0_e_10_wd;
+	wire ie0_0_e_10_we;
+	wire ie0_0_e_11_qs;
+	wire ie0_0_e_11_wd;
+	wire ie0_0_e_11_we;
+	wire ie0_0_e_12_qs;
+	wire ie0_0_e_12_wd;
+	wire ie0_0_e_12_we;
+	wire ie0_0_e_13_qs;
+	wire ie0_0_e_13_wd;
+	wire ie0_0_e_13_we;
+	wire ie0_0_e_14_qs;
+	wire ie0_0_e_14_wd;
+	wire ie0_0_e_14_we;
+	wire ie0_0_e_15_qs;
+	wire ie0_0_e_15_wd;
+	wire ie0_0_e_15_we;
+	wire ie0_0_e_16_qs;
+	wire ie0_0_e_16_wd;
+	wire ie0_0_e_16_we;
+	wire ie0_0_e_17_qs;
+	wire ie0_0_e_17_wd;
+	wire ie0_0_e_17_we;
+	wire ie0_0_e_18_qs;
+	wire ie0_0_e_18_wd;
+	wire ie0_0_e_18_we;
+	wire ie0_0_e_19_qs;
+	wire ie0_0_e_19_wd;
+	wire ie0_0_e_19_we;
+	wire ie0_0_e_20_qs;
+	wire ie0_0_e_20_wd;
+	wire ie0_0_e_20_we;
+	wire ie0_0_e_21_qs;
+	wire ie0_0_e_21_wd;
+	wire ie0_0_e_21_we;
+	wire ie0_0_e_22_qs;
+	wire ie0_0_e_22_wd;
+	wire ie0_0_e_22_we;
+	wire ie0_0_e_23_qs;
+	wire ie0_0_e_23_wd;
+	wire ie0_0_e_23_we;
+	wire ie0_0_e_24_qs;
+	wire ie0_0_e_24_wd;
+	wire ie0_0_e_24_we;
+	wire ie0_0_e_25_qs;
+	wire ie0_0_e_25_wd;
+	wire ie0_0_e_25_we;
+	wire ie0_0_e_26_qs;
+	wire ie0_0_e_26_wd;
+	wire ie0_0_e_26_we;
+	wire ie0_0_e_27_qs;
+	wire ie0_0_e_27_wd;
+	wire ie0_0_e_27_we;
+	wire ie0_0_e_28_qs;
+	wire ie0_0_e_28_wd;
+	wire ie0_0_e_28_we;
+	wire ie0_0_e_29_qs;
+	wire ie0_0_e_29_wd;
+	wire ie0_0_e_29_we;
+	wire ie0_0_e_30_qs;
+	wire ie0_0_e_30_wd;
+	wire ie0_0_e_30_we;
+	wire ie0_0_e_31_qs;
+	wire ie0_0_e_31_wd;
+	wire ie0_0_e_31_we;
+	wire ie0_1_e_32_qs;
+	wire ie0_1_e_32_wd;
+	wire ie0_1_e_32_we;
+	wire ie0_1_e_33_qs;
+	wire ie0_1_e_33_wd;
+	wire ie0_1_e_33_we;
+	wire ie0_1_e_34_qs;
+	wire ie0_1_e_34_wd;
+	wire ie0_1_e_34_we;
+	wire ie0_1_e_35_qs;
+	wire ie0_1_e_35_wd;
+	wire ie0_1_e_35_we;
+	wire [1:0] threshold0_qs;
+	wire [1:0] threshold0_wd;
+	wire threshold0_we;
+	wire [5:0] cc0_qs;
+	wire [5:0] cc0_wd;
+	wire cc0_we;
+	wire cc0_re;
+	wire msip0_qs;
+	wire msip0_wd;
+	wire msip0_we;
+	prim_subreg #(
+		.DW(1),
+		.SWACCESS("RO"),
+		.RESVAL(1'h0)
+	) u_ip_0_p_0(
+		.clk_i(clk_i),
+		.rst_ni(rst_ni),
+		.we(1'b0),
+		.wd(1'b0),
+		.de(hw2reg[6]),
+		.d(hw2reg[7]),
+		.qe(),
+		.q(),
+		.qs(ip_0_p_0_qs)
+	);
+	prim_subreg #(
+		.DW(1),
+		.SWACCESS("RO"),
+		.RESVAL(1'h0)
+	) u_ip_0_p_1(
+		.clk_i(clk_i),
+		.rst_ni(rst_ni),
+		.we(1'b0),
+		.wd(1'b0),
+		.de(hw2reg[8]),
+		.d(hw2reg[9]),
+		.qe(),
+		.q(),
+		.qs(ip_0_p_1_qs)
+	);
+	prim_subreg #(
+		.DW(1),
+		.SWACCESS("RO"),
+		.RESVAL(1'h0)
+	) u_ip_0_p_2(
+		.clk_i(clk_i),
+		.rst_ni(rst_ni),
+		.we(1'b0),
+		.wd(1'b0),
+		.de(hw2reg[10]),
+		.d(hw2reg[11]),
+		.qe(),
+		.q(),
+		.qs(ip_0_p_2_qs)
+	);
+	prim_subreg #(
+		.DW(1),
+		.SWACCESS("RO"),
+		.RESVAL(1'h0)
+	) u_ip_0_p_3(
+		.clk_i(clk_i),
+		.rst_ni(rst_ni),
+		.we(1'b0),
+		.wd(1'b0),
+		.de(hw2reg[12]),
+		.d(hw2reg[13]),
+		.qe(),
+		.q(),
+		.qs(ip_0_p_3_qs)
+	);
+	prim_subreg #(
+		.DW(1),
+		.SWACCESS("RO"),
+		.RESVAL(1'h0)
+	) u_ip_0_p_4(
+		.clk_i(clk_i),
+		.rst_ni(rst_ni),
+		.we(1'b0),
+		.wd(1'b0),
+		.de(hw2reg[14]),
+		.d(hw2reg[15]),
+		.qe(),
+		.q(),
+		.qs(ip_0_p_4_qs)
+	);
+	prim_subreg #(
+		.DW(1),
+		.SWACCESS("RO"),
+		.RESVAL(1'h0)
+	) u_ip_0_p_5(
+		.clk_i(clk_i),
+		.rst_ni(rst_ni),
+		.we(1'b0),
+		.wd(1'b0),
+		.de(hw2reg[16]),
+		.d(hw2reg[17]),
+		.qe(),
+		.q(),
+		.qs(ip_0_p_5_qs)
+	);
+	prim_subreg #(
+		.DW(1),
+		.SWACCESS("RO"),
+		.RESVAL(1'h0)
+	) u_ip_0_p_6(
+		.clk_i(clk_i),
+		.rst_ni(rst_ni),
+		.we(1'b0),
+		.wd(1'b0),
+		.de(hw2reg[18]),
+		.d(hw2reg[19]),
+		.qe(),
+		.q(),
+		.qs(ip_0_p_6_qs)
+	);
+	prim_subreg #(
+		.DW(1),
+		.SWACCESS("RO"),
+		.RESVAL(1'h0)
+	) u_ip_0_p_7(
+		.clk_i(clk_i),
+		.rst_ni(rst_ni),
+		.we(1'b0),
+		.wd(1'b0),
+		.de(hw2reg[20]),
+		.d(hw2reg[21]),
+		.qe(),
+		.q(),
+		.qs(ip_0_p_7_qs)
+	);
+	prim_subreg #(
+		.DW(1),
+		.SWACCESS("RO"),
+		.RESVAL(1'h0)
+	) u_ip_0_p_8(
+		.clk_i(clk_i),
+		.rst_ni(rst_ni),
+		.we(1'b0),
+		.wd(1'b0),
+		.de(hw2reg[22]),
+		.d(hw2reg[23]),
+		.qe(),
+		.q(),
+		.qs(ip_0_p_8_qs)
+	);
+	prim_subreg #(
+		.DW(1),
+		.SWACCESS("RO"),
+		.RESVAL(1'h0)
+	) u_ip_0_p_9(
+		.clk_i(clk_i),
+		.rst_ni(rst_ni),
+		.we(1'b0),
+		.wd(1'b0),
+		.de(hw2reg[24]),
+		.d(hw2reg[25]),
+		.qe(),
+		.q(),
+		.qs(ip_0_p_9_qs)
+	);
+	prim_subreg #(
+		.DW(1),
+		.SWACCESS("RO"),
+		.RESVAL(1'h0)
+	) u_ip_0_p_10(
+		.clk_i(clk_i),
+		.rst_ni(rst_ni),
+		.we(1'b0),
+		.wd(1'b0),
+		.de(hw2reg[26]),
+		.d(hw2reg[27]),
+		.qe(),
+		.q(),
+		.qs(ip_0_p_10_qs)
+	);
+	prim_subreg #(
+		.DW(1),
+		.SWACCESS("RO"),
+		.RESVAL(1'h0)
+	) u_ip_0_p_11(
+		.clk_i(clk_i),
+		.rst_ni(rst_ni),
+		.we(1'b0),
+		.wd(1'b0),
+		.de(hw2reg[28]),
+		.d(hw2reg[29]),
+		.qe(),
+		.q(),
+		.qs(ip_0_p_11_qs)
+	);
+	prim_subreg #(
+		.DW(1),
+		.SWACCESS("RO"),
+		.RESVAL(1'h0)
+	) u_ip_0_p_12(
+		.clk_i(clk_i),
+		.rst_ni(rst_ni),
+		.we(1'b0),
+		.wd(1'b0),
+		.de(hw2reg[30]),
+		.d(hw2reg[31]),
+		.qe(),
+		.q(),
+		.qs(ip_0_p_12_qs)
+	);
+	prim_subreg #(
+		.DW(1),
+		.SWACCESS("RO"),
+		.RESVAL(1'h0)
+	) u_ip_0_p_13(
+		.clk_i(clk_i),
+		.rst_ni(rst_ni),
+		.we(1'b0),
+		.wd(1'b0),
+		.de(hw2reg[32]),
+		.d(hw2reg[33]),
+		.qe(),
+		.q(),
+		.qs(ip_0_p_13_qs)
+	);
+	prim_subreg #(
+		.DW(1),
+		.SWACCESS("RO"),
+		.RESVAL(1'h0)
+	) u_ip_0_p_14(
+		.clk_i(clk_i),
+		.rst_ni(rst_ni),
+		.we(1'b0),
+		.wd(1'b0),
+		.de(hw2reg[34]),
+		.d(hw2reg[35]),
+		.qe(),
+		.q(),
+		.qs(ip_0_p_14_qs)
+	);
+	prim_subreg #(
+		.DW(1),
+		.SWACCESS("RO"),
+		.RESVAL(1'h0)
+	) u_ip_0_p_15(
+		.clk_i(clk_i),
+		.rst_ni(rst_ni),
+		.we(1'b0),
+		.wd(1'b0),
+		.de(hw2reg[36]),
+		.d(hw2reg[37]),
+		.qe(),
+		.q(),
+		.qs(ip_0_p_15_qs)
+	);
+	prim_subreg #(
+		.DW(1),
+		.SWACCESS("RO"),
+		.RESVAL(1'h0)
+	) u_ip_0_p_16(
+		.clk_i(clk_i),
+		.rst_ni(rst_ni),
+		.we(1'b0),
+		.wd(1'b0),
+		.de(hw2reg[38]),
+		.d(hw2reg[39]),
+		.qe(),
+		.q(),
+		.qs(ip_0_p_16_qs)
+	);
+	prim_subreg #(
+		.DW(1),
+		.SWACCESS("RO"),
+		.RESVAL(1'h0)
+	) u_ip_0_p_17(
+		.clk_i(clk_i),
+		.rst_ni(rst_ni),
+		.we(1'b0),
+		.wd(1'b0),
+		.de(hw2reg[40]),
+		.d(hw2reg[41]),
+		.qe(),
+		.q(),
+		.qs(ip_0_p_17_qs)
+	);
+	prim_subreg #(
+		.DW(1),
+		.SWACCESS("RO"),
+		.RESVAL(1'h0)
+	) u_ip_0_p_18(
+		.clk_i(clk_i),
+		.rst_ni(rst_ni),
+		.we(1'b0),
+		.wd(1'b0),
+		.de(hw2reg[42]),
+		.d(hw2reg[43]),
+		.qe(),
+		.q(),
+		.qs(ip_0_p_18_qs)
+	);
+	prim_subreg #(
+		.DW(1),
+		.SWACCESS("RO"),
+		.RESVAL(1'h0)
+	) u_ip_0_p_19(
+		.clk_i(clk_i),
+		.rst_ni(rst_ni),
+		.we(1'b0),
+		.wd(1'b0),
+		.de(hw2reg[44]),
+		.d(hw2reg[45]),
+		.qe(),
+		.q(),
+		.qs(ip_0_p_19_qs)
+	);
+	prim_subreg #(
+		.DW(1),
+		.SWACCESS("RO"),
+		.RESVAL(1'h0)
+	) u_ip_0_p_20(
+		.clk_i(clk_i),
+		.rst_ni(rst_ni),
+		.we(1'b0),
+		.wd(1'b0),
+		.de(hw2reg[46]),
+		.d(hw2reg[47]),
+		.qe(),
+		.q(),
+		.qs(ip_0_p_20_qs)
+	);
+	prim_subreg #(
+		.DW(1),
+		.SWACCESS("RO"),
+		.RESVAL(1'h0)
+	) u_ip_0_p_21(
+		.clk_i(clk_i),
+		.rst_ni(rst_ni),
+		.we(1'b0),
+		.wd(1'b0),
+		.de(hw2reg[48]),
+		.d(hw2reg[49]),
+		.qe(),
+		.q(),
+		.qs(ip_0_p_21_qs)
+	);
+	prim_subreg #(
+		.DW(1),
+		.SWACCESS("RO"),
+		.RESVAL(1'h0)
+	) u_ip_0_p_22(
+		.clk_i(clk_i),
+		.rst_ni(rst_ni),
+		.we(1'b0),
+		.wd(1'b0),
+		.de(hw2reg[50]),
+		.d(hw2reg[51]),
+		.qe(),
+		.q(),
+		.qs(ip_0_p_22_qs)
+	);
+	prim_subreg #(
+		.DW(1),
+		.SWACCESS("RO"),
+		.RESVAL(1'h0)
+	) u_ip_0_p_23(
+		.clk_i(clk_i),
+		.rst_ni(rst_ni),
+		.we(1'b0),
+		.wd(1'b0),
+		.de(hw2reg[52]),
+		.d(hw2reg[53]),
+		.qe(),
+		.q(),
+		.qs(ip_0_p_23_qs)
+	);
+	prim_subreg #(
+		.DW(1),
+		.SWACCESS("RO"),
+		.RESVAL(1'h0)
+	) u_ip_0_p_24(
+		.clk_i(clk_i),
+		.rst_ni(rst_ni),
+		.we(1'b0),
+		.wd(1'b0),
+		.de(hw2reg[54]),
+		.d(hw2reg[55]),
+		.qe(),
+		.q(),
+		.qs(ip_0_p_24_qs)
+	);
+	prim_subreg #(
+		.DW(1),
+		.SWACCESS("RO"),
+		.RESVAL(1'h0)
+	) u_ip_0_p_25(
+		.clk_i(clk_i),
+		.rst_ni(rst_ni),
+		.we(1'b0),
+		.wd(1'b0),
+		.de(hw2reg[56]),
+		.d(hw2reg[57]),
+		.qe(),
+		.q(),
+		.qs(ip_0_p_25_qs)
+	);
+	prim_subreg #(
+		.DW(1),
+		.SWACCESS("RO"),
+		.RESVAL(1'h0)
+	) u_ip_0_p_26(
+		.clk_i(clk_i),
+		.rst_ni(rst_ni),
+		.we(1'b0),
+		.wd(1'b0),
+		.de(hw2reg[58]),
+		.d(hw2reg[59]),
+		.qe(),
+		.q(),
+		.qs(ip_0_p_26_qs)
+	);
+	prim_subreg #(
+		.DW(1),
+		.SWACCESS("RO"),
+		.RESVAL(1'h0)
+	) u_ip_0_p_27(
+		.clk_i(clk_i),
+		.rst_ni(rst_ni),
+		.we(1'b0),
+		.wd(1'b0),
+		.de(hw2reg[60]),
+		.d(hw2reg[61]),
+		.qe(),
+		.q(),
+		.qs(ip_0_p_27_qs)
+	);
+	prim_subreg #(
+		.DW(1),
+		.SWACCESS("RO"),
+		.RESVAL(1'h0)
+	) u_ip_0_p_28(
+		.clk_i(clk_i),
+		.rst_ni(rst_ni),
+		.we(1'b0),
+		.wd(1'b0),
+		.de(hw2reg[62]),
+		.d(hw2reg[63]),
+		.qe(),
+		.q(),
+		.qs(ip_0_p_28_qs)
+	);
+	prim_subreg #(
+		.DW(1),
+		.SWACCESS("RO"),
+		.RESVAL(1'h0)
+	) u_ip_0_p_29(
+		.clk_i(clk_i),
+		.rst_ni(rst_ni),
+		.we(1'b0),
+		.wd(1'b0),
+		.de(hw2reg[64]),
+		.d(hw2reg[65]),
+		.qe(),
+		.q(),
+		.qs(ip_0_p_29_qs)
+	);
+	prim_subreg #(
+		.DW(1),
+		.SWACCESS("RO"),
+		.RESVAL(1'h0)
+	) u_ip_0_p_30(
+		.clk_i(clk_i),
+		.rst_ni(rst_ni),
+		.we(1'b0),
+		.wd(1'b0),
+		.de(hw2reg[66]),
+		.d(hw2reg[67]),
+		.qe(),
+		.q(),
+		.qs(ip_0_p_30_qs)
+	);
+	prim_subreg #(
+		.DW(1),
+		.SWACCESS("RO"),
+		.RESVAL(1'h0)
+	) u_ip_0_p_31(
+		.clk_i(clk_i),
+		.rst_ni(rst_ni),
+		.we(1'b0),
+		.wd(1'b0),
+		.de(hw2reg[68]),
+		.d(hw2reg[69]),
+		.qe(),
+		.q(),
+		.qs(ip_0_p_31_qs)
+	);
+	prim_subreg #(
+		.DW(1),
+		.SWACCESS("RO"),
+		.RESVAL(1'h0)
+	) u_ip_1_p_32(
+		.clk_i(clk_i),
+		.rst_ni(rst_ni),
+		.we(1'b0),
+		.wd(1'b0),
+		.de(hw2reg[70]),
+		.d(hw2reg[71]),
+		.qe(),
+		.q(),
+		.qs(ip_1_p_32_qs)
+	);
+	prim_subreg #(
+		.DW(1),
+		.SWACCESS("RO"),
+		.RESVAL(1'h0)
+	) u_ip_1_p_33(
+		.clk_i(clk_i),
+		.rst_ni(rst_ni),
+		.we(1'b0),
+		.wd(1'b0),
+		.de(hw2reg[72]),
+		.d(hw2reg[73]),
+		.qe(),
+		.q(),
+		.qs(ip_1_p_33_qs)
+	);
+	prim_subreg #(
+		.DW(1),
+		.SWACCESS("RO"),
+		.RESVAL(1'h0)
+	) u_ip_1_p_34(
+		.clk_i(clk_i),
+		.rst_ni(rst_ni),
+		.we(1'b0),
+		.wd(1'b0),
+		.de(hw2reg[74]),
+		.d(hw2reg[75]),
+		.qe(),
+		.q(),
+		.qs(ip_1_p_34_qs)
+	);
+	prim_subreg #(
+		.DW(1),
+		.SWACCESS("RO"),
+		.RESVAL(1'h0)
+	) u_ip_1_p_35(
+		.clk_i(clk_i),
+		.rst_ni(rst_ni),
+		.we(1'b0),
+		.wd(1'b0),
+		.de(hw2reg[76]),
+		.d(hw2reg[77]),
+		.qe(),
+		.q(),
+		.qs(ip_1_p_35_qs)
+	);
+	prim_subreg #(
+		.DW(1),
+		.SWACCESS("RW"),
+		.RESVAL(1'h0)
+	) u_le_0_le_0(
+		.clk_i(clk_i),
+		.rst_ni(rst_ni),
+		.we(le_0_le_0_we),
+		.wd(le_0_le_0_wd),
+		.de(1'b0),
+		.d(1'b0),
+		.qe(),
+		.q(reg2hw[119]),
+		.qs(le_0_le_0_qs)
+	);
+	prim_subreg #(
+		.DW(1),
+		.SWACCESS("RW"),
+		.RESVAL(1'h0)
+	) u_le_0_le_1(
+		.clk_i(clk_i),
+		.rst_ni(rst_ni),
+		.we(le_0_le_1_we),
+		.wd(le_0_le_1_wd),
+		.de(1'b0),
+		.d(1'b0),
+		.qe(),
+		.q(reg2hw[120]),
+		.qs(le_0_le_1_qs)
+	);
+	prim_subreg #(
+		.DW(1),
+		.SWACCESS("RW"),
+		.RESVAL(1'h0)
+	) u_le_0_le_2(
+		.clk_i(clk_i),
+		.rst_ni(rst_ni),
+		.we(le_0_le_2_we),
+		.wd(le_0_le_2_wd),
+		.de(1'b0),
+		.d(1'b0),
+		.qe(),
+		.q(reg2hw[121]),
+		.qs(le_0_le_2_qs)
+	);
+	prim_subreg #(
+		.DW(1),
+		.SWACCESS("RW"),
+		.RESVAL(1'h0)
+	) u_le_0_le_3(
+		.clk_i(clk_i),
+		.rst_ni(rst_ni),
+		.we(le_0_le_3_we),
+		.wd(le_0_le_3_wd),
+		.de(1'b0),
+		.d(1'b0),
+		.qe(),
+		.q(reg2hw[122]),
+		.qs(le_0_le_3_qs)
+	);
+	prim_subreg #(
+		.DW(1),
+		.SWACCESS("RW"),
+		.RESVAL(1'h0)
+	) u_le_0_le_4(
+		.clk_i(clk_i),
+		.rst_ni(rst_ni),
+		.we(le_0_le_4_we),
+		.wd(le_0_le_4_wd),
+		.de(1'b0),
+		.d(1'b0),
+		.qe(),
+		.q(reg2hw[123]),
+		.qs(le_0_le_4_qs)
+	);
+	prim_subreg #(
+		.DW(1),
+		.SWACCESS("RW"),
+		.RESVAL(1'h0)
+	) u_le_0_le_5(
+		.clk_i(clk_i),
+		.rst_ni(rst_ni),
+		.we(le_0_le_5_we),
+		.wd(le_0_le_5_wd),
+		.de(1'b0),
+		.d(1'b0),
+		.qe(),
+		.q(reg2hw[124]),
+		.qs(le_0_le_5_qs)
+	);
+	prim_subreg #(
+		.DW(1),
+		.SWACCESS("RW"),
+		.RESVAL(1'h0)
+	) u_le_0_le_6(
+		.clk_i(clk_i),
+		.rst_ni(rst_ni),
+		.we(le_0_le_6_we),
+		.wd(le_0_le_6_wd),
+		.de(1'b0),
+		.d(1'b0),
+		.qe(),
+		.q(reg2hw[125]),
+		.qs(le_0_le_6_qs)
+	);
+	prim_subreg #(
+		.DW(1),
+		.SWACCESS("RW"),
+		.RESVAL(1'h0)
+	) u_le_0_le_7(
+		.clk_i(clk_i),
+		.rst_ni(rst_ni),
+		.we(le_0_le_7_we),
+		.wd(le_0_le_7_wd),
+		.de(1'b0),
+		.d(1'b0),
+		.qe(),
+		.q(reg2hw[126]),
+		.qs(le_0_le_7_qs)
+	);
+	prim_subreg #(
+		.DW(1),
+		.SWACCESS("RW"),
+		.RESVAL(1'h0)
+	) u_le_0_le_8(
+		.clk_i(clk_i),
+		.rst_ni(rst_ni),
+		.we(le_0_le_8_we),
+		.wd(le_0_le_8_wd),
+		.de(1'b0),
+		.d(1'b0),
+		.qe(),
+		.q(reg2hw[127]),
+		.qs(le_0_le_8_qs)
+	);
+	prim_subreg #(
+		.DW(1),
+		.SWACCESS("RW"),
+		.RESVAL(1'h0)
+	) u_le_0_le_9(
+		.clk_i(clk_i),
+		.rst_ni(rst_ni),
+		.we(le_0_le_9_we),
+		.wd(le_0_le_9_wd),
+		.de(1'b0),
+		.d(1'b0),
+		.qe(),
+		.q(reg2hw[128]),
+		.qs(le_0_le_9_qs)
+	);
+	prim_subreg #(
+		.DW(1),
+		.SWACCESS("RW"),
+		.RESVAL(1'h0)
+	) u_le_0_le_10(
+		.clk_i(clk_i),
+		.rst_ni(rst_ni),
+		.we(le_0_le_10_we),
+		.wd(le_0_le_10_wd),
+		.de(1'b0),
+		.d(1'b0),
+		.qe(),
+		.q(reg2hw[129]),
+		.qs(le_0_le_10_qs)
+	);
+	prim_subreg #(
+		.DW(1),
+		.SWACCESS("RW"),
+		.RESVAL(1'h0)
+	) u_le_0_le_11(
+		.clk_i(clk_i),
+		.rst_ni(rst_ni),
+		.we(le_0_le_11_we),
+		.wd(le_0_le_11_wd),
+		.de(1'b0),
+		.d(1'b0),
+		.qe(),
+		.q(reg2hw[130]),
+		.qs(le_0_le_11_qs)
+	);
+	prim_subreg #(
+		.DW(1),
+		.SWACCESS("RW"),
+		.RESVAL(1'h0)
+	) u_le_0_le_12(
+		.clk_i(clk_i),
+		.rst_ni(rst_ni),
+		.we(le_0_le_12_we),
+		.wd(le_0_le_12_wd),
+		.de(1'b0),
+		.d(1'b0),
+		.qe(),
+		.q(reg2hw[131]),
+		.qs(le_0_le_12_qs)
+	);
+	prim_subreg #(
+		.DW(1),
+		.SWACCESS("RW"),
+		.RESVAL(1'h0)
+	) u_le_0_le_13(
+		.clk_i(clk_i),
+		.rst_ni(rst_ni),
+		.we(le_0_le_13_we),
+		.wd(le_0_le_13_wd),
+		.de(1'b0),
+		.d(1'b0),
+		.qe(),
+		.q(reg2hw[132]),
+		.qs(le_0_le_13_qs)
+	);
+	prim_subreg #(
+		.DW(1),
+		.SWACCESS("RW"),
+		.RESVAL(1'h0)
+	) u_le_0_le_14(
+		.clk_i(clk_i),
+		.rst_ni(rst_ni),
+		.we(le_0_le_14_we),
+		.wd(le_0_le_14_wd),
+		.de(1'b0),
+		.d(1'b0),
+		.qe(),
+		.q(reg2hw[133]),
+		.qs(le_0_le_14_qs)
+	);
+	prim_subreg #(
+		.DW(1),
+		.SWACCESS("RW"),
+		.RESVAL(1'h0)
+	) u_le_0_le_15(
+		.clk_i(clk_i),
+		.rst_ni(rst_ni),
+		.we(le_0_le_15_we),
+		.wd(le_0_le_15_wd),
+		.de(1'b0),
+		.d(1'b0),
+		.qe(),
+		.q(reg2hw[134]),
+		.qs(le_0_le_15_qs)
+	);
+	prim_subreg #(
+		.DW(1),
+		.SWACCESS("RW"),
+		.RESVAL(1'h0)
+	) u_le_0_le_16(
+		.clk_i(clk_i),
+		.rst_ni(rst_ni),
+		.we(le_0_le_16_we),
+		.wd(le_0_le_16_wd),
+		.de(1'b0),
+		.d(1'b0),
+		.qe(),
+		.q(reg2hw[135]),
+		.qs(le_0_le_16_qs)
+	);
+	prim_subreg #(
+		.DW(1),
+		.SWACCESS("RW"),
+		.RESVAL(1'h0)
+	) u_le_0_le_17(
+		.clk_i(clk_i),
+		.rst_ni(rst_ni),
+		.we(le_0_le_17_we),
+		.wd(le_0_le_17_wd),
+		.de(1'b0),
+		.d(1'b0),
+		.qe(),
+		.q(reg2hw[136]),
+		.qs(le_0_le_17_qs)
+	);
+	prim_subreg #(
+		.DW(1),
+		.SWACCESS("RW"),
+		.RESVAL(1'h0)
+	) u_le_0_le_18(
+		.clk_i(clk_i),
+		.rst_ni(rst_ni),
+		.we(le_0_le_18_we),
+		.wd(le_0_le_18_wd),
+		.de(1'b0),
+		.d(1'b0),
+		.qe(),
+		.q(reg2hw[137]),
+		.qs(le_0_le_18_qs)
+	);
+	prim_subreg #(
+		.DW(1),
+		.SWACCESS("RW"),
+		.RESVAL(1'h0)
+	) u_le_0_le_19(
+		.clk_i(clk_i),
+		.rst_ni(rst_ni),
+		.we(le_0_le_19_we),
+		.wd(le_0_le_19_wd),
+		.de(1'b0),
+		.d(1'b0),
+		.qe(),
+		.q(reg2hw[138]),
+		.qs(le_0_le_19_qs)
+	);
+	prim_subreg #(
+		.DW(1),
+		.SWACCESS("RW"),
+		.RESVAL(1'h0)
+	) u_le_0_le_20(
+		.clk_i(clk_i),
+		.rst_ni(rst_ni),
+		.we(le_0_le_20_we),
+		.wd(le_0_le_20_wd),
+		.de(1'b0),
+		.d(1'b0),
+		.qe(),
+		.q(reg2hw[139]),
+		.qs(le_0_le_20_qs)
+	);
+	prim_subreg #(
+		.DW(1),
+		.SWACCESS("RW"),
+		.RESVAL(1'h0)
+	) u_le_0_le_21(
+		.clk_i(clk_i),
+		.rst_ni(rst_ni),
+		.we(le_0_le_21_we),
+		.wd(le_0_le_21_wd),
+		.de(1'b0),
+		.d(1'b0),
+		.qe(),
+		.q(reg2hw[140]),
+		.qs(le_0_le_21_qs)
+	);
+	prim_subreg #(
+		.DW(1),
+		.SWACCESS("RW"),
+		.RESVAL(1'h0)
+	) u_le_0_le_22(
+		.clk_i(clk_i),
+		.rst_ni(rst_ni),
+		.we(le_0_le_22_we),
+		.wd(le_0_le_22_wd),
+		.de(1'b0),
+		.d(1'b0),
+		.qe(),
+		.q(reg2hw[141]),
+		.qs(le_0_le_22_qs)
+	);
+	prim_subreg #(
+		.DW(1),
+		.SWACCESS("RW"),
+		.RESVAL(1'h0)
+	) u_le_0_le_23(
+		.clk_i(clk_i),
+		.rst_ni(rst_ni),
+		.we(le_0_le_23_we),
+		.wd(le_0_le_23_wd),
+		.de(1'b0),
+		.d(1'b0),
+		.qe(),
+		.q(reg2hw[142]),
+		.qs(le_0_le_23_qs)
+	);
+	prim_subreg #(
+		.DW(1),
+		.SWACCESS("RW"),
+		.RESVAL(1'h0)
+	) u_le_0_le_24(
+		.clk_i(clk_i),
+		.rst_ni(rst_ni),
+		.we(le_0_le_24_we),
+		.wd(le_0_le_24_wd),
+		.de(1'b0),
+		.d(1'b0),
+		.qe(),
+		.q(reg2hw[143]),
+		.qs(le_0_le_24_qs)
+	);
+	prim_subreg #(
+		.DW(1),
+		.SWACCESS("RW"),
+		.RESVAL(1'h0)
+	) u_le_0_le_25(
+		.clk_i(clk_i),
+		.rst_ni(rst_ni),
+		.we(le_0_le_25_we),
+		.wd(le_0_le_25_wd),
+		.de(1'b0),
+		.d(1'b0),
+		.qe(),
+		.q(reg2hw[144]),
+		.qs(le_0_le_25_qs)
+	);
+	prim_subreg #(
+		.DW(1),
+		.SWACCESS("RW"),
+		.RESVAL(1'h0)
+	) u_le_0_le_26(
+		.clk_i(clk_i),
+		.rst_ni(rst_ni),
+		.we(le_0_le_26_we),
+		.wd(le_0_le_26_wd),
+		.de(1'b0),
+		.d(1'b0),
+		.qe(),
+		.q(reg2hw[145]),
+		.qs(le_0_le_26_qs)
+	);
+	prim_subreg #(
+		.DW(1),
+		.SWACCESS("RW"),
+		.RESVAL(1'h0)
+	) u_le_0_le_27(
+		.clk_i(clk_i),
+		.rst_ni(rst_ni),
+		.we(le_0_le_27_we),
+		.wd(le_0_le_27_wd),
+		.de(1'b0),
+		.d(1'b0),
+		.qe(),
+		.q(reg2hw[146]),
+		.qs(le_0_le_27_qs)
+	);
+	prim_subreg #(
+		.DW(1),
+		.SWACCESS("RW"),
+		.RESVAL(1'h0)
+	) u_le_0_le_28(
+		.clk_i(clk_i),
+		.rst_ni(rst_ni),
+		.we(le_0_le_28_we),
+		.wd(le_0_le_28_wd),
+		.de(1'b0),
+		.d(1'b0),
+		.qe(),
+		.q(reg2hw[147]),
+		.qs(le_0_le_28_qs)
+	);
+	prim_subreg #(
+		.DW(1),
+		.SWACCESS("RW"),
+		.RESVAL(1'h0)
+	) u_le_0_le_29(
+		.clk_i(clk_i),
+		.rst_ni(rst_ni),
+		.we(le_0_le_29_we),
+		.wd(le_0_le_29_wd),
+		.de(1'b0),
+		.d(1'b0),
+		.qe(),
+		.q(reg2hw[148]),
+		.qs(le_0_le_29_qs)
+	);
+	prim_subreg #(
+		.DW(1),
+		.SWACCESS("RW"),
+		.RESVAL(1'h0)
+	) u_le_0_le_30(
+		.clk_i(clk_i),
+		.rst_ni(rst_ni),
+		.we(le_0_le_30_we),
+		.wd(le_0_le_30_wd),
+		.de(1'b0),
+		.d(1'b0),
+		.qe(),
+		.q(reg2hw[149]),
+		.qs(le_0_le_30_qs)
+	);
+	prim_subreg #(
+		.DW(1),
+		.SWACCESS("RW"),
+		.RESVAL(1'h0)
+	) u_le_0_le_31(
+		.clk_i(clk_i),
+		.rst_ni(rst_ni),
+		.we(le_0_le_31_we),
+		.wd(le_0_le_31_wd),
+		.de(1'b0),
+		.d(1'b0),
+		.qe(),
+		.q(reg2hw[150]),
+		.qs(le_0_le_31_qs)
+	);
+	prim_subreg #(
+		.DW(1),
+		.SWACCESS("RW"),
+		.RESVAL(1'h0)
+	) u_le_1_le_32(
+		.clk_i(clk_i),
+		.rst_ni(rst_ni),
+		.we(le_1_le_32_we),
+		.wd(le_1_le_32_wd),
+		.de(1'b0),
+		.d(1'b0),
+		.qe(),
+		.q(reg2hw[151]),
+		.qs(le_1_le_32_qs)
+	);
+	prim_subreg #(
+		.DW(1),
+		.SWACCESS("RW"),
+		.RESVAL(1'h0)
+	) u_le_1_le_33(
+		.clk_i(clk_i),
+		.rst_ni(rst_ni),
+		.we(le_1_le_33_we),
+		.wd(le_1_le_33_wd),
+		.de(1'b0),
+		.d(1'b0),
+		.qe(),
+		.q(reg2hw[152]),
+		.qs(le_1_le_33_qs)
+	);
+	prim_subreg #(
+		.DW(1),
+		.SWACCESS("RW"),
+		.RESVAL(1'h0)
+	) u_le_1_le_34(
+		.clk_i(clk_i),
+		.rst_ni(rst_ni),
+		.we(le_1_le_34_we),
+		.wd(le_1_le_34_wd),
+		.de(1'b0),
+		.d(1'b0),
+		.qe(),
+		.q(reg2hw[153]),
+		.qs(le_1_le_34_qs)
+	);
+	prim_subreg #(
+		.DW(1),
+		.SWACCESS("RW"),
+		.RESVAL(1'h0)
+	) u_le_1_le_35(
+		.clk_i(clk_i),
+		.rst_ni(rst_ni),
+		.we(le_1_le_35_we),
+		.wd(le_1_le_35_wd),
+		.de(1'b0),
+		.d(1'b0),
+		.qe(),
+		.q(reg2hw[154]),
+		.qs(le_1_le_35_qs)
+	);
+	prim_subreg #(
+		.DW(2),
+		.SWACCESS("RW"),
+		.RESVAL(2'h0)
+	) u_prio0(
+		.clk_i(clk_i),
+		.rst_ni(rst_ni),
+		.we(prio0_we),
+		.wd(prio0_wd),
+		.de(1'b0),
+		.d({2 {1'sb0}}),
+		.qe(),
+		.q(reg2hw[118-:2]),
+		.qs(prio0_qs)
+	);
+	prim_subreg #(
+		.DW(2),
+		.SWACCESS("RW"),
+		.RESVAL(2'h0)
+	) u_prio1(
+		.clk_i(clk_i),
+		.rst_ni(rst_ni),
+		.we(prio1_we),
+		.wd(prio1_wd),
+		.de(1'b0),
+		.d({2 {1'sb0}}),
+		.qe(),
+		.q(reg2hw[116-:2]),
+		.qs(prio1_qs)
+	);
+	prim_subreg #(
+		.DW(2),
+		.SWACCESS("RW"),
+		.RESVAL(2'h0)
+	) u_prio2(
+		.clk_i(clk_i),
+		.rst_ni(rst_ni),
+		.we(prio2_we),
+		.wd(prio2_wd),
+		.de(1'b0),
+		.d({2 {1'sb0}}),
+		.qe(),
+		.q(reg2hw[114-:2]),
+		.qs(prio2_qs)
+	);
+	prim_subreg #(
+		.DW(2),
+		.SWACCESS("RW"),
+		.RESVAL(2'h0)
+	) u_prio3(
+		.clk_i(clk_i),
+		.rst_ni(rst_ni),
+		.we(prio3_we),
+		.wd(prio3_wd),
+		.de(1'b0),
+		.d({2 {1'sb0}}),
+		.qe(),
+		.q(reg2hw[112-:2]),
+		.qs(prio3_qs)
+	);
+	prim_subreg #(
+		.DW(2),
+		.SWACCESS("RW"),
+		.RESVAL(2'h0)
+	) u_prio4(
+		.clk_i(clk_i),
+		.rst_ni(rst_ni),
+		.we(prio4_we),
+		.wd(prio4_wd),
+		.de(1'b0),
+		.d({2 {1'sb0}}),
+		.qe(),
+		.q(reg2hw[110-:2]),
+		.qs(prio4_qs)
+	);
+	prim_subreg #(
+		.DW(2),
+		.SWACCESS("RW"),
+		.RESVAL(2'h0)
+	) u_prio5(
+		.clk_i(clk_i),
+		.rst_ni(rst_ni),
+		.we(prio5_we),
+		.wd(prio5_wd),
+		.de(1'b0),
+		.d({2 {1'sb0}}),
+		.qe(),
+		.q(reg2hw[108-:2]),
+		.qs(prio5_qs)
+	);
+	prim_subreg #(
+		.DW(2),
+		.SWACCESS("RW"),
+		.RESVAL(2'h0)
+	) u_prio6(
+		.clk_i(clk_i),
+		.rst_ni(rst_ni),
+		.we(prio6_we),
+		.wd(prio6_wd),
+		.de(1'b0),
+		.d({2 {1'sb0}}),
+		.qe(),
+		.q(reg2hw[106-:2]),
+		.qs(prio6_qs)
+	);
+	prim_subreg #(
+		.DW(2),
+		.SWACCESS("RW"),
+		.RESVAL(2'h0)
+	) u_prio7(
+		.clk_i(clk_i),
+		.rst_ni(rst_ni),
+		.we(prio7_we),
+		.wd(prio7_wd),
+		.de(1'b0),
+		.d({2 {1'sb0}}),
+		.qe(),
+		.q(reg2hw[104-:2]),
+		.qs(prio7_qs)
+	);
+	prim_subreg #(
+		.DW(2),
+		.SWACCESS("RW"),
+		.RESVAL(2'h0)
+	) u_prio8(
+		.clk_i(clk_i),
+		.rst_ni(rst_ni),
+		.we(prio8_we),
+		.wd(prio8_wd),
+		.de(1'b0),
+		.d({2 {1'sb0}}),
+		.qe(),
+		.q(reg2hw[102-:2]),
+		.qs(prio8_qs)
+	);
+	prim_subreg #(
+		.DW(2),
+		.SWACCESS("RW"),
+		.RESVAL(2'h0)
+	) u_prio9(
+		.clk_i(clk_i),
+		.rst_ni(rst_ni),
+		.we(prio9_we),
+		.wd(prio9_wd),
+		.de(1'b0),
+		.d({2 {1'sb0}}),
+		.qe(),
+		.q(reg2hw[100-:2]),
+		.qs(prio9_qs)
+	);
+	prim_subreg #(
+		.DW(2),
+		.SWACCESS("RW"),
+		.RESVAL(2'h0)
+	) u_prio10(
+		.clk_i(clk_i),
+		.rst_ni(rst_ni),
+		.we(prio10_we),
+		.wd(prio10_wd),
+		.de(1'b0),
+		.d({2 {1'sb0}}),
+		.qe(),
+		.q(reg2hw[98-:2]),
+		.qs(prio10_qs)
+	);
+	prim_subreg #(
+		.DW(2),
+		.SWACCESS("RW"),
+		.RESVAL(2'h0)
+	) u_prio11(
+		.clk_i(clk_i),
+		.rst_ni(rst_ni),
+		.we(prio11_we),
+		.wd(prio11_wd),
+		.de(1'b0),
+		.d({2 {1'sb0}}),
+		.qe(),
+		.q(reg2hw[96-:2]),
+		.qs(prio11_qs)
+	);
+	prim_subreg #(
+		.DW(2),
+		.SWACCESS("RW"),
+		.RESVAL(2'h0)
+	) u_prio12(
+		.clk_i(clk_i),
+		.rst_ni(rst_ni),
+		.we(prio12_we),
+		.wd(prio12_wd),
+		.de(1'b0),
+		.d({2 {1'sb0}}),
+		.qe(),
+		.q(reg2hw[94-:2]),
+		.qs(prio12_qs)
+	);
+	prim_subreg #(
+		.DW(2),
+		.SWACCESS("RW"),
+		.RESVAL(2'h0)
+	) u_prio13(
+		.clk_i(clk_i),
+		.rst_ni(rst_ni),
+		.we(prio13_we),
+		.wd(prio13_wd),
+		.de(1'b0),
+		.d({2 {1'sb0}}),
+		.qe(),
+		.q(reg2hw[92-:2]),
+		.qs(prio13_qs)
+	);
+	prim_subreg #(
+		.DW(2),
+		.SWACCESS("RW"),
+		.RESVAL(2'h0)
+	) u_prio14(
+		.clk_i(clk_i),
+		.rst_ni(rst_ni),
+		.we(prio14_we),
+		.wd(prio14_wd),
+		.de(1'b0),
+		.d({2 {1'sb0}}),
+		.qe(),
+		.q(reg2hw[90-:2]),
+		.qs(prio14_qs)
+	);
+	prim_subreg #(
+		.DW(2),
+		.SWACCESS("RW"),
+		.RESVAL(2'h0)
+	) u_prio15(
+		.clk_i(clk_i),
+		.rst_ni(rst_ni),
+		.we(prio15_we),
+		.wd(prio15_wd),
+		.de(1'b0),
+		.d({2 {1'sb0}}),
+		.qe(),
+		.q(reg2hw[88-:2]),
+		.qs(prio15_qs)
+	);
+	prim_subreg #(
+		.DW(2),
+		.SWACCESS("RW"),
+		.RESVAL(2'h0)
+	) u_prio16(
+		.clk_i(clk_i),
+		.rst_ni(rst_ni),
+		.we(prio16_we),
+		.wd(prio16_wd),
+		.de(1'b0),
+		.d({2 {1'sb0}}),
+		.qe(),
+		.q(reg2hw[86-:2]),
+		.qs(prio16_qs)
+	);
+	prim_subreg #(
+		.DW(2),
+		.SWACCESS("RW"),
+		.RESVAL(2'h0)
+	) u_prio17(
+		.clk_i(clk_i),
+		.rst_ni(rst_ni),
+		.we(prio17_we),
+		.wd(prio17_wd),
+		.de(1'b0),
+		.d({2 {1'sb0}}),
+		.qe(),
+		.q(reg2hw[84-:2]),
+		.qs(prio17_qs)
+	);
+	prim_subreg #(
+		.DW(2),
+		.SWACCESS("RW"),
+		.RESVAL(2'h0)
+	) u_prio18(
+		.clk_i(clk_i),
+		.rst_ni(rst_ni),
+		.we(prio18_we),
+		.wd(prio18_wd),
+		.de(1'b0),
+		.d({2 {1'sb0}}),
+		.qe(),
+		.q(reg2hw[82-:2]),
+		.qs(prio18_qs)
+	);
+	prim_subreg #(
+		.DW(2),
+		.SWACCESS("RW"),
+		.RESVAL(2'h0)
+	) u_prio19(
+		.clk_i(clk_i),
+		.rst_ni(rst_ni),
+		.we(prio19_we),
+		.wd(prio19_wd),
+		.de(1'b0),
+		.d({2 {1'sb0}}),
+		.qe(),
+		.q(reg2hw[80-:2]),
+		.qs(prio19_qs)
+	);
+	prim_subreg #(
+		.DW(2),
+		.SWACCESS("RW"),
+		.RESVAL(2'h0)
+	) u_prio20(
+		.clk_i(clk_i),
+		.rst_ni(rst_ni),
+		.we(prio20_we),
+		.wd(prio20_wd),
+		.de(1'b0),
+		.d({2 {1'sb0}}),
+		.qe(),
+		.q(reg2hw[78-:2]),
+		.qs(prio20_qs)
+	);
+	prim_subreg #(
+		.DW(2),
+		.SWACCESS("RW"),
+		.RESVAL(2'h0)
+	) u_prio21(
+		.clk_i(clk_i),
+		.rst_ni(rst_ni),
+		.we(prio21_we),
+		.wd(prio21_wd),
+		.de(1'b0),
+		.d({2 {1'sb0}}),
+		.qe(),
+		.q(reg2hw[76-:2]),
+		.qs(prio21_qs)
+	);
+	prim_subreg #(
+		.DW(2),
+		.SWACCESS("RW"),
+		.RESVAL(2'h0)
+	) u_prio22(
+		.clk_i(clk_i),
+		.rst_ni(rst_ni),
+		.we(prio22_we),
+		.wd(prio22_wd),
+		.de(1'b0),
+		.d({2 {1'sb0}}),
+		.qe(),
+		.q(reg2hw[74-:2]),
+		.qs(prio22_qs)
+	);
+	prim_subreg #(
+		.DW(2),
+		.SWACCESS("RW"),
+		.RESVAL(2'h0)
+	) u_prio23(
+		.clk_i(clk_i),
+		.rst_ni(rst_ni),
+		.we(prio23_we),
+		.wd(prio23_wd),
+		.de(1'b0),
+		.d({2 {1'sb0}}),
+		.qe(),
+		.q(reg2hw[72-:2]),
+		.qs(prio23_qs)
+	);
+	prim_subreg #(
+		.DW(2),
+		.SWACCESS("RW"),
+		.RESVAL(2'h0)
+	) u_prio24(
+		.clk_i(clk_i),
+		.rst_ni(rst_ni),
+		.we(prio24_we),
+		.wd(prio24_wd),
+		.de(1'b0),
+		.d({2 {1'sb0}}),
+		.qe(),
+		.q(reg2hw[70-:2]),
+		.qs(prio24_qs)
+	);
+	prim_subreg #(
+		.DW(2),
+		.SWACCESS("RW"),
+		.RESVAL(2'h0)
+	) u_prio25(
+		.clk_i(clk_i),
+		.rst_ni(rst_ni),
+		.we(prio25_we),
+		.wd(prio25_wd),
+		.de(1'b0),
+		.d({2 {1'sb0}}),
+		.qe(),
+		.q(reg2hw[68-:2]),
+		.qs(prio25_qs)
+	);
+	prim_subreg #(
+		.DW(2),
+		.SWACCESS("RW"),
+		.RESVAL(2'h0)
+	) u_prio26(
+		.clk_i(clk_i),
+		.rst_ni(rst_ni),
+		.we(prio26_we),
+		.wd(prio26_wd),
+		.de(1'b0),
+		.d({2 {1'sb0}}),
+		.qe(),
+		.q(reg2hw[66-:2]),
+		.qs(prio26_qs)
+	);
+	prim_subreg #(
+		.DW(2),
+		.SWACCESS("RW"),
+		.RESVAL(2'h0)
+	) u_prio27(
+		.clk_i(clk_i),
+		.rst_ni(rst_ni),
+		.we(prio27_we),
+		.wd(prio27_wd),
+		.de(1'b0),
+		.d({2 {1'sb0}}),
+		.qe(),
+		.q(reg2hw[64-:2]),
+		.qs(prio27_qs)
+	);
+	prim_subreg #(
+		.DW(2),
+		.SWACCESS("RW"),
+		.RESVAL(2'h0)
+	) u_prio28(
+		.clk_i(clk_i),
+		.rst_ni(rst_ni),
+		.we(prio28_we),
+		.wd(prio28_wd),
+		.de(1'b0),
+		.d({2 {1'sb0}}),
+		.qe(),
+		.q(reg2hw[62-:2]),
+		.qs(prio28_qs)
+	);
+	prim_subreg #(
+		.DW(2),
+		.SWACCESS("RW"),
+		.RESVAL(2'h0)
+	) u_prio29(
+		.clk_i(clk_i),
+		.rst_ni(rst_ni),
+		.we(prio29_we),
+		.wd(prio29_wd),
+		.de(1'b0),
+		.d({2 {1'sb0}}),
+		.qe(),
+		.q(reg2hw[60-:2]),
+		.qs(prio29_qs)
+	);
+	prim_subreg #(
+		.DW(2),
+		.SWACCESS("RW"),
+		.RESVAL(2'h0)
+	) u_prio30(
+		.clk_i(clk_i),
+		.rst_ni(rst_ni),
+		.we(prio30_we),
+		.wd(prio30_wd),
+		.de(1'b0),
+		.d({2 {1'sb0}}),
+		.qe(),
+		.q(reg2hw[58-:2]),
+		.qs(prio30_qs)
+	);
+	prim_subreg #(
+		.DW(2),
+		.SWACCESS("RW"),
+		.RESVAL(2'h0)
+	) u_prio31(
+		.clk_i(clk_i),
+		.rst_ni(rst_ni),
+		.we(prio31_we),
+		.wd(prio31_wd),
+		.de(1'b0),
+		.d({2 {1'sb0}}),
+		.qe(),
+		.q(reg2hw[56-:2]),
+		.qs(prio31_qs)
+	);
+	prim_subreg #(
+		.DW(2),
+		.SWACCESS("RW"),
+		.RESVAL(2'h0)
+	) u_prio32(
+		.clk_i(clk_i),
+		.rst_ni(rst_ni),
+		.we(prio32_we),
+		.wd(prio32_wd),
+		.de(1'b0),
+		.d({2 {1'sb0}}),
+		.qe(),
+		.q(reg2hw[54-:2]),
+		.qs(prio32_qs)
+	);
+	prim_subreg #(
+		.DW(2),
+		.SWACCESS("RW"),
+		.RESVAL(2'h0)
+	) u_prio33(
+		.clk_i(clk_i),
+		.rst_ni(rst_ni),
+		.we(prio33_we),
+		.wd(prio33_wd),
+		.de(1'b0),
+		.d({2 {1'sb0}}),
+		.qe(),
+		.q(reg2hw[52-:2]),
+		.qs(prio33_qs)
+	);
+	prim_subreg #(
+		.DW(2),
+		.SWACCESS("RW"),
+		.RESVAL(2'h0)
+	) u_prio34(
+		.clk_i(clk_i),
+		.rst_ni(rst_ni),
+		.we(prio34_we),
+		.wd(prio34_wd),
+		.de(1'b0),
+		.d({2 {1'sb0}}),
+		.qe(),
+		.q(reg2hw[50-:2]),
+		.qs(prio34_qs)
+	);
+	prim_subreg #(
+		.DW(2),
+		.SWACCESS("RW"),
+		.RESVAL(2'h0)
+	) u_prio35(
+		.clk_i(clk_i),
+		.rst_ni(rst_ni),
+		.we(prio35_we),
+		.wd(prio35_wd),
+		.de(1'b0),
+		.d({2 {1'sb0}}),
+		.qe(),
+		.q(reg2hw[48-:2]),
+		.qs(prio35_qs)
+	);
+	prim_subreg #(
+		.DW(1),
+		.SWACCESS("RW"),
+		.RESVAL(1'h0)
+	) u_ie0_0_e_0(
+		.clk_i(clk_i),
+		.rst_ni(rst_ni),
+		.we(ie0_0_e_0_we),
+		.wd(ie0_0_e_0_wd),
+		.de(1'b0),
+		.d(1'b0),
+		.qe(),
+		.q(reg2hw[11]),
+		.qs(ie0_0_e_0_qs)
+	);
+	prim_subreg #(
+		.DW(1),
+		.SWACCESS("RW"),
+		.RESVAL(1'h0)
+	) u_ie0_0_e_1(
+		.clk_i(clk_i),
+		.rst_ni(rst_ni),
+		.we(ie0_0_e_1_we),
+		.wd(ie0_0_e_1_wd),
+		.de(1'b0),
+		.d(1'b0),
+		.qe(),
+		.q(reg2hw[12]),
+		.qs(ie0_0_e_1_qs)
+	);
+	prim_subreg #(
+		.DW(1),
+		.SWACCESS("RW"),
+		.RESVAL(1'h0)
+	) u_ie0_0_e_2(
+		.clk_i(clk_i),
+		.rst_ni(rst_ni),
+		.we(ie0_0_e_2_we),
+		.wd(ie0_0_e_2_wd),
+		.de(1'b0),
+		.d(1'b0),
+		.qe(),
+		.q(reg2hw[13]),
+		.qs(ie0_0_e_2_qs)
+	);
+	prim_subreg #(
+		.DW(1),
+		.SWACCESS("RW"),
+		.RESVAL(1'h0)
+	) u_ie0_0_e_3(
+		.clk_i(clk_i),
+		.rst_ni(rst_ni),
+		.we(ie0_0_e_3_we),
+		.wd(ie0_0_e_3_wd),
+		.de(1'b0),
+		.d(1'b0),
+		.qe(),
+		.q(reg2hw[14]),
+		.qs(ie0_0_e_3_qs)
+	);
+	prim_subreg #(
+		.DW(1),
+		.SWACCESS("RW"),
+		.RESVAL(1'h0)
+	) u_ie0_0_e_4(
+		.clk_i(clk_i),
+		.rst_ni(rst_ni),
+		.we(ie0_0_e_4_we),
+		.wd(ie0_0_e_4_wd),
+		.de(1'b0),
+		.d(1'b0),
+		.qe(),
+		.q(reg2hw[15]),
+		.qs(ie0_0_e_4_qs)
+	);
+	prim_subreg #(
+		.DW(1),
+		.SWACCESS("RW"),
+		.RESVAL(1'h0)
+	) u_ie0_0_e_5(
+		.clk_i(clk_i),
+		.rst_ni(rst_ni),
+		.we(ie0_0_e_5_we),
+		.wd(ie0_0_e_5_wd),
+		.de(1'b0),
+		.d(1'b0),
+		.qe(),
+		.q(reg2hw[16]),
+		.qs(ie0_0_e_5_qs)
+	);
+	prim_subreg #(
+		.DW(1),
+		.SWACCESS("RW"),
+		.RESVAL(1'h0)
+	) u_ie0_0_e_6(
+		.clk_i(clk_i),
+		.rst_ni(rst_ni),
+		.we(ie0_0_e_6_we),
+		.wd(ie0_0_e_6_wd),
+		.de(1'b0),
+		.d(1'b0),
+		.qe(),
+		.q(reg2hw[17]),
+		.qs(ie0_0_e_6_qs)
+	);
+	prim_subreg #(
+		.DW(1),
+		.SWACCESS("RW"),
+		.RESVAL(1'h0)
+	) u_ie0_0_e_7(
+		.clk_i(clk_i),
+		.rst_ni(rst_ni),
+		.we(ie0_0_e_7_we),
+		.wd(ie0_0_e_7_wd),
+		.de(1'b0),
+		.d(1'b0),
+		.qe(),
+		.q(reg2hw[18]),
+		.qs(ie0_0_e_7_qs)
+	);
+	prim_subreg #(
+		.DW(1),
+		.SWACCESS("RW"),
+		.RESVAL(1'h0)
+	) u_ie0_0_e_8(
+		.clk_i(clk_i),
+		.rst_ni(rst_ni),
+		.we(ie0_0_e_8_we),
+		.wd(ie0_0_e_8_wd),
+		.de(1'b0),
+		.d(1'b0),
+		.qe(),
+		.q(reg2hw[19]),
+		.qs(ie0_0_e_8_qs)
+	);
+	prim_subreg #(
+		.DW(1),
+		.SWACCESS("RW"),
+		.RESVAL(1'h0)
+	) u_ie0_0_e_9(
+		.clk_i(clk_i),
+		.rst_ni(rst_ni),
+		.we(ie0_0_e_9_we),
+		.wd(ie0_0_e_9_wd),
+		.de(1'b0),
+		.d(1'b0),
+		.qe(),
+		.q(reg2hw[20]),
+		.qs(ie0_0_e_9_qs)
+	);
+	prim_subreg #(
+		.DW(1),
+		.SWACCESS("RW"),
+		.RESVAL(1'h0)
+	) u_ie0_0_e_10(
+		.clk_i(clk_i),
+		.rst_ni(rst_ni),
+		.we(ie0_0_e_10_we),
+		.wd(ie0_0_e_10_wd),
+		.de(1'b0),
+		.d(1'b0),
+		.qe(),
+		.q(reg2hw[21]),
+		.qs(ie0_0_e_10_qs)
+	);
+	prim_subreg #(
+		.DW(1),
+		.SWACCESS("RW"),
+		.RESVAL(1'h0)
+	) u_ie0_0_e_11(
+		.clk_i(clk_i),
+		.rst_ni(rst_ni),
+		.we(ie0_0_e_11_we),
+		.wd(ie0_0_e_11_wd),
+		.de(1'b0),
+		.d(1'b0),
+		.qe(),
+		.q(reg2hw[22]),
+		.qs(ie0_0_e_11_qs)
+	);
+	prim_subreg #(
+		.DW(1),
+		.SWACCESS("RW"),
+		.RESVAL(1'h0)
+	) u_ie0_0_e_12(
+		.clk_i(clk_i),
+		.rst_ni(rst_ni),
+		.we(ie0_0_e_12_we),
+		.wd(ie0_0_e_12_wd),
+		.de(1'b0),
+		.d(1'b0),
+		.qe(),
+		.q(reg2hw[23]),
+		.qs(ie0_0_e_12_qs)
+	);
+	prim_subreg #(
+		.DW(1),
+		.SWACCESS("RW"),
+		.RESVAL(1'h0)
+	) u_ie0_0_e_13(
+		.clk_i(clk_i),
+		.rst_ni(rst_ni),
+		.we(ie0_0_e_13_we),
+		.wd(ie0_0_e_13_wd),
+		.de(1'b0),
+		.d(1'b0),
+		.qe(),
+		.q(reg2hw[24]),
+		.qs(ie0_0_e_13_qs)
+	);
+	prim_subreg #(
+		.DW(1),
+		.SWACCESS("RW"),
+		.RESVAL(1'h0)
+	) u_ie0_0_e_14(
+		.clk_i(clk_i),
+		.rst_ni(rst_ni),
+		.we(ie0_0_e_14_we),
+		.wd(ie0_0_e_14_wd),
+		.de(1'b0),
+		.d(1'b0),
+		.qe(),
+		.q(reg2hw[25]),
+		.qs(ie0_0_e_14_qs)
+	);
+	prim_subreg #(
+		.DW(1),
+		.SWACCESS("RW"),
+		.RESVAL(1'h0)
+	) u_ie0_0_e_15(
+		.clk_i(clk_i),
+		.rst_ni(rst_ni),
+		.we(ie0_0_e_15_we),
+		.wd(ie0_0_e_15_wd),
+		.de(1'b0),
+		.d(1'b0),
+		.qe(),
+		.q(reg2hw[26]),
+		.qs(ie0_0_e_15_qs)
+	);
+	prim_subreg #(
+		.DW(1),
+		.SWACCESS("RW"),
+		.RESVAL(1'h0)
+	) u_ie0_0_e_16(
+		.clk_i(clk_i),
+		.rst_ni(rst_ni),
+		.we(ie0_0_e_16_we),
+		.wd(ie0_0_e_16_wd),
+		.de(1'b0),
+		.d(1'b0),
+		.qe(),
+		.q(reg2hw[27]),
+		.qs(ie0_0_e_16_qs)
+	);
+	prim_subreg #(
+		.DW(1),
+		.SWACCESS("RW"),
+		.RESVAL(1'h0)
+	) u_ie0_0_e_17(
+		.clk_i(clk_i),
+		.rst_ni(rst_ni),
+		.we(ie0_0_e_17_we),
+		.wd(ie0_0_e_17_wd),
+		.de(1'b0),
+		.d(1'b0),
+		.qe(),
+		.q(reg2hw[28]),
+		.qs(ie0_0_e_17_qs)
+	);
+	prim_subreg #(
+		.DW(1),
+		.SWACCESS("RW"),
+		.RESVAL(1'h0)
+	) u_ie0_0_e_18(
+		.clk_i(clk_i),
+		.rst_ni(rst_ni),
+		.we(ie0_0_e_18_we),
+		.wd(ie0_0_e_18_wd),
+		.de(1'b0),
+		.d(1'b0),
+		.qe(),
+		.q(reg2hw[29]),
+		.qs(ie0_0_e_18_qs)
+	);
+	prim_subreg #(
+		.DW(1),
+		.SWACCESS("RW"),
+		.RESVAL(1'h0)
+	) u_ie0_0_e_19(
+		.clk_i(clk_i),
+		.rst_ni(rst_ni),
+		.we(ie0_0_e_19_we),
+		.wd(ie0_0_e_19_wd),
+		.de(1'b0),
+		.d(1'b0),
+		.qe(),
+		.q(reg2hw[30]),
+		.qs(ie0_0_e_19_qs)
+	);
+	prim_subreg #(
+		.DW(1),
+		.SWACCESS("RW"),
+		.RESVAL(1'h0)
+	) u_ie0_0_e_20(
+		.clk_i(clk_i),
+		.rst_ni(rst_ni),
+		.we(ie0_0_e_20_we),
+		.wd(ie0_0_e_20_wd),
+		.de(1'b0),
+		.d(1'b0),
+		.qe(),
+		.q(reg2hw[31]),
+		.qs(ie0_0_e_20_qs)
+	);
+	prim_subreg #(
+		.DW(1),
+		.SWACCESS("RW"),
+		.RESVAL(1'h0)
+	) u_ie0_0_e_21(
+		.clk_i(clk_i),
+		.rst_ni(rst_ni),
+		.we(ie0_0_e_21_we),
+		.wd(ie0_0_e_21_wd),
+		.de(1'b0),
+		.d(1'b0),
+		.qe(),
+		.q(reg2hw[32]),
+		.qs(ie0_0_e_21_qs)
+	);
+	prim_subreg #(
+		.DW(1),
+		.SWACCESS("RW"),
+		.RESVAL(1'h0)
+	) u_ie0_0_e_22(
+		.clk_i(clk_i),
+		.rst_ni(rst_ni),
+		.we(ie0_0_e_22_we),
+		.wd(ie0_0_e_22_wd),
+		.de(1'b0),
+		.d(1'b0),
+		.qe(),
+		.q(reg2hw[33]),
+		.qs(ie0_0_e_22_qs)
+	);
+	prim_subreg #(
+		.DW(1),
+		.SWACCESS("RW"),
+		.RESVAL(1'h0)
+	) u_ie0_0_e_23(
+		.clk_i(clk_i),
+		.rst_ni(rst_ni),
+		.we(ie0_0_e_23_we),
+		.wd(ie0_0_e_23_wd),
+		.de(1'b0),
+		.d(1'b0),
+		.qe(),
+		.q(reg2hw[34]),
+		.qs(ie0_0_e_23_qs)
+	);
+	prim_subreg #(
+		.DW(1),
+		.SWACCESS("RW"),
+		.RESVAL(1'h0)
+	) u_ie0_0_e_24(
+		.clk_i(clk_i),
+		.rst_ni(rst_ni),
+		.we(ie0_0_e_24_we),
+		.wd(ie0_0_e_24_wd),
+		.de(1'b0),
+		.d(1'b0),
+		.qe(),
+		.q(reg2hw[35]),
+		.qs(ie0_0_e_24_qs)
+	);
+	prim_subreg #(
+		.DW(1),
+		.SWACCESS("RW"),
+		.RESVAL(1'h0)
+	) u_ie0_0_e_25(
+		.clk_i(clk_i),
+		.rst_ni(rst_ni),
+		.we(ie0_0_e_25_we),
+		.wd(ie0_0_e_25_wd),
+		.de(1'b0),
+		.d(1'b0),
+		.qe(),
+		.q(reg2hw[36]),
+		.qs(ie0_0_e_25_qs)
+	);
+	prim_subreg #(
+		.DW(1),
+		.SWACCESS("RW"),
+		.RESVAL(1'h0)
+	) u_ie0_0_e_26(
+		.clk_i(clk_i),
+		.rst_ni(rst_ni),
+		.we(ie0_0_e_26_we),
+		.wd(ie0_0_e_26_wd),
+		.de(1'b0),
+		.d(1'b0),
+		.qe(),
+		.q(reg2hw[37]),
+		.qs(ie0_0_e_26_qs)
+	);
+	prim_subreg #(
+		.DW(1),
+		.SWACCESS("RW"),
+		.RESVAL(1'h0)
+	) u_ie0_0_e_27(
+		.clk_i(clk_i),
+		.rst_ni(rst_ni),
+		.we(ie0_0_e_27_we),
+		.wd(ie0_0_e_27_wd),
+		.de(1'b0),
+		.d(1'b0),
+		.qe(),
+		.q(reg2hw[38]),
+		.qs(ie0_0_e_27_qs)
+	);
+	prim_subreg #(
+		.DW(1),
+		.SWACCESS("RW"),
+		.RESVAL(1'h0)
+	) u_ie0_0_e_28(
+		.clk_i(clk_i),
+		.rst_ni(rst_ni),
+		.we(ie0_0_e_28_we),
+		.wd(ie0_0_e_28_wd),
+		.de(1'b0),
+		.d(1'b0),
+		.qe(),
+		.q(reg2hw[39]),
+		.qs(ie0_0_e_28_qs)
+	);
+	prim_subreg #(
+		.DW(1),
+		.SWACCESS("RW"),
+		.RESVAL(1'h0)
+	) u_ie0_0_e_29(
+		.clk_i(clk_i),
+		.rst_ni(rst_ni),
+		.we(ie0_0_e_29_we),
+		.wd(ie0_0_e_29_wd),
+		.de(1'b0),
+		.d(1'b0),
+		.qe(),
+		.q(reg2hw[40]),
+		.qs(ie0_0_e_29_qs)
+	);
+	prim_subreg #(
+		.DW(1),
+		.SWACCESS("RW"),
+		.RESVAL(1'h0)
+	) u_ie0_0_e_30(
+		.clk_i(clk_i),
+		.rst_ni(rst_ni),
+		.we(ie0_0_e_30_we),
+		.wd(ie0_0_e_30_wd),
+		.de(1'b0),
+		.d(1'b0),
+		.qe(),
+		.q(reg2hw[41]),
+		.qs(ie0_0_e_30_qs)
+	);
+	prim_subreg #(
+		.DW(1),
+		.SWACCESS("RW"),
+		.RESVAL(1'h0)
+	) u_ie0_0_e_31(
+		.clk_i(clk_i),
+		.rst_ni(rst_ni),
+		.we(ie0_0_e_31_we),
+		.wd(ie0_0_e_31_wd),
+		.de(1'b0),
+		.d(1'b0),
+		.qe(),
+		.q(reg2hw[42]),
+		.qs(ie0_0_e_31_qs)
+	);
+	prim_subreg #(
+		.DW(1),
+		.SWACCESS("RW"),
+		.RESVAL(1'h0)
+	) u_ie0_1_e_32(
+		.clk_i(clk_i),
+		.rst_ni(rst_ni),
+		.we(ie0_1_e_32_we),
+		.wd(ie0_1_e_32_wd),
+		.de(1'b0),
+		.d(1'b0),
+		.qe(),
+		.q(reg2hw[43]),
+		.qs(ie0_1_e_32_qs)
+	);
+	prim_subreg #(
+		.DW(1),
+		.SWACCESS("RW"),
+		.RESVAL(1'h0)
+	) u_ie0_1_e_33(
+		.clk_i(clk_i),
+		.rst_ni(rst_ni),
+		.we(ie0_1_e_33_we),
+		.wd(ie0_1_e_33_wd),
+		.de(1'b0),
+		.d(1'b0),
+		.qe(),
+		.q(reg2hw[44]),
+		.qs(ie0_1_e_33_qs)
+	);
+	prim_subreg #(
+		.DW(1),
+		.SWACCESS("RW"),
+		.RESVAL(1'h0)
+	) u_ie0_1_e_34(
+		.clk_i(clk_i),
+		.rst_ni(rst_ni),
+		.we(ie0_1_e_34_we),
+		.wd(ie0_1_e_34_wd),
+		.de(1'b0),
+		.d(1'b0),
+		.qe(),
+		.q(reg2hw[45]),
+		.qs(ie0_1_e_34_qs)
+	);
+	prim_subreg #(
+		.DW(1),
+		.SWACCESS("RW"),
+		.RESVAL(1'h0)
+	) u_ie0_1_e_35(
+		.clk_i(clk_i),
+		.rst_ni(rst_ni),
+		.we(ie0_1_e_35_we),
+		.wd(ie0_1_e_35_wd),
+		.de(1'b0),
+		.d(1'b0),
+		.qe(),
+		.q(reg2hw[46]),
+		.qs(ie0_1_e_35_qs)
+	);
+	prim_subreg #(
+		.DW(2),
+		.SWACCESS("RW"),
+		.RESVAL(2'h0)
+	) u_threshold0(
+		.clk_i(clk_i),
+		.rst_ni(rst_ni),
+		.we(threshold0_we),
+		.wd(threshold0_wd),
+		.de(1'b0),
+		.d({2 {1'sb0}}),
+		.qe(),
+		.q(reg2hw[10-:2]),
+		.qs(threshold0_qs)
+	);
+	prim_subreg_ext #(.DW(6)) u_cc0(
+		.re(cc0_re),
+		.we(cc0_we),
+		.wd(cc0_wd),
+		.d(hw2reg[5-:6]),
+		.qre(reg2hw[1]),
+		.qe(reg2hw[2]),
+		.q(reg2hw[8-:6]),
+		.qs(cc0_qs)
+	);
+	prim_subreg #(
+		.DW(1),
+		.SWACCESS("RW"),
+		.RESVAL(1'h0)
+	) u_msip0(
+		.clk_i(clk_i),
+		.rst_ni(rst_ni),
+		.we(msip0_we),
+		.wd(msip0_wd),
+		.de(1'b0),
+		.d(1'b0),
+		.qe(),
+		.q(reg2hw[-0]),
+		.qs(msip0_qs)
+	);
+	reg [44:0] addr_hit;
+	localparam signed [31:0] rv_plic_reg_pkg_BlockAw = 10;
+	localparam [9:0] rv_plic_reg_pkg_RV_PLIC_CC0_OFFSET = 10'h0ac;
+	localparam [9:0] rv_plic_reg_pkg_RV_PLIC_IE0_0_OFFSET = 10'h0a0;
+	localparam [9:0] rv_plic_reg_pkg_RV_PLIC_IE0_1_OFFSET = 10'h0a4;
+	localparam [9:0] rv_plic_reg_pkg_RV_PLIC_IP_0_OFFSET = 10'h000;
+	localparam [9:0] rv_plic_reg_pkg_RV_PLIC_IP_1_OFFSET = 10'h004;
+	localparam [9:0] rv_plic_reg_pkg_RV_PLIC_LE_0_OFFSET = 10'h008;
+	localparam [9:0] rv_plic_reg_pkg_RV_PLIC_LE_1_OFFSET = 10'h00c;
+	localparam [9:0] rv_plic_reg_pkg_RV_PLIC_MSIP0_OFFSET = 10'h0b0;
+	localparam [9:0] rv_plic_reg_pkg_RV_PLIC_PRIO0_OFFSET = 10'h010;
+	localparam [9:0] rv_plic_reg_pkg_RV_PLIC_PRIO10_OFFSET = 10'h038;
+	localparam [9:0] rv_plic_reg_pkg_RV_PLIC_PRIO11_OFFSET = 10'h03c;
+	localparam [9:0] rv_plic_reg_pkg_RV_PLIC_PRIO12_OFFSET = 10'h040;
+	localparam [9:0] rv_plic_reg_pkg_RV_PLIC_PRIO13_OFFSET = 10'h044;
+	localparam [9:0] rv_plic_reg_pkg_RV_PLIC_PRIO14_OFFSET = 10'h048;
+	localparam [9:0] rv_plic_reg_pkg_RV_PLIC_PRIO15_OFFSET = 10'h04c;
+	localparam [9:0] rv_plic_reg_pkg_RV_PLIC_PRIO16_OFFSET = 10'h050;
+	localparam [9:0] rv_plic_reg_pkg_RV_PLIC_PRIO17_OFFSET = 10'h054;
+	localparam [9:0] rv_plic_reg_pkg_RV_PLIC_PRIO18_OFFSET = 10'h058;
+	localparam [9:0] rv_plic_reg_pkg_RV_PLIC_PRIO19_OFFSET = 10'h05c;
+	localparam [9:0] rv_plic_reg_pkg_RV_PLIC_PRIO1_OFFSET = 10'h014;
+	localparam [9:0] rv_plic_reg_pkg_RV_PLIC_PRIO20_OFFSET = 10'h060;
+	localparam [9:0] rv_plic_reg_pkg_RV_PLIC_PRIO21_OFFSET = 10'h064;
+	localparam [9:0] rv_plic_reg_pkg_RV_PLIC_PRIO22_OFFSET = 10'h068;
+	localparam [9:0] rv_plic_reg_pkg_RV_PLIC_PRIO23_OFFSET = 10'h06c;
+	localparam [9:0] rv_plic_reg_pkg_RV_PLIC_PRIO24_OFFSET = 10'h070;
+	localparam [9:0] rv_plic_reg_pkg_RV_PLIC_PRIO25_OFFSET = 10'h074;
+	localparam [9:0] rv_plic_reg_pkg_RV_PLIC_PRIO26_OFFSET = 10'h078;
+	localparam [9:0] rv_plic_reg_pkg_RV_PLIC_PRIO27_OFFSET = 10'h07c;
+	localparam [9:0] rv_plic_reg_pkg_RV_PLIC_PRIO28_OFFSET = 10'h080;
+	localparam [9:0] rv_plic_reg_pkg_RV_PLIC_PRIO29_OFFSET = 10'h084;
+	localparam [9:0] rv_plic_reg_pkg_RV_PLIC_PRIO2_OFFSET = 10'h018;
+	localparam [9:0] rv_plic_reg_pkg_RV_PLIC_PRIO30_OFFSET = 10'h088;
+	localparam [9:0] rv_plic_reg_pkg_RV_PLIC_PRIO31_OFFSET = 10'h08c;
+	localparam [9:0] rv_plic_reg_pkg_RV_PLIC_PRIO32_OFFSET = 10'h090;
+	localparam [9:0] rv_plic_reg_pkg_RV_PLIC_PRIO33_OFFSET = 10'h094;
+	localparam [9:0] rv_plic_reg_pkg_RV_PLIC_PRIO34_OFFSET = 10'h098;
+	localparam [9:0] rv_plic_reg_pkg_RV_PLIC_PRIO35_OFFSET = 10'h09c;
+	localparam [9:0] rv_plic_reg_pkg_RV_PLIC_PRIO3_OFFSET = 10'h01c;
+	localparam [9:0] rv_plic_reg_pkg_RV_PLIC_PRIO4_OFFSET = 10'h020;
+	localparam [9:0] rv_plic_reg_pkg_RV_PLIC_PRIO5_OFFSET = 10'h024;
+	localparam [9:0] rv_plic_reg_pkg_RV_PLIC_PRIO6_OFFSET = 10'h028;
+	localparam [9:0] rv_plic_reg_pkg_RV_PLIC_PRIO7_OFFSET = 10'h02c;
+	localparam [9:0] rv_plic_reg_pkg_RV_PLIC_PRIO8_OFFSET = 10'h030;
+	localparam [9:0] rv_plic_reg_pkg_RV_PLIC_PRIO9_OFFSET = 10'h034;
+	localparam [9:0] rv_plic_reg_pkg_RV_PLIC_THRESHOLD0_OFFSET = 10'h0a8;
+	always @(*) begin
+		addr_hit = {45 {1'sb0}};
+		addr_hit[0] = reg_addr == rv_plic_reg_pkg_RV_PLIC_IP_0_OFFSET;
+		addr_hit[1] = reg_addr == rv_plic_reg_pkg_RV_PLIC_IP_1_OFFSET;
+		addr_hit[2] = reg_addr == rv_plic_reg_pkg_RV_PLIC_LE_0_OFFSET;
+		addr_hit[3] = reg_addr == rv_plic_reg_pkg_RV_PLIC_LE_1_OFFSET;
+		addr_hit[4] = reg_addr == rv_plic_reg_pkg_RV_PLIC_PRIO0_OFFSET;
+		addr_hit[5] = reg_addr == rv_plic_reg_pkg_RV_PLIC_PRIO1_OFFSET;
+		addr_hit[6] = reg_addr == rv_plic_reg_pkg_RV_PLIC_PRIO2_OFFSET;
+		addr_hit[7] = reg_addr == rv_plic_reg_pkg_RV_PLIC_PRIO3_OFFSET;
+		addr_hit[8] = reg_addr == rv_plic_reg_pkg_RV_PLIC_PRIO4_OFFSET;
+		addr_hit[9] = reg_addr == rv_plic_reg_pkg_RV_PLIC_PRIO5_OFFSET;
+		addr_hit[10] = reg_addr == rv_plic_reg_pkg_RV_PLIC_PRIO6_OFFSET;
+		addr_hit[11] = reg_addr == rv_plic_reg_pkg_RV_PLIC_PRIO7_OFFSET;
+		addr_hit[12] = reg_addr == rv_plic_reg_pkg_RV_PLIC_PRIO8_OFFSET;
+		addr_hit[13] = reg_addr == rv_plic_reg_pkg_RV_PLIC_PRIO9_OFFSET;
+		addr_hit[14] = reg_addr == rv_plic_reg_pkg_RV_PLIC_PRIO10_OFFSET;
+		addr_hit[15] = reg_addr == rv_plic_reg_pkg_RV_PLIC_PRIO11_OFFSET;
+		addr_hit[16] = reg_addr == rv_plic_reg_pkg_RV_PLIC_PRIO12_OFFSET;
+		addr_hit[17] = reg_addr == rv_plic_reg_pkg_RV_PLIC_PRIO13_OFFSET;
+		addr_hit[18] = reg_addr == rv_plic_reg_pkg_RV_PLIC_PRIO14_OFFSET;
+		addr_hit[19] = reg_addr == rv_plic_reg_pkg_RV_PLIC_PRIO15_OFFSET;
+		addr_hit[20] = reg_addr == rv_plic_reg_pkg_RV_PLIC_PRIO16_OFFSET;
+		addr_hit[21] = reg_addr == rv_plic_reg_pkg_RV_PLIC_PRIO17_OFFSET;
+		addr_hit[22] = reg_addr == rv_plic_reg_pkg_RV_PLIC_PRIO18_OFFSET;
+		addr_hit[23] = reg_addr == rv_plic_reg_pkg_RV_PLIC_PRIO19_OFFSET;
+		addr_hit[24] = reg_addr == rv_plic_reg_pkg_RV_PLIC_PRIO20_OFFSET;
+		addr_hit[25] = reg_addr == rv_plic_reg_pkg_RV_PLIC_PRIO21_OFFSET;
+		addr_hit[26] = reg_addr == rv_plic_reg_pkg_RV_PLIC_PRIO22_OFFSET;
+		addr_hit[27] = reg_addr == rv_plic_reg_pkg_RV_PLIC_PRIO23_OFFSET;
+		addr_hit[28] = reg_addr == rv_plic_reg_pkg_RV_PLIC_PRIO24_OFFSET;
+		addr_hit[29] = reg_addr == rv_plic_reg_pkg_RV_PLIC_PRIO25_OFFSET;
+		addr_hit[30] = reg_addr == rv_plic_reg_pkg_RV_PLIC_PRIO26_OFFSET;
+		addr_hit[31] = reg_addr == rv_plic_reg_pkg_RV_PLIC_PRIO27_OFFSET;
+		addr_hit[32] = reg_addr == rv_plic_reg_pkg_RV_PLIC_PRIO28_OFFSET;
+		addr_hit[33] = reg_addr == rv_plic_reg_pkg_RV_PLIC_PRIO29_OFFSET;
+		addr_hit[34] = reg_addr == rv_plic_reg_pkg_RV_PLIC_PRIO30_OFFSET;
+		addr_hit[35] = reg_addr == rv_plic_reg_pkg_RV_PLIC_PRIO31_OFFSET;
+		addr_hit[36] = reg_addr == rv_plic_reg_pkg_RV_PLIC_PRIO32_OFFSET;
+		addr_hit[37] = reg_addr == rv_plic_reg_pkg_RV_PLIC_PRIO33_OFFSET;
+		addr_hit[38] = reg_addr == rv_plic_reg_pkg_RV_PLIC_PRIO34_OFFSET;
+		addr_hit[39] = reg_addr == rv_plic_reg_pkg_RV_PLIC_PRIO35_OFFSET;
+		addr_hit[40] = reg_addr == rv_plic_reg_pkg_RV_PLIC_IE0_0_OFFSET;
+		addr_hit[41] = reg_addr == rv_plic_reg_pkg_RV_PLIC_IE0_1_OFFSET;
+		addr_hit[42] = reg_addr == rv_plic_reg_pkg_RV_PLIC_THRESHOLD0_OFFSET;
+		addr_hit[43] = reg_addr == rv_plic_reg_pkg_RV_PLIC_CC0_OFFSET;
+		addr_hit[44] = reg_addr == rv_plic_reg_pkg_RV_PLIC_MSIP0_OFFSET;
+	end
+	assign addrmiss = (reg_re || reg_we ? ~|addr_hit : 1'b0);
+	localparam [179:0] rv_plic_reg_pkg_RV_PLIC_PERMIT = 180'b111111111111111100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000111111111000100010001;
+	always @(*) begin
+		wr_err = 1'b0;
+		if ((addr_hit[0] && reg_we) && (rv_plic_reg_pkg_RV_PLIC_PERMIT[176+:4] != (rv_plic_reg_pkg_RV_PLIC_PERMIT[176+:4] & reg_be)))
+			wr_err = 1'b1;
+		if ((addr_hit[1] && reg_we) && (rv_plic_reg_pkg_RV_PLIC_PERMIT[172+:4] != (rv_plic_reg_pkg_RV_PLIC_PERMIT[172+:4] & reg_be)))
+			wr_err = 1'b1;
+		if ((addr_hit[2] && reg_we) && (rv_plic_reg_pkg_RV_PLIC_PERMIT[168+:4] != (rv_plic_reg_pkg_RV_PLIC_PERMIT[168+:4] & reg_be)))
+			wr_err = 1'b1;
+		if ((addr_hit[3] && reg_we) && (rv_plic_reg_pkg_RV_PLIC_PERMIT[164+:4] != (rv_plic_reg_pkg_RV_PLIC_PERMIT[164+:4] & reg_be)))
+			wr_err = 1'b1;
+		if ((addr_hit[4] && reg_we) && (rv_plic_reg_pkg_RV_PLIC_PERMIT[160+:4] != (rv_plic_reg_pkg_RV_PLIC_PERMIT[160+:4] & reg_be)))
+			wr_err = 1'b1;
+		if ((addr_hit[5] && reg_we) && (rv_plic_reg_pkg_RV_PLIC_PERMIT[156+:4] != (rv_plic_reg_pkg_RV_PLIC_PERMIT[156+:4] & reg_be)))
+			wr_err = 1'b1;
+		if ((addr_hit[6] && reg_we) && (rv_plic_reg_pkg_RV_PLIC_PERMIT[152+:4] != (rv_plic_reg_pkg_RV_PLIC_PERMIT[152+:4] & reg_be)))
+			wr_err = 1'b1;
+		if ((addr_hit[7] && reg_we) && (rv_plic_reg_pkg_RV_PLIC_PERMIT[148+:4] != (rv_plic_reg_pkg_RV_PLIC_PERMIT[148+:4] & reg_be)))
+			wr_err = 1'b1;
+		if ((addr_hit[8] && reg_we) && (rv_plic_reg_pkg_RV_PLIC_PERMIT[144+:4] != (rv_plic_reg_pkg_RV_PLIC_PERMIT[144+:4] & reg_be)))
+			wr_err = 1'b1;
+		if ((addr_hit[9] && reg_we) && (rv_plic_reg_pkg_RV_PLIC_PERMIT[140+:4] != (rv_plic_reg_pkg_RV_PLIC_PERMIT[140+:4] & reg_be)))
+			wr_err = 1'b1;
+		if ((addr_hit[10] && reg_we) && (rv_plic_reg_pkg_RV_PLIC_PERMIT[136+:4] != (rv_plic_reg_pkg_RV_PLIC_PERMIT[136+:4] & reg_be)))
+			wr_err = 1'b1;
+		if ((addr_hit[11] && reg_we) && (rv_plic_reg_pkg_RV_PLIC_PERMIT[132+:4] != (rv_plic_reg_pkg_RV_PLIC_PERMIT[132+:4] & reg_be)))
+			wr_err = 1'b1;
+		if ((addr_hit[12] && reg_we) && (rv_plic_reg_pkg_RV_PLIC_PERMIT[128+:4] != (rv_plic_reg_pkg_RV_PLIC_PERMIT[128+:4] & reg_be)))
+			wr_err = 1'b1;
+		if ((addr_hit[13] && reg_we) && (rv_plic_reg_pkg_RV_PLIC_PERMIT[124+:4] != (rv_plic_reg_pkg_RV_PLIC_PERMIT[124+:4] & reg_be)))
+			wr_err = 1'b1;
+		if ((addr_hit[14] && reg_we) && (rv_plic_reg_pkg_RV_PLIC_PERMIT[120+:4] != (rv_plic_reg_pkg_RV_PLIC_PERMIT[120+:4] & reg_be)))
+			wr_err = 1'b1;
+		if ((addr_hit[15] && reg_we) && (rv_plic_reg_pkg_RV_PLIC_PERMIT[116+:4] != (rv_plic_reg_pkg_RV_PLIC_PERMIT[116+:4] & reg_be)))
+			wr_err = 1'b1;
+		if ((addr_hit[16] && reg_we) && (rv_plic_reg_pkg_RV_PLIC_PERMIT[112+:4] != (rv_plic_reg_pkg_RV_PLIC_PERMIT[112+:4] & reg_be)))
+			wr_err = 1'b1;
+		if ((addr_hit[17] && reg_we) && (rv_plic_reg_pkg_RV_PLIC_PERMIT[108+:4] != (rv_plic_reg_pkg_RV_PLIC_PERMIT[108+:4] & reg_be)))
+			wr_err = 1'b1;
+		if ((addr_hit[18] && reg_we) && (rv_plic_reg_pkg_RV_PLIC_PERMIT[104+:4] != (rv_plic_reg_pkg_RV_PLIC_PERMIT[104+:4] & reg_be)))
+			wr_err = 1'b1;
+		if ((addr_hit[19] && reg_we) && (rv_plic_reg_pkg_RV_PLIC_PERMIT[100+:4] != (rv_plic_reg_pkg_RV_PLIC_PERMIT[100+:4] & reg_be)))
+			wr_err = 1'b1;
+		if ((addr_hit[20] && reg_we) && (rv_plic_reg_pkg_RV_PLIC_PERMIT[96+:4] != (rv_plic_reg_pkg_RV_PLIC_PERMIT[96+:4] & reg_be)))
+			wr_err = 1'b1;
+		if ((addr_hit[21] && reg_we) && (rv_plic_reg_pkg_RV_PLIC_PERMIT[92+:4] != (rv_plic_reg_pkg_RV_PLIC_PERMIT[92+:4] & reg_be)))
+			wr_err = 1'b1;
+		if ((addr_hit[22] && reg_we) && (rv_plic_reg_pkg_RV_PLIC_PERMIT[88+:4] != (rv_plic_reg_pkg_RV_PLIC_PERMIT[88+:4] & reg_be)))
+			wr_err = 1'b1;
+		if ((addr_hit[23] && reg_we) && (rv_plic_reg_pkg_RV_PLIC_PERMIT[84+:4] != (rv_plic_reg_pkg_RV_PLIC_PERMIT[84+:4] & reg_be)))
+			wr_err = 1'b1;
+		if ((addr_hit[24] && reg_we) && (rv_plic_reg_pkg_RV_PLIC_PERMIT[80+:4] != (rv_plic_reg_pkg_RV_PLIC_PERMIT[80+:4] & reg_be)))
+			wr_err = 1'b1;
+		if ((addr_hit[25] && reg_we) && (rv_plic_reg_pkg_RV_PLIC_PERMIT[76+:4] != (rv_plic_reg_pkg_RV_PLIC_PERMIT[76+:4] & reg_be)))
+			wr_err = 1'b1;
+		if ((addr_hit[26] && reg_we) && (rv_plic_reg_pkg_RV_PLIC_PERMIT[72+:4] != (rv_plic_reg_pkg_RV_PLIC_PERMIT[72+:4] & reg_be)))
+			wr_err = 1'b1;
+		if ((addr_hit[27] && reg_we) && (rv_plic_reg_pkg_RV_PLIC_PERMIT[68+:4] != (rv_plic_reg_pkg_RV_PLIC_PERMIT[68+:4] & reg_be)))
+			wr_err = 1'b1;
+		if ((addr_hit[28] && reg_we) && (rv_plic_reg_pkg_RV_PLIC_PERMIT[64+:4] != (rv_plic_reg_pkg_RV_PLIC_PERMIT[64+:4] & reg_be)))
+			wr_err = 1'b1;
+		if ((addr_hit[29] && reg_we) && (rv_plic_reg_pkg_RV_PLIC_PERMIT[60+:4] != (rv_plic_reg_pkg_RV_PLIC_PERMIT[60+:4] & reg_be)))
+			wr_err = 1'b1;
+		if ((addr_hit[30] && reg_we) && (rv_plic_reg_pkg_RV_PLIC_PERMIT[56+:4] != (rv_plic_reg_pkg_RV_PLIC_PERMIT[56+:4] & reg_be)))
+			wr_err = 1'b1;
+		if ((addr_hit[31] && reg_we) && (rv_plic_reg_pkg_RV_PLIC_PERMIT[52+:4] != (rv_plic_reg_pkg_RV_PLIC_PERMIT[52+:4] & reg_be)))
+			wr_err = 1'b1;
+		if ((addr_hit[32] && reg_we) && (rv_plic_reg_pkg_RV_PLIC_PERMIT[48+:4] != (rv_plic_reg_pkg_RV_PLIC_PERMIT[48+:4] & reg_be)))
+			wr_err = 1'b1;
+		if ((addr_hit[33] && reg_we) && (rv_plic_reg_pkg_RV_PLIC_PERMIT[44+:4] != (rv_plic_reg_pkg_RV_PLIC_PERMIT[44+:4] & reg_be)))
+			wr_err = 1'b1;
+		if ((addr_hit[34] && reg_we) && (rv_plic_reg_pkg_RV_PLIC_PERMIT[40+:4] != (rv_plic_reg_pkg_RV_PLIC_PERMIT[40+:4] & reg_be)))
+			wr_err = 1'b1;
+		if ((addr_hit[35] && reg_we) && (rv_plic_reg_pkg_RV_PLIC_PERMIT[36+:4] != (rv_plic_reg_pkg_RV_PLIC_PERMIT[36+:4] & reg_be)))
+			wr_err = 1'b1;
+		if ((addr_hit[36] && reg_we) && (rv_plic_reg_pkg_RV_PLIC_PERMIT[32+:4] != (rv_plic_reg_pkg_RV_PLIC_PERMIT[32+:4] & reg_be)))
+			wr_err = 1'b1;
+		if ((addr_hit[37] && reg_we) && (rv_plic_reg_pkg_RV_PLIC_PERMIT[28+:4] != (rv_plic_reg_pkg_RV_PLIC_PERMIT[28+:4] & reg_be)))
+			wr_err = 1'b1;
+		if ((addr_hit[38] && reg_we) && (rv_plic_reg_pkg_RV_PLIC_PERMIT[24+:4] != (rv_plic_reg_pkg_RV_PLIC_PERMIT[24+:4] & reg_be)))
+			wr_err = 1'b1;
+		if ((addr_hit[39] && reg_we) && (rv_plic_reg_pkg_RV_PLIC_PERMIT[20+:4] != (rv_plic_reg_pkg_RV_PLIC_PERMIT[20+:4] & reg_be)))
+			wr_err = 1'b1;
+		if ((addr_hit[40] && reg_we) && (rv_plic_reg_pkg_RV_PLIC_PERMIT[16+:4] != (rv_plic_reg_pkg_RV_PLIC_PERMIT[16+:4] & reg_be)))
+			wr_err = 1'b1;
+		if ((addr_hit[41] && reg_we) && (rv_plic_reg_pkg_RV_PLIC_PERMIT[12+:4] != (rv_plic_reg_pkg_RV_PLIC_PERMIT[12+:4] & reg_be)))
+			wr_err = 1'b1;
+		if ((addr_hit[42] && reg_we) && (rv_plic_reg_pkg_RV_PLIC_PERMIT[8+:4] != (rv_plic_reg_pkg_RV_PLIC_PERMIT[8+:4] & reg_be)))
+			wr_err = 1'b1;
+		if ((addr_hit[43] && reg_we) && (rv_plic_reg_pkg_RV_PLIC_PERMIT[4+:4] != (rv_plic_reg_pkg_RV_PLIC_PERMIT[4+:4] & reg_be)))
+			wr_err = 1'b1;
+		if ((addr_hit[44] && reg_we) && (rv_plic_reg_pkg_RV_PLIC_PERMIT[0+:4] != (rv_plic_reg_pkg_RV_PLIC_PERMIT[0+:4] & reg_be)))
+			wr_err = 1'b1;
+	end
+	assign le_0_le_0_we = (addr_hit[2] & reg_we) & ~wr_err;
+	assign le_0_le_0_wd = reg_wdata[0];
+	assign le_0_le_1_we = (addr_hit[2] & reg_we) & ~wr_err;
+	assign le_0_le_1_wd = reg_wdata[1];
+	assign le_0_le_2_we = (addr_hit[2] & reg_we) & ~wr_err;
+	assign le_0_le_2_wd = reg_wdata[2];
+	assign le_0_le_3_we = (addr_hit[2] & reg_we) & ~wr_err;
+	assign le_0_le_3_wd = reg_wdata[3];
+	assign le_0_le_4_we = (addr_hit[2] & reg_we) & ~wr_err;
+	assign le_0_le_4_wd = reg_wdata[4];
+	assign le_0_le_5_we = (addr_hit[2] & reg_we) & ~wr_err;
+	assign le_0_le_5_wd = reg_wdata[5];
+	assign le_0_le_6_we = (addr_hit[2] & reg_we) & ~wr_err;
+	assign le_0_le_6_wd = reg_wdata[6];
+	assign le_0_le_7_we = (addr_hit[2] & reg_we) & ~wr_err;
+	assign le_0_le_7_wd = reg_wdata[7];
+	assign le_0_le_8_we = (addr_hit[2] & reg_we) & ~wr_err;
+	assign le_0_le_8_wd = reg_wdata[8];
+	assign le_0_le_9_we = (addr_hit[2] & reg_we) & ~wr_err;
+	assign le_0_le_9_wd = reg_wdata[9];
+	assign le_0_le_10_we = (addr_hit[2] & reg_we) & ~wr_err;
+	assign le_0_le_10_wd = reg_wdata[10];
+	assign le_0_le_11_we = (addr_hit[2] & reg_we) & ~wr_err;
+	assign le_0_le_11_wd = reg_wdata[11];
+	assign le_0_le_12_we = (addr_hit[2] & reg_we) & ~wr_err;
+	assign le_0_le_12_wd = reg_wdata[12];
+	assign le_0_le_13_we = (addr_hit[2] & reg_we) & ~wr_err;
+	assign le_0_le_13_wd = reg_wdata[13];
+	assign le_0_le_14_we = (addr_hit[2] & reg_we) & ~wr_err;
+	assign le_0_le_14_wd = reg_wdata[14];
+	assign le_0_le_15_we = (addr_hit[2] & reg_we) & ~wr_err;
+	assign le_0_le_15_wd = reg_wdata[15];
+	assign le_0_le_16_we = (addr_hit[2] & reg_we) & ~wr_err;
+	assign le_0_le_16_wd = reg_wdata[16];
+	assign le_0_le_17_we = (addr_hit[2] & reg_we) & ~wr_err;
+	assign le_0_le_17_wd = reg_wdata[17];
+	assign le_0_le_18_we = (addr_hit[2] & reg_we) & ~wr_err;
+	assign le_0_le_18_wd = reg_wdata[18];
+	assign le_0_le_19_we = (addr_hit[2] & reg_we) & ~wr_err;
+	assign le_0_le_19_wd = reg_wdata[19];
+	assign le_0_le_20_we = (addr_hit[2] & reg_we) & ~wr_err;
+	assign le_0_le_20_wd = reg_wdata[20];
+	assign le_0_le_21_we = (addr_hit[2] & reg_we) & ~wr_err;
+	assign le_0_le_21_wd = reg_wdata[21];
+	assign le_0_le_22_we = (addr_hit[2] & reg_we) & ~wr_err;
+	assign le_0_le_22_wd = reg_wdata[22];
+	assign le_0_le_23_we = (addr_hit[2] & reg_we) & ~wr_err;
+	assign le_0_le_23_wd = reg_wdata[23];
+	assign le_0_le_24_we = (addr_hit[2] & reg_we) & ~wr_err;
+	assign le_0_le_24_wd = reg_wdata[24];
+	assign le_0_le_25_we = (addr_hit[2] & reg_we) & ~wr_err;
+	assign le_0_le_25_wd = reg_wdata[25];
+	assign le_0_le_26_we = (addr_hit[2] & reg_we) & ~wr_err;
+	assign le_0_le_26_wd = reg_wdata[26];
+	assign le_0_le_27_we = (addr_hit[2] & reg_we) & ~wr_err;
+	assign le_0_le_27_wd = reg_wdata[27];
+	assign le_0_le_28_we = (addr_hit[2] & reg_we) & ~wr_err;
+	assign le_0_le_28_wd = reg_wdata[28];
+	assign le_0_le_29_we = (addr_hit[2] & reg_we) & ~wr_err;
+	assign le_0_le_29_wd = reg_wdata[29];
+	assign le_0_le_30_we = (addr_hit[2] & reg_we) & ~wr_err;
+	assign le_0_le_30_wd = reg_wdata[30];
+	assign le_0_le_31_we = (addr_hit[2] & reg_we) & ~wr_err;
+	assign le_0_le_31_wd = reg_wdata[31];
+	assign le_1_le_32_we = (addr_hit[3] & reg_we) & ~wr_err;
+	assign le_1_le_32_wd = reg_wdata[0];
+	assign le_1_le_33_we = (addr_hit[3] & reg_we) & ~wr_err;
+	assign le_1_le_33_wd = reg_wdata[1];
+	assign le_1_le_34_we = (addr_hit[3] & reg_we) & ~wr_err;
+	assign le_1_le_34_wd = reg_wdata[2];
+	assign le_1_le_35_we = (addr_hit[3] & reg_we) & ~wr_err;
+	assign le_1_le_35_wd = reg_wdata[3];
+	assign prio0_we = (addr_hit[4] & reg_we) & ~wr_err;
+	assign prio0_wd = reg_wdata[1:0];
+	assign prio1_we = (addr_hit[5] & reg_we) & ~wr_err;
+	assign prio1_wd = reg_wdata[1:0];
+	assign prio2_we = (addr_hit[6] & reg_we) & ~wr_err;
+	assign prio2_wd = reg_wdata[1:0];
+	assign prio3_we = (addr_hit[7] & reg_we) & ~wr_err;
+	assign prio3_wd = reg_wdata[1:0];
+	assign prio4_we = (addr_hit[8] & reg_we) & ~wr_err;
+	assign prio4_wd = reg_wdata[1:0];
+	assign prio5_we = (addr_hit[9] & reg_we) & ~wr_err;
+	assign prio5_wd = reg_wdata[1:0];
+	assign prio6_we = (addr_hit[10] & reg_we) & ~wr_err;
+	assign prio6_wd = reg_wdata[1:0];
+	assign prio7_we = (addr_hit[11] & reg_we) & ~wr_err;
+	assign prio7_wd = reg_wdata[1:0];
+	assign prio8_we = (addr_hit[12] & reg_we) & ~wr_err;
+	assign prio8_wd = reg_wdata[1:0];
+	assign prio9_we = (addr_hit[13] & reg_we) & ~wr_err;
+	assign prio9_wd = reg_wdata[1:0];
+	assign prio10_we = (addr_hit[14] & reg_we) & ~wr_err;
+	assign prio10_wd = reg_wdata[1:0];
+	assign prio11_we = (addr_hit[15] & reg_we) & ~wr_err;
+	assign prio11_wd = reg_wdata[1:0];
+	assign prio12_we = (addr_hit[16] & reg_we) & ~wr_err;
+	assign prio12_wd = reg_wdata[1:0];
+	assign prio13_we = (addr_hit[17] & reg_we) & ~wr_err;
+	assign prio13_wd = reg_wdata[1:0];
+	assign prio14_we = (addr_hit[18] & reg_we) & ~wr_err;
+	assign prio14_wd = reg_wdata[1:0];
+	assign prio15_we = (addr_hit[19] & reg_we) & ~wr_err;
+	assign prio15_wd = reg_wdata[1:0];
+	assign prio16_we = (addr_hit[20] & reg_we) & ~wr_err;
+	assign prio16_wd = reg_wdata[1:0];
+	assign prio17_we = (addr_hit[21] & reg_we) & ~wr_err;
+	assign prio17_wd = reg_wdata[1:0];
+	assign prio18_we = (addr_hit[22] & reg_we) & ~wr_err;
+	assign prio18_wd = reg_wdata[1:0];
+	assign prio19_we = (addr_hit[23] & reg_we) & ~wr_err;
+	assign prio19_wd = reg_wdata[1:0];
+	assign prio20_we = (addr_hit[24] & reg_we) & ~wr_err;
+	assign prio20_wd = reg_wdata[1:0];
+	assign prio21_we = (addr_hit[25] & reg_we) & ~wr_err;
+	assign prio21_wd = reg_wdata[1:0];
+	assign prio22_we = (addr_hit[26] & reg_we) & ~wr_err;
+	assign prio22_wd = reg_wdata[1:0];
+	assign prio23_we = (addr_hit[27] & reg_we) & ~wr_err;
+	assign prio23_wd = reg_wdata[1:0];
+	assign prio24_we = (addr_hit[28] & reg_we) & ~wr_err;
+	assign prio24_wd = reg_wdata[1:0];
+	assign prio25_we = (addr_hit[29] & reg_we) & ~wr_err;
+	assign prio25_wd = reg_wdata[1:0];
+	assign prio26_we = (addr_hit[30] & reg_we) & ~wr_err;
+	assign prio26_wd = reg_wdata[1:0];
+	assign prio27_we = (addr_hit[31] & reg_we) & ~wr_err;
+	assign prio27_wd = reg_wdata[1:0];
+	assign prio28_we = (addr_hit[32] & reg_we) & ~wr_err;
+	assign prio28_wd = reg_wdata[1:0];
+	assign prio29_we = (addr_hit[33] & reg_we) & ~wr_err;
+	assign prio29_wd = reg_wdata[1:0];
+	assign prio30_we = (addr_hit[34] & reg_we) & ~wr_err;
+	assign prio30_wd = reg_wdata[1:0];
+	assign prio31_we = (addr_hit[35] & reg_we) & ~wr_err;
+	assign prio31_wd = reg_wdata[1:0];
+	assign prio32_we = (addr_hit[36] & reg_we) & ~wr_err;
+	assign prio32_wd = reg_wdata[1:0];
+	assign prio33_we = (addr_hit[37] & reg_we) & ~wr_err;
+	assign prio33_wd = reg_wdata[1:0];
+	assign prio34_we = (addr_hit[38] & reg_we) & ~wr_err;
+	assign prio34_wd = reg_wdata[1:0];
+	assign prio35_we = (addr_hit[39] & reg_we) & ~wr_err;
+	assign prio35_wd = reg_wdata[1:0];
+	assign ie0_0_e_0_we = (addr_hit[40] & reg_we) & ~wr_err;
+	assign ie0_0_e_0_wd = reg_wdata[0];
+	assign ie0_0_e_1_we = (addr_hit[40] & reg_we) & ~wr_err;
+	assign ie0_0_e_1_wd = reg_wdata[1];
+	assign ie0_0_e_2_we = (addr_hit[40] & reg_we) & ~wr_err;
+	assign ie0_0_e_2_wd = reg_wdata[2];
+	assign ie0_0_e_3_we = (addr_hit[40] & reg_we) & ~wr_err;
+	assign ie0_0_e_3_wd = reg_wdata[3];
+	assign ie0_0_e_4_we = (addr_hit[40] & reg_we) & ~wr_err;
+	assign ie0_0_e_4_wd = reg_wdata[4];
+	assign ie0_0_e_5_we = (addr_hit[40] & reg_we) & ~wr_err;
+	assign ie0_0_e_5_wd = reg_wdata[5];
+	assign ie0_0_e_6_we = (addr_hit[40] & reg_we) & ~wr_err;
+	assign ie0_0_e_6_wd = reg_wdata[6];
+	assign ie0_0_e_7_we = (addr_hit[40] & reg_we) & ~wr_err;
+	assign ie0_0_e_7_wd = reg_wdata[7];
+	assign ie0_0_e_8_we = (addr_hit[40] & reg_we) & ~wr_err;
+	assign ie0_0_e_8_wd = reg_wdata[8];
+	assign ie0_0_e_9_we = (addr_hit[40] & reg_we) & ~wr_err;
+	assign ie0_0_e_9_wd = reg_wdata[9];
+	assign ie0_0_e_10_we = (addr_hit[40] & reg_we) & ~wr_err;
+	assign ie0_0_e_10_wd = reg_wdata[10];
+	assign ie0_0_e_11_we = (addr_hit[40] & reg_we) & ~wr_err;
+	assign ie0_0_e_11_wd = reg_wdata[11];
+	assign ie0_0_e_12_we = (addr_hit[40] & reg_we) & ~wr_err;
+	assign ie0_0_e_12_wd = reg_wdata[12];
+	assign ie0_0_e_13_we = (addr_hit[40] & reg_we) & ~wr_err;
+	assign ie0_0_e_13_wd = reg_wdata[13];
+	assign ie0_0_e_14_we = (addr_hit[40] & reg_we) & ~wr_err;
+	assign ie0_0_e_14_wd = reg_wdata[14];
+	assign ie0_0_e_15_we = (addr_hit[40] & reg_we) & ~wr_err;
+	assign ie0_0_e_15_wd = reg_wdata[15];
+	assign ie0_0_e_16_we = (addr_hit[40] & reg_we) & ~wr_err;
+	assign ie0_0_e_16_wd = reg_wdata[16];
+	assign ie0_0_e_17_we = (addr_hit[40] & reg_we) & ~wr_err;
+	assign ie0_0_e_17_wd = reg_wdata[17];
+	assign ie0_0_e_18_we = (addr_hit[40] & reg_we) & ~wr_err;
+	assign ie0_0_e_18_wd = reg_wdata[18];
+	assign ie0_0_e_19_we = (addr_hit[40] & reg_we) & ~wr_err;
+	assign ie0_0_e_19_wd = reg_wdata[19];
+	assign ie0_0_e_20_we = (addr_hit[40] & reg_we) & ~wr_err;
+	assign ie0_0_e_20_wd = reg_wdata[20];
+	assign ie0_0_e_21_we = (addr_hit[40] & reg_we) & ~wr_err;
+	assign ie0_0_e_21_wd = reg_wdata[21];
+	assign ie0_0_e_22_we = (addr_hit[40] & reg_we) & ~wr_err;
+	assign ie0_0_e_22_wd = reg_wdata[22];
+	assign ie0_0_e_23_we = (addr_hit[40] & reg_we) & ~wr_err;
+	assign ie0_0_e_23_wd = reg_wdata[23];
+	assign ie0_0_e_24_we = (addr_hit[40] & reg_we) & ~wr_err;
+	assign ie0_0_e_24_wd = reg_wdata[24];
+	assign ie0_0_e_25_we = (addr_hit[40] & reg_we) & ~wr_err;
+	assign ie0_0_e_25_wd = reg_wdata[25];
+	assign ie0_0_e_26_we = (addr_hit[40] & reg_we) & ~wr_err;
+	assign ie0_0_e_26_wd = reg_wdata[26];
+	assign ie0_0_e_27_we = (addr_hit[40] & reg_we) & ~wr_err;
+	assign ie0_0_e_27_wd = reg_wdata[27];
+	assign ie0_0_e_28_we = (addr_hit[40] & reg_we) & ~wr_err;
+	assign ie0_0_e_28_wd = reg_wdata[28];
+	assign ie0_0_e_29_we = (addr_hit[40] & reg_we) & ~wr_err;
+	assign ie0_0_e_29_wd = reg_wdata[29];
+	assign ie0_0_e_30_we = (addr_hit[40] & reg_we) & ~wr_err;
+	assign ie0_0_e_30_wd = reg_wdata[30];
+	assign ie0_0_e_31_we = (addr_hit[40] & reg_we) & ~wr_err;
+	assign ie0_0_e_31_wd = reg_wdata[31];
+	assign ie0_1_e_32_we = (addr_hit[41] & reg_we) & ~wr_err;
+	assign ie0_1_e_32_wd = reg_wdata[0];
+	assign ie0_1_e_33_we = (addr_hit[41] & reg_we) & ~wr_err;
+	assign ie0_1_e_33_wd = reg_wdata[1];
+	assign ie0_1_e_34_we = (addr_hit[41] & reg_we) & ~wr_err;
+	assign ie0_1_e_34_wd = reg_wdata[2];
+	assign ie0_1_e_35_we = (addr_hit[41] & reg_we) & ~wr_err;
+	assign ie0_1_e_35_wd = reg_wdata[3];
+	assign threshold0_we = (addr_hit[42] & reg_we) & ~wr_err;
+	assign threshold0_wd = reg_wdata[1:0];
+	assign cc0_we = (addr_hit[43] & reg_we) & ~wr_err;
+	assign cc0_wd = reg_wdata[7:0];
+	assign cc0_re = addr_hit[43] && reg_re;
+	assign msip0_we = (addr_hit[44] & reg_we) & ~wr_err;
+	assign msip0_wd = reg_wdata[0];
+	always @(*) begin
+		reg_rdata_next = {32 {1'sb0}};
+		case (1'b1)
+			addr_hit[0]: begin
+				reg_rdata_next[0] = ip_0_p_0_qs;
+				reg_rdata_next[1] = ip_0_p_1_qs;
+				reg_rdata_next[2] = ip_0_p_2_qs;
+				reg_rdata_next[3] = ip_0_p_3_qs;
+				reg_rdata_next[4] = ip_0_p_4_qs;
+				reg_rdata_next[5] = ip_0_p_5_qs;
+				reg_rdata_next[6] = ip_0_p_6_qs;
+				reg_rdata_next[7] = ip_0_p_7_qs;
+				reg_rdata_next[8] = ip_0_p_8_qs;
+				reg_rdata_next[9] = ip_0_p_9_qs;
+				reg_rdata_next[10] = ip_0_p_10_qs;
+				reg_rdata_next[11] = ip_0_p_11_qs;
+				reg_rdata_next[12] = ip_0_p_12_qs;
+				reg_rdata_next[13] = ip_0_p_13_qs;
+				reg_rdata_next[14] = ip_0_p_14_qs;
+				reg_rdata_next[15] = ip_0_p_15_qs;
+				reg_rdata_next[16] = ip_0_p_16_qs;
+				reg_rdata_next[17] = ip_0_p_17_qs;
+				reg_rdata_next[18] = ip_0_p_18_qs;
+				reg_rdata_next[19] = ip_0_p_19_qs;
+				reg_rdata_next[20] = ip_0_p_20_qs;
+				reg_rdata_next[21] = ip_0_p_21_qs;
+				reg_rdata_next[22] = ip_0_p_22_qs;
+				reg_rdata_next[23] = ip_0_p_23_qs;
+				reg_rdata_next[24] = ip_0_p_24_qs;
+				reg_rdata_next[25] = ip_0_p_25_qs;
+				reg_rdata_next[26] = ip_0_p_26_qs;
+				reg_rdata_next[27] = ip_0_p_27_qs;
+				reg_rdata_next[28] = ip_0_p_28_qs;
+				reg_rdata_next[29] = ip_0_p_29_qs;
+				reg_rdata_next[30] = ip_0_p_30_qs;
+				reg_rdata_next[31] = ip_0_p_31_qs;
+			end
+			addr_hit[1]: begin
+				reg_rdata_next[0] = ip_1_p_32_qs;
+				reg_rdata_next[1] = ip_1_p_33_qs;
+				reg_rdata_next[2] = ip_1_p_34_qs;
+				reg_rdata_next[3] = ip_1_p_35_qs;
+			end
+			addr_hit[2]: begin
+				reg_rdata_next[0] = le_0_le_0_qs;
+				reg_rdata_next[1] = le_0_le_1_qs;
+				reg_rdata_next[2] = le_0_le_2_qs;
+				reg_rdata_next[3] = le_0_le_3_qs;
+				reg_rdata_next[4] = le_0_le_4_qs;
+				reg_rdata_next[5] = le_0_le_5_qs;
+				reg_rdata_next[6] = le_0_le_6_qs;
+				reg_rdata_next[7] = le_0_le_7_qs;
+				reg_rdata_next[8] = le_0_le_8_qs;
+				reg_rdata_next[9] = le_0_le_9_qs;
+				reg_rdata_next[10] = le_0_le_10_qs;
+				reg_rdata_next[11] = le_0_le_11_qs;
+				reg_rdata_next[12] = le_0_le_12_qs;
+				reg_rdata_next[13] = le_0_le_13_qs;
+				reg_rdata_next[14] = le_0_le_14_qs;
+				reg_rdata_next[15] = le_0_le_15_qs;
+				reg_rdata_next[16] = le_0_le_16_qs;
+				reg_rdata_next[17] = le_0_le_17_qs;
+				reg_rdata_next[18] = le_0_le_18_qs;
+				reg_rdata_next[19] = le_0_le_19_qs;
+				reg_rdata_next[20] = le_0_le_20_qs;
+				reg_rdata_next[21] = le_0_le_21_qs;
+				reg_rdata_next[22] = le_0_le_22_qs;
+				reg_rdata_next[23] = le_0_le_23_qs;
+				reg_rdata_next[24] = le_0_le_24_qs;
+				reg_rdata_next[25] = le_0_le_25_qs;
+				reg_rdata_next[26] = le_0_le_26_qs;
+				reg_rdata_next[27] = le_0_le_27_qs;
+				reg_rdata_next[28] = le_0_le_28_qs;
+				reg_rdata_next[29] = le_0_le_29_qs;
+				reg_rdata_next[30] = le_0_le_30_qs;
+				reg_rdata_next[31] = le_0_le_31_qs;
+			end
+			addr_hit[3]: begin
+				reg_rdata_next[0] = le_1_le_32_qs;
+				reg_rdata_next[1] = le_1_le_33_qs;
+				reg_rdata_next[2] = le_1_le_34_qs;
+				reg_rdata_next[3] = le_1_le_35_qs;
+			end
+			addr_hit[4]: reg_rdata_next[1:0] = prio0_qs;
+			addr_hit[5]: reg_rdata_next[1:0] = prio1_qs;
+			addr_hit[6]: reg_rdata_next[1:0] = prio2_qs;
+			addr_hit[7]: reg_rdata_next[1:0] = prio3_qs;
+			addr_hit[8]: reg_rdata_next[1:0] = prio4_qs;
+			addr_hit[9]: reg_rdata_next[1:0] = prio5_qs;
+			addr_hit[10]: reg_rdata_next[1:0] = prio6_qs;
+			addr_hit[11]: reg_rdata_next[1:0] = prio7_qs;
+			addr_hit[12]: reg_rdata_next[1:0] = prio8_qs;
+			addr_hit[13]: reg_rdata_next[1:0] = prio9_qs;
+			addr_hit[14]: reg_rdata_next[1:0] = prio10_qs;
+			addr_hit[15]: reg_rdata_next[1:0] = prio11_qs;
+			addr_hit[16]: reg_rdata_next[1:0] = prio12_qs;
+			addr_hit[17]: reg_rdata_next[1:0] = prio13_qs;
+			addr_hit[18]: reg_rdata_next[1:0] = prio14_qs;
+			addr_hit[19]: reg_rdata_next[1:0] = prio15_qs;
+			addr_hit[20]: reg_rdata_next[1:0] = prio16_qs;
+			addr_hit[21]: reg_rdata_next[1:0] = prio17_qs;
+			addr_hit[22]: reg_rdata_next[1:0] = prio18_qs;
+			addr_hit[23]: reg_rdata_next[1:0] = prio19_qs;
+			addr_hit[24]: reg_rdata_next[1:0] = prio20_qs;
+			addr_hit[25]: reg_rdata_next[1:0] = prio21_qs;
+			addr_hit[26]: reg_rdata_next[1:0] = prio22_qs;
+			addr_hit[27]: reg_rdata_next[1:0] = prio23_qs;
+			addr_hit[28]: reg_rdata_next[1:0] = prio24_qs;
+			addr_hit[29]: reg_rdata_next[1:0] = prio25_qs;
+			addr_hit[30]: reg_rdata_next[1:0] = prio26_qs;
+			addr_hit[31]: reg_rdata_next[1:0] = prio27_qs;
+			addr_hit[32]: reg_rdata_next[1:0] = prio28_qs;
+			addr_hit[33]: reg_rdata_next[1:0] = prio29_qs;
+			addr_hit[34]: reg_rdata_next[1:0] = prio30_qs;
+			addr_hit[35]: reg_rdata_next[1:0] = prio31_qs;
+			addr_hit[36]: reg_rdata_next[1:0] = prio32_qs;
+			addr_hit[37]: reg_rdata_next[1:0] = prio33_qs;
+			addr_hit[38]: reg_rdata_next[1:0] = prio34_qs;
+			addr_hit[39]: reg_rdata_next[1:0] = prio35_qs;
+			addr_hit[40]: begin
+				reg_rdata_next[0] = ie0_0_e_0_qs;
+				reg_rdata_next[1] = ie0_0_e_1_qs;
+				reg_rdata_next[2] = ie0_0_e_2_qs;
+				reg_rdata_next[3] = ie0_0_e_3_qs;
+				reg_rdata_next[4] = ie0_0_e_4_qs;
+				reg_rdata_next[5] = ie0_0_e_5_qs;
+				reg_rdata_next[6] = ie0_0_e_6_qs;
+				reg_rdata_next[7] = ie0_0_e_7_qs;
+				reg_rdata_next[8] = ie0_0_e_8_qs;
+				reg_rdata_next[9] = ie0_0_e_9_qs;
+				reg_rdata_next[10] = ie0_0_e_10_qs;
+				reg_rdata_next[11] = ie0_0_e_11_qs;
+				reg_rdata_next[12] = ie0_0_e_12_qs;
+				reg_rdata_next[13] = ie0_0_e_13_qs;
+				reg_rdata_next[14] = ie0_0_e_14_qs;
+				reg_rdata_next[15] = ie0_0_e_15_qs;
+				reg_rdata_next[16] = ie0_0_e_16_qs;
+				reg_rdata_next[17] = ie0_0_e_17_qs;
+				reg_rdata_next[18] = ie0_0_e_18_qs;
+				reg_rdata_next[19] = ie0_0_e_19_qs;
+				reg_rdata_next[20] = ie0_0_e_20_qs;
+				reg_rdata_next[21] = ie0_0_e_21_qs;
+				reg_rdata_next[22] = ie0_0_e_22_qs;
+				reg_rdata_next[23] = ie0_0_e_23_qs;
+				reg_rdata_next[24] = ie0_0_e_24_qs;
+				reg_rdata_next[25] = ie0_0_e_25_qs;
+				reg_rdata_next[26] = ie0_0_e_26_qs;
+				reg_rdata_next[27] = ie0_0_e_27_qs;
+				reg_rdata_next[28] = ie0_0_e_28_qs;
+				reg_rdata_next[29] = ie0_0_e_29_qs;
+				reg_rdata_next[30] = ie0_0_e_30_qs;
+				reg_rdata_next[31] = ie0_0_e_31_qs;
+			end
+			addr_hit[41]: begin
+				reg_rdata_next[0] = ie0_1_e_32_qs;
+				reg_rdata_next[1] = ie0_1_e_33_qs;
+				reg_rdata_next[2] = ie0_1_e_34_qs;
+				reg_rdata_next[3] = ie0_1_e_35_qs;
+			end
+			addr_hit[42]: reg_rdata_next[1:0] = threshold0_qs;
+			addr_hit[43]: reg_rdata_next[7:0] = cc0_qs;
+			addr_hit[44]: reg_rdata_next[0] = msip0_qs;
+			default: reg_rdata_next = {32 {1'sb1}};
+		endcase
+	end
+endmodule
+module rv_plic (
+	clk_i,
+	rst_ni,
+	tl_i,
+	tl_o,
+	intr_src_i,
+	irq_o,
+	msip_o
+);
+	localparam signed [31:0] rv_plic_reg_pkg_NumSrc = 36;
+	localparam signed [31:0] SRCW = 6;
+	input wire clk_i;
+	input wire rst_ni;
+	localparam signed [31:0] tlul_pkg_TL_AIW = 8;
+	localparam signed [31:0] tlul_pkg_TL_AW = 32;
+	localparam signed [31:0] tlul_pkg_TL_DW = 32;
+	localparam signed [31:0] tlul_pkg_TL_DBW = 4;
+	localparam signed [31:0] tlul_pkg_TL_SZW = 2;
+	input wire [85:0] tl_i;
+	localparam signed [31:0] tlul_pkg_TL_DIW = 1;
+	output wire [51:0] tl_o;
+	input wire [35:0] intr_src_i;
+	localparam signed [31:0] rv_plic_reg_pkg_NumTarget = 1;
+	output wire [0:0] irq_o;
+	output wire [0:0] msip_o;
+	wire [154:0] reg2hw;
+	wire [77:0] hw2reg;
+	localparam signed [31:0] MAX_PRIO = 3;
+	localparam signed [31:0] PRIOW = 2;
+	wire [6:0] irq_id_o;
+	wire [35:0] le;
+	wire [35:0] ip;
+	wire [35:0] ie [0:0];
+	wire [0:0] claim_re;
+	wire [5:0] claim_id [0:0];
+	reg [35:0] claim;
+	wire [0:0] complete_we;
+	wire [5:0] complete_id [0:0];
+	reg [35:0] complete;
+	wire [6:0] cc_id;
+	wire [71:0] prio;
+	wire [1:0] threshold [0:0];
+	assign cc_id = irq_id_o;
+	always @(*) begin
+		claim = {36 {1'sb0}};
+		begin : sv2v_autoblock_137
+			reg signed [31:0] i;
+			for (i = 0; i < rv_plic_reg_pkg_NumTarget; i = i + 1)
+				if (claim_re[i])
+					claim[claim_id[i]] = 1'b1;
+		end
+	end
+	always @(*) begin
+		complete = {36 {1'sb0}};
+		begin : sv2v_autoblock_138
+			reg signed [31:0] i;
+			for (i = 0; i < rv_plic_reg_pkg_NumTarget; i = i + 1)
+				if (complete_we[i])
+					complete[complete_id[i]] = 1'b1;
+		end
+	end
+	assign prio[70+:PRIOW] = reg2hw[118-:2];
+	assign prio[68+:PRIOW] = reg2hw[116-:2];
+	assign prio[66+:PRIOW] = reg2hw[114-:2];
+	assign prio[64+:PRIOW] = reg2hw[112-:2];
+	assign prio[62+:PRIOW] = reg2hw[110-:2];
+	assign prio[60+:PRIOW] = reg2hw[108-:2];
+	assign prio[58+:PRIOW] = reg2hw[106-:2];
+	assign prio[56+:PRIOW] = reg2hw[104-:2];
+	assign prio[54+:PRIOW] = reg2hw[102-:2];
+	assign prio[52+:PRIOW] = reg2hw[100-:2];
+	assign prio[50+:PRIOW] = reg2hw[98-:2];
+	assign prio[48+:PRIOW] = reg2hw[96-:2];
+	assign prio[46+:PRIOW] = reg2hw[94-:2];
+	assign prio[44+:PRIOW] = reg2hw[92-:2];
+	assign prio[42+:PRIOW] = reg2hw[90-:2];
+	assign prio[40+:PRIOW] = reg2hw[88-:2];
+	assign prio[38+:PRIOW] = reg2hw[86-:2];
+	assign prio[36+:PRIOW] = reg2hw[84-:2];
+	assign prio[34+:PRIOW] = reg2hw[82-:2];
+	assign prio[32+:PRIOW] = reg2hw[80-:2];
+	assign prio[30+:PRIOW] = reg2hw[78-:2];
+	assign prio[28+:PRIOW] = reg2hw[76-:2];
+	assign prio[26+:PRIOW] = reg2hw[74-:2];
+	assign prio[24+:PRIOW] = reg2hw[72-:2];
+	assign prio[22+:PRIOW] = reg2hw[70-:2];
+	assign prio[20+:PRIOW] = reg2hw[68-:2];
+	assign prio[18+:PRIOW] = reg2hw[66-:2];
+	assign prio[16+:PRIOW] = reg2hw[64-:2];
+	assign prio[14+:PRIOW] = reg2hw[62-:2];
+	assign prio[12+:PRIOW] = reg2hw[60-:2];
+	assign prio[10+:PRIOW] = reg2hw[58-:2];
+	assign prio[8+:PRIOW] = reg2hw[56-:2];
+	assign prio[6+:PRIOW] = reg2hw[54-:2];
+	assign prio[4+:PRIOW] = reg2hw[52-:2];
+	assign prio[2+:PRIOW] = reg2hw[50-:2];
+	assign prio[0+:PRIOW] = reg2hw[48-:2];
+	generate
+		genvar s;
+		for (s = 0; s < 36; s = s + 1) begin : gen_ie0
+			assign ie[0][s] = reg2hw[11 + s];
+		end
+	endgenerate
+	assign threshold[0] = reg2hw[10-:2];
+	assign claim_re[0] = reg2hw[1];
+	assign claim_id[0] = irq_id_o[0+:7];
+	assign complete_we[0] = reg2hw[2];
+	assign complete_id[0] = reg2hw[8-:6];
+	assign hw2reg[5-:6] = cc_id[0+:7];
+	assign msip_o[0] = reg2hw[-0];
+	generate
+		for (s = 0; s < 36; s = s + 1) begin : gen_ip
+			assign hw2reg[6 + (s * 2)] = 1'b1;
+			assign hw2reg[6 + ((s * 2) + 1)] = ip[s];
+		end
+	endgenerate
+	generate
+		for (s = 0; s < 36; s = s + 1) begin : gen_le
+			assign le[s] = reg2hw[119 + s];
+		end
+	endgenerate
+	rv_plic_gateway #(.N_SOURCE(rv_plic_reg_pkg_NumSrc)) u_gateway(
+		.clk_i(clk_i),
+		.rst_ni(rst_ni),
+		.src_i(intr_src_i),
+		.le_i(le),
+		.claim_i(claim),
+		.complete_i(complete),
+		.ip_o(ip)
+	);
+	generate
+		genvar i;
+		for (i = 0; i < rv_plic_reg_pkg_NumTarget; i = i + 1) begin : gen_target
+			rv_plic_target #(
+				.N_SOURCE(rv_plic_reg_pkg_NumSrc),
+				.MAX_PRIO(MAX_PRIO)
+			) u_target(
+				.clk_i(clk_i),
+				.rst_ni(rst_ni),
+				.ip_i(ip),
+				.ie_i(ie[i]),
+				.prio_i(prio),
+				.threshold_i(threshold[i]),
+				.irq_o(irq_o[i]),
+				.irq_id_o(irq_id_o[i * 7+:7])
+			);
+		end
+	endgenerate
+	rv_plic_reg_top u_reg(
+		.clk_i(clk_i),
+		.rst_ni(rst_ni),
+		.tl_i(tl_i),
+		.tl_o(tl_o),
+		.reg2hw(reg2hw),
+		.hw2reg(hw2reg),
+		.devmode_i(1'b1)
+	);
+endmodule
+module rv_plic_target (
+	clk_i,
+	rst_ni,
+	ip_i,
+	ie_i,
+	prio_i,
+	threshold_i,
+	irq_o,
+	irq_id_o
+);
+	parameter signed [31:0] N_SOURCE = 32;
+	parameter signed [31:0] MAX_PRIO = 7;
+	localparam signed [31:0] SrcWidth = $clog2(N_SOURCE + 1);
+	localparam signed [31:0] PrioWidth = $clog2(MAX_PRIO + 1);
+	input wire clk_i;
+	input wire rst_ni;
+	input wire [N_SOURCE - 1:0] ip_i;
+	input wire [N_SOURCE - 1:0] ie_i;
+	input wire [(0 >= (N_SOURCE - 1) ? ((2 - N_SOURCE) * PrioWidth) + (((N_SOURCE - 1) * PrioWidth) - 1) : (N_SOURCE * PrioWidth) - 1):(0 >= (N_SOURCE - 1) ? (N_SOURCE - 1) * PrioWidth : 0)] prio_i;
+	input wire [PrioWidth - 1:0] threshold_i;
+	output wire irq_o;
+	output wire [SrcWidth - 1:0] irq_id_o;
+	localparam signed [31:0] NumLevels = $clog2(N_SOURCE);
+	wire [(2 ** (NumLevels + 1)) - 2:0] is_tree;
+	wire [(((2 ** (NumLevels + 1)) - 2) >= 0 ? (((2 ** (NumLevels + 1)) - 1) * SrcWidth) - 1 : ((3 - (2 ** (NumLevels + 1))) * SrcWidth) + ((((2 ** (NumLevels + 1)) - 2) * SrcWidth) - 1)):(((2 ** (NumLevels + 1)) - 2) >= 0 ? 0 : ((2 ** (NumLevels + 1)) - 2) * SrcWidth)] id_tree;
+	wire [(((2 ** (NumLevels + 1)) - 2) >= 0 ? (((2 ** (NumLevels + 1)) - 1) * PrioWidth) - 1 : ((3 - (2 ** (NumLevels + 1))) * PrioWidth) + ((((2 ** (NumLevels + 1)) - 2) * PrioWidth) - 1)):(((2 ** (NumLevels + 1)) - 2) >= 0 ? 0 : ((2 ** (NumLevels + 1)) - 2) * PrioWidth)] max_tree;
+	generate
+		genvar level;
+		for (level = 0; level < (NumLevels + 1); level = level + 1) begin : gen_tree
+			localparam signed [31:0] Base0 = (2 ** level) - 1;
+			localparam signed [31:0] Base1 = (2 ** (level + 1)) - 1;
+			genvar offset;
+			for (offset = 0; offset < (2 ** level); offset = offset + 1) begin : gen_level
+				localparam signed [31:0] Pa = Base0 + offset;
+				localparam signed [31:0] C0 = Base1 + (2 * offset);
+				localparam signed [31:0] C1 = (Base1 + (2 * offset)) + 1;
+				if (level == NumLevels) begin : gen_leafs
+					if (offset < N_SOURCE) begin : gen_assign
+						assign is_tree[Pa] = ip_i[offset] & ie_i[offset];
+						assign id_tree[(((2 ** (NumLevels + 1)) - 2) >= 0 ? Pa : ((2 ** (NumLevels + 1)) - 2) - Pa) * SrcWidth+:SrcWidth] = offset;
+						assign max_tree[(((2 ** (NumLevels + 1)) - 2) >= 0 ? Pa : ((2 ** (NumLevels + 1)) - 2) - Pa) * PrioWidth+:PrioWidth] = prio_i[(0 >= (N_SOURCE - 1) ? offset : (N_SOURCE - 1) - offset) * PrioWidth+:PrioWidth];
+					end
+					else begin : gen_tie_off
+						assign is_tree[Pa] = 1'b0;
+						assign id_tree[(((2 ** (NumLevels + 1)) - 2) >= 0 ? Pa : ((2 ** (NumLevels + 1)) - 2) - Pa) * SrcWidth+:SrcWidth] = {SrcWidth {1'sb0}};
+						assign max_tree[(((2 ** (NumLevels + 1)) - 2) >= 0 ? Pa : ((2 ** (NumLevels + 1)) - 2) - Pa) * PrioWidth+:PrioWidth] = {PrioWidth {1'sb0}};
+					end
+				end
+				else begin : gen_nodes
+					wire sel;
+					assign sel = (~is_tree[C0] & is_tree[C1]) | ((is_tree[C0] & is_tree[C1]) & (max_tree[(((2 ** (NumLevels + 1)) - 2) >= 0 ? C1 : ((2 ** (NumLevels + 1)) - 2) - C1) * PrioWidth+:PrioWidth] > max_tree[(((2 ** (NumLevels + 1)) - 2) >= 0 ? C0 : ((2 ** (NumLevels + 1)) - 2) - C0) * PrioWidth+:PrioWidth]));
+					assign is_tree[Pa] = (sel & is_tree[C1]) | (~sel & is_tree[C0]);
+					assign id_tree[(((2 ** (NumLevels + 1)) - 2) >= 0 ? Pa : ((2 ** (NumLevels + 1)) - 2) - Pa) * SrcWidth+:SrcWidth] = ({SrcWidth {sel}} & id_tree[(((2 ** (NumLevels + 1)) - 2) >= 0 ? C1 : ((2 ** (NumLevels + 1)) - 2) - C1) * SrcWidth+:SrcWidth]) | ({SrcWidth {~sel}} & id_tree[(((2 ** (NumLevels + 1)) - 2) >= 0 ? C0 : ((2 ** (NumLevels + 1)) - 2) - C0) * SrcWidth+:SrcWidth]);
+					assign max_tree[(((2 ** (NumLevels + 1)) - 2) >= 0 ? Pa : ((2 ** (NumLevels + 1)) - 2) - Pa) * PrioWidth+:PrioWidth] = ({PrioWidth {sel}} & max_tree[(((2 ** (NumLevels + 1)) - 2) >= 0 ? C1 : ((2 ** (NumLevels + 1)) - 2) - C1) * PrioWidth+:PrioWidth]) | ({PrioWidth {~sel}} & max_tree[(((2 ** (NumLevels + 1)) - 2) >= 0 ? C0 : ((2 ** (NumLevels + 1)) - 2) - C0) * PrioWidth+:PrioWidth]);
+				end
+			end
+		end
+	endgenerate
+	wire irq_d;
+	reg irq_q;
+	wire [SrcWidth - 1:0] irq_id_d;
+	reg [SrcWidth - 1:0] irq_id_q;
+	assign irq_d = (max_tree[(((2 ** (NumLevels + 1)) - 2) >= 0 ? 0 : (2 ** (NumLevels + 1)) - 2) * PrioWidth+:PrioWidth] > threshold_i ? is_tree[0] : 1'b0);
+	assign irq_id_d = (is_tree[0] ? id_tree[(((2 ** (NumLevels + 1)) - 2) >= 0 ? 0 : (2 ** (NumLevels + 1)) - 2) * SrcWidth+:SrcWidth] : {SrcWidth {1'sb0}});
+	always @(posedge clk_i or negedge rst_ni) begin : gen_regs
+		if (!rst_ni) begin
+			irq_q <= 1'b0;
+			irq_id_q <= {SrcWidth {1'sb0}};
+		end
+		else begin
+			irq_q <= irq_d;
+			irq_id_q <= irq_id_d;
+		end
+	end
+	assign irq_o = irq_q;
+	assign irq_id_o = irq_id_q;
+endmodule
+module rv_timer_reg_top (
+	clk_i,
+	rst_ni,
+	tl_i,
+	tl_o,
+	reg2hw,
+	hw2reg,
+	devmode_i
+);
+	input wire clk_i;
+	input wire rst_ni;
+	localparam signed [31:0] tlul_pkg_TL_AIW = 8;
+	localparam signed [31:0] tlul_pkg_TL_AW = 32;
+	localparam signed [31:0] tlul_pkg_TL_DW = 32;
+	localparam signed [31:0] tlul_pkg_TL_DBW = 4;
+	localparam signed [31:0] tlul_pkg_TL_SZW = 2;
+	input wire [85:0] tl_i;
+	localparam signed [31:0] tlul_pkg_TL_DIW = 1;
+	output wire [51:0] tl_o;
+	output wire [154:0] reg2hw;
+	input wire [67:0] hw2reg;
+	input devmode_i;
+	localparam signed [31:0] AW = 9;
+	localparam signed [31:0] DW = 32;
+	localparam signed [31:0] DBW = 4;
+	wire reg_we;
+	wire reg_re;
+	wire [8:0] reg_addr;
+	wire [31:0] reg_wdata;
+	wire [3:0] reg_be;
+	wire [31:0] reg_rdata;
+	wire reg_error;
+	wire addrmiss;
+	reg wr_err;
+	reg [31:0] reg_rdata_next;
+	wire [85:0] tl_reg_h2d;
+	wire [51:0] tl_reg_d2h;
+	assign tl_reg_h2d = tl_i;
+	assign tl_o = tl_reg_d2h;
+	tlul_adapter_reg #(
+		.RegAw(AW),
+		.RegDw(DW)
+	) u_reg_if(
+		.clk_i(clk_i),
+		.rst_ni(rst_ni),
+		.tl_i(tl_reg_h2d),
+		.tl_o(tl_reg_d2h),
+		.we_o(reg_we),
+		.re_o(reg_re),
+		.addr_o(reg_addr),
+		.wdata_o(reg_wdata),
+		.be_o(reg_be),
+		.rdata_i(reg_rdata),
+		.error_i(reg_error)
+	);
+	assign reg_rdata = reg_rdata_next;
+	assign reg_error = (devmode_i & addrmiss) | wr_err;
+	wire ctrl_qs;
+	wire ctrl_wd;
+	wire ctrl_we;
+	wire [11:0] cfg0_prescale_qs;
+	wire [11:0] cfg0_prescale_wd;
+	wire cfg0_prescale_we;
+	wire [7:0] cfg0_step_qs;
+	wire [7:0] cfg0_step_wd;
+	wire cfg0_step_we;
+	wire [31:0] timer_v_lower0_qs;
+	wire [31:0] timer_v_lower0_wd;
+	wire timer_v_lower0_we;
+	wire [31:0] timer_v_upper0_qs;
+	wire [31:0] timer_v_upper0_wd;
+	wire timer_v_upper0_we;
+	wire [31:0] compare_lower0_0_qs;
+	wire [31:0] compare_lower0_0_wd;
+	wire compare_lower0_0_we;
+	wire [31:0] compare_upper0_0_qs;
+	wire [31:0] compare_upper0_0_wd;
+	wire compare_upper0_0_we;
+	wire intr_enable0_qs;
+	wire intr_enable0_wd;
+	wire intr_enable0_we;
+	wire intr_state0_qs;
+	wire intr_state0_wd;
+	wire intr_state0_we;
+	wire intr_test0_wd;
+	wire intr_test0_we;
+	prim_subreg #(
+		.DW(1),
+		.SWACCESS("RW"),
+		.RESVAL(1'h0)
+	) u_ctrl(
+		.clk_i(clk_i),
+		.rst_ni(rst_ni),
+		.we(ctrl_we),
+		.wd(ctrl_wd),
+		.de(1'b0),
+		.d(1'b0),
+		.qe(),
+		.q(reg2hw[154]),
+		.qs(ctrl_qs)
+	);
+	prim_subreg #(
+		.DW(12),
+		.SWACCESS("RW"),
+		.RESVAL(12'h000)
+	) u_cfg0_prescale(
+		.clk_i(clk_i),
+		.rst_ni(rst_ni),
+		.we(cfg0_prescale_we),
+		.wd(cfg0_prescale_wd),
+		.de(1'b0),
+		.d({12 {1'sb0}}),
+		.qe(),
+		.q(reg2hw[153-:12]),
+		.qs(cfg0_prescale_qs)
+	);
+	prim_subreg #(
+		.DW(8),
+		.SWACCESS("RW"),
+		.RESVAL(8'h01)
+	) u_cfg0_step(
+		.clk_i(clk_i),
+		.rst_ni(rst_ni),
+		.we(cfg0_step_we),
+		.wd(cfg0_step_wd),
+		.de(1'b0),
+		.d({8 {1'sb0}}),
+		.qe(),
+		.q(reg2hw[141-:8]),
+		.qs(cfg0_step_qs)
+	);
+	prim_subreg #(
+		.DW(32),
+		.SWACCESS("RW"),
+		.RESVAL(32'h00000000)
+	) u_timer_v_lower0(
+		.clk_i(clk_i),
+		.rst_ni(rst_ni),
+		.we(timer_v_lower0_we),
+		.wd(timer_v_lower0_wd),
+		.de(hw2reg[35]),
+		.d(hw2reg[67-:32]),
+		.qe(),
+		.q(reg2hw[133-:32]),
+		.qs(timer_v_lower0_qs)
+	);
+	prim_subreg #(
+		.DW(32),
+		.SWACCESS("RW"),
+		.RESVAL(32'h00000000)
+	) u_timer_v_upper0(
+		.clk_i(clk_i),
+		.rst_ni(rst_ni),
+		.we(timer_v_upper0_we),
+		.wd(timer_v_upper0_wd),
+		.de(hw2reg[2]),
+		.d(hw2reg[34-:32]),
+		.qe(),
+		.q(reg2hw[101-:32]),
+		.qs(timer_v_upper0_qs)
+	);
+	prim_subreg #(
+		.DW(32),
+		.SWACCESS("RW"),
+		.RESVAL(32'hffffffff)
+	) u_compare_lower0_0(
+		.clk_i(clk_i),
+		.rst_ni(rst_ni),
+		.we(compare_lower0_0_we),
+		.wd(compare_lower0_0_wd),
+		.de(1'b0),
+		.d({32 {1'sb0}}),
+		.qe(reg2hw[37]),
+		.q(reg2hw[69-:32]),
+		.qs(compare_lower0_0_qs)
+	);
+	prim_subreg #(
+		.DW(32),
+		.SWACCESS("RW"),
+		.RESVAL(32'hffffffff)
+	) u_compare_upper0_0(
+		.clk_i(clk_i),
+		.rst_ni(rst_ni),
+		.we(compare_upper0_0_we),
+		.wd(compare_upper0_0_wd),
+		.de(1'b0),
+		.d({32 {1'sb0}}),
+		.qe(reg2hw[4]),
+		.q(reg2hw[36-:32]),
+		.qs(compare_upper0_0_qs)
+	);
+	prim_subreg #(
+		.DW(1),
+		.SWACCESS("RW"),
+		.RESVAL(1'h0)
+	) u_intr_enable0(
+		.clk_i(clk_i),
+		.rst_ni(rst_ni),
+		.we(intr_enable0_we),
+		.wd(intr_enable0_wd),
+		.de(1'b0),
+		.d(1'b0),
+		.qe(),
+		.q(reg2hw[3]),
+		.qs(intr_enable0_qs)
+	);
+	prim_subreg #(
+		.DW(1),
+		.SWACCESS("W1C"),
+		.RESVAL(1'h0)
+	) u_intr_state0(
+		.clk_i(clk_i),
+		.rst_ni(rst_ni),
+		.we(intr_state0_we),
+		.wd(intr_state0_wd),
+		.de(hw2reg[0]),
+		.d(hw2reg[1]),
+		.qe(),
+		.q(reg2hw[2]),
+		.qs(intr_state0_qs)
+	);
+	prim_subreg_ext #(.DW(1)) u_intr_test0(
+		.re(1'b0),
+		.we(intr_test0_we),
+		.wd(intr_test0_wd),
+		.d(1'b0),
+		.qre(),
+		.qe(reg2hw[0]),
+		.q(reg2hw[1]),
+		.qs()
+	);
+	reg [8:0] addr_hit;
+	localparam signed [31:0] rv_timer_reg_pkg_BlockAw = 9;
+	localparam [8:0] rv_timer_reg_pkg_RV_TIMER_CFG0_OFFSET = 9'h100;
+	localparam [8:0] rv_timer_reg_pkg_RV_TIMER_COMPARE_LOWER0_0_OFFSET = 9'h10c;
+	localparam [8:0] rv_timer_reg_pkg_RV_TIMER_COMPARE_UPPER0_0_OFFSET = 9'h110;
+	localparam [8:0] rv_timer_reg_pkg_RV_TIMER_CTRL_OFFSET = 9'h000;
+	localparam [8:0] rv_timer_reg_pkg_RV_TIMER_INTR_ENABLE0_OFFSET = 9'h114;
+	localparam [8:0] rv_timer_reg_pkg_RV_TIMER_INTR_STATE0_OFFSET = 9'h118;
+	localparam [8:0] rv_timer_reg_pkg_RV_TIMER_INTR_TEST0_OFFSET = 9'h11c;
+	localparam [8:0] rv_timer_reg_pkg_RV_TIMER_TIMER_V_LOWER0_OFFSET = 9'h104;
+	localparam [8:0] rv_timer_reg_pkg_RV_TIMER_TIMER_V_UPPER0_OFFSET = 9'h108;
+	always @(*) begin
+		addr_hit = {9 {1'sb0}};
+		addr_hit[0] = reg_addr == rv_timer_reg_pkg_RV_TIMER_CTRL_OFFSET;
+		addr_hit[1] = reg_addr == rv_timer_reg_pkg_RV_TIMER_CFG0_OFFSET;
+		addr_hit[2] = reg_addr == rv_timer_reg_pkg_RV_TIMER_TIMER_V_LOWER0_OFFSET;
+		addr_hit[3] = reg_addr == rv_timer_reg_pkg_RV_TIMER_TIMER_V_UPPER0_OFFSET;
+		addr_hit[4] = reg_addr == rv_timer_reg_pkg_RV_TIMER_COMPARE_LOWER0_0_OFFSET;
+		addr_hit[5] = reg_addr == rv_timer_reg_pkg_RV_TIMER_COMPARE_UPPER0_0_OFFSET;
+		addr_hit[6] = reg_addr == rv_timer_reg_pkg_RV_TIMER_INTR_ENABLE0_OFFSET;
+		addr_hit[7] = reg_addr == rv_timer_reg_pkg_RV_TIMER_INTR_STATE0_OFFSET;
+		addr_hit[8] = reg_addr == rv_timer_reg_pkg_RV_TIMER_INTR_TEST0_OFFSET;
+	end
+	assign addrmiss = (reg_re || reg_we ? ~|addr_hit : 1'b0);
+	localparam [35:0] rv_timer_reg_pkg_RV_TIMER_PERMIT = 36'b000101111111111111111111000100010001;
+	always @(*) begin
+		wr_err = 1'b0;
+		if ((addr_hit[0] && reg_we) && (rv_timer_reg_pkg_RV_TIMER_PERMIT[32+:4] != (rv_timer_reg_pkg_RV_TIMER_PERMIT[32+:4] & reg_be)))
+			wr_err = 1'b1;
+		if ((addr_hit[1] && reg_we) && (rv_timer_reg_pkg_RV_TIMER_PERMIT[28+:4] != (rv_timer_reg_pkg_RV_TIMER_PERMIT[28+:4] & reg_be)))
+			wr_err = 1'b1;
+		if ((addr_hit[2] && reg_we) && (rv_timer_reg_pkg_RV_TIMER_PERMIT[24+:4] != (rv_timer_reg_pkg_RV_TIMER_PERMIT[24+:4] & reg_be)))
+			wr_err = 1'b1;
+		if ((addr_hit[3] && reg_we) && (rv_timer_reg_pkg_RV_TIMER_PERMIT[20+:4] != (rv_timer_reg_pkg_RV_TIMER_PERMIT[20+:4] & reg_be)))
+			wr_err = 1'b1;
+		if ((addr_hit[4] && reg_we) && (rv_timer_reg_pkg_RV_TIMER_PERMIT[16+:4] != (rv_timer_reg_pkg_RV_TIMER_PERMIT[16+:4] & reg_be)))
+			wr_err = 1'b1;
+		if ((addr_hit[5] && reg_we) && (rv_timer_reg_pkg_RV_TIMER_PERMIT[12+:4] != (rv_timer_reg_pkg_RV_TIMER_PERMIT[12+:4] & reg_be)))
+			wr_err = 1'b1;
+		if ((addr_hit[6] && reg_we) && (rv_timer_reg_pkg_RV_TIMER_PERMIT[8+:4] != (rv_timer_reg_pkg_RV_TIMER_PERMIT[8+:4] & reg_be)))
+			wr_err = 1'b1;
+		if ((addr_hit[7] && reg_we) && (rv_timer_reg_pkg_RV_TIMER_PERMIT[4+:4] != (rv_timer_reg_pkg_RV_TIMER_PERMIT[4+:4] & reg_be)))
+			wr_err = 1'b1;
+		if ((addr_hit[8] && reg_we) && (rv_timer_reg_pkg_RV_TIMER_PERMIT[0+:4] != (rv_timer_reg_pkg_RV_TIMER_PERMIT[0+:4] & reg_be)))
+			wr_err = 1'b1;
+	end
+	assign ctrl_we = (addr_hit[0] & reg_we) & ~wr_err;
+	assign ctrl_wd = reg_wdata[0];
+	assign cfg0_prescale_we = (addr_hit[1] & reg_we) & ~wr_err;
+	assign cfg0_prescale_wd = reg_wdata[11:0];
+	assign cfg0_step_we = (addr_hit[1] & reg_we) & ~wr_err;
+	assign cfg0_step_wd = reg_wdata[23:16];
+	assign timer_v_lower0_we = (addr_hit[2] & reg_we) & ~wr_err;
+	assign timer_v_lower0_wd = reg_wdata[31:0];
+	assign timer_v_upper0_we = (addr_hit[3] & reg_we) & ~wr_err;
+	assign timer_v_upper0_wd = reg_wdata[31:0];
+	assign compare_lower0_0_we = (addr_hit[4] & reg_we) & ~wr_err;
+	assign compare_lower0_0_wd = reg_wdata[31:0];
+	assign compare_upper0_0_we = (addr_hit[5] & reg_we) & ~wr_err;
+	assign compare_upper0_0_wd = reg_wdata[31:0];
+	assign intr_enable0_we = (addr_hit[6] & reg_we) & ~wr_err;
+	assign intr_enable0_wd = reg_wdata[0];
+	assign intr_state0_we = (addr_hit[7] & reg_we) & ~wr_err;
+	assign intr_state0_wd = reg_wdata[0];
+	assign intr_test0_we = (addr_hit[8] & reg_we) & ~wr_err;
+	assign intr_test0_wd = reg_wdata[0];
+	always @(*) begin
+		reg_rdata_next = {32 {1'sb0}};
+		case (1'b1)
+			addr_hit[0]: reg_rdata_next[0] = ctrl_qs;
+			addr_hit[1]: begin
+				reg_rdata_next[11:0] = cfg0_prescale_qs;
+				reg_rdata_next[23:16] = cfg0_step_qs;
+			end
+			addr_hit[2]: reg_rdata_next[31:0] = timer_v_lower0_qs;
+			addr_hit[3]: reg_rdata_next[31:0] = timer_v_upper0_qs;
+			addr_hit[4]: reg_rdata_next[31:0] = compare_lower0_0_qs;
+			addr_hit[5]: reg_rdata_next[31:0] = compare_upper0_0_qs;
+			addr_hit[6]: reg_rdata_next[0] = intr_enable0_qs;
+			addr_hit[7]: reg_rdata_next[0] = intr_state0_qs;
+			addr_hit[8]: reg_rdata_next[0] = 1'b0;
+			default: reg_rdata_next = {32 {1'sb1}};
+		endcase
+	end
+endmodule
+module rv_timer (
+	clk_i,
+	rst_ni,
+	tl_i,
+	tl_o,
+	intr_timer_expired_0_0_o
+);
+	input wire clk_i;
+	input wire rst_ni;
+	localparam signed [31:0] tlul_pkg_TL_AIW = 8;
+	localparam signed [31:0] tlul_pkg_TL_AW = 32;
+	localparam signed [31:0] tlul_pkg_TL_DW = 32;
+	localparam signed [31:0] tlul_pkg_TL_DBW = 4;
+	localparam signed [31:0] tlul_pkg_TL_SZW = 2;
+	input wire [85:0] tl_i;
+	localparam signed [31:0] tlul_pkg_TL_DIW = 1;
+	output wire [51:0] tl_o;
+	output wire intr_timer_expired_0_0_o;
+	localparam signed [31:0] N_HARTS = 1;
+	localparam signed [31:0] N_TIMERS = 1;
+	wire [154:0] reg2hw;
+	wire [67:0] hw2reg;
+	wire [0:0] active;
+	wire [11:0] prescaler;
+	wire [7:0] step;
+	wire [0:0] tick;
+	wire [63:0] mtime_d [0:0];
+	wire [63:0] mtime [0:0];
+	wire [63:0] mtimecmp;
+	wire mtimecmp_update [0:0][0:0];
+	wire [0:0] intr_timer_set;
+	wire [0:0] intr_timer_en;
+	wire [0:0] intr_timer_test_q;
+	wire [0:0] intr_timer_test_qe;
+	wire [0:0] intr_timer_state_q;
+	wire [0:0] intr_timer_state_de;
+	wire [0:0] intr_timer_state_d;
+	wire [0:0] intr_out;
+	assign active[0] = reg2hw[154];
+	assign prescaler = {reg2hw[153-:12]};
+	assign step = {reg2hw[141-:8]};
+	assign hw2reg[2] = tick[0];
+	assign hw2reg[35] = tick[0];
+	assign hw2reg[34-:32] = mtime_d[0][63:32];
+	assign hw2reg[67-:32] = mtime_d[0][31:0];
+	assign mtime[0] = {reg2hw[101-:32], reg2hw[133-:32]};
+	assign mtimecmp = {reg2hw[36-:32], reg2hw[69-:32]};
+	assign mtimecmp_update[0][0] = reg2hw[4] | reg2hw[37];
+	assign intr_timer_expired_0_0_o = intr_out[0];
+	assign intr_timer_en = reg2hw[3];
+	assign intr_timer_state_q = reg2hw[2];
+	assign intr_timer_test_q = reg2hw[1];
+	assign intr_timer_test_qe = reg2hw[0];
+	assign hw2reg[0] = intr_timer_state_de | mtimecmp_update[0][0];
+	assign hw2reg[1] = intr_timer_state_d & ~mtimecmp_update[0][0];
+	generate
+		genvar h;
+		for (h = 0; h < N_HARTS; h = h + 1) begin : gen_harts
+			prim_intr_hw #(.Width(N_TIMERS)) u_intr_hw(
+				.clk_i(clk_i),
+				.rst_ni(rst_ni),
+				.event_intr_i(intr_timer_set),
+				.reg2hw_intr_enable_q_i(intr_timer_en[h * N_TIMERS+:N_TIMERS]),
+				.reg2hw_intr_test_q_i(intr_timer_test_q[h * N_TIMERS+:N_TIMERS]),
+				.reg2hw_intr_test_qe_i(intr_timer_test_qe[h]),
+				.reg2hw_intr_state_q_i(intr_timer_state_q[h * N_TIMERS+:N_TIMERS]),
+				.hw2reg_intr_state_de_o(intr_timer_state_de),
+				.hw2reg_intr_state_d_o(intr_timer_state_d[h * N_TIMERS+:N_TIMERS]),
+				.intr_o(intr_out[h * N_TIMERS+:N_TIMERS])
+			);
+			timer_core #(.N(N_TIMERS)) u_core(
+				.clk_i(clk_i),
+				.rst_ni(rst_ni),
+				.active(active[h]),
+				.prescaler(prescaler[h * 12+:12]),
+				.step(step[h * 8+:8]),
+				.tick(tick[h]),
+				.mtime_d(mtime_d[h]),
+				.mtime(mtime[h]),
+				.mtimecmp(mtimecmp[64 * h+:64]),
+				.intr(intr_timer_set[h * N_TIMERS+:N_TIMERS])
+			);
+		end
+	endgenerate
+	rv_timer_reg_top u_reg(
+		.clk_i(clk_i),
+		.rst_ni(rst_ni),
+		.tl_i(tl_i),
+		.tl_o(tl_o),
+		.reg2hw(reg2hw),
+		.hw2reg(hw2reg),
+		.devmode_i(1'b1)
+	);
+endmodule
+module spi_clgen (
+	clk_i,
+	rst_ni,
+	enable,
+	go,
+	last_clk,
+	divider,
+	clk_out,
+	pos_edge,
+	neg_edge
+);
+	input wire clk_i;
+	input wire rst_ni;
+	input wire enable;
+	input wire go;
+	input wire last_clk;
+	input wire [15:0] divider;
+	output reg clk_out;
+	output reg pos_edge;
+	output reg neg_edge;
+	reg [15:0] cnt;
+	wire cnt_zero;
+	wire cnt_one;
+	assign cnt_zero = cnt == {16 {1'b0}};
+	assign cnt_one = cnt == {{15 {1'b0}}, 1'b1};
+	always @(posedge clk_i or negedge rst_ni)
+		if (~rst_ni)
+			cnt <= {16 {1'b1}};
+		else if (!enable || cnt_zero)
+			cnt <= divider;
+		else
+			cnt <= cnt - {{15 {1'b0}}, 1'b1};
+	always @(posedge clk_i or negedge rst_ni)
+		if (~rst_ni)
+			clk_out <= 1'b0;
+		else
+			clk_out <= ((enable && cnt_zero) && (!last_clk || clk_out) ? ~clk_out : clk_out);
+	always @(posedge clk_i or negedge rst_ni)
+		if (~rst_ni) begin
+			pos_edge <= 1'b0;
+			neg_edge <= 1'b0;
+		end
+		else begin
+			pos_edge <= (((enable && !clk_out) && cnt_one) || (!(|divider) && clk_out)) || ((!(|divider) && go) && !enable);
+			neg_edge <= ((enable && clk_out) && cnt_one) || ((!(|divider) && !clk_out) && enable);
+		end
+endmodule
+module spi_core (
+	clk_i,
+	rst_ni,
+	addr_i,
+	wdata_i,
+	rdata_o,
+	be_i,
+	we_i,
+	re_i,
+	error_o,
+	intr_rx_o,
+	intr_tx_o,
+	ss_o,
+	sclk_o,
+	sd_o,
+	sd_oe,
+	sd_i
+);
+	input wire clk_i;
+	input wire rst_ni;
+	input wire [7:0] addr_i;
+	input wire [31:0] wdata_i;
+	output reg [31:0] rdata_o;
+	input wire [3:0] be_i;
+	input wire we_i;
+	input wire re_i;
+	output reg error_o;
+	output reg intr_rx_o;
+	output reg intr_tx_o;
+	output wire [3:0] ss_o;
+	output wire sclk_o;
+	output wire sd_o;
+	output reg sd_oe;
+	input wire sd_i;
+	reg [15:0] divider;
+	reg [15:0] ctrl;
+	reg [3:0] ss;
+	reg [31:0] wb_dat;
+	wire [31:0] rx;
+	wire rx_negedge;
+	wire tx_negedge;
+	wire [4:0] char_len;
+	wire go;
+	wire lsb;
+	wire ie;
+	wire ass;
+	wire spi_divider_sel;
+	wire spi_ctrl_sel;
+	wire spi_tx_sel;
+	wire spi_ss_sel;
+	wire tip;
+	wire pos_edge;
+	wire neg_edge;
+	wire last_bit;
+	wire tx_en;
+	wire rx_en;
+	assign spi_divider_sel = (we_i & ~re_i) & (addr_i[6:2] == 5);
+	assign spi_ctrl_sel = (we_i & ~re_i) & (addr_i[6:2] == 4);
+	assign spi_tx_sel = ((we_i & ~re_i) & (addr_i[6:2] == 0)) & tx_en;
+	assign spi_ss_sel = (we_i & ~re_i) & (addr_i[6:2] == 6);
+	always @(addr_i or rx or ctrl or divider or ss)
+		case (addr_i[6:2])
+			8: wb_dat = rx[31:0];
+			4: wb_dat = ctrl;
+			5: wb_dat = divider;
+			6: wb_dat = ss;
+			default: wb_dat = 32'b00000000000000000000000000000000;
+		endcase
+	always @(posedge clk_i)
+		if (~rst_ni)
+			rdata_o <= 32'b00000000000000000000000000000000;
+		else
+			rdata_o <= wb_dat;
+	wire [1:1] sv2v_tmp_46A40;
+	assign sv2v_tmp_46A40 = 1'b0;
+	always @(*) error_o = sv2v_tmp_46A40;
+	always @(posedge clk_i)
+		if (~rst_ni)
+			intr_tx_o <= 1'b0;
+		else if ((((ie && tip) && last_bit) && pos_edge) && tx_en)
+			intr_tx_o <= 1'b1;
+		else
+			intr_tx_o <= 1'b0;
+	always @(posedge clk_i)
+		if (~rst_ni)
+			intr_rx_o <= 1'b0;
+		else if ((((ie && tip) && last_bit) && pos_edge) && rx_en)
+			intr_rx_o <= 1'b1;
+		else
+			intr_rx_o <= 1'b0;
+	always @(posedge clk_i)
+		if (~rst_ni)
+			divider <= {16 {1'b0}};
+		else if ((spi_divider_sel && we_i) && !tip) begin
+			if (be_i[0])
+				divider[7:0] <= wdata_i[7:0];
+			if (be_i[1])
+				divider[15:8] <= wdata_i[15:8];
+		end
+	always @(posedge clk_i)
+		if (~rst_ni)
+			ctrl <= {16 {1'b0}};
+		else if ((spi_ctrl_sel && we_i) && !tip) begin
+			if (be_i[0])
+				ctrl[7:0] <= wdata_i[7:0] | {7'b0000000, ctrl[0]};
+			if (be_i[1])
+				ctrl[15:8] <= wdata_i[15:8];
+		end
+		else if ((tip && last_bit) && pos_edge)
+			ctrl[8] <= 1'b0;
+	assign rx_negedge = ctrl[9];
+	assign tx_negedge = ctrl[10];
+	assign go = ctrl[8];
+	assign char_len = ctrl[6:0];
+	assign lsb = ctrl[11];
+	assign ie = ctrl[12];
+	assign ass = ctrl[13];
+	assign rx_en = ctrl[15];
+	assign tx_en = ctrl[14];
+	always @(posedge clk_i or negedge rst_ni)
+		if (~rst_ni)
+			sd_oe <= 1'b0;
+		else if (tx_en & !rx_en)
+			sd_oe <= 1'b1;
+		else
+			sd_oe <= 1'b0;
+	always @(posedge clk_i)
+		if (~rst_ni)
+			ss <= {4 {1'b0}};
+		else if ((spi_ss_sel && we_i) && !tip)
+			if (be_i[0])
+				ss <= wdata_i[3:0];
+	assign ss_o = ~((ss & {4 {tip & ass}}) | (ss & {4 {!ass}}));
+	spi_clgen clgen(
+		.clk_i(clk_i),
+		.rst_ni(rst_ni),
+		.go(go),
+		.enable(tip),
+		.last_clk(last_bit),
+		.divider(divider),
+		.clk_out(sclk_o),
+		.pos_edge(pos_edge),
+		.neg_edge(neg_edge)
+	);
+	spi_shift shift(
+		.clk_i(clk_i),
+		.rst_ni(rst_ni),
+		.len(char_len[4:0]),
+		.latch(spi_tx_sel & we_i),
+		.byte_sel(be_i),
+		.lsb(lsb),
+		.go(go),
+		.pos_edge(pos_edge),
+		.neg_edge(neg_edge),
+		.rx_negedge(rx_negedge),
+		.tx_negedge(tx_negedge),
+		.tip(tip),
+		.last(last_bit),
+		.p_in(wdata_i),
+		.p_out(rx),
+		.s_clk(sclk_o),
+		.s_in(sd_i),
+		.s_out(sd_o),
+		.rx_en(rx_en)
+	);
+endmodule
+module spi_shift (
+	clk_i,
+	rst_ni,
+	latch,
+	byte_sel,
+	len,
+	lsb,
+	go,
+	pos_edge,
+	neg_edge,
+	rx_negedge,
+	tx_negedge,
+	tip,
+	last,
+	p_in,
+	p_out,
+	s_clk,
+	s_in,
+	s_out,
+	rx_en
+);
+	input wire clk_i;
+	input wire rst_ni;
+	input wire latch;
+	input wire [3:0] byte_sel;
+	input wire [4:0] len;
+	input wire lsb;
+	input wire go;
+	input wire pos_edge;
+	input wire neg_edge;
+	input wire rx_negedge;
+	input wire tx_negedge;
+	output reg tip;
+	output wire last;
+	input wire [31:0] p_in;
+	output wire [31:0] p_out;
+	input wire s_clk;
+	input wire s_in;
+	output reg s_out;
+	input wire rx_en;
+	reg [5:0] cnt;
+	reg [31:0] data;
+	reg [31:0] data_rx;
+	wire [5:0] tx_bit_pos;
+	wire [5:0] rx_bit_pos;
+	wire rx_clk_i;
+	wire tx_clk_i;
+	assign p_out = data_rx;
+	assign tx_bit_pos = (lsb ? {!(|len), len} - cnt : cnt - {{5 {1'b0}}, 1'b1});
+	assign rx_bit_pos = (lsb ? {!(|len), len} - (rx_negedge ? cnt + {{5 {1'b0}}, 1'b1} : cnt) : (rx_negedge ? cnt : cnt - {{5 {1'b0}}, 1'b1}));
+	assign last = !(|cnt);
+	assign rx_clk_i = (rx_negedge ? neg_edge : pos_edge) && (!last || s_clk);
+	assign tx_clk_i = (tx_negedge ? neg_edge : pos_edge) && !last;
+	always @(posedge clk_i or negedge rst_ni)
+		if (~rst_ni)
+			cnt <= {6 {1'b0}};
+		else if (tip)
+			cnt <= (pos_edge ? cnt - {{5 {1'b0}}, 1'b1} : cnt);
+		else
+			cnt <= (!(|len) ? {1'b1, {5 {1'b0}}} : {1'b0, len});
+	always @(posedge clk_i or negedge rst_ni)
+		if (~rst_ni)
+			tip <= 1'b0;
+		else if (go && ~tip)
+			tip <= 1'b1;
+		else if ((tip && last) && pos_edge)
+			tip <= 1'b0;
+	always @(posedge clk_i or negedge rst_ni)
+		if (~rst_ni)
+			s_out <= 1'b0;
+		else
+			s_out <= (tx_clk_i || !tip ? data[tx_bit_pos[4:0]] : s_out);
+	always @(posedge clk_i)
+		if (~rst_ni)
+			data <= {32 {1'b0}};
+		else if (latch && !tip) begin
+			if (byte_sel[0])
+				data[7:0] <= p_in[7:0];
+			if (byte_sel[1])
+				data[15:8] <= p_in[15:8];
+			if (byte_sel[2])
+				data[23:16] <= p_in[23:16];
+			if (byte_sel[3])
+				data[31:24] <= p_in[31:24];
+		end
+		else if (rx_en && tip)
+			data_rx[rx_bit_pos[4:0]] <= (rx_clk_i ? s_in : data_rx[rx_bit_pos[4:0]]);
+endmodule
+module spi_top (
+	clk_i,
+	rst_ni,
+	tl_i,
+	tl_o,
+	intr_rx_o,
+	intr_tx_o,
+	ss_o,
+	sclk_o,
+	sd_o,
+	sd_oe,
+	sd_i
+);
+	input wire clk_i;
+	input wire rst_ni;
+	localparam signed [31:0] tlul_pkg_TL_AIW = 8;
+	localparam signed [31:0] tlul_pkg_TL_AW = 32;
+	localparam signed [31:0] tlul_pkg_TL_DW = 32;
+	localparam signed [31:0] tlul_pkg_TL_DBW = 4;
+	localparam signed [31:0] tlul_pkg_TL_SZW = 2;
+	input wire [85:0] tl_i;
+	localparam signed [31:0] tlul_pkg_TL_DIW = 1;
+	output wire [51:0] tl_o;
+	output wire intr_rx_o;
+	output wire intr_tx_o;
+	output wire [3:0] ss_o;
+	output wire sclk_o;
+	output wire sd_o;
+	output wire sd_oe;
+	input wire sd_i;
+	localparam signed [31:0] AW = 8;
+	localparam signed [31:0] DW = 32;
+	wire re;
+	wire we;
+	wire [7:0] addr;
+	wire [31:0] wdata;
+	wire [3:0] be;
+	wire [31:0] rdata;
+	wire err;
+	spi_core spi_host(
+		.clk_i(clk_i),
+		.rst_ni(rst_ni),
+		.addr_i(addr),
+		.wdata_i(wdata),
+		.rdata_o(rdata),
+		.be_i(be),
+		.we_i(we),
+		.re_i(re),
+		.error_o(err),
+		.intr_rx_o(intr_rx_o),
+		.intr_tx_o(intr_tx_o),
+		.ss_o(ss_o),
+		.sclk_o(sclk_o),
+		.sd_o(sd_o),
+		.sd_oe(sd_oe),
+		.sd_i(sd_i)
+	);
+	tlul_adapter_reg #(
+		.RegAw(AW),
+		.RegDw(DW)
+	) u_reg_if(
+		.clk_i(clk_i),
+		.rst_ni(rst_ni),
+		.tl_i(tl_i),
+		.tl_o(tl_o),
+		.we_o(we),
+		.re_o(re),
+		.addr_o(addr),
+		.wdata_o(wdata),
+		.be_o(be),
+		.rdata_i(rdata),
+		.error_i(err)
+	);
+endmodule
+module timer_core (
+	clk_i,
+	rst_ni,
+	active,
+	prescaler,
+	step,
+	tick,
+	mtime_d,
+	mtime,
+	mtimecmp,
+	intr
+);
+	parameter signed [31:0] N = 1;
+	input wire clk_i;
+	input wire rst_ni;
+	input wire active;
+	input wire [11:0] prescaler;
+	input wire [7:0] step;
+	output wire tick;
+	output wire [63:0] mtime_d;
+	input wire [63:0] mtime;
+	input wire [(0 >= (N - 1) ? ((2 - N) * 64) + (((N - 1) * 64) - 1) : (N * 64) - 1):(0 >= (N - 1) ? (N - 1) * 64 : 0)] mtimecmp;
+	output wire [N - 1:0] intr;
+	reg [11:0] tick_count;
+	always @(posedge clk_i or negedge rst_ni) begin : generate_tick
+		if (!rst_ni)
+			tick_count <= 12'h000;
+		else if (!active)
+			tick_count <= 12'h000;
+		else if (tick_count == prescaler)
+			tick_count <= 12'h000;
+		else
+			tick_count <= tick_count + 1'b1;
+	end
+	assign tick = active & (tick_count >= prescaler);
+	function automatic [63:0] sv2v_cast_64;
+		input reg [63:0] inp;
+		sv2v_cast_64 = inp;
+	endfunction
+	assign mtime_d = mtime + sv2v_cast_64(step);
+	generate
+		genvar t;
+		for (t = 0; t < N; t = t + 1) begin : gen_intr
+			assign intr[t] = active & (mtime >= mtimecmp[(0 >= (N - 1) ? t : (N - 1) - t) * 64+:64]);
+		end
+	endgenerate
+endmodule
+module tlul_adapter_reg (
+	clk_i,
+	rst_ni,
+	tl_i,
+	tl_o,
+	re_o,
+	we_o,
+	addr_o,
+	wdata_o,
+	be_o,
+	rdata_i,
+	error_i
+);
+	parameter signed [31:0] RegAw = 8;
+	parameter signed [31:0] RegDw = 32;
+	localparam signed [31:0] RegBw = RegDw / 8;
+	input wire clk_i;
+	input wire rst_ni;
+	localparam signed [31:0] tlul_pkg_TL_AIW = 8;
+	localparam signed [31:0] tlul_pkg_TL_AW = 32;
+	localparam signed [31:0] tlul_pkg_TL_DW = 32;
+	localparam signed [31:0] tlul_pkg_TL_DBW = 4;
+	localparam signed [31:0] tlul_pkg_TL_SZW = 2;
+	input wire [85:0] tl_i;
+	localparam signed [31:0] tlul_pkg_TL_DIW = 1;
+	output wire [51:0] tl_o;
+	output wire re_o;
+	output wire we_o;
+	output wire [RegAw - 1:0] addr_o;
+	output wire [RegDw - 1:0] wdata_o;
+	output wire [RegBw - 1:0] be_o;
+	input wire [RegDw - 1:0] rdata_i;
+	input wire error_i;
+	localparam signed [31:0] IW = 8;
+	localparam signed [31:0] SZW = 2;
+	reg outstanding;
+	wire a_ack;
+	wire d_ack;
+	reg [RegDw - 1:0] rdata;
+	reg error;
+	wire err_internal;
+	reg addr_align_err;
+	wire tl_err;
+	reg [7:0] reqid;
+	reg [1:0] reqsz;
+	reg [2:0] rspop;
+	wire rd_req;
+	wire wr_req;
+	assign a_ack = tl_i[85] & tl_o[0];
+	assign d_ack = tl_o[51] & tl_i[0];
+	localparam [2:0] tlul_pkg_PutFullData = 3'h0;
+	localparam [2:0] tlul_pkg_PutPartialData = 3'h1;
+	assign wr_req = a_ack & ((tl_i[84-:3] == tlul_pkg_PutFullData) | (tl_i[84-:3] == tlul_pkg_PutPartialData));
+	localparam [2:0] tlul_pkg_Get = 3'h4;
+	assign rd_req = a_ack & (tl_i[84-:3] == tlul_pkg_Get);
+	assign we_o = wr_req & ~err_internal;
+	assign re_o = rd_req & ~err_internal;
+	assign addr_o = {tl_i[36 + RegAw:39], 2'b00};
+	assign wdata_o = tl_i[tlul_pkg_TL_DW-:tlul_pkg_TL_DW];
+	assign be_o = tl_i[36-:4];
+	always @(posedge clk_i or negedge rst_ni)
+		if (!rst_ni)
+			outstanding <= 1'b0;
+		else if (a_ack)
+			outstanding <= 1'b1;
+		else if (d_ack)
+			outstanding <= 1'b0;
+	localparam [2:0] tlul_pkg_AccessAck = 3'h0;
+	localparam [2:0] tlul_pkg_AccessAckData = 3'h1;
+	always @(posedge clk_i or negedge rst_ni)
+		if (!rst_ni) begin
+			reqid <= {8 {1'sb0}};
+			reqsz <= {2 {1'sb0}};
+			rspop <= tlul_pkg_AccessAck;
+		end
+		else if (a_ack) begin
+			reqid <= tl_i[76-:8];
+			reqsz <= tl_i[78-:2];
+			rspop <= (rd_req ? tlul_pkg_AccessAckData : tlul_pkg_AccessAck);
+		end
+	always @(posedge clk_i or negedge rst_ni)
+		if (!rst_ni) begin
+			rdata <= {RegDw {1'sb0}};
+			error <= 1'b0;
+		end
+		else if (a_ack) begin
+			rdata <= (err_internal ? {RegDw {1'sb1}} : rdata_i);
+			error <= error_i | err_internal;
+		end
+	function automatic [1:0] sv2v_cast_87F6B;
+		input reg [1:0] inp;
+		sv2v_cast_87F6B = inp;
+	endfunction
+	function automatic [7:0] sv2v_cast_89DD5;
+		input reg [7:0] inp;
+		sv2v_cast_89DD5 = inp;
+	endfunction
+	function automatic [0:0] sv2v_cast_4D96F;
+		input reg [0:0] inp;
+		sv2v_cast_4D96F = inp;
+	endfunction
+	function automatic [31:0] sv2v_cast_F21A2;
+		input reg [31:0] inp;
+		sv2v_cast_F21A2 = inp;
+	endfunction
+	assign tl_o = {outstanding, rspop, 3'b000, sv2v_cast_87F6B(reqsz), sv2v_cast_89DD5(reqid), sv2v_cast_4D96F(1'sb0), sv2v_cast_F21A2(rdata), error, ~outstanding};
+	assign err_internal = addr_align_err | tl_err;
+	always @(*)
+		if (wr_req)
+			addr_align_err = |tl_i[38:37];
+		else
+			addr_align_err = 1'b0;
+	tlul_err u_err(
+		.tl_i(tl_i),
+		.err_o(tl_err)
+	);
+endmodule
+module tlul_err_resp (
+	clk_i,
+	rst_ni,
+	tl_h_i,
+	tl_h_o
+);
+	input wire clk_i;
+	input wire rst_ni;
+	localparam signed [31:0] tlul_pkg_TL_AIW = 8;
+	localparam signed [31:0] tlul_pkg_TL_AW = 32;
+	localparam signed [31:0] tlul_pkg_TL_DW = 32;
+	localparam signed [31:0] tlul_pkg_TL_DBW = 4;
+	localparam signed [31:0] tlul_pkg_TL_SZW = 2;
+	input wire [85:0] tl_h_i;
+	localparam signed [31:0] tlul_pkg_TL_DIW = 1;
+	output wire [51:0] tl_h_o;
+	reg [2:0] err_opcode;
+	reg [7:0] err_source;
+	reg [1:0] err_size;
+	reg err_req_pending;
+	reg err_rsp_pending;
+	localparam [2:0] tlul_pkg_Get = 3'h4;
+	always @(posedge clk_i or negedge rst_ni)
+		if (!rst_ni) begin
+			err_req_pending <= 1'b0;
+			err_source <= {tlul_pkg_TL_AIW {1'b0}};
+			err_opcode <= tlul_pkg_Get;
+			err_size <= {2 {1'sb0}};
+		end
+		else if (tl_h_i[85] && tl_h_o[0]) begin
+			err_req_pending <= 1'b1;
+			err_source <= tl_h_i[76-:8];
+			err_opcode <= tl_h_i[84-:3];
+			err_size <= tl_h_i[78-:2];
+		end
+		else if (!err_rsp_pending)
+			err_req_pending <= 1'b0;
+	assign tl_h_o[0] = ~err_rsp_pending & ~(err_req_pending & ~tl_h_i[0]);
+	assign tl_h_o[51] = err_req_pending | err_rsp_pending;
+	assign tl_h_o[33-:tlul_pkg_TL_DW] = {32 {1'sb1}};
+	assign tl_h_o[42-:8] = err_source;
+	assign tl_h_o[34-:1] = 1'b0;
+	assign tl_h_o[47-:3] = {3 {1'sb0}};
+	assign tl_h_o[44-:2] = err_size;
+	localparam [2:0] tlul_pkg_AccessAck = 3'h0;
+	localparam [2:0] tlul_pkg_AccessAckData = 3'h1;
+	assign tl_h_o[50-:3] = (err_opcode == tlul_pkg_Get ? tlul_pkg_AccessAckData : tlul_pkg_AccessAck);
+	assign tl_h_o[1] = 1'b1;
+	always @(posedge clk_i or negedge rst_ni)
+		if (!rst_ni)
+			err_rsp_pending <= 1'b0;
+		else if ((err_req_pending || err_rsp_pending) && !tl_h_i[0])
+			err_rsp_pending <= 1'b1;
+		else
+			err_rsp_pending <= 1'b0;
+endmodule
+module tlul_err (
+	tl_i,
+	err_o
+);
+	localparam signed [31:0] tlul_pkg_TL_AIW = 8;
+	localparam signed [31:0] tlul_pkg_TL_AW = 32;
+	localparam signed [31:0] tlul_pkg_TL_DW = 32;
+	localparam signed [31:0] tlul_pkg_TL_DBW = 4;
+	localparam signed [31:0] tlul_pkg_TL_SZW = 2;
+	input wire [85:0] tl_i;
+	output wire err_o;
+	localparam signed [31:0] IW = 8;
+	localparam signed [31:0] SZW = 2;
+	localparam signed [31:0] DW = 32;
+	localparam signed [31:0] MW = 4;
+	localparam signed [31:0] SubAW = 2;
+	wire opcode_allowed;
+	wire a_config_allowed;
+	wire op_full;
+	wire op_partial;
+	wire op_get;
+	localparam [2:0] tlul_pkg_PutFullData = 3'h0;
+	assign op_full = tl_i[84-:3] == tlul_pkg_PutFullData;
+	localparam [2:0] tlul_pkg_PutPartialData = 3'h1;
+	assign op_partial = tl_i[84-:3] == tlul_pkg_PutPartialData;
+	localparam [2:0] tlul_pkg_Get = 3'h4;
+	assign op_get = tl_i[84-:3] == tlul_pkg_Get;
+	assign err_o = ~(opcode_allowed & a_config_allowed);
+	assign opcode_allowed = ((tl_i[84-:3] == tlul_pkg_PutFullData) | (tl_i[84-:3] == tlul_pkg_PutPartialData)) | (tl_i[84-:3] == tlul_pkg_Get);
+	reg addr_sz_chk;
+	reg mask_chk;
+	reg fulldata_chk;
+	wire [3:0] mask;
+	assign mask = 1 << tl_i[38:37];
+	always @(*) begin
+		addr_sz_chk = 1'b0;
+		mask_chk = 1'b0;
+		fulldata_chk = 1'b0;
+		if (tl_i[85])
+			case (tl_i[78-:2])
+				'h0: begin
+					addr_sz_chk = 1'b1;
+					mask_chk = ~|(tl_i[36-:4] & ~mask);
+					fulldata_chk = |(tl_i[36-:4] & mask);
+				end
+				'h1: begin
+					addr_sz_chk = ~tl_i[37];
+					mask_chk = (tl_i[38] ? ~|(tl_i[36-:4] & 4'b0011) : ~|(tl_i[36-:4] & 4'b1100));
+					fulldata_chk = (tl_i[38] ? &tl_i[36:35] : &tl_i[34:33]);
+				end
+				'h2: begin
+					addr_sz_chk = ~|tl_i[38:37];
+					mask_chk = 1'b1;
+					fulldata_chk = &tl_i[36:33];
+				end
+				default: begin
+					addr_sz_chk = 1'b0;
+					mask_chk = 1'b0;
+					fulldata_chk = 1'b0;
+				end
+			endcase
+		else begin
+			addr_sz_chk = 1'b0;
+			mask_chk = 1'b0;
+			fulldata_chk = 1'b0;
+		end
+	end
+	assign a_config_allowed = (addr_sz_chk & mask_chk) & ((op_get | op_partial) | fulldata_chk);
+endmodule
+module tlul_fifo_sync (
+	clk_i,
+	rst_ni,
+	tl_h_i,
+	tl_h_o,
+	tl_d_o,
+	tl_d_i,
+	spare_req_i,
+	spare_req_o,
+	spare_rsp_i,
+	spare_rsp_o
+);
+	parameter [0:0] ReqPass = 1'b1;
+	parameter [0:0] RspPass = 1'b1;
+	parameter [31:0] ReqDepth = 0;
+	parameter [31:0] RspDepth = 0;
+	parameter [31:0] SpareReqW = 1;
+	parameter [31:0] SpareRspW = 1;
+	input wire clk_i;
+	input wire rst_ni;
+	localparam signed [31:0] tlul_pkg_TL_AIW = 8;
+	localparam signed [31:0] tlul_pkg_TL_AW = 32;
+	localparam signed [31:0] tlul_pkg_TL_DW = 32;
+	localparam signed [31:0] tlul_pkg_TL_DBW = 4;
+	localparam signed [31:0] tlul_pkg_TL_SZW = 2;
+	input wire [85:0] tl_h_i;
+	localparam signed [31:0] tlul_pkg_TL_DIW = 1;
+	output wire [51:0] tl_h_o;
+	output wire [85:0] tl_d_o;
+	input wire [51:0] tl_d_i;
+	input [SpareReqW - 1:0] spare_req_i;
+	output [SpareReqW - 1:0] spare_req_o;
+	input [SpareRspW - 1:0] spare_rsp_i;
+	output [SpareRspW - 1:0] spare_rsp_o;
+	localparam [31:0] REQFIFO_WIDTH = 84 + SpareReqW;
+	fifo_sync #(
+		.Width(REQFIFO_WIDTH),
+		.Pass(ReqPass),
+		.Depth(ReqDepth)
+	) reqfifo(
+		.clk_i(clk_i),
+		.rst_ni(rst_ni),
+		.clr_i(1'b0),
+		.wvalid_i(tl_h_i[85]),
+		.wready_o(tl_h_o[0]),
+		.wdata_i({tl_h_i[84-:3], tl_h_i[81-:3], tl_h_i[78-:2], tl_h_i[76-:8], tl_h_i[68-:32], tl_h_i[36-:4], tl_h_i[tlul_pkg_TL_DW-:tlul_pkg_TL_DW], spare_req_i}),
+		.depth_o(),
+		.rvalid_o(tl_d_o[85]),
+		.rready_i(tl_d_i[0]),
+		.rdata_o({tl_d_o[84-:3], tl_d_o[81-:3], tl_d_o[78-:2], tl_d_o[76-:8], tl_d_o[68-:32], tl_d_o[36-:4], tl_d_o[tlul_pkg_TL_DW-:tlul_pkg_TL_DW], spare_req_o})
+	);
+	localparam [31:0] RSPFIFO_WIDTH = 50 + SpareRspW;
+	localparam [2:0] tlul_pkg_AccessAckData = 3'h1;
+	fifo_sync #(
+		.Width(RSPFIFO_WIDTH),
+		.Pass(RspPass),
+		.Depth(RspDepth)
+	) rspfifo(
+		.clk_i(clk_i),
+		.rst_ni(rst_ni),
+		.clr_i(1'b0),
+		.wvalid_i(tl_d_i[51]),
+		.wready_o(tl_d_o[0]),
+		.wdata_i({tl_d_i[50-:3], tl_d_i[47-:3], tl_d_i[44-:2], tl_d_i[42-:8], tl_d_i[34-:1], (tl_d_i[50-:3] == tlul_pkg_AccessAckData ? tl_d_i[33-:tlul_pkg_TL_DW] : {tlul_pkg_TL_DW {1'b0}}), tl_d_i[1], spare_rsp_i}),
+		.depth_o(),
+		.rvalid_o(tl_h_o[51]),
+		.rready_i(tl_h_i[0]),
+		.rdata_o({tl_h_o[50-:3], tl_h_o[47-:3], tl_h_o[44-:2], tl_h_o[42-:8], tl_h_o[34-:1], tl_h_o[33-:tlul_pkg_TL_DW], tl_h_o[1], spare_rsp_o})
+	);
+endmodule
+module tlul_host_adapter (
+	clk_i,
+	rst_ni,
+	req_i,
+	gnt_o,
+	addr_i,
+	we_i,
+	wdata_i,
+	be_i,
+	valid_o,
+	rdata_o,
+	err_o,
+	tl_h_c_a,
+	tl_h_c_d
+);
+	parameter [31:0] MAX_REQS = 1;
+	input wire clk_i;
+	input wire rst_ni;
+	input req_i;
+	output wire gnt_o;
+	localparam signed [31:0] tlul_pkg_TL_AW = 32;
+	input wire [31:0] addr_i;
+	input wire we_i;
+	localparam signed [31:0] tlul_pkg_TL_DW = 32;
+	input wire [31:0] wdata_i;
+	localparam signed [31:0] tlul_pkg_TL_DBW = 4;
+	input wire [3:0] be_i;
+	output wire valid_o;
+	output wire [31:0] rdata_o;
+	output wire err_o;
+	localparam signed [31:0] tlul_pkg_TL_AIW = 8;
+	localparam signed [31:0] tlul_pkg_TL_SZW = 2;
+	output wire [85:0] tl_h_c_a;
+	localparam signed [31:0] tlul_pkg_TL_DIW = 1;
+	input wire [51:0] tl_h_c_d;
+	localparam signed [31:0] WordSize = 2;
+	wire [7:0] tl_source;
+	wire [3:0] tl_be;
+	 function automatic [7:0] sv2v_cast_8;
+                                input reg [7:0] inp;
+                                sv2v_cast_8 = inp;
+                        endfunction
+	generate
+		if (MAX_REQS == 1) begin
+			assign tl_source = {8 {1'sb0}};
+		end
+		else begin
+			localparam signed [31:0] ReqNumW = $clog2(MAX_REQS);
+			reg [ReqNumW - 1:0] source_d;
+			reg [ReqNumW - 1:0] source_q;
+			always @(posedge clk_i)
+				if (!rst_ni)
+					source_q <= {ReqNumW {1'sb0}};
+				else
+					source_q <= source_d;
+			always @(*) begin
+				source_d = source_q;
+				if (req_i && gnt_o)
+					if (source_q == (MAX_REQS - 1))
+						source_d = {ReqNumW {1'sb0}};
+					else
+						source_d = source_q + 1;
+			end
+			/*function automatic [7:0] sv2v_cast_8;
+				input reg [7:0] inp;
+				sv2v_cast_8 = inp;
+			endfunction*/
+			assign tl_source = sv2v_cast_8(source_q);
+		end
+	endgenerate
+	assign tl_be = (~we_i ? {tlul_pkg_TL_DBW {1'b1}} : be_i);
+	localparam [2:0] tlul_pkg_Get = 3'h4;
+	localparam [2:0] tlul_pkg_PutFullData = 3'h0;
+	localparam [2:0] tlul_pkg_PutPartialData = 3'h1;
+	function automatic signed [1:0] sv2v_cast_6CB2A_signed;
+		input reg signed [1:0] inp;
+		sv2v_cast_6CB2A_signed = inp;
+	endfunction
+	function automatic [1:0] sv2v_cast_C1DF5;
+		input reg [1:0] inp;
+		sv2v_cast_C1DF5 = inp;
+	endfunction
+	function automatic [31:0] sv2v_cast_FABF2;
+		input reg [31:0] inp;
+		sv2v_cast_FABF2 = inp;
+	endfunction
+	assign tl_h_c_a = {req_i, (~we_i ? tlul_pkg_Get : (&be_i ? tlul_pkg_PutFullData : tlul_pkg_PutPartialData)), 3'h0, sv2v_cast_C1DF5(sv2v_cast_6CB2A_signed(WordSize)), tl_source, sv2v_cast_FABF2({addr_i[31:WordSize], {WordSize {1'b0}}}), tl_be, wdata_i, 1'b1};
+	assign gnt_o = tl_h_c_d[0];
+	assign err_o = tl_h_c_d[1];
+	assign valid_o = tl_h_c_d[51];
+	wire [31:0] rddata;
+	assign rddata = tl_h_c_d[33-:tlul_pkg_TL_DW];
+	assign rdata_o = rddata;
+endmodule
+module tlul_socket_1n (
+	clk_i,
+	rst_ni,
+	tl_h_i,
+	tl_h_o,
+	tl_d_o,
+	tl_d_i,
+	dev_select_i
+);
+	parameter [31:0] N = 4;
+	parameter [0:0] HReqPass = 1'b1;
+	parameter [0:0] HRspPass = 1'b1;
+	parameter [N - 1:0] DReqPass = {N {1'b1}};
+	parameter [N - 1:0] DRspPass = {N {1'b1}};
+	parameter [3:0] HReqDepth = 4'h2;
+	parameter [3:0] HRspDepth = 4'h2;
+	parameter [(N * 4) - 1:0] DReqDepth = {N {4'h2}};
+	parameter [(N * 4) - 1:0] DRspDepth = {N {4'h2}};
+	localparam [31:0] NWD = $clog2(N + 1);
+	input wire clk_i;
+	input wire rst_ni;
+	localparam signed [31:0] tlul_pkg_TL_AIW = 8;
+	localparam signed [31:0] tlul_pkg_TL_AW = 32;
+	localparam signed [31:0] tlul_pkg_TL_DW = 32;
+	localparam signed [31:0] tlul_pkg_TL_DBW = 4;
+	localparam signed [31:0] tlul_pkg_TL_SZW = 2;
+	input wire [85:0] tl_h_i;
+	localparam signed [31:0] tlul_pkg_TL_DIW = 1;
+	output wire [51:0] tl_h_o;
+	output wire [(0 >= (N - 1) ? ((2 - N) * 86) + (((N - 1) * 86) - 1) : (N * 86) - 1):(0 >= (N - 1) ? (N - 1) * 86 : 0)] tl_d_o;
+	input wire [(0 >= (N - 1) ? ((2 - N) * 52) + (((N - 1) * 52) - 1) : (N * 52) - 1):(0 >= (N - 1) ? (N - 1) * 52 : 0)] tl_d_i;
+	input wire [NWD - 1:0] dev_select_i;
+	wire [NWD - 1:0] dev_select_t;
+	wire [85:0] tl_t_o;
+	wire [51:0] tl_t_i;
+	tlul_fifo_sync #(
+		.ReqPass(HReqPass),
+		.RspPass(HRspPass),
+		.ReqDepth(HReqDepth),
+		.RspDepth(HRspDepth),
+		.SpareReqW(NWD)
+	) fifo_h(
+		.clk_i(clk_i),
+		.rst_ni(rst_ni),
+		.tl_h_i(tl_h_i),
+		.tl_h_o(tl_h_o),
+		.tl_d_o(tl_t_o),
+		.tl_d_i(tl_t_i),
+		.spare_req_i(dev_select_i),
+		.spare_req_o(dev_select_t),
+		.spare_rsp_i(1'b0),
+		.spare_rsp_o()
+	);
+	localparam signed [31:0] MaxOutstanding = 65536;
+	localparam signed [31:0] OutstandingW = 17;
+	reg [16:0] num_req_outstanding;
+	reg [NWD - 1:0] dev_select_outstanding;
+	wire hold_all_requests;
+	wire accept_t_req;
+	wire accept_t_rsp;
+	assign accept_t_req = tl_t_o[85] & tl_t_i[0];
+	assign accept_t_rsp = tl_t_i[51] & tl_t_o[0];
+	always @(posedge clk_i or negedge rst_ni)
+		if (!rst_ni) begin
+			num_req_outstanding <= {17 {1'sb0}};
+			dev_select_outstanding <= {NWD {1'sb0}};
+		end
+		else if (accept_t_req) begin
+			if (!accept_t_rsp)
+				num_req_outstanding <= num_req_outstanding + 1'b1;
+			dev_select_outstanding <= dev_select_t;
+		end
+		else if (accept_t_rsp)
+			num_req_outstanding <= num_req_outstanding - 1'b1;
+	assign hold_all_requests = (num_req_outstanding != {17 {1'sb0}}) & (dev_select_t != dev_select_outstanding);
+	wire [85:0] tl_u_o [0:N];
+	wire [51:0] tl_u_i [0:N];
+	generate
+		genvar i;
+		for (i = 0; i < N; i = i + 1) begin : gen_u_o
+			function automatic signed [NWD - 1:0] sv2v_cast_BB804_signed;
+				input reg signed [NWD - 1:0] inp;
+				sv2v_cast_BB804_signed = inp;
+			endfunction
+			assign tl_u_o[i][85] = (tl_t_o[85] & (dev_select_t == sv2v_cast_BB804_signed(i))) & ~hold_all_requests;
+			assign tl_u_o[i][84-:3] = tl_t_o[84-:3];
+			assign tl_u_o[i][81-:3] = tl_t_o[81-:3];
+			assign tl_u_o[i][78-:2] = tl_t_o[78-:2];
+			assign tl_u_o[i][76-:8] = tl_t_o[76-:8];
+			assign tl_u_o[i][68-:32] = tl_t_o[68-:32];
+			assign tl_u_o[i][36-:4] = tl_t_o[36-:4];
+			assign tl_u_o[i][tlul_pkg_TL_DW-:tlul_pkg_TL_DW] = tl_t_o[tlul_pkg_TL_DW-:tlul_pkg_TL_DW];
+		end
+	endgenerate
+	reg [51:0] tl_t_p;
+	reg hfifo_reqready;
+	function automatic signed [NWD - 1:0] sv2v_cast_BB804_signed;
+		input reg signed [NWD - 1:0] inp;
+		sv2v_cast_BB804_signed = inp;
+	endfunction
+	always @(*) begin
+		hfifo_reqready = tl_u_i[N][0];
+		begin : sv2v_autoblock_139
+			reg signed [31:0] idx;
+			for (idx = 0; idx < N; idx = idx + 1)
+				if (dev_select_t == sv2v_cast_BB804_signed(idx))
+					hfifo_reqready = tl_u_i[idx][0];
+		end
+		if (hold_all_requests)
+			hfifo_reqready = 1'b0;
+	end
+	assign tl_t_i[0] = tl_t_o[85] & hfifo_reqready;
+	always @(*) begin
+		tl_t_p = tl_u_i[N];
+		begin : sv2v_autoblock_140
+			reg signed [31:0] idx;
+			for (idx = 0; idx < N; idx = idx + 1)
+				if (dev_select_outstanding == sv2v_cast_BB804_signed(idx))
+					tl_t_p = tl_u_i[idx];
+		end
+	end
+	assign tl_t_i[51] = tl_t_p[51];
+	assign tl_t_i[50-:3] = tl_t_p[50-:3];
+	assign tl_t_i[47-:3] = tl_t_p[47-:3];
+	assign tl_t_i[44-:2] = tl_t_p[44-:2];
+	assign tl_t_i[42-:8] = tl_t_p[42-:8];
+	assign tl_t_i[34-:1] = tl_t_p[34-:1];
+	assign tl_t_i[33-:tlul_pkg_TL_DW] = tl_t_p[33-:tlul_pkg_TL_DW];
+	assign tl_t_i[1] = tl_t_p[1];
+	generate
+		for (i = 0; i < (N + 1); i = i + 1) begin : gen_u_o_d_ready
+			assign tl_u_o[i][0] = tl_t_o[0];
+		end
+	endgenerate
+	generate
+		for (i = 0; i < N; i = i + 1) begin : gen_dfifo
+			tlul_fifo_sync #(
+				.ReqPass(DReqPass[i]),
+				.RspPass(DRspPass[i]),
+				.ReqDepth(DReqDepth[i * 4+:4]),
+				.RspDepth(DRspDepth[i * 4+:4])
+			) fifo_d(
+				.clk_i(clk_i),
+				.rst_ni(rst_ni),
+				.tl_h_i(tl_u_o[i]),
+				.tl_h_o(tl_u_i[i]),
+				.tl_d_o(tl_d_o[(0 >= (N - 1) ? i : (N - 1) - i) * 86+:86]),
+				.tl_d_i(tl_d_i[(0 >= (N - 1) ? i : (N - 1) - i) * 52+:52]),
+				.spare_req_i(1'b0),
+				.spare_req_o(),
+				.spare_rsp_i(1'b0),
+				.spare_rsp_o()
+			);
+		end
+	endgenerate
+	function automatic [NWD - 1:0] sv2v_cast_BB804;
+		input reg [NWD - 1:0] inp;
+		sv2v_cast_BB804 = inp;
+	endfunction
+	assign tl_u_o[N][85] = (tl_t_o[85] & (dev_select_t == sv2v_cast_BB804(N))) & ~hold_all_requests;
+	assign tl_u_o[N][84-:3] = tl_t_o[84-:3];
+	assign tl_u_o[N][81-:3] = tl_t_o[81-:3];
+	assign tl_u_o[N][78-:2] = tl_t_o[78-:2];
+	assign tl_u_o[N][76-:8] = tl_t_o[76-:8];
+	assign tl_u_o[N][68-:32] = tl_t_o[68-:32];
+	assign tl_u_o[N][36-:4] = tl_t_o[36-:4];
+	assign tl_u_o[N][tlul_pkg_TL_DW-:tlul_pkg_TL_DW] = tl_t_o[tlul_pkg_TL_DW-:tlul_pkg_TL_DW];
+	tlul_err_resp err_resp(
+		.clk_i(clk_i),
+		.rst_ni(rst_ni),
+		.tl_h_i(tl_u_o[N]),
+		.tl_h_o(tl_u_i[N])
+	);
+endmodule
+module tlul_socket_m1 (
+	clk_i,
+	rst_ni,
+	tl_h_i,
+	tl_h_o,
+	tl_d_o,
+	tl_d_i
+);
+	parameter [31:0] M = 4;
+	parameter [M - 1:0] HReqPass = {M {1'b1}};
+	parameter [M - 1:0] HRspPass = {M {1'b1}};
+	parameter [(M * 4) - 1:0] HReqDepth = {M {4'h2}};
+	parameter [(M * 4) - 1:0] HRspDepth = {M {4'h2}};
+	parameter [0:0] DReqPass = 1'b1;
+	parameter [0:0] DRspPass = 1'b1;
+	parameter [3:0] DReqDepth = 4'h2;
+	parameter [3:0] DRspDepth = 4'h2;
+	input wire clk_i;
+	input wire rst_ni;
+	localparam signed [31:0] tlul_pkg_TL_AIW = 8;
+	localparam signed [31:0] tlul_pkg_TL_AW = 32;
+	localparam signed [31:0] tlul_pkg_TL_DW = 32;
+	localparam signed [31:0] tlul_pkg_TL_DBW = 4;
+	localparam signed [31:0] tlul_pkg_TL_SZW = 2;
+	input wire [(0 >= (M - 1) ? ((2 - M) * 86) + (((M - 1) * 86) - 1) : (M * 86) - 1):(0 >= (M - 1) ? (M - 1) * 86 : 0)] tl_h_i;
+	localparam signed [31:0] tlul_pkg_TL_DIW = 1;
+	output wire [(0 >= (M - 1) ? ((2 - M) * 52) + (((M - 1) * 52) - 1) : (M * 52) - 1):(0 >= (M - 1) ? (M - 1) * 52 : 0)] tl_h_o;
+	output wire [85:0] tl_d_o;
+	input wire [51:0] tl_d_i;
+	localparam [31:0] IDW = tlul_pkg_TL_AIW;
+	localparam [31:0] STIDW = $clog2(M);
+	wire [(0 >= (M - 1) ? ((2 - M) * 86) + (((M - 1) * 86) - 1) : (M * 86) - 1):(0 >= (M - 1) ? (M - 1) * 86 : 0)] hreq_fifo_o;
+	wire [51:0] hrsp_fifo_i [0:M - 1];
+	wire [M - 1:0] hrequest;
+	wire [M - 1:0] hgrant;
+	wire [85:0] dreq_fifo_i;
+	wire [51:0] drsp_fifo_o;
+	wire arb_valid;
+	wire arb_ready;
+	wire [85:0] arb_data;
+	generate
+		genvar i;
+		for (i = 0; i < M; i = i + 1) begin : gen_host_fifo
+			wire [85:0] hreq_fifo_i;
+			wire [STIDW - 1:0] reqid_sub;
+			wire [7:0] shifted_id;
+			assign reqid_sub = i;
+			assign shifted_id = {tl_h_i[((0 >= (M - 1) ? i : (M - 1) - i) * 86) + 69+:IDW - STIDW], reqid_sub};
+			wire [7:IDW - STIDW] unused_tl_h_source;
+			assign unused_tl_h_source = tl_h_i[((0 >= (M - 1) ? i : (M - 1) - i) * 86) + 76-:STIDW];
+			function automatic [2:0] sv2v_cast_3;
+				input reg [2:0] inp;
+				sv2v_cast_3 = inp;
+			endfunction
+			function automatic [1:0] sv2v_cast_539D2;
+				input reg [1:0] inp;
+				sv2v_cast_539D2 = inp;
+			endfunction
+			function automatic [7:0] sv2v_cast_F6BCE;
+				input reg [7:0] inp;
+				sv2v_cast_F6BCE = inp;
+			endfunction
+			function automatic [31:0] sv2v_cast_C6CCE;
+				input reg [31:0] inp;
+				sv2v_cast_C6CCE = inp;
+			endfunction
+			function automatic [3:0] sv2v_cast_45434;
+				input reg [3:0] inp;
+				sv2v_cast_45434 = inp;
+			endfunction
+			function automatic [31:0] sv2v_cast_486C6;
+				input reg [31:0] inp;
+				sv2v_cast_486C6 = inp;
+			endfunction
+			assign hreq_fifo_i = {tl_h_i[((0 >= (M - 1) ? i : (M - 1) - i) * 86) + 85], sv2v_cast_3(tl_h_i[((0 >= (M - 1) ? i : (M - 1) - i) * 86) + 84-:3]), sv2v_cast_3(tl_h_i[((0 >= (M - 1) ? i : (M - 1) - i) * 86) + 81-:3]), sv2v_cast_539D2(tl_h_i[((0 >= (M - 1) ? i : (M - 1) - i) * 86) + 78-:2]), sv2v_cast_F6BCE(shifted_id), sv2v_cast_C6CCE(tl_h_i[((0 >= (M - 1) ? i : (M - 1) - i) * 86) + 68-:32]), sv2v_cast_45434(tl_h_i[((0 >= (M - 1) ? i : (M - 1) - i) * 86) + 36-:4]), sv2v_cast_486C6(tl_h_i[((0 >= (M - 1) ? i : (M - 1) - i) * 86) + tlul_pkg_TL_DW-:tlul_pkg_TL_DW]), tl_h_i[(0 >= (M - 1) ? i : (M - 1) - i) * 86]};
+			tlul_fifo_sync #(
+				.ReqPass(HReqPass[i]),
+				.RspPass(HRspPass[i]),
+				.ReqDepth(HReqDepth[i * 4+:4]),
+				.RspDepth(HRspDepth[i * 4+:4]),
+				.SpareReqW(1)
+			) u_hostfifo(
+				.clk_i(clk_i),
+				.rst_ni(rst_ni),
+				.tl_h_i(hreq_fifo_i),
+				.tl_h_o(tl_h_o[(0 >= (M - 1) ? i : (M - 1) - i) * 52+:52]),
+				.tl_d_o(hreq_fifo_o[(0 >= (M - 1) ? i : (M - 1) - i) * 86+:86]),
+				.tl_d_i(hrsp_fifo_i[i]),
+				.spare_req_i(1'b0),
+				.spare_req_o(),
+				.spare_rsp_i(1'b0),
+				.spare_rsp_o()
+			);
+		end
+	endgenerate
+	tlul_fifo_sync #(
+		.ReqPass(DReqPass),
+		.RspPass(DRspPass),
+		.ReqDepth(DReqDepth),
+		.RspDepth(DRspDepth),
+		.SpareReqW(1)
+	) u_devicefifo(
+		.clk_i(clk_i),
+		.rst_ni(rst_ni),
+		.tl_h_i(dreq_fifo_i),
+		.tl_h_o(drsp_fifo_o),
+		.tl_d_o(tl_d_o),
+		.tl_d_i(tl_d_i),
+		.spare_req_i(1'b0),
+		.spare_req_o(),
+		.spare_rsp_i(1'b0),
+		.spare_rsp_o()
+	);
+	generate
+		for (i = 0; i < M; i = i + 1) begin : gen_arbreqgnt
+			assign hrequest[i] = hreq_fifo_o[((0 >= (M - 1) ? i : (M - 1) - i) * 86) + 85];
+		end
+	endgenerate
+	assign arb_ready = drsp_fifo_o[0];
+	localparam tlul_pkg_ArbiterImpl = "PPC";
+	generate
+		if (tlul_pkg_ArbiterImpl == "PPC") begin : gen_arb_ppc
+			prim_arbiter_ppc #(
+				.N(M),
+				.DW(86),
+				.EnReqStabA(0)
+			) u_reqarb(
+				.clk_i(clk_i),
+				.rst_ni(rst_ni),
+				.req_i(hrequest),
+				.data_i(hreq_fifo_o),
+				.gnt_o(hgrant),
+				.idx_o(),
+				.valid_o(arb_valid),
+				.data_o(arb_data),
+				.ready_i(arb_ready)
+			);
+		end
+		else if (tlul_pkg_ArbiterImpl == "BINTREE") begin : gen_tree_arb
+			prim_arbiter_tree #(
+				.N(M),
+				.DW(86),
+				.EnReqStabA(0)
+			) u_reqarb(
+				.clk_i(clk_i),
+				.rst_ni(rst_ni),
+				.req_i(hrequest),
+				.data_i(hreq_fifo_o),
+				.gnt_o(hgrant),
+				.idx_o(),
+				.valid_o(arb_valid),
+				.data_o(arb_data),
+				.ready_i(arb_ready)
+			);
+		end
+	endgenerate
+	wire [M - 1:0] hfifo_rspvalid;
+	wire [M - 1:0] dfifo_rspready;
+	wire [7:0] hfifo_rspid;
+	wire dfifo_rspready_merged;
+	assign dfifo_rspready_merged = |dfifo_rspready;
+	function automatic [2:0] sv2v_cast_3;
+		input reg [2:0] inp;
+		sv2v_cast_3 = inp;
+	endfunction
+	function automatic [1:0] sv2v_cast_539D2;
+		input reg [1:0] inp;
+		sv2v_cast_539D2 = inp;
+	endfunction
+	function automatic [7:0] sv2v_cast_F6BCE;
+		input reg [7:0] inp;
+		sv2v_cast_F6BCE = inp;
+	endfunction
+	function automatic [31:0] sv2v_cast_C6CCE;
+		input reg [31:0] inp;
+		sv2v_cast_C6CCE = inp;
+	endfunction
+	function automatic [3:0] sv2v_cast_45434;
+		input reg [3:0] inp;
+		sv2v_cast_45434 = inp;
+	endfunction
+	function automatic [31:0] sv2v_cast_486C6;
+		input reg [31:0] inp;
+		sv2v_cast_486C6 = inp;
+	endfunction
+	assign dreq_fifo_i = {arb_valid, sv2v_cast_3(arb_data[84-:3]), sv2v_cast_3(arb_data[81-:3]), sv2v_cast_539D2(arb_data[78-:2]), sv2v_cast_F6BCE(arb_data[76-:8]), sv2v_cast_C6CCE(arb_data[68-:32]), sv2v_cast_45434(arb_data[36-:4]), sv2v_cast_486C6(arb_data[tlul_pkg_TL_DW-:tlul_pkg_TL_DW]), dfifo_rspready_merged};
+	assign hfifo_rspid = {{STIDW {1'b0}}, drsp_fifo_o[42:35 + STIDW]};
+	generate
+		for (i = 0; i < M; i = i + 1) begin : gen_idrouting
+			assign hfifo_rspvalid[i] = drsp_fifo_o[51] & (drsp_fifo_o[35+:STIDW] == i);
+			assign dfifo_rspready[i] = (hreq_fifo_o[(0 >= (M - 1) ? i : (M - 1) - i) * 86] & (drsp_fifo_o[35+:STIDW] == i)) & drsp_fifo_o[51];
+			function automatic [2:0] sv2v_cast_3;
+				input reg [2:0] inp;
+				sv2v_cast_3 = inp;
+			endfunction
+			function automatic [1:0] sv2v_cast_539D2;
+				input reg [1:0] inp;
+				sv2v_cast_539D2 = inp;
+			endfunction
+			function automatic [7:0] sv2v_cast_F6BCE;
+				input reg [7:0] inp;
+				sv2v_cast_F6BCE = inp;
+			endfunction
+			function automatic [0:0] sv2v_cast_D8FDD;
+				input reg [0:0] inp;
+				sv2v_cast_D8FDD = inp;
+			endfunction
+			function automatic [31:0] sv2v_cast_486C6;
+				input reg [31:0] inp;
+				sv2v_cast_486C6 = inp;
+			endfunction
+			assign hrsp_fifo_i[i] = {hfifo_rspvalid[i], sv2v_cast_3(drsp_fifo_o[50-:3]), sv2v_cast_3(drsp_fifo_o[47-:3]), sv2v_cast_539D2(drsp_fifo_o[44-:2]), sv2v_cast_F6BCE(hfifo_rspid), sv2v_cast_D8FDD(drsp_fifo_o[34-:1]), sv2v_cast_486C6(drsp_fifo_o[33-:tlul_pkg_TL_DW]), drsp_fifo_o[1], hgrant[i]};
+		end
+	endgenerate
+endmodule
+module tlul_sram_adapter (
+	clk_i,
+	rst_ni,
+	tl_i,
+	tl_o,
+	req_o,
+	gnt_i,
+	we_o,
+	addr_o,
+	wdata_o,
+	wmask_o,
+	rdata_i,
+	rvalid_i,
+	rerror_i
+);
+	parameter signed [31:0] SramAw = 12;
+	parameter signed [31:0] SramDw = 32;
+	parameter signed [31:0] Outstanding = 1;
+	parameter [0:0] ByteAccess = 1;
+	parameter [0:0] ErrOnWrite = 0;
+	parameter [0:0] ErrOnRead = 0;
+	input wire clk_i;
+	input wire rst_ni;
+	localparam signed [31:0] tlul_pkg_TL_AIW = 8;
+	localparam signed [31:0] tlul_pkg_TL_AW = 32;
+	localparam signed [31:0] tlul_pkg_TL_DW = 32;
+	localparam signed [31:0] tlul_pkg_TL_DBW = 4;
+	localparam signed [31:0] tlul_pkg_TL_SZW = 2;
+	input wire [85:0] tl_i;
+	localparam signed [31:0] tlul_pkg_TL_DIW = 1;
+	output wire [51:0] tl_o;
+	output wire req_o;
+	input wire gnt_i;
+	output wire we_o;
+	output wire [SramAw - 1:0] addr_o;
+	output wire [SramDw - 1:0] wdata_o;
+	output wire [SramDw - 1:0] wmask_o;
+	input wire [SramDw - 1:0] rdata_i;
+	input wire rvalid_i;
+	input wire [1:0] rerror_i;
+	localparam signed [31:0] SramByte = SramDw / 8;
+	function automatic integer tlul_pkg_vbits;
+		input integer value;
+		tlul_pkg_vbits = (value == 1 ? 1 : $clog2(value));
+	endfunction
+	localparam signed [31:0] DataBitWidth = tlul_pkg_vbits(SramByte);
+	localparam signed [31:0] WidthMult = SramDw / tlul_pkg_TL_DW;
+	localparam signed [31:0] WoffsetWidth = (SramByte == tlul_pkg_TL_DBW ? 1 : DataBitWidth - tlul_pkg_vbits(tlul_pkg_TL_DBW));
+	localparam signed [31:0] SramReqFifoWidth = tlul_pkg_TL_DBW + WoffsetWidth;
+	localparam signed [31:0] ReqFifoWidth = 13;
+	localparam signed [31:0] RspFifoWidth = (SramDw >= 0 ? SramDw + 1 : 1 - SramDw);
+	wire reqfifo_wvalid;
+	wire reqfifo_wready;
+	wire reqfifo_rvalid;
+	wire reqfifo_rready;
+	wire [12:0] reqfifo_wdata;
+	wire [12:0] reqfifo_rdata;
+	wire sramreqfifo_wvalid;
+	wire sramreqfifo_wready;
+	wire sramreqfifo_rready;
+	wire [(tlul_pkg_TL_DBW + WoffsetWidth) - 1:0] sramreqfifo_wdata;
+	wire [(tlul_pkg_TL_DBW + WoffsetWidth) - 1:0] sramreqfifo_rdata;
+	wire rspfifo_wvalid;
+	wire rspfifo_wready;
+	wire rspfifo_rvalid;
+	wire rspfifo_rready;
+	wire [SramDw:0] rspfifo_wdata;
+	wire [SramDw:0] rspfifo_rdata;
+	wire error_internal;
+	wire wr_attr_error;
+	wire wr_vld_error;
+	wire rd_vld_error;
+	wire tlul_error;
+	wire a_ack;
+	wire d_ack;
+	wire sram_ack;
+	assign a_ack = tl_i[85] & tl_o[0];
+	assign d_ack = tl_o[51] & tl_i[0];
+	assign sram_ack = req_o & gnt_i;
+	reg d_valid;
+	reg d_error;
+	localparam [1:0] OpRead = 1;
+	always @(*) begin
+		d_valid = 1'b0;
+		if (reqfifo_rvalid) begin
+			if (reqfifo_rdata[10])
+				d_valid = 1'b1;
+			else if (reqfifo_rdata[12-:2] == OpRead)
+				d_valid = rspfifo_rvalid;
+			else
+				d_valid = 1'b1;
+		end
+		else
+			d_valid = 1'b0;
+	end
+	always @(*) begin
+		d_error = 1'b0;
+		if (reqfifo_rvalid) begin
+			if (reqfifo_rdata[12-:2] == OpRead)
+				d_error = rspfifo_rdata[0] | reqfifo_rdata[10];
+			else
+				d_error = reqfifo_rdata[10];
+		end
+		else
+			d_error = 1'b0;
+	end
+	localparam [2:0] tlul_pkg_AccessAck = 3'h0;
+	localparam [2:0] tlul_pkg_AccessAckData = 3'h1;
+	function automatic [1:0] sv2v_cast_373C7;
+		input reg [1:0] inp;
+		sv2v_cast_373C7 = inp;
+	endfunction
+	function automatic [7:0] sv2v_cast_E8620;
+		input reg [7:0] inp;
+		sv2v_cast_E8620 = inp;
+	endfunction
+	function automatic [0:0] sv2v_cast_AF840;
+		input reg [0:0] inp;
+		sv2v_cast_AF840 = inp;
+	endfunction
+	function automatic [31:0] sv2v_cast_D61D5;
+		input reg [31:0] inp;
+		sv2v_cast_D61D5 = inp;
+	endfunction
+	assign tl_o = {d_valid, (d_valid && (reqfifo_rdata[12-:2] != OpRead) ? tlul_pkg_AccessAck : tlul_pkg_AccessAckData), 3'b000, sv2v_cast_373C7((d_valid ? reqfifo_rdata[9-:2] : {2 {1'sb0}})), sv2v_cast_E8620((d_valid ? reqfifo_rdata[7-:8] : {8 {1'sb0}})), sv2v_cast_AF840(1'b0), sv2v_cast_D61D5(((d_valid && rspfifo_rvalid) && (reqfifo_rdata[12-:2] == OpRead) ? rspfifo_rdata[SramDw-:(SramDw >= 1 ? SramDw : 2 - SramDw)] : {(SramDw >= 1 ? SramDw : 2 - SramDw) {1'sb0}})), d_valid && d_error, ((gnt_i | error_internal) & reqfifo_wready) & sramreqfifo_wready};
+	assign req_o = (tl_i[85] & reqfifo_wready) & ~error_internal;
+	localparam [2:0] tlul_pkg_PutFullData = 3'h0;
+	localparam [2:0] tlul_pkg_PutPartialData = 3'h1;
+	function automatic [0:0] sv2v_cast_1;
+		input reg [0:0] inp;
+		sv2v_cast_1 = inp;
+	endfunction
+	assign we_o = tl_i[85] & sv2v_cast_1(|{tl_i[84-:3] == tlul_pkg_PutFullData, tl_i[84-:3] == tlul_pkg_PutPartialData});
+	assign addr_o = (tl_i[85] ? tl_i[37 + DataBitWidth+:SramAw] : {SramAw {1'sb0}});
+	wire [WoffsetWidth - 1:0] woffset;
+	generate
+		if (tlul_pkg_TL_DW != SramDw) begin : gen_wordwidthadapt
+			assign woffset = tl_i[36 + DataBitWidth:37 + tlul_pkg_vbits(tlul_pkg_TL_DBW)];
+		end
+		else begin : gen_no_wordwidthadapt
+			assign woffset = {WoffsetWidth {1'sb0}};
+		end
+	endgenerate
+	reg [(WidthMult * tlul_pkg_TL_DW) - 1:0] wmask_int;
+	reg [(WidthMult * tlul_pkg_TL_DW) - 1:0] wdata_int;
+	always @(*) begin
+		wmask_int = {WidthMult * tlul_pkg_TL_DW {1'sb0}};
+		wdata_int = {WidthMult * tlul_pkg_TL_DW {1'sb0}};
+		if (tl_i[85]) begin : sv2v_autoblock_141
+			reg signed [31:0] i;
+			for (i = 0; i < 4; i = i + 1)
+				begin
+					wmask_int[(woffset * 32) + (8 * i)+:8] = {8 {tl_i[33 + i]}};
+					wdata_int[(woffset * 32) + (8 * i)+:8] = (tl_i[33 + i] && we_o ? tl_i[tlul_pkg_TL_DW - (31 - (8 * i))+:8] : {8 {1'sb0}});
+				end
+		end
+	end
+	assign wmask_o = wmask_int;
+	assign wdata_o = wdata_int;
+	assign wr_attr_error = ((tl_i[84-:3] == tlul_pkg_PutFullData) || (tl_i[84-:3] == tlul_pkg_PutPartialData) ? (ByteAccess == 0 ? (tl_i[36-:4] != {4 {1'sb1}}) || (tl_i[78-:2] != 2'h2) : 1'b0) : 1'b0);
+	localparam [2:0] tlul_pkg_Get = 3'h4;
+	generate
+		if (ErrOnWrite == 1) begin : gen_no_writes
+			assign wr_vld_error = tl_i[84-:3] != tlul_pkg_Get;
+		end
+		else begin : gen_writes_allowed
+			assign wr_vld_error = 1'b0;
+		end
+	endgenerate
+	generate
+		if (ErrOnRead == 1) begin : gen_no_reads
+			assign rd_vld_error = tl_i[84-:3] == tlul_pkg_Get;
+		end
+		else begin : gen_reads_allowed
+			assign rd_vld_error = 1'b0;
+		end
+	endgenerate
+	tlul_err u_err(
+		.tl_i(tl_i),
+		.err_o(tlul_error)
+	);
+	assign error_internal = ((wr_attr_error | wr_vld_error) | rd_vld_error) | tlul_error;
+	assign reqfifo_wvalid = a_ack;
+	localparam [1:0] OpWrite = 0;
+	assign reqfifo_wdata = {(tl_i[84-:3] != tlul_pkg_Get ? OpWrite : OpRead), error_internal, sv2v_cast_373C7(tl_i[78-:2]), sv2v_cast_E8620(tl_i[76-:8])};
+	assign reqfifo_rready = d_ack;
+	function automatic [3:0] sv2v_cast_43A59;
+		input reg [3:0] inp;
+		sv2v_cast_43A59 = inp;
+	endfunction
+	assign sramreqfifo_wdata = {sv2v_cast_43A59(tl_i[36-:4]), woffset};
+	assign sramreqfifo_wvalid = sram_ack & ~we_o;
+	assign sramreqfifo_rready = rspfifo_wvalid;
+	assign rspfifo_wvalid = rvalid_i & reqfifo_rvalid;
+	wire [(WidthMult * tlul_pkg_TL_DW) - 1:0] rdata;
+	reg [(WidthMult * tlul_pkg_TL_DW) - 1:0] rmask;
+	wire [31:0] rdata_tlword;
+	always @(*) begin
+		rmask = {WidthMult * tlul_pkg_TL_DW {1'sb0}};
+		begin : sv2v_autoblock_142
+			reg signed [31:0] i;
+			for (i = 0; i < 4; i = i + 1)
+				rmask[(sramreqfifo_rdata[WoffsetWidth - 1-:WoffsetWidth] * 32) + (8 * i)+:8] = {8 {sramreqfifo_rdata[(tlul_pkg_TL_DBW + (WoffsetWidth - 1)) - (3 - i)]}};
+		end
+	end
+	assign rdata = rdata_i & rmask;
+	assign rdata_tlword = rdata[sramreqfifo_rdata[WoffsetWidth - 1-:WoffsetWidth] * tlul_pkg_TL_DW+:tlul_pkg_TL_DW];
+	function automatic [SramDw - 1:0] sv2v_cast_1F998;
+		input reg [SramDw - 1:0] inp;
+		sv2v_cast_1F998 = inp;
+	endfunction
+	assign rspfifo_wdata = {sv2v_cast_1F998(rdata_tlword), rerror_i[1]};
+	assign rspfifo_rready = ((reqfifo_rdata[12-:2] == OpRead) & ~reqfifo_rdata[10] ? reqfifo_rready : 1'b0);
+	wire unused_rerror;
+	assign unused_rerror = rerror_i[0];
+	fifo_sync #(
+		.Width(ReqFifoWidth),
+		.Pass(1'b0),
+		.Depth(Outstanding)
+	) u_reqfifo(
+		.clk_i(clk_i),
+		.rst_ni(rst_ni),
+		.clr_i(1'b0),
+		.wvalid_i(reqfifo_wvalid),
+		.wready_o(reqfifo_wready),
+		.wdata_i(reqfifo_wdata),
+		.depth_o(),
+		.rvalid_o(reqfifo_rvalid),
+		.rready_i(reqfifo_rready),
+		.rdata_o(reqfifo_rdata)
+	);
+	fifo_sync #(
+		.Width(SramReqFifoWidth),
+		.Pass(1'b0),
+		.Depth(Outstanding)
+	) u_sramreqfifo(
+		.clk_i(clk_i),
+		.rst_ni(rst_ni),
+		.clr_i(1'b0),
+		.wvalid_i(sramreqfifo_wvalid),
+		.wready_o(sramreqfifo_wready),
+		.wdata_i(sramreqfifo_wdata),
+		.depth_o(),
+		.rvalid_o(),
+		.rready_i(sramreqfifo_rready),
+		.rdata_o(sramreqfifo_rdata)
+	);
+	fifo_sync #(
+		.Width(RspFifoWidth),
+		.Pass(1'b1),
+		.Depth(Outstanding)
+	) u_rspfifo(
+		.clk_i(clk_i),
+		.rst_ni(rst_ni),
+		.clr_i(1'b0),
+		.wvalid_i(rspfifo_wvalid),
+		.wready_o(rspfifo_wready),
+		.wdata_i(rspfifo_wdata),
+		.depth_o(),
+		.rvalid_o(rspfifo_rvalid),
+		.rready_i(rspfifo_rready),
+		.rdata_o(rspfifo_rdata)
+	);
+endmodule
+module uart_core (
+	clk_i,
+	rst_ni,
+	ren,
+	we,
+	wdata,
+	rdata,
+	addr,
+	tx_o,
+	rx_i,
+	intr_tx
+);
+	input wire clk_i;
+	input wire rst_ni;
+	input wire ren;
+	input wire we;
+	input wire [31:0] wdata;
+	output wire [31:0] rdata;
+	input wire [3:0] addr;
+	output wire tx_o;
+	input wire rx_i;
+	output wire intr_tx;
+	localparam ADDR_CTRL = 0;
+	localparam ADDR_TX = 4;
+	localparam ADDR_RX = 8;
+	reg [18:0] control;
+	reg [7:0] tx;
+	wire [7:0] rx;
+	wire rx_status;
+	always @(posedge clk_i)
+		if (~rst_ni) begin
+			control <= 0;
+			tx <= 0;
+		end
+		else if (~ren & we)
+			if (addr == ADDR_CTRL) begin
+				control[1:0] <= wdata[1:0];
+				control[18:3] <= wdata[18:3];
+				control[2] <= rx_status;
+			end
+			else if (addr == ADDR_TX)
+				tx <= wdata[7:0];
+			else if (addr == ADDR_RX)
+				;
+			else begin
+				control <= 0;
+				tx <= 0;
+			end
+	uart_tx u_tx(
+		.clk_i(clk_i),
+		.rst_ni(rst_ni),
+		.tx_en(control[0]),
+		.i_TX_Byte(tx),
+		.CLKS_PER_BIT(control[18:3]),
+		.o_TX_Serial(tx_o),
+		.o_TX_Done(intr_tx)
+	);
+	uart_rx u_rx(
+		.clk_i(clk_i),
+		.rst_ni(rst_ni),
+		.i_Rx_Serial(rx_i),
+		.o_Rx_DV(rx_status),
+		.rx_en(control[1]),
+		.CLKS_PER_BIT(control[18:3]),
+		.o_Rx_Byte(rx)
+	);
+	assign rdata = (addr == 0 ? control : (addr == 8 ? rx : 0));
+endmodule
+// Licensed under the Apache License, Version 2.0, see LICENSE for details.
+// SPDX-License-Identifier: Apache-2.0
+
+// Set Parameter CLKS_PER_BIT as follows:
+// CLKS_PER_BIT = (Frequency of i_Clock)/(Frequency of UART)
+// Example: 10 MHz Clock, 115200 baud UART
+// (10000000)/(115200) = 87
+  
+module uart_rx_prog (
+   input  wire       clk_i,
+   input  wire       rst_ni,
+   input  wire       i_Rx_Serial,
+   input  wire [15:0] CLKS_PER_BIT,
+   output wire        o_Rx_DV,
+   output wire  [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 clk_i)
+    begin
+    if (~rst_ni) 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
+  end
+   
+   
+  // Purpose: Control RX state machine
+  always @(posedge clk_i or negedge rst_ni)
+    begin
+      if (~rst_ni) begin
+        r_SM_Main <= s_IDLE;
+        r_Rx_DV       <= 1'b0;
+        r_Clock_Count <= 16'b0;
+        r_Bit_Index   <= 3'b0;
+	r_Rx_Byte     <= 8'b0;
+      end else begin       
+      case (r_SM_Main)
+        s_IDLE :
+          begin
+            r_Rx_DV       <= 1'b0;
+            r_Clock_Count <= 16'b0;
+            r_Bit_Index   <= 3'b0;
+            r_Rx_Byte     <= 8'b0; 
+            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 <= 16'b0;  // 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 + 16'b1;
+                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 + 16'b1;
+                r_SM_Main     <= s_RX_DATA_BITS;
+              end
+            else
+              begin
+                r_Clock_Count          <= 16'b0;
+                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 + 3'b1;
+                    r_SM_Main   <= s_RX_DATA_BITS;
+                  end
+                else
+                  begin
+                    r_Bit_Index <= 3'b0;
+                    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 + 16'b1;
+                r_SM_Main     <= s_RX_STOP_BIT;
+              end
+            else
+              begin
+                r_Rx_DV       <= 1'b1;
+                r_Clock_Count <= 16'b0;
+                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
+module uart_rx (
+	clk_i,
+	rst_ni,
+	rx_en,
+	i_Rx_Serial,
+	CLKS_PER_BIT,
+	o_Rx_DV,
+	o_Rx_Byte
+);
+	input wire clk_i;
+	input wire rst_ni;
+	input wire rx_en;
+	input wire i_Rx_Serial;
+	input wire [15:0] CLKS_PER_BIT;
+	output wire o_Rx_DV;
+	output wire [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 clk_i)
+		if (~rst_ni) 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 clk_i or negedge rst_ni)
+		if (~rst_ni) begin
+			r_SM_Main <= s_IDLE;
+			r_Rx_DV <= 1'b0;
+			r_Clock_Count <= 16'b0000000000000000;
+			r_Bit_Index <= 3'b000;
+		end
+		else
+			case (r_SM_Main)
+				s_IDLE: begin
+					r_Rx_DV <= 1'b0;
+					r_Clock_Count <= 16'b0000000000000000;
+					r_Bit_Index <= 3'b000;
+					if (r_Rx_Data == 1'b0) begin
+						if (rx_en == 1'b1)
+							r_SM_Main <= s_RX_START_BIT;
+						else
+							r_SM_Main <= s_IDLE;
+					end
+					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 <= 16'b0000000000000000;
+							r_SM_Main <= s_RX_DATA_BITS;
+						end
+						else
+							r_SM_Main <= s_IDLE;
+					end
+					else begin
+						r_Clock_Count <= r_Clock_Count + 16'b0000000000000001;
+						r_SM_Main <= s_RX_START_BIT;
+					end
+				s_RX_DATA_BITS:
+					if (r_Clock_Count < (CLKS_PER_BIT - 16'b0000000000000001)) begin
+						r_Clock_Count <= r_Clock_Count + 16'b0000000000000001;
+						r_SM_Main <= s_RX_DATA_BITS;
+					end
+					else begin
+						r_Clock_Count <= 16'b0000000000000000;
+						r_Rx_Byte[r_Bit_Index] <= r_Rx_Data;
+						if (r_Bit_Index < 7) begin
+							r_Bit_Index <= r_Bit_Index + 3'b001;
+							r_SM_Main <= s_RX_DATA_BITS;
+						end
+						else begin
+							r_Bit_Index <= 3'b000;
+							r_SM_Main <= s_RX_STOP_BIT;
+						end
+					end
+				s_RX_STOP_BIT:
+					if (r_Clock_Count < (CLKS_PER_BIT - 16'b0000000000000001)) begin
+						r_Clock_Count <= r_Clock_Count + 16'b0000000000000001;
+						r_SM_Main <= s_RX_STOP_BIT;
+					end
+					else begin
+						r_Rx_DV <= 1'b1;
+						r_Clock_Count <= 16'b0000000000000000;
+						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 uart_top (
+	clk_i,
+	rst_ni,
+	tl_i,
+	tl_o,
+	tx_o,
+	rx_i,
+	intr_tx
+);
+	input wire clk_i;
+	input wire rst_ni;
+	localparam signed [31:0] tlul_pkg_TL_AIW = 8;
+	localparam signed [31:0] tlul_pkg_TL_AW = 32;
+	localparam signed [31:0] tlul_pkg_TL_DW = 32;
+	localparam signed [31:0] tlul_pkg_TL_DBW = 4;
+	localparam signed [31:0] tlul_pkg_TL_SZW = 2;
+	input wire [85:0] tl_i;
+	localparam signed [31:0] tlul_pkg_TL_DIW = 1;
+	output wire [51:0] tl_o;
+	output wire tx_o;
+	input wire rx_i;
+	output wire intr_tx;
+	wire [31:0] wdata;
+	wire [3:0] addr;
+	wire we;
+	wire re;
+	wire [31:0] rdata;
+	wire [3:0] be;
+	uart_core u_uart_core(
+		.clk_i(clk_i),
+		.rst_ni(rst_ni),
+		.ren(re),
+		.we(we),
+		.wdata(wdata),
+		.rdata(rdata),
+		.addr(addr),
+		.tx_o(tx_o),
+		.rx_i(rx_i),
+		.intr_tx(intr_tx)
+	);
+	tlul_adapter_reg #(
+		.RegAw(4),
+		.RegDw(32)
+	) u_reg_if(
+		.clk_i(clk_i),
+		.rst_ni(rst_ni),
+		.tl_i(tl_i),
+		.tl_o(tl_o),
+		.we_o(we),
+		.re_o(re),
+		.addr_o(addr),
+		.wdata_o(wdata),
+		.be_o(be),
+		.rdata_i(rdata),
+		.error_i(1'b0)
+	);
+endmodule
+module uart_tx (
+	clk_i,
+	rst_ni,
+	tx_en,
+	i_TX_Byte,
+	CLKS_PER_BIT,
+	o_TX_Serial,
+	o_TX_Done
+);
+	input wire clk_i;
+	input wire rst_ni;
+	input wire tx_en;
+	input wire [7:0] i_TX_Byte;
+	input wire [15:0] CLKS_PER_BIT;
+	output reg o_TX_Serial;
+	output wire o_TX_Done;
+	localparam IDLE = 3'b000;
+	localparam TX_START_BIT = 3'b001;
+	localparam TX_DATA_BITS = 3'b010;
+	localparam TX_STOP_BIT = 3'b011;
+	localparam CLEANUP = 3'b100;
+	reg [2:0] r_SM_Main;
+	reg [15:0] r_Clock_Count;
+	reg [2:0] r_Bit_Index;
+	reg [7:0] r_TX_Data;
+	reg r_TX_Done;
+	always @(posedge clk_i)
+		if (~rst_ni) begin
+			r_SM_Main <= 3'b000;
+			r_Clock_Count <= 16'b0000000000000000;
+			r_Bit_Index <= 3'b000;
+			r_TX_Data <= 8'b00000000;
+			r_TX_Done <= 1'b0;
+		end
+		else
+			case (r_SM_Main)
+				IDLE: begin
+					o_TX_Serial <= 1'b1;
+					r_TX_Done <= 1'b0;
+					r_Clock_Count <= 16'b0000000000000000;
+					r_Bit_Index <= 3'b000;
+					if (tx_en == 1'b1) begin
+						r_TX_Data <= i_TX_Byte;
+						r_SM_Main <= TX_START_BIT;
+					end
+					else
+						r_SM_Main <= IDLE;
+				end
+				TX_START_BIT: begin
+					o_TX_Serial <= 1'b0;
+					if (r_Clock_Count < (CLKS_PER_BIT - 1)) begin
+						r_Clock_Count <= r_Clock_Count + 16'b0000000000000001;
+						r_SM_Main <= TX_START_BIT;
+					end
+					else begin
+						r_Clock_Count <= 16'b0000000000000000;
+						r_SM_Main <= TX_DATA_BITS;
+					end
+				end
+				TX_DATA_BITS: begin
+					o_TX_Serial <= r_TX_Data[r_Bit_Index];
+					if (r_Clock_Count < (CLKS_PER_BIT - 16'b0000000000000001)) begin
+						r_Clock_Count <= r_Clock_Count + 16'b0000000000000001;
+						r_SM_Main <= TX_DATA_BITS;
+					end
+					else begin
+						r_Clock_Count <= 3'b000;
+						if (r_Bit_Index < 7) begin
+							r_Bit_Index <= r_Bit_Index + 3'b001;
+							r_SM_Main <= TX_DATA_BITS;
+						end
+						else begin
+							r_Bit_Index <= 3'b000;
+							r_SM_Main <= TX_STOP_BIT;
+						end
+					end
+				end
+				TX_STOP_BIT: begin
+					o_TX_Serial <= 1'b1;
+					if (r_Clock_Count < (CLKS_PER_BIT - 16'b0000000000000001)) begin
+						r_Clock_Count <= r_Clock_Count + 16'b0000000000000001;
+						r_SM_Main <= TX_STOP_BIT;
+					end
+					else begin
+						r_TX_Done <= 1'b1;
+						r_Clock_Count <= 16'b0000000000000000;
+						r_SM_Main <= CLEANUP;
+					end
+				end
+				CLEANUP: begin
+					r_TX_Done <= 1'b1;
+					r_SM_Main <= IDLE;
+				end
+				default: r_SM_Main <= IDLE;
+			endcase
+	assign o_TX_Done = r_TX_Done;
+endmodule
+
+(* blackbox *)
+module sky130_sram_4kbyte_1rw1r_32x1024_8 (clk0, csb0, web0, wmask0, addr0, din0, dout0, clk1, csb1, addr1, dout1);
+        parameter NUM_WMASKS = 4;
+        parameter DATA_WIDTH = 32;
+        parameter ADDR_WIDTH = 10;
+        parameter RAM_DEPTH = 1 << ADDR_WIDTH;
+        parameter DELAY = 3;
+        parameter VERBOSE = 1;
+        parameter T_HOLD = 1;
+			`ifdef USE_POWER_PINS
+  	  	inout vccd1;	
+				inout vssd1;	
+  		`endif
+        input clk0;
+        input csb0;
+        input web0;
+        input [NUM_WMASKS - 1:0] wmask0;
+        input [ADDR_WIDTH - 1:0] addr0;
+        input [DATA_WIDTH - 1:0] din0;
+        output [DATA_WIDTH - 1:0] dout0;
+        input clk1;
+        input csb1;
+        input [ADDR_WIDTH - 1:0] addr1;
+        output [DATA_WIDTH - 1:0] dout1;
+endmodule
