diff --git a/verilog/rtl/azadi_soc_top.v b/verilog/rtl/azadi_soc_top.v
index 0b0cbd4..c34f2b2 100644
--- a/verilog/rtl/azadi_soc_top.v
+++ b/verilog/rtl/azadi_soc_top.v
@@ -1,5 +1,6 @@
-`default_nettype wire
+/*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
@@ -12,12 +13,6 @@
 	gpio_i,
 	gpio_o,
 	gpio_oe,
-	jtag_tck_i,
-	jtag_tms_i,
-	jtag_trst_ni,
-	jtag_tdi_i,
-	jtag_tdo_o,
-	jtag_tdo_oe_o,
 	uart_tx,
 	uart_rx,
 	pwm_o,
@@ -37,12 +32,6 @@
 	input wire [31:0] gpio_i;
 	output wire [31:0] gpio_o;
 	output wire [31:0] gpio_oe;
-	input wire jtag_tck_i;
-	input wire jtag_tms_i;
-	input wire jtag_trst_ni;
-	input wire jtag_tdi_i;
-	output wire jtag_tdo_o;
-	output wire jtag_tdo_oe_o;
 	output wire uart_tx;
 	input wire uart_rx;
 	output wire pwm_o;
@@ -54,7 +43,6 @@
 	output wire sd_o;
 	output wire sd_oe;
 	input wire sd_i;
-	localparam [31:0] JTAG_ID = 32'b00000100111101010100100001001101;
 	wire prog_rst_n;
 	wire system_rst_ni;
 	wire [31:0] gpio_in;
@@ -65,8 +53,6 @@
 	wire [11:0] tlul_addr;
 	wire req_i;
 	wire [31:0] tlul_data;
-	wire dbg_req;
-	wire dbg_rst;
 	wire instr_csb;
 	wire [11:0] instr_addr;
 	wire [31:0] instr_wdata;
@@ -98,10 +84,6 @@
 	wire [51:0] dccm_to_xbar;
 	wire [85:0] xbarp_to_gpio;
 	wire [51:0] gpio_to_xbarp;
-	wire [85:0] dm_to_xbar;
-	wire [51:0] xbar_to_dm;
-	wire [85:0] dbgrom_to_xbar;
-	wire [51:0] xbar_to_dbgrom;
 	wire [85:0] plic_req;
 	wire [51:0] plic_resp;
 	wire [85:0] xbar_to_uart;
@@ -128,17 +110,6 @@
 	wire intr_timer;
 	wire intr_u_tx;
 	assign intr_vector = {intr_srx, intr_stx, intr_u_tx, intr_gpio, 1'b0};
-	wire [3:0] jtag_req;
-	wire [1:0] jtag_rsp;
-	assign jtag_req[3] = jtag_tck_i;
-	assign jtag_req[2] = jtag_tms_i;
-	assign jtag_req[1] = jtag_trst_ni;
-	assign jtag_req[0] = jtag_tdi_i;
-	assign jtag_tdo_o = jtag_rsp[1];
-	assign jtag_tdo_oe_o = jtag_rsp[0];
-	localparam [63:0] dm_HaltAddress = 64'h0000000000000800;
-	localparam [63:0] dm_ExceptionAddress = dm_HaltAddress + 8;
-	localparam [31:0] tl_main_pkg_ADDR_SPACE_DEBUG_ROM = 32'h10040000;
 	localparam integer brq_pkg_RV32BNone = 0;
 	localparam integer brq_pkg_RV32MSlow = 1;
 	localparam integer brq_pkg_RegFileFF = 0;
@@ -160,8 +131,8 @@
 		.DbgTriggerEn(1'b1),
 		.DbgHwBreakNum(1),
 		.Securebrq(1'b0),
-		.DmHaltAddr(tl_main_pkg_ADDR_SPACE_DEBUG_ROM + 32'h00000800),
-		.DmExceptionAddr(tl_main_pkg_ADDR_SPACE_DEBUG_ROM + dm_ExceptionAddress)
+		.DmHaltAddr(1'sb0),
+		.DmExceptionAddr(1'sb0)
 	) u_top(
 		.clk_i(clk_i),
 		.rst_ni(system_rst_ni),
@@ -176,30 +147,12 @@
 		.irq_external_i(intr_req),
 		.irq_fast_i({15 {1'sb0}}),
 		.irq_nm_i(1'b0),
-		.debug_req_i(dbg_req),
+		.debug_req_i(1'b0),
 		.fetch_enable_i(1'b1),
 		.alert_minor_o(),
 		.alert_major_o(),
 		.core_sleep_o()
 	);
-	rv_dm #(
-		.NrHarts(1),
-		.IdcodeValue(JTAG_ID)
-	) debug_module(
-		.clk_i(clk_i),
-		.rst_ni(rst_ni),
-		.testmode_i(1'b0),
-		.ndmreset_o(dbg_rst),
-		.dmactive_o(),
-		.debug_req_o(dbg_req),
-		.unavailable_i(1'b0),
-		.tl_d_i(dbgrom_to_xbar),
-		.tl_d_o(xbar_to_dbgrom),
-		.tl_h_o(dm_to_xbar),
-		.tl_h_i(xbar_to_dm),
-		.jtag_req_i(jtag_req),
-		.jtag_rsp_o(jtag_rsp)
-	);
 	tl_xbar_main main_swith(
 		.clk_i(clk_i),
 		.rst_ni(system_rst_ni),
@@ -207,12 +160,8 @@
 		.tl_brqif_o(xbar_to_ifu),
 		.tl_brqlsu_i(lsu_to_xbar),
 		.tl_brqlsu_o(xbar_to_lsu),
-		.tl_dm_sba_i(dm_to_xbar),
-		.tl_dm_sba_o(xbar_to_dm),
 		.tl_iccm_o(xbar_to_iccm),
 		.tl_iccm_i(iccm_to_xbar),
-		.tl_debug_rom_o(dbgrom_to_xbar),
-		.tl_debug_rom_i(xbar_to_dbgrom),
 		.tl_dccm_o(xbar_to_dccm),
 		.tl_dccm_i(dccm_to_xbar),
 		.tl_timer0_o(xbar_to_timer),
@@ -272,7 +221,6 @@
 	rstmgr reset_manager(
 		.clk_i(clk_i),
 		.rst_ni(rst_ni),
-		.ndmreset(dbg_rst),
 		.prog_rst_ni(prog_rst_ni),
 		.sys_rst_ni(system_rst_ni)
 	);
@@ -296,7 +244,7 @@
 	);
 	wire rx_dv_i;
 	wire [7:0] rx_byte_i;
-	iccm_controller u_dut(
+	iccm_controller iccm_controller(
 		.clk_i(clk_i),
 		.rst_ni(rst_ni),
 		.prog_i(prog),
@@ -331,8 +279,7 @@
 		.we_o(instr_we),
 		.rdata_i(instr_rdata)
 	);
-	wire [31:0] unused_data1;
-	wire [31:0] unused_data2;
+	wire [31:0] un_conn1;
 	sky130_sram_4kbyte_1rw1r_32x1024_8 u_iccm(
 		`ifdef USE_POWER_PINS
   	  .vccd1(VPWR),	
@@ -347,8 +294,8 @@
 		.dout0(instr_rdata),
 		.clk1(1'b0),
 		.csb1(1'b1),
-		.addr1(10'b0000000000),
-		.dout1(unused_data1)
+		.addr1({10 {1'sb0}}),
+		.dout1(un_conn1)
 	);
 	data_mem_top dccm_adapter(
 		.clk_i(clk_i),
@@ -362,13 +309,14 @@
 		.we_o(data_we),
 		.rdata_i(data_rdata)
 	);
+	wire [31:0] un_conn2;
 	sky130_sram_4kbyte_1rw1r_32x1024_8 u_dccm(
 		`ifdef USE_POWER_PINS
   	  .vccd1(VPWR),	
-			.vssd1(VGND),	
+  	  .vssd1(VGND),	
   	`endif
 		.clk0(clk_i),
-		.csb0(data_csb),
+		.csb0(instr_csb),
 		.web0(data_we),
 		.wmask0(data_wmask),
 		.addr0(data_addr[9:0]),
@@ -376,8 +324,8 @@
 		.dout0(data_rdata),
 		.clk1(1'b0),
 		.csb1(1'b1),
-		.addr1(10'b0000000000),
-		.dout1(unused_data2)
+		.addr1({10 {1'sb0}}),
+		.dout1(un_conn2)
 	);
 endmodule
 module brq_core (
@@ -413,7 +361,7 @@
 );
 	parameter [0:0] PMPEnable = 1'b0;
 	parameter [31:0] PMPGranularity = 0;
-	parameter [31:0] PMPNumRegions = 0;
+	parameter [31:0] PMPNumRegions = 4;
 	parameter [31:0] MHPMCounterNum = 0;
 	parameter [31:0] MHPMCounterWidth = 40;
 	parameter [0:0] RV32E = 1'b0;
@@ -509,10 +457,10 @@
 	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 = 1;
-	localparam [31:0] fpnew_pkg_FP_FORMAT_BITS = 0;
-	wire [fpnew_pkg_FP_FORMAT_BITS - 1:0] fp_src_fmt;
-	wire [fpnew_pkg_FP_FORMAT_BITS - 1:0] fp_dst_fmt;
+	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;
@@ -686,7 +634,7 @@
 	assign core_sleep_o = ~clock_en;
 	prim_clock_gating core_clock_gate_i(
 		.clk_i(clk_i),
-		.en_i(clock_en),
+		.en_i(1'b1),
 		.test_en_i(test_en_i),
 		.clk_o(clk)
 	);
@@ -747,8 +695,7 @@
 		.DataIndTiming(DataIndTiming),
 		.SpecBranch(SpecBranch),
 		.WritebackStage(WritebackStage),
-		.BranchPredictor(BranchPredictor),
-		.FloatingPoint(FloatingPoint)
+		.BranchPredictor(BranchPredictor)
 	) id_stage_i(
 		.clk_i(clk),
 		.rst_ni(rst_ni),
@@ -1211,27 +1158,27 @@
 	localparam [1:0] fpnew_pkg_BEFORE = 0;
 	localparam [1:0] fpnew_pkg_MERGED = 2;
 	localparam [1:0] fpnew_pkg_PARALLEL = 1;
-	function automatic [31:0] sv2v_cast_CC116;
-		input reg [31:0] inp;
+	function automatic [127:0] sv2v_cast_CC116;
+		input reg [127:0] inp;
 		sv2v_cast_CC116 = inp;
 	endfunction
-	function automatic [127:0] sv2v_cast_128;
-		input reg [127:0] inp;
-		sv2v_cast_128 = inp;
+	function automatic [511:0] sv2v_cast_512;
+		input reg [511:0] inp;
+		sv2v_cast_512 = inp;
 	endfunction
-	function automatic [7:0] sv2v_cast_8;
-		input reg [7:0] inp;
-		sv2v_cast_8 = inp;
+	function automatic [31:0] sv2v_cast_32;
+		input reg [31:0] inp;
+		sv2v_cast_32 = inp;
 	endfunction
-	localparam [137:0] fpnew_pkg_DEFAULT_NOREGS = {sv2v_cast_128({fpnew_pkg_NUM_OPGROUPS {sv2v_cast_CC116(0)}}), sv2v_cast_8({{fpnew_pkg_PARALLEL}, {fpnew_pkg_MERGED}, {fpnew_pkg_PARALLEL}, {fpnew_pkg_MERGED}}), fpnew_pkg_BEFORE};
-	localparam [31:0] fpnew_pkg_NUM_INT_FORMATS = 1;
-	localparam [31:0] fpnew_pkg_INT_FORMAT_BITS = 0;
-	function automatic [0:0] sv2v_cast_1;
-		input reg [0:0] inp;
-		sv2v_cast_1 = inp;
+	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 [35:0] fpnew_pkg_RV32F = {34'b0000000000000000000000000010000001, sv2v_cast_1(5'b10000), sv2v_cast_1(4'b0010)};
-	localparam [fpnew_pkg_INT_FORMAT_BITS - 1:0] fpnew_pkg_INT32 = 0;
+	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)
@@ -1246,7 +1193,7 @@
 		.dst_fmt_i(fp_dst_fmt),
 		.int_fmt_i(fpnew_pkg_INT32),
 		.vectorial_op_i(1'b0),
-		.tag_i(),
+		.tag_i(1'b1),
 		.in_valid_i(in_valid_c2fpu),
 		.in_ready_o(out_ready_fpu2c),
 		.flush_i(fp_flush),
@@ -1328,7 +1275,7 @@
 );
 	parameter [0:0] PMPEnable = 1'b0;
 	parameter [31:0] PMPGranularity = 0;
-	parameter [31:0] PMPNumRegions = 0;
+	parameter [31:0] PMPNumRegions = 4;
 	parameter [31:0] MHPMCounterNum = 0;
 	parameter [31:0] MHPMCounterWidth = 40;
 	parameter [0:0] RV32E = 1'b0;
@@ -1438,7 +1385,7 @@
 		.alert_major_o(alert_major_o),
 		.core_sleep_o(core_sleep_o)
 	);
-	tlul_host_adapter #(.MAX_REQS(2)) intr_interface(
+	tlul_host_adapter #(.MAX_REQS(2)) instr_interface(
 		.clk_i(clk_i),
 		.rst_ni(rst_ni),
 		.req_i(instr_req),
@@ -1469,6 +1416,204 @@
 		.tl_h_c_d(tl_d_i)
 	);
 endmodule
+module rstmgr (
+	clk_i,
+	rst_ni,
+	prog_rst_ni,
+	ndmreset,
+	sys_rst_ni
+);
+	input clk_i;
+	input rst_ni;
+	input prog_rst_ni;
+	input wire ndmreset;
+	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,
@@ -1491,7 +1636,6 @@
 	reg [63:0] counter_load;
 	reg we;
 	reg [CounterWidth - 1:0] counter_d;
-	reg [CounterWidth - 1:0] counter_q;
 	always @(*) begin
 		we = counter_we_i | counterh_we_i;
 		counter_load[63:32] = counter[63:32];
@@ -1508,9 +1652,10 @@
 		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 <= 0;
+			counter_q <= {CounterWidth {1'sb0}};
 		else
 			counter_q <= counter_d;
 	generate
@@ -2354,7 +2499,7 @@
 	brq_csr #(
 		.Width(32),
 		.ShadowCopy(ShadowCSR),
-		.ResetValue(32'd1)
+		.ResetValue(32'd0)
 	) u_mtvec_csr(
 		.clk_i(clk_i),
 		.rst_ni(rst_ni),
@@ -2579,7 +2724,7 @@
 			mcountinhibit_d = mcountinhibit_q;
 	end
 	always @(*) begin : gen_mhpmcounter_incr
-		begin : sv2v_autoblock_81
+		begin : sv2v_autoblock_83
 			reg [31:0] i;
 			for (i = 0; i < 32; i = i + 1)
 				begin : gen_mhpmcounter_incr_inactive
@@ -2601,7 +2746,7 @@
 		mhpmcounter_incr[12] = div_wait_i;
 	end
 	always @(*) begin : gen_mhpmevent
-		begin : sv2v_autoblock_82
+		begin : sv2v_autoblock_84
 			reg signed [31:0] i;
 			for (i = 0; i < 32; i = i + 1)
 				begin : gen_mhpmevent_active
@@ -2610,7 +2755,7 @@
 				end
 		end
 		mhpmevent[1] = {32 {1'sb0}};
-		begin : sv2v_autoblock_83
+		begin : sv2v_autoblock_85
 			reg [31:0] i;
 			for (i = 3 + MHPMCounterNum; i < 32; i = i + 1)
 				begin : gen_mhpmevent_inactive
@@ -3032,7 +3177,7 @@
 		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_84
+		begin : sv2v_autoblock_86
 			reg [31:0] i;
 			for (i = 0; i < 32; i = i + 1)
 				shift_result_rev[i] = shift_result[31 - i];
@@ -3136,40 +3281,40 @@
 				endcase
 			always @(*) begin
 				bitcnt_partial = {32 {6'b000000}};
-				begin : sv2v_autoblock_85
+				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_86
+				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_87
+				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_88
+				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_89
+				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_90
+				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_91
+				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]};
@@ -3270,35 +3415,35 @@
 				assign bitcnt_partial_msb_d[31] = 1'b0;
 				always @(*) begin
 					bitcnt_partial_q = {32 {6'b000000}};
-					begin : sv2v_autoblock_92
+					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_93
+					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_94
+					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_95
+					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_96
+					begin : sv2v_autoblock_98
 						reg [31:0] i;
 						for (i = 0; i < 2; i = i + 1)
 							begin : gen_bitcnt_reg_out_b4
@@ -4465,7 +4610,7 @@
 		sv2v_cast_5 = inp;
 	endfunction
 	always @(*) begin : we_a_decoder
-		begin : sv2v_autoblock_97
+		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);
@@ -4547,7 +4692,8 @@
 	flush_id_o,
 	ready_wb_i,
 	perf_jump_o,
-	perf_tbranch_o
+	perf_tbranch_o,
+	fpu_busy_i
 );
 	parameter [0:0] WritebackStage = 0;
 	parameter [0:0] BranchPredictor = 0;
@@ -4612,6 +4758,7 @@
 	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;
@@ -5032,7 +5179,7 @@
 	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;
+	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
@@ -5195,10 +5342,10 @@
 	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 = 1;
-	localparam [31:0] fpnew_pkg_FP_FORMAT_BITS = 0;
-	output reg [fpnew_pkg_FP_FORMAT_BITS - 1:0] fp_src_fmt_o;
-	output reg [fpnew_pkg_FP_FORMAT_BITS - 1:0] fp_dst_fmt_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;
@@ -5223,7 +5370,7 @@
 	reg [1:0] csr_op;
 	reg [6:0] opcode;
 	reg [6:0] opcode_alu;
-	assign instr = instr_rdata_i;
+	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]};
@@ -5250,10 +5397,6 @@
 	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 [fpnew_pkg_FP_FORMAT_BITS - 1:0] fpnew_pkg_FP32 = 'd0;
-	wire [0:1] sv2v_tmp_24DB7;
-	assign sv2v_tmp_24DB7 = fpnew_pkg_FP32;
-	always @(*) fp_dst_fmt_o = sv2v_tmp_24DB7;
 	localparam [1:0] brq_pkg_OP_A_REG_A = 0;
 	localparam [0:0] brq_pkg_OP_B_REG_B = 0;
 	generate
@@ -5301,6 +5444,7 @@
 	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;
@@ -5647,10 +5791,8 @@
 						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
+						if (~(instr[14] | &instr[13:12]))
 							illegal_insn = ((RVF == brq_pkg_RV64FDouble) & fp_invalid_rm ? 1'b0 : 1'b1);
-							fp_src_fmt_o = FP64;
-						end
 					end
 					7'b0010000: begin
 						fp_rf_we_o = 1'b1;
@@ -6621,7 +6763,6 @@
 	parameter [0:0] SpecBranch = 0;
 	parameter [0:0] WritebackStage = 0;
 	parameter [0:0] BranchPredictor = 0;
-	parameter FloatingPoint = 1;
 	input wire clk_i;
 	input wire rst_ni;
 	output wire ctrl_busy_o;
@@ -6743,10 +6884,10 @@
 	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 = 1;
-	localparam [31:0] fpnew_pkg_FP_FORMAT_BITS = 0;
-	output wire [fpnew_pkg_FP_FORMAT_BITS - 1:0] fp_src_fmt_o;
-	output wire [fpnew_pkg_FP_FORMAT_BITS - 1:0] fp_dst_fmt_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;
@@ -6787,7 +6928,6 @@
 	reg stall_jump;
 	wire stall_id;
 	wire stall_wb;
-	reg stall_fpu;
 	wire flush_id;
 	wire multicycle_done;
 	wire [31:0] imm_i_type;
@@ -7107,7 +7247,8 @@
 		.flush_id_o(flush_id),
 		.ready_wb_i(ready_wb_i),
 		.perf_jump_o(perf_jump_o),
-		.perf_tbranch_o(perf_tbranch_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;
@@ -7176,7 +7317,6 @@
 		stall_jump = 1'b0;
 		stall_branch = 1'b0;
 		stall_alu = 1'b0;
-		stall_fpu = 1'b0;
 		branch_set_d = 1'b0;
 		branch_spec = 1'b0;
 		branch_not_set = 1'b0;
@@ -7191,7 +7331,6 @@
 								id_fsm_d = MULTI_CYCLE;
 							else if (~lsu_req_done_i)
 								id_fsm_d = MULTI_CYCLE;
-						FloatingPoint: stall_fpu = fpu_busy_i;
 						multdiv_en_dec:
 							if (~ex_valid_i) begin
 								id_fsm_d = MULTI_CYCLE;
@@ -7228,14 +7367,12 @@
 						stall_multdiv = multdiv_en_dec;
 						stall_branch = branch_in_dec;
 						stall_jump = jump_in_dec;
-						stall_fpu = fpu_busy_i;
 					end
 				end
-				default: id_fsm_d = FIRST_CYCLE;
 			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) | stall_fpu;
+	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;
@@ -7520,7 +7657,9 @@
 	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 (instr_addr_en)
+		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};
@@ -7558,7 +7697,7 @@
 			valid_q <= valid_d;
 	generate
 		for (i = 0; i < DEPTH; i = i + 1) begin : g_fifo_regs
-			always @(posedge clk_i or negedge rst_ni)
+			always @(posedge clk_i)
 				if (~rst_ni) begin
 					rdata_q[i * 32+:32] <= {32 {1'sb0}};
 					err_q[i] <= 1'b0;
@@ -7693,7 +7832,9 @@
 	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 (stored_addr_en)
+		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
@@ -7701,7 +7842,9 @@
 			wire branch_mispredict_addr_en;
 			assign branch_mispredict_addr_en = branch_i & predicted_branch_i;
 			always @(posedge clk_i)
-				if (branch_mispredict_addr_en)
+				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
@@ -7716,7 +7859,9 @@
 	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 (fetch_addr_en)
+		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};
@@ -7743,9 +7888,9 @@
 		if (!rst_ni) begin
 			valid_req_q <= 1'b0;
 			discard_req_q <= 1'b0;
-			rdata_outstanding_q <= 'b0;
-			branch_discard_q <= 'b0;
-			rdata_pmp_err_q <= '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;
@@ -7951,7 +8096,17 @@
 	assign instr_new_id_o = instr_new_id_q;
 	assign if_id_pipe_reg_we = instr_new_id_d;
 	always @(posedge clk_i)
-		if (if_id_pipe_reg_we) begin
+		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;
@@ -8376,7 +8531,7 @@
 			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_98
+				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])
@@ -8422,7 +8577,7 @@
 		sv2v_cast_5 = inp;
 	endfunction
 	always @(*) begin : we_a_decoder
-		begin : sv2v_autoblock_99
+		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);
@@ -8557,7 +8712,7 @@
 					wb_valid_q <= 1'b0;
 				else
 					wb_valid_q <= wb_valid_d;
-			always @(posedge clk_i or negedge rst_ni)
+			always @(posedge clk_i)
 				if (~rst_ni) begin
 					rf_we_wb_q <= 1'b0;
 					rf_waddr_wb_q <= {5 {1'sb0}};
@@ -10731,60 +10886,6 @@
 		else
 			rvalid_o <= tl_req;
 endmodule
-module debug_rom_one_scratch (
-	clk_i,
-	req_i,
-	addr_i,
-	rdata_o
-);
-	input wire clk_i;
-	input wire req_i;
-	input wire [63:0] addr_i;
-	output reg [63:0] rdata_o;
-	localparam [31:0] RomSize = 13;
-	wire [831:0] mem;
-	assign mem = 832'h7b2000737b20247310802423f1402473ab1ff06f7b20247310002223001000737b20247310002623fddff06ffc0418e30024741340044403f140247302041263001474134004440310802023f14024737b2410730ff0000f0340006f0500006f00c0006f;
-	reg [3:0] addr_q;
-	always @(posedge clk_i)
-		if (req_i)
-			addr_q <= addr_i[6:3];
-	function automatic [3:0] sv2v_cast_EB05F;
-		input reg [3:0] inp;
-		sv2v_cast_EB05F = inp;
-	endfunction
-	always @(*) begin : p_outmux
-		rdata_o = {64 {1'sb0}};
-		if (addr_q < sv2v_cast_EB05F(RomSize))
-			rdata_o = mem[addr_q * 64+:64];
-	end
-endmodule
-module debug_rom (
-	clk_i,
-	req_i,
-	addr_i,
-	rdata_o
-);
-	input wire clk_i;
-	input wire req_i;
-	input wire [63:0] addr_i;
-	output reg [63:0] rdata_o;
-	localparam [31:0] RomSize = 19;
-	wire [1215:0] mem;
-	assign mem = 1216'h7b2000737b2024737b30257310852423f1402473a85ff06f7b2024737b30257310052223001000737b2024737b3025731005262300c5151300c5551300000517fd5ff06ffa041ce3002474134004440300a40433f140247302041c63001474134004440300a4043310852023f140247300c5151300c55513000005177b3510737b2410730ff0000f04c0006f07c0006f00c0006f;
-	reg [4:0] addr_q;
-	always @(posedge clk_i)
-		if (req_i)
-			addr_q <= addr_i[7:3];
-	function automatic [4:0] sv2v_cast_2C22F;
-		input reg [4:0] inp;
-		sv2v_cast_2C22F = inp;
-	endfunction
-	always @(*) begin : p_outmux
-		rdata_o = {64 {1'sb0}};
-		if (addr_q < sv2v_cast_2C22F(RomSize))
-			rdata_o = mem[addr_q * 64+:64];
-	end
-endmodule
 module div_sqrt_top_mvp (
 	Clk_CI,
 	Rst_RBI,
@@ -10923,1764 +11024,6 @@
 		.Fflags_SO(Fflags_SO)
 	);
 endmodule
-module dm_csrs (
-	clk_i,
-	rst_ni,
-	testmode_i,
-	dmi_rst_ni,
-	dmi_req_valid_i,
-	dmi_req_ready_o,
-	dmi_req_i,
-	dmi_resp_valid_o,
-	dmi_resp_ready_i,
-	dmi_resp_o,
-	ndmreset_o,
-	dmactive_o,
-	hartinfo_i,
-	halted_i,
-	unavailable_i,
-	resumeack_i,
-	hartsel_o,
-	haltreq_o,
-	resumereq_o,
-	clear_resumeack_o,
-	cmd_valid_o,
-	cmd_o,
-	cmderror_valid_i,
-	cmderror_i,
-	cmdbusy_i,
-	progbuf_o,
-	data_o,
-	data_i,
-	data_valid_i,
-	sbaddress_o,
-	sbaddress_i,
-	sbaddress_write_valid_o,
-	sbreadonaddr_o,
-	sbautoincrement_o,
-	sbaccess_o,
-	sbreadondata_o,
-	sbdata_o,
-	sbdata_read_valid_o,
-	sbdata_write_valid_o,
-	sbdata_i,
-	sbdata_valid_i,
-	sbbusy_i,
-	sberror_valid_i,
-	sberror_i
-);
-	parameter [31:0] NrHarts = 1;
-	parameter [31:0] BusWidth = 32;
-	parameter [NrHarts - 1:0] SelectableHarts = {NrHarts {1'b1}};
-	input wire clk_i;
-	input wire rst_ni;
-	input wire testmode_i;
-	input wire dmi_rst_ni;
-	input wire dmi_req_valid_i;
-	output wire dmi_req_ready_o;
-	input wire [40:0] dmi_req_i;
-	output wire dmi_resp_valid_o;
-	input wire dmi_resp_ready_i;
-	output wire [33:0] dmi_resp_o;
-	output wire ndmreset_o;
-	output wire dmactive_o;
-	input wire [(NrHarts * 32) - 1:0] hartinfo_i;
-	input wire [NrHarts - 1:0] halted_i;
-	input wire [NrHarts - 1:0] unavailable_i;
-	input wire [NrHarts - 1:0] resumeack_i;
-	output wire [19:0] hartsel_o;
-	output reg [NrHarts - 1:0] haltreq_o;
-	output reg [NrHarts - 1:0] resumereq_o;
-	output reg clear_resumeack_o;
-	output wire cmd_valid_o;
-	output wire [31:0] cmd_o;
-	input wire cmderror_valid_i;
-	input wire [2:0] cmderror_i;
-	input wire cmdbusy_i;
-	localparam [4:0] dm_ProgBufSize = 5'h08;
-	output wire [(dm_ProgBufSize * 32) - 1:0] progbuf_o;
-	localparam [3:0] dm_DataCount = 4'h2;
-	output wire [(dm_DataCount * 32) - 1:0] data_o;
-	input wire [(dm_DataCount * 32) - 1:0] data_i;
-	input wire data_valid_i;
-	output wire [BusWidth - 1:0] sbaddress_o;
-	input wire [BusWidth - 1:0] sbaddress_i;
-	output reg sbaddress_write_valid_o;
-	output wire sbreadonaddr_o;
-	output wire sbautoincrement_o;
-	output wire [2:0] sbaccess_o;
-	output wire sbreadondata_o;
-	output wire [BusWidth - 1:0] sbdata_o;
-	output reg sbdata_read_valid_o;
-	output reg sbdata_write_valid_o;
-	input wire [BusWidth - 1:0] sbdata_i;
-	input wire sbdata_valid_i;
-	input wire sbbusy_i;
-	input wire sberror_valid_i;
-	input wire [2:0] sberror_i;
-	localparam [31:0] HartSelLen = (NrHarts == 1 ? 1 : $clog2(NrHarts));
-	localparam [31:0] NrHartsAligned = 2 ** HartSelLen;
-	wire [1:0] dtm_op;
-	function automatic [1:0] sv2v_cast_2;
-		input reg [1:0] inp;
-		sv2v_cast_2 = inp;
-	endfunction
-	assign dtm_op = sv2v_cast_2(dmi_req_i[33-:2]);
-	reg [31:0] resp_queue_data;
-	localparam [7:0] dm_Data0 = 8'h04;
-	function automatic [7:0] sv2v_cast_8;
-		input reg [7:0] inp;
-		sv2v_cast_8 = inp;
-	endfunction
-	localparam [7:0] DataEnd = sv2v_cast_8((dm_Data0 + {4'h0, dm_DataCount}) - 8'h01);
-	localparam [7:0] dm_ProgBuf0 = 8'h20;
-	localparam [7:0] ProgBufEnd = sv2v_cast_8((dm_ProgBuf0 + {4'h0, dm_ProgBufSize}) - 8'h01);
-	reg [31:0] haltsum0;
-	reg [31:0] haltsum1;
-	reg [31:0] haltsum2;
-	reg [31:0] haltsum3;
-	reg [((((NrHarts - 1) / 32) + 1) * 32) - 1:0] halted;
-	reg [(((NrHarts - 1) / 32) >= 0 ? ((((NrHarts - 1) / 32) + 1) * 32) - 1 : ((1 - ((NrHarts - 1) / 32)) * 32) + ((((NrHarts - 1) / 32) * 32) - 1)):(((NrHarts - 1) / 32) >= 0 ? 0 : ((NrHarts - 1) / 32) * 32)] halted_reshaped0;
-	reg [(((NrHarts - 1) / 1024) >= 0 ? ((((NrHarts - 1) / 1024) + 1) * 32) - 1 : ((1 - ((NrHarts - 1) / 1024)) * 32) + ((((NrHarts - 1) / 1024) * 32) - 1)):(((NrHarts - 1) / 1024) >= 0 ? 0 : ((NrHarts - 1) / 1024) * 32)] halted_reshaped1;
-	reg [(((NrHarts - 1) / 32768) >= 0 ? ((((NrHarts - 1) / 32768) + 1) * 32) - 1 : ((1 - ((NrHarts - 1) / 32768)) * 32) + ((((NrHarts - 1) / 32768) * 32) - 1)):(((NrHarts - 1) / 32768) >= 0 ? 0 : ((NrHarts - 1) / 32768) * 32)] halted_reshaped2;
-	reg [((((NrHarts - 1) / 1024) + 1) * 32) - 1:0] halted_flat1;
-	reg [((((NrHarts - 1) / 32768) + 1) * 32) - 1:0] halted_flat2;
-	reg [31:0] halted_flat3;
-	reg [14:0] hartsel_idx0;
-	function automatic [14:0] sv2v_cast_15;
-		input reg [14:0] inp;
-		sv2v_cast_15 = inp;
-	endfunction
-	always @(*) begin : p_haltsum0
-		halted = {(((NrHarts - 1) / 32) + 1) * 32 {1'sb0}};
-		haltsum0 = {32 {1'sb0}};
-		hartsel_idx0 = hartsel_o[19:5];
-		halted[NrHarts - 1:0] = halted_i;
-		halted_reshaped0 = halted;
-		if (hartsel_idx0 < sv2v_cast_15(((NrHarts - 1) / 32) + 1))
-			haltsum0 = halted_reshaped0[(((NrHarts - 1) / 32) >= 0 ? hartsel_idx0 : ((NrHarts - 1) / 32) - hartsel_idx0) * 32+:32];
-	end
-	reg [9:0] hartsel_idx1;
-	function automatic [9:0] sv2v_cast_10;
-		input reg [9:0] inp;
-		sv2v_cast_10 = inp;
-	endfunction
-	always @(*) begin : p_reduction1
-		halted_flat1 = {(((NrHarts - 1) / 1024) + 1) * 32 {1'sb0}};
-		haltsum1 = {32 {1'sb0}};
-		hartsel_idx1 = hartsel_o[19:10];
-		begin : sv2v_autoblock_100
-			reg [31:0] k;
-			for (k = 0; k < (((NrHarts - 1) / 32) + 1); k = k + 1)
-				halted_flat1[k] = |halted_reshaped0[(((NrHarts - 1) / 32) >= 0 ? k : ((NrHarts - 1) / 32) - k) * 32+:32];
-		end
-		halted_reshaped1 = halted_flat1;
-		if (hartsel_idx1 < sv2v_cast_10(((NrHarts - 1) / 1024) + 1))
-			haltsum1 = halted_reshaped1[(((NrHarts - 1) / 1024) >= 0 ? hartsel_idx1 : ((NrHarts - 1) / 1024) - hartsel_idx1) * 32+:32];
-	end
-	reg [4:0] hartsel_idx2;
-	function automatic [4:0] sv2v_cast_5;
-		input reg [4:0] inp;
-		sv2v_cast_5 = inp;
-	endfunction
-	always @(*) begin : p_reduction2
-		halted_flat2 = {(((NrHarts - 1) / 32768) + 1) * 32 {1'sb0}};
-		haltsum2 = {32 {1'sb0}};
-		hartsel_idx2 = hartsel_o[19:15];
-		begin : sv2v_autoblock_101
-			reg [31:0] k;
-			for (k = 0; k < (((NrHarts - 1) / 1024) + 1); k = k + 1)
-				halted_flat2[k] = |halted_reshaped1[(((NrHarts - 1) / 1024) >= 0 ? k : ((NrHarts - 1) / 1024) - k) * 32+:32];
-		end
-		halted_reshaped2 = halted_flat2;
-		if (hartsel_idx2 < sv2v_cast_5(((NrHarts - 1) / 32768) + 1))
-			haltsum2 = halted_reshaped2[(((NrHarts - 1) / 32768) >= 0 ? hartsel_idx2 : ((NrHarts - 1) / 32768) - hartsel_idx2) * 32+:32];
-	end
-	always @(*) begin : p_reduction3
-		halted_flat3 = {32 {1'sb0}};
-		begin : sv2v_autoblock_102
-			reg [31:0] k;
-			for (k = 0; k < ((NrHarts / 32768) + 1); k = k + 1)
-				halted_flat3[k] = |halted_reshaped2[(((NrHarts - 1) / 32768) >= 0 ? k : ((NrHarts - 1) / 32768) - k) * 32+:32];
-		end
-		haltsum3 = halted_flat3;
-	end
-	reg [31:0] dmstatus;
-	reg [31:0] dmcontrol_d;
-	reg [31:0] dmcontrol_q;
-	reg [31:0] abstractcs;
-	reg [2:0] cmderr_d;
-	reg [2:0] cmderr_q;
-	reg [31:0] command_d;
-	reg [31:0] command_q;
-	reg cmd_valid_d;
-	reg cmd_valid_q;
-	reg [31:0] abstractauto_d;
-	reg [31:0] abstractauto_q;
-	reg [31:0] sbcs_d;
-	reg [31:0] sbcs_q;
-	reg [63:0] sbaddr_d;
-	reg [63:0] sbaddr_q;
-	reg [63:0] sbdata_d;
-	reg [63:0] sbdata_q;
-	wire [NrHarts - 1:0] havereset_d;
-	reg [NrHarts - 1:0] havereset_q;
-	reg [(dm_ProgBufSize * 32) - 1:0] progbuf_d;
-	reg [(dm_ProgBufSize * 32) - 1:0] progbuf_q;
-	reg [(dm_DataCount * 32) - 1:0] data_d;
-	reg [(dm_DataCount * 32) - 1:0] data_q;
-	reg [HartSelLen - 1:0] selected_hart;
-	localparam [1:0] dm_DTM_SUCCESS = 2'h0;
-	assign dmi_resp_o[1-:2] = dm_DTM_SUCCESS;
-	assign sbautoincrement_o = sbcs_q[16];
-	assign sbreadonaddr_o = sbcs_q[20];
-	assign sbreadondata_o = sbcs_q[15];
-	assign sbaccess_o = sbcs_q[19-:3];
-	assign sbdata_o = sbdata_q[BusWidth - 1:0];
-	assign sbaddress_o = sbaddr_q[BusWidth - 1:0];
-	assign hartsel_o = {dmcontrol_q[15-:10], dmcontrol_q[25-:10]};
-	reg [NrHartsAligned - 1:0] havereset_d_aligned;
-	wire [NrHartsAligned - 1:0] havereset_q_aligned;
-	wire [NrHartsAligned - 1:0] resumeack_aligned;
-	wire [NrHartsAligned - 1:0] unavailable_aligned;
-	wire [NrHartsAligned - 1:0] halted_aligned;
-	function automatic [NrHartsAligned - 1:0] sv2v_cast_C60B8;
-		input reg [NrHartsAligned - 1:0] inp;
-		sv2v_cast_C60B8 = inp;
-	endfunction
-	assign resumeack_aligned = sv2v_cast_C60B8(resumeack_i);
-	assign unavailable_aligned = sv2v_cast_C60B8(unavailable_i);
-	assign halted_aligned = sv2v_cast_C60B8(halted_i);
-	function automatic [NrHarts - 1:0] sv2v_cast_25FFB;
-		input reg [NrHarts - 1:0] inp;
-		sv2v_cast_25FFB = inp;
-	endfunction
-	assign havereset_d = sv2v_cast_25FFB(havereset_d_aligned);
-	assign havereset_q_aligned = sv2v_cast_C60B8(havereset_q);
-	reg [(NrHartsAligned * 32) - 1:0] hartinfo_aligned;
-	always @(*) begin : p_hartinfo_align
-		hartinfo_aligned = {NrHartsAligned * 32 {1'sb0}};
-		hartinfo_aligned[32 * ((NrHarts - 1) - (NrHarts - 1))+:32 * NrHarts] = hartinfo_i;
-	end
-	wire [7:0] dm_csr_addr;
-	reg [31:0] sbcs;
-	reg [31:0] a_abstractcs;
-	wire [3:0] autoexecdata_idx;
-	assign dm_csr_addr = sv2v_cast_8({1'b0, dmi_req_i[40-:7]});
-	function automatic [3:0] sv2v_cast_4;
-		input reg [3:0] inp;
-		sv2v_cast_4 = inp;
-	endfunction
-	assign autoexecdata_idx = sv2v_cast_4({dm_csr_addr} - {dm_Data0});
-	localparam [3:0] dm_DbgVersion013 = 4'h2;
-	localparam [7:0] dm_AbstractAuto = 8'h18;
-	localparam [7:0] dm_AbstractCS = 8'h16;
-	localparam [2:0] dm_CmdErrBusy = 1;
-	localparam [2:0] dm_CmdErrNone = 0;
-	localparam [7:0] dm_Command = 8'h17;
-	localparam [7:0] dm_DMControl = 8'h10;
-	localparam [7:0] dm_DMStatus = 8'h11;
-	localparam [1:0] dm_DTM_READ = 2'h1;
-	localparam [1:0] dm_DTM_WRITE = 2'h2;
-	localparam [7:0] dm_HaltSum0 = 8'h40;
-	localparam [7:0] dm_HaltSum1 = 8'h13;
-	localparam [7:0] dm_HaltSum2 = 8'h34;
-	localparam [7:0] dm_HaltSum3 = 8'h35;
-	localparam [7:0] dm_Hartinfo = 8'h12;
-	localparam [7:0] dm_SBAddress0 = 8'h39;
-	localparam [7:0] dm_SBAddress1 = 8'h3a;
-	localparam [7:0] dm_SBCS = 8'h38;
-	localparam [7:0] dm_SBData0 = 8'h3c;
-	localparam [7:0] dm_SBData1 = 8'h3d;
-	function automatic [31:0] sv2v_cast_32;
-		input reg [31:0] inp;
-		sv2v_cast_32 = inp;
-	endfunction
-	function automatic [63:0] sv2v_cast_64;
-		input reg [63:0] inp;
-		sv2v_cast_64 = inp;
-	endfunction
-	function automatic [$clog2(4'h2) - 1:0] sv2v_cast_BB9EC;
-		input reg [$clog2(4'h2) - 1:0] inp;
-		sv2v_cast_BB9EC = inp;
-	endfunction
-	function automatic [2:0] sv2v_cast_3;
-		input reg [2:0] inp;
-		sv2v_cast_3 = inp;
-	endfunction
-	function automatic [11:0] sv2v_cast_12;
-		input reg [11:0] inp;
-		sv2v_cast_12 = inp;
-	endfunction
-	function automatic [15:0] sv2v_cast_16;
-		input reg [15:0] inp;
-		sv2v_cast_16 = inp;
-	endfunction
-	function automatic [6:0] sv2v_cast_F50EE;
-		input reg [6:0] inp;
-		sv2v_cast_F50EE = inp;
-	endfunction
-	always @(*) begin : csr_read_write
-		dmstatus = {32 {1'sb0}};
-		dmstatus[3-:4] = dm_DbgVersion013;
-		dmstatus[7] = 1'b1;
-		dmstatus[5] = 1'b0;
-		dmstatus[19] = havereset_q_aligned[selected_hart];
-		dmstatus[18] = havereset_q_aligned[selected_hart];
-		dmstatus[17] = resumeack_aligned[selected_hart];
-		dmstatus[16] = resumeack_aligned[selected_hart];
-		dmstatus[13] = unavailable_aligned[selected_hart];
-		dmstatus[12] = unavailable_aligned[selected_hart];
-		dmstatus[15] = sv2v_cast_32(hartsel_o) > (NrHarts - 32'sd1);
-		dmstatus[14] = sv2v_cast_32(hartsel_o) > (NrHarts - 32'sd1);
-		dmstatus[9] = halted_aligned[selected_hart] & ~unavailable_aligned[selected_hart];
-		dmstatus[8] = halted_aligned[selected_hart] & ~unavailable_aligned[selected_hart];
-		dmstatus[11] = ~halted_aligned[selected_hart] & ~unavailable_aligned[selected_hart];
-		dmstatus[10] = ~halted_aligned[selected_hart] & ~unavailable_aligned[selected_hart];
-		abstractcs = {32 {1'sb0}};
-		abstractcs[3-:4] = dm_DataCount;
-		abstractcs[28-:5] = dm_ProgBufSize;
-		abstractcs[12] = cmdbusy_i;
-		abstractcs[10-:3] = cmderr_q;
-		abstractauto_d = abstractauto_q;
-		abstractauto_d[15-:4] = {4 {1'sb0}};
-		havereset_d_aligned = sv2v_cast_C60B8(havereset_q);
-		dmcontrol_d = dmcontrol_q;
-		cmderr_d = cmderr_q;
-		command_d = command_q;
-		progbuf_d = progbuf_q;
-		data_d = data_q;
-		sbcs_d = sbcs_q;
-		sbaddr_d = sv2v_cast_64(sbaddress_i);
-		sbdata_d = sbdata_q;
-		resp_queue_data = 32'h00000000;
-		cmd_valid_d = 1'b0;
-		sbaddress_write_valid_o = 1'b0;
-		sbdata_read_valid_o = 1'b0;
-		sbdata_write_valid_o = 1'b0;
-		clear_resumeack_o = 1'b0;
-		sbcs = {32 {1'sb0}};
-		a_abstractcs = {32 {1'sb0}};
-		if ((dmi_req_ready_o && dmi_req_valid_i) && (dtm_op == dm_DTM_READ))
-			if ((dm_Data0 <= dm_csr_addr) && (DataEnd >= dm_csr_addr)) begin
-				resp_queue_data = data_q[sv2v_cast_BB9EC(autoexecdata_idx) * 32+:32];
-				if (!cmdbusy_i)
-					cmd_valid_d = abstractauto_q[autoexecdata_idx];
-				else if (cmderr_q == dm_CmdErrNone)
-					cmderr_d = dm_CmdErrBusy;
-			end
-			else if (dm_csr_addr == dm_DMControl)
-				resp_queue_data = dmcontrol_q;
-			else if (dm_csr_addr == dm_DMStatus)
-				resp_queue_data = dmstatus;
-			else if (dm_csr_addr == dm_Hartinfo)
-				resp_queue_data = hartinfo_aligned[selected_hart * 32+:32];
-			else if (dm_csr_addr == dm_AbstractCS)
-				resp_queue_data = abstractcs;
-			else if (dm_csr_addr == dm_AbstractAuto)
-				resp_queue_data = abstractauto_q;
-			else if (dm_csr_addr == dm_Command)
-				resp_queue_data = {32 {1'sb0}};
-			else if ((dm_ProgBuf0 <= dm_csr_addr) && (ProgBufEnd >= dm_csr_addr)) begin
-				resp_queue_data = progbuf_q[dmi_req_i[$clog2(5'h08) + 33:34] * 32+:32];
-				if (!cmdbusy_i)
-					cmd_valid_d = abstractauto_q[{1'b1, dmi_req_i[37:34]}];
-				else if (cmderr_q == dm_CmdErrNone)
-					cmderr_d = dm_CmdErrBusy;
-			end
-			else if (dm_csr_addr == dm_HaltSum0)
-				resp_queue_data = haltsum0;
-			else if (dm_csr_addr == dm_HaltSum1)
-				resp_queue_data = haltsum1;
-			else if (dm_csr_addr == dm_HaltSum2)
-				resp_queue_data = haltsum2;
-			else if (dm_csr_addr == dm_HaltSum3)
-				resp_queue_data = haltsum3;
-			else if (dm_csr_addr == dm_SBCS)
-				resp_queue_data = sbcs_q;
-			else if (dm_csr_addr == dm_SBAddress0)
-				resp_queue_data = sbaddr_q[31:0];
-			else if (dm_csr_addr == dm_SBAddress1)
-				resp_queue_data = sbaddr_q[63:32];
-			else if (dm_csr_addr == dm_SBData0) begin
-				if (sbbusy_i || sbcs_q[22])
-					sbcs_d[22] = 1'b1;
-				else begin
-					sbdata_read_valid_o = sbcs_q[14-:3] == {3 {1'sb0}};
-					resp_queue_data = sbdata_q[31:0];
-				end
-			end
-			else if (dm_csr_addr == dm_SBData1)
-				if (sbbusy_i || sbcs_q[22])
-					sbcs_d[22] = 1'b1;
-				else
-					resp_queue_data = sbdata_q[63:32];
-		if ((dmi_req_ready_o && dmi_req_valid_i) && (dtm_op == dm_DTM_WRITE))
-			if ((dm_Data0 <= dm_csr_addr) && (DataEnd >= dm_csr_addr)) begin
-				if (dm_DataCount > 0)
-					if (!cmdbusy_i) begin
-						data_d[dmi_req_i[$clog2(4'h2) + 33:34] * 32+:32] = dmi_req_i[31-:32];
-						cmd_valid_d = abstractauto_q[autoexecdata_idx];
-					end
-					else if (cmderr_q == dm_CmdErrNone)
-						cmderr_d = dm_CmdErrBusy;
-			end
-			else if (dm_csr_addr == dm_DMControl) begin
-				dmcontrol_d = dmi_req_i[31-:32];
-				if (dmcontrol_d[28])
-					havereset_d_aligned[selected_hart] = 1'b0;
-			end
-			else if (dm_csr_addr == dm_DMStatus)
-				;
-			else if (dm_csr_addr == dm_Hartinfo)
-				;
-			else if (dm_csr_addr == dm_AbstractCS) begin
-				a_abstractcs = sv2v_cast_32(dmi_req_i[31-:32]);
-				if (!cmdbusy_i)
-					cmderr_d = sv2v_cast_3(~a_abstractcs[10-:3] & cmderr_q);
-				else if (cmderr_q == dm_CmdErrNone)
-					cmderr_d = dm_CmdErrBusy;
-			end
-			else if (dm_csr_addr == dm_Command) begin
-				if (!cmdbusy_i) begin
-					cmd_valid_d = 1'b1;
-					command_d = sv2v_cast_32(dmi_req_i[31-:32]);
-				end
-				else if (cmderr_q == dm_CmdErrNone)
-					cmderr_d = dm_CmdErrBusy;
-			end
-			else if (dm_csr_addr == dm_AbstractAuto) begin
-				if (!cmdbusy_i) begin
-					abstractauto_d = 32'h00000000;
-					abstractauto_d[11-:12] = sv2v_cast_12(dmi_req_i[dm_DataCount - 1:0]);
-					abstractauto_d[31-:16] = sv2v_cast_16(dmi_req_i[dm_ProgBufSize + 15:16]);
-				end
-				else if (cmderr_q == dm_CmdErrNone)
-					cmderr_d = dm_CmdErrBusy;
-			end
-			else if ((dm_ProgBuf0 <= dm_csr_addr) && (ProgBufEnd >= dm_csr_addr)) begin
-				if (!cmdbusy_i) begin
-					progbuf_d[dmi_req_i[$clog2(5'h08) + 33:34] * 32+:32] = dmi_req_i[31-:32];
-					cmd_valid_d = abstractauto_q[{1'b1, dmi_req_i[37:34]}];
-				end
-				else if (cmderr_q == dm_CmdErrNone)
-					cmderr_d = dm_CmdErrBusy;
-			end
-			else if (dm_csr_addr == dm_SBCS) begin
-				if (sbbusy_i)
-					sbcs_d[22] = 1'b1;
-				else begin
-					sbcs = sv2v_cast_32(dmi_req_i[31-:32]);
-					sbcs_d = sbcs;
-					sbcs_d[22] = sbcs_q[22] & ~sbcs[22];
-					sbcs_d[14-:3] = sbcs_q[14-:3] & ~sbcs[14-:3];
-				end
-			end
-			else if (dm_csr_addr == dm_SBAddress0) begin
-				if (sbbusy_i || sbcs_q[22])
-					sbcs_d[22] = 1'b1;
-				else begin
-					sbaddr_d[31:0] = dmi_req_i[31-:32];
-					sbaddress_write_valid_o = sbcs_q[14-:3] == {3 {1'sb0}};
-				end
-			end
-			else if (dm_csr_addr == dm_SBAddress1) begin
-				if (sbbusy_i || sbcs_q[22])
-					sbcs_d[22] = 1'b1;
-				else
-					sbaddr_d[63:32] = dmi_req_i[31-:32];
-			end
-			else if (dm_csr_addr == dm_SBData0) begin
-				if (sbbusy_i || sbcs_q[22])
-					sbcs_d[22] = 1'b1;
-				else begin
-					sbdata_d[31:0] = dmi_req_i[31-:32];
-					sbdata_write_valid_o = sbcs_q[14-:3] == {3 {1'sb0}};
-				end
-			end
-			else if (dm_csr_addr == dm_SBData1)
-				if (sbbusy_i || sbcs_q[22])
-					sbcs_d[22] = 1'b1;
-				else
-					sbdata_d[63:32] = dmi_req_i[31-:32];
-		if (cmderror_valid_i)
-			cmderr_d = cmderror_i;
-		if (data_valid_i)
-			data_d = data_i;
-		if (ndmreset_o)
-			havereset_d_aligned[NrHarts - 1:0] = {NrHarts {1'sb1}};
-		if (sberror_valid_i)
-			sbcs_d[14-:3] = sberror_i;
-		if (sbdata_valid_i)
-			sbdata_d = sv2v_cast_64(sbdata_i);
-		dmcontrol_d[26] = 1'b0;
-		dmcontrol_d[29] = 1'b0;
-		dmcontrol_d[3] = 1'b0;
-		dmcontrol_d[2] = 1'b0;
-		dmcontrol_d[27] = 1'b0;
-		dmcontrol_d[5-:2] = {2 {1'sb0}};
-		dmcontrol_d[28] = 1'b0;
-		if (!dmcontrol_q[30] && dmcontrol_d[30])
-			clear_resumeack_o = 1'b1;
-		if (dmcontrol_q[30] && resumeack_i)
-			dmcontrol_d[30] = 1'b0;
-		sbcs_d[31-:3] = 3'd1;
-		sbcs_d[21] = sbbusy_i;
-		sbcs_d[11-:7] = sv2v_cast_F50EE(BusWidth);
-		sbcs_d[4] = 1'b0;
-		sbcs_d[3] = BusWidth == 32'd64;
-		sbcs_d[2] = BusWidth == 32'd32;
-		sbcs_d[1] = 1'b0;
-		sbcs_d[0] = 1'b0;
-		sbcs_d[19-:3] = (BusWidth == 32'd64 ? 3'd3 : 3'd2);
-	end
-	function automatic [HartSelLen - 1:0] sv2v_cast_41A1E;
-		input reg [HartSelLen - 1:0] inp;
-		sv2v_cast_41A1E = inp;
-	endfunction
-	always @(*) begin : p_outmux
-		selected_hart = hartsel_o[HartSelLen - 1:0];
-		haltreq_o = {NrHarts {1'sb0}};
-		resumereq_o = {NrHarts {1'sb0}};
-		if (selected_hart <= sv2v_cast_41A1E(NrHarts - 1)) begin
-			haltreq_o[selected_hart] = dmcontrol_q[31];
-			resumereq_o[selected_hart] = dmcontrol_q[30];
-		end
-	end
-	assign dmactive_o = dmcontrol_q[0];
-	assign cmd_o = command_q;
-	assign cmd_valid_o = cmd_valid_q;
-	assign progbuf_o = progbuf_q;
-	assign data_o = data_q;
-	assign ndmreset_o = dmcontrol_q[1];
-	wire unused_testmode;
-	assign unused_testmode = testmode_i;
-	fifo_sync #(
-		.Width(32),
-		.Pass(1'b0),
-		.Depth(2)
-	) i_fifo(
-		.clk_i(clk_i),
-		.rst_ni(dmi_rst_ni),
-		.clr_i(1'b0),
-		.wdata_i(resp_queue_data),
-		.wvalid_i(dmi_req_valid_i),
-		.wready_o(dmi_req_ready_o),
-		.rdata_o(dmi_resp_o[33-:32]),
-		.rvalid_o(dmi_resp_valid_o),
-		.rready_i(dmi_resp_ready_i),
-		.full_o(),
-		.depth_o()
-	);
-	always @(posedge clk_i or negedge rst_ni) begin : p_regs
-		if (!rst_ni) begin
-			dmcontrol_q <= {32 {1'sb0}};
-			cmderr_q <= dm_CmdErrNone;
-			command_q <= {32 {1'sb0}};
-			cmd_valid_q <= 1'b0;
-			abstractauto_q <= {32 {1'sb0}};
-			progbuf_q <= {dm_ProgBufSize * 32 {1'sb0}};
-			data_q <= {dm_DataCount * 32 {1'sb0}};
-			sbcs_q <= {32 {1'sb0}};
-			sbaddr_q <= {64 {1'sb0}};
-			sbdata_q <= {64 {1'sb0}};
-			havereset_q <= {NrHarts {1'sb1}};
-		end
-		else begin
-			havereset_q <= SelectableHarts & havereset_d;
-			if (!dmcontrol_q[0]) begin
-				dmcontrol_q[31] <= 1'b0;
-				dmcontrol_q[30] <= 1'b0;
-				dmcontrol_q[29] <= 1'b0;
-				dmcontrol_q[28] <= 1'b0;
-				dmcontrol_q[27] <= 1'b0;
-				dmcontrol_q[26] <= 1'b0;
-				dmcontrol_q[25-:10] <= {10 {1'sb0}};
-				dmcontrol_q[15-:10] <= {10 {1'sb0}};
-				dmcontrol_q[5-:2] <= {2 {1'sb0}};
-				dmcontrol_q[3] <= 1'b0;
-				dmcontrol_q[2] <= 1'b0;
-				dmcontrol_q[1] <= 1'b0;
-				dmcontrol_q[0] <= dmcontrol_d[0];
-				cmderr_q <= dm_CmdErrNone;
-				command_q <= {32 {1'sb0}};
-				cmd_valid_q <= 1'b0;
-				abstractauto_q <= {32 {1'sb0}};
-				progbuf_q <= {dm_ProgBufSize * 32 {1'sb0}};
-				data_q <= {dm_DataCount * 32 {1'sb0}};
-				sbcs_q <= {32 {1'sb0}};
-				sbaddr_q <= {64 {1'sb0}};
-				sbdata_q <= {64 {1'sb0}};
-			end
-			else begin
-				dmcontrol_q <= dmcontrol_d;
-				cmderr_q <= cmderr_d;
-				command_q <= command_d;
-				cmd_valid_q <= cmd_valid_d;
-				abstractauto_q <= abstractauto_d;
-				progbuf_q <= progbuf_d;
-				data_q <= data_d;
-				sbcs_q <= sbcs_d;
-				sbaddr_q <= sbaddr_d;
-				sbdata_q <= sbdata_d;
-			end
-		end
-	end
-endmodule
-module dmi_cdc (
-	tck_i,
-	trst_ni,
-	jtag_dmi_req_i,
-	jtag_dmi_ready_o,
-	jtag_dmi_valid_i,
-	jtag_dmi_resp_o,
-	jtag_dmi_valid_o,
-	jtag_dmi_ready_i,
-	clk_i,
-	rst_ni,
-	core_dmi_req_o,
-	core_dmi_valid_o,
-	core_dmi_ready_i,
-	core_dmi_resp_i,
-	core_dmi_ready_o,
-	core_dmi_valid_i
-);
-	input wire tck_i;
-	input wire trst_ni;
-	input wire [40:0] jtag_dmi_req_i;
-	output wire jtag_dmi_ready_o;
-	input wire jtag_dmi_valid_i;
-	output wire [33:0] jtag_dmi_resp_o;
-	output wire jtag_dmi_valid_o;
-	input wire jtag_dmi_ready_i;
-	input wire clk_i;
-	input wire rst_ni;
-	output wire [40:0] core_dmi_req_o;
-	output wire core_dmi_valid_o;
-	input wire core_dmi_ready_i;
-	input wire [33:0] core_dmi_resp_i;
-	output wire core_dmi_ready_o;
-	input wire core_dmi_valid_i;
-	fifo_async #(
-		.Width(41),
-		.Depth(4)
-	) i_cdc_req(
-		.clk_wr_i(tck_i),
-		.rst_wr_ni(trst_ni),
-		.wvalid_i(jtag_dmi_valid_i),
-		.wready_o(jtag_dmi_ready_o),
-		.wdata_i(jtag_dmi_req_i),
-		.wdepth_o(),
-		.clk_rd_i(clk_i),
-		.rst_rd_ni(rst_ni),
-		.rvalid_o(core_dmi_valid_o),
-		.rready_i(core_dmi_ready_i),
-		.rdata_o(core_dmi_req_o),
-		.rdepth_o()
-	);
-	fifo_async #(
-		.Width(34),
-		.Depth(4)
-	) i_cdc_resp(
-		.clk_wr_i(clk_i),
-		.rst_wr_ni(rst_ni),
-		.wvalid_i(core_dmi_valid_i),
-		.wready_o(core_dmi_ready_o),
-		.wdata_i(core_dmi_resp_i),
-		.wdepth_o(),
-		.clk_rd_i(tck_i),
-		.rst_rd_ni(trst_ni),
-		.rvalid_o(jtag_dmi_valid_o),
-		.rready_i(jtag_dmi_ready_i),
-		.rdata_o(jtag_dmi_resp_o),
-		.rdepth_o()
-	);
-endmodule
-module dmi_jtag (
-	clk_i,
-	rst_ni,
-	testmode_i,
-	dmi_rst_no,
-	dmi_req_o,
-	dmi_req_valid_o,
-	dmi_req_ready_i,
-	dmi_resp_i,
-	dmi_resp_ready_o,
-	dmi_resp_valid_i,
-	tck_i,
-	tms_i,
-	trst_ni,
-	td_i,
-	td_o,
-	tdo_oe_o
-);
-	parameter [31:0] IdcodeValue = 32'h00000001;
-	input wire clk_i;
-	input wire rst_ni;
-	input wire testmode_i;
-	output wire dmi_rst_no;
-	output wire [40:0] dmi_req_o;
-	output wire dmi_req_valid_o;
-	input wire dmi_req_ready_i;
-	input wire [33:0] dmi_resp_i;
-	output wire dmi_resp_ready_o;
-	input wire dmi_resp_valid_i;
-	input wire tck_i;
-	input wire tms_i;
-	input wire trst_ni;
-	input wire td_i;
-	output wire td_o;
-	output wire tdo_oe_o;
-	assign dmi_rst_no = rst_ni;
-	wire test_logic_reset;
-	wire shift_dr;
-	wire update_dr;
-	wire capture_dr;
-	wire dmi_access;
-	wire dtmcs_select;
-	wire dmi_reset;
-	wire dmi_tdi;
-	wire dmi_tdo;
-	wire [40:0] dmi_req;
-	wire dmi_req_ready;
-	reg dmi_req_valid;
-	wire [33:0] dmi_resp;
-	wire dmi_resp_valid;
-	wire dmi_resp_ready;
-	reg [2:0] state_d;
-	reg [2:0] state_q;
-	reg [40:0] dr_d;
-	reg [40:0] dr_q;
-	reg [6:0] address_d;
-	reg [6:0] address_q;
-	reg [31:0] data_d;
-	reg [31:0] data_q;
-	wire [40:0] dmi;
-	assign dmi = dr_q;
-	assign dmi_req[40-:7] = address_q;
-	assign dmi_req[31-:32] = data_q;
-	localparam [2:0] Write = 3;
-	localparam [1:0] dm_DTM_READ = 2'h1;
-	localparam [1:0] dm_DTM_WRITE = 2'h2;
-	assign dmi_req[33-:2] = (state_q == Write ? dm_DTM_WRITE : dm_DTM_READ);
-	assign dmi_resp_ready = 1'b1;
-	reg error_dmi_busy;
-	reg [1:0] error_d;
-	reg [1:0] error_q;
-	localparam [1:0] DMIBusy = 2'h3;
-	localparam [1:0] DMINoError = 2'h0;
-	localparam [2:0] Idle = 0;
-	localparam [2:0] Read = 1;
-	localparam [2:0] WaitReadValid = 2;
-	localparam [2:0] WaitWriteValid = 4;
-	function automatic [1:0] sv2v_cast_2;
-		input reg [1:0] inp;
-		sv2v_cast_2 = inp;
-	endfunction
-	always @(*) begin : p_fsm
-		error_dmi_busy = 1'b0;
-		state_d = state_q;
-		address_d = address_q;
-		data_d = data_q;
-		error_d = error_q;
-		dmi_req_valid = 1'b0;
-		case (state_q)
-			Idle:
-				if ((dmi_access && update_dr) && (error_q == DMINoError)) begin
-					address_d = dmi[40-:7];
-					data_d = dmi[33-:32];
-					if (sv2v_cast_2(dmi[1-:2]) == dm_DTM_READ)
-						state_d = Read;
-					else if (sv2v_cast_2(dmi[1-:2]) == dm_DTM_WRITE)
-						state_d = Write;
-				end
-			Read: begin
-				dmi_req_valid = 1'b1;
-				if (dmi_req_ready)
-					state_d = WaitReadValid;
-			end
-			WaitReadValid:
-				if (dmi_resp_valid) begin
-					data_d = dmi_resp[33-:32];
-					state_d = Idle;
-				end
-			Write: begin
-				dmi_req_valid = 1'b1;
-				if (dmi_req_ready)
-					state_d = WaitWriteValid;
-			end
-			WaitWriteValid:
-				if (dmi_resp_valid)
-					state_d = Idle;
-			default:
-				if (dmi_resp_valid)
-					state_d = Idle;
-		endcase
-		if (update_dr && (state_q != Idle))
-			error_dmi_busy = 1'b1;
-		if (capture_dr && |{state_q == Read, state_q == WaitReadValid})
-			error_dmi_busy = 1'b1;
-		if (error_dmi_busy)
-			error_d = DMIBusy;
-		if ((update_dr && dmi_reset) && dtmcs_select)
-			error_d = DMINoError;
-	end
-	assign dmi_tdo = dr_q[0];
-	always @(*) begin : p_shift
-		dr_d = dr_q;
-		if (capture_dr)
-			if (dmi_access)
-				if ((error_q == DMINoError) && !error_dmi_busy)
-					dr_d = {address_q, data_q, DMINoError};
-				else if ((error_q == DMIBusy) || error_dmi_busy)
-					dr_d = {address_q, data_q, DMIBusy};
-		if (shift_dr)
-			if (dmi_access)
-				dr_d = {dmi_tdi, dr_q[40:1]};
-		if (test_logic_reset)
-			dr_d = {41 {1'sb0}};
-	end
-	always @(posedge tck_i or negedge trst_ni) begin : p_regs
-		if (!trst_ni) begin
-			dr_q <= {41 {1'sb0}};
-			state_q <= Idle;
-			address_q <= {7 {1'sb0}};
-			data_q <= {32 {1'sb0}};
-			error_q <= DMINoError;
-		end
-		else begin
-			dr_q <= dr_d;
-			state_q <= state_d;
-			address_q <= address_d;
-			data_q <= data_d;
-			error_q <= error_d;
-		end
-	end
-	dmi_jtag_tap #(
-		.IrLength(5),
-		.IdcodeValue(IdcodeValue)
-	) i_dmi_jtag_tap(
-		.tck_i(tck_i),
-		.tms_i(tms_i),
-		.trst_ni(trst_ni),
-		.td_i(td_i),
-		.td_o(td_o),
-		.tdo_oe_o(tdo_oe_o),
-		.testmode_i(testmode_i),
-		.test_logic_reset_o(test_logic_reset),
-		.shift_dr_o(shift_dr),
-		.update_dr_o(update_dr),
-		.capture_dr_o(capture_dr),
-		.dmi_access_o(dmi_access),
-		.dtmcs_select_o(dtmcs_select),
-		.dmi_reset_o(dmi_reset),
-		.dmi_error_i(error_q),
-		.dmi_tdi_o(dmi_tdi),
-		.dmi_tdo_i(dmi_tdo)
-	);
-	dmi_cdc i_dmi_cdc(
-		.tck_i(tck_i),
-		.trst_ni(trst_ni),
-		.jtag_dmi_req_i(dmi_req),
-		.jtag_dmi_ready_o(dmi_req_ready),
-		.jtag_dmi_valid_i(dmi_req_valid),
-		.jtag_dmi_resp_o(dmi_resp),
-		.jtag_dmi_valid_o(dmi_resp_valid),
-		.jtag_dmi_ready_i(dmi_resp_ready),
-		.clk_i(clk_i),
-		.rst_ni(rst_ni),
-		.core_dmi_req_o(dmi_req_o),
-		.core_dmi_valid_o(dmi_req_valid_o),
-		.core_dmi_ready_i(dmi_req_ready_i),
-		.core_dmi_resp_i(dmi_resp_i),
-		.core_dmi_ready_o(dmi_resp_ready_o),
-		.core_dmi_valid_i(dmi_resp_valid_i)
-	);
-endmodule
-module dmi_jtag_tap (
-	tck_i,
-	tms_i,
-	trst_ni,
-	td_i,
-	td_o,
-	tdo_oe_o,
-	testmode_i,
-	test_logic_reset_o,
-	shift_dr_o,
-	update_dr_o,
-	capture_dr_o,
-	dmi_access_o,
-	dtmcs_select_o,
-	dmi_reset_o,
-	dmi_error_i,
-	dmi_tdi_o,
-	dmi_tdo_i
-);
-	parameter [31:0] IrLength = 5;
-	parameter [31:0] IdcodeValue = 32'h00000001;
-	input wire tck_i;
-	input wire tms_i;
-	input wire trst_ni;
-	input wire td_i;
-	output reg td_o;
-	output reg tdo_oe_o;
-	input wire testmode_i;
-	output reg test_logic_reset_o;
-	output reg shift_dr_o;
-	output reg update_dr_o;
-	output reg capture_dr_o;
-	output reg dmi_access_o;
-	output reg dtmcs_select_o;
-	output wire dmi_reset_o;
-	input wire [1:0] dmi_error_i;
-	output wire dmi_tdi_o;
-	input wire dmi_tdo_i;
-	assign dmi_tdi_o = td_i;
-	reg [3:0] tap_state_q;
-	reg [3:0] tap_state_d;
-	reg [IrLength - 1:0] jtag_ir_shift_d;
-	reg [IrLength - 1:0] jtag_ir_shift_q;
-	reg [IrLength - 1:0] jtag_ir_d;
-	reg [IrLength - 1:0] jtag_ir_q;
-	reg capture_ir;
-	reg shift_ir;
-	reg update_ir;
-	localparam [IrLength - 1:0] IDCODE = 'h1;
-	function automatic [IrLength - 1:0] sv2v_cast_42A93;
-		input reg [IrLength - 1:0] inp;
-		sv2v_cast_42A93 = inp;
-	endfunction
-	always @(*) begin : p_jtag
-		jtag_ir_shift_d = jtag_ir_shift_q;
-		jtag_ir_d = jtag_ir_q;
-		if (shift_ir)
-			jtag_ir_shift_d = {td_i, jtag_ir_shift_q[IrLength - 1:1]};
-		if (capture_ir)
-			jtag_ir_shift_d = sv2v_cast_42A93(4'b0101);
-		if (update_ir)
-			jtag_ir_d = jtag_ir_shift_q;
-		if (test_logic_reset_o) begin
-			jtag_ir_shift_d = {IrLength {1'sb0}};
-			jtag_ir_d = IDCODE;
-		end
-	end
-	always @(posedge tck_i or negedge trst_ni) begin : p_jtag_ir_reg
-		if (!trst_ni) begin
-			jtag_ir_shift_q <= {IrLength {1'sb0}};
-			jtag_ir_q <= IDCODE;
-		end
-		else begin
-			jtag_ir_shift_q <= jtag_ir_shift_d;
-			jtag_ir_q <= jtag_ir_d;
-		end
-	end
-	reg [31:0] idcode_d;
-	reg [31:0] idcode_q;
-	reg idcode_select;
-	reg bypass_select;
-	reg [31:0] dtmcs_d;
-	reg [31:0] dtmcs_q;
-	reg bypass_d;
-	reg bypass_q;
-	assign dmi_reset_o = dtmcs_q[16];
-	function automatic [30:0] sv2v_cast_31;
-		input reg [30:0] inp;
-		sv2v_cast_31 = inp;
-	endfunction
-	always @(*) begin
-		idcode_d = idcode_q;
-		bypass_d = bypass_q;
-		dtmcs_d = dtmcs_q;
-		if (capture_dr_o) begin
-			if (idcode_select)
-				idcode_d = IdcodeValue;
-			if (bypass_select)
-				bypass_d = 1'b0;
-			if (dtmcs_select_o)
-				dtmcs_d = {20'b00000000000000000001, dmi_error_i, 6'd7, 4'd1};
-		end
-		if (shift_dr_o) begin
-			if (idcode_select)
-				idcode_d = {td_i, sv2v_cast_31(idcode_q >> 1)};
-			if (bypass_select)
-				bypass_d = td_i;
-			if (dtmcs_select_o)
-				dtmcs_d = {td_i, sv2v_cast_31(dtmcs_q >> 1)};
-		end
-		if (test_logic_reset_o) begin
-			idcode_d = IdcodeValue;
-			bypass_d = 1'b0;
-		end
-	end
-	localparam [IrLength - 1:0] BYPASS0 = 'h0;
-	localparam [IrLength - 1:0] BYPASS1 = 'h1f;
-	localparam [IrLength - 1:0] DMIACCESS = 'h11;
-	localparam [IrLength - 1:0] DTMCSR = 'h10;
-	always @(*) begin : p_data_reg_sel
-		dmi_access_o = 1'b0;
-		dtmcs_select_o = 1'b0;
-		idcode_select = 1'b0;
-		bypass_select = 1'b0;
-		case (jtag_ir_q)
-			BYPASS0: bypass_select = 1'b1;
-			IDCODE: idcode_select = 1'b1;
-			DTMCSR: dtmcs_select_o = 1'b1;
-			DMIACCESS: dmi_access_o = 1'b1;
-			BYPASS1: bypass_select = 1'b1;
-			default: bypass_select = 1'b1;
-		endcase
-	end
-	reg tdo_mux;
-	always @(*) begin : p_out_sel
-		if (shift_ir)
-			tdo_mux = jtag_ir_shift_q[0];
-		else
-			case (jtag_ir_q)
-				IDCODE: tdo_mux = idcode_q[0];
-				DTMCSR: tdo_mux = dtmcs_q[0];
-				DMIACCESS: tdo_mux = dmi_tdo_i;
-				default: tdo_mux = bypass_q;
-			endcase
-	end
-	wire tck_n;
-	prim_generic_clock_inv #(.HasScanMode(1'b1)) i_tck_inv(
-		.clk_i(tck_i),
-		.clk_no(tck_n),
-		.scanmode_i(testmode_i)
-	);
-	always @(posedge tck_n or negedge trst_ni) begin : p_tdo_regs
-		if (!trst_ni) begin
-			td_o <= 1'b0;
-			tdo_oe_o <= 1'b0;
-		end
-		else begin
-			td_o <= tdo_mux;
-			tdo_oe_o <= shift_ir | shift_dr_o;
-		end
-	end
-	localparam [3:0] CaptureDr = 3;
-	localparam [3:0] CaptureIr = 10;
-	localparam [3:0] Exit1Dr = 5;
-	localparam [3:0] Exit1Ir = 12;
-	localparam [3:0] Exit2Dr = 7;
-	localparam [3:0] Exit2Ir = 14;
-	localparam [3:0] PauseDr = 6;
-	localparam [3:0] PauseIr = 13;
-	localparam [3:0] RunTestIdle = 1;
-	localparam [3:0] SelectDrScan = 2;
-	localparam [3:0] SelectIrScan = 9;
-	localparam [3:0] ShiftDr = 4;
-	localparam [3:0] ShiftIr = 11;
-	localparam [3:0] TestLogicReset = 0;
-	localparam [3:0] UpdateDr = 8;
-	localparam [3:0] UpdateIr = 15;
-	always @(*) begin : p_tap_fsm
-		test_logic_reset_o = 1'b0;
-		capture_dr_o = 1'b0;
-		shift_dr_o = 1'b0;
-		update_dr_o = 1'b0;
-		capture_ir = 1'b0;
-		shift_ir = 1'b0;
-		update_ir = 1'b0;
-		case (tap_state_q)
-			TestLogicReset: begin
-				tap_state_d = (tms_i ? TestLogicReset : RunTestIdle);
-				test_logic_reset_o = 1'b1;
-			end
-			RunTestIdle: tap_state_d = (tms_i ? SelectDrScan : RunTestIdle);
-			SelectDrScan: tap_state_d = (tms_i ? SelectIrScan : CaptureDr);
-			CaptureDr: begin
-				capture_dr_o = 1'b1;
-				tap_state_d = (tms_i ? Exit1Dr : ShiftDr);
-			end
-			ShiftDr: begin
-				shift_dr_o = 1'b1;
-				tap_state_d = (tms_i ? Exit1Dr : ShiftDr);
-			end
-			Exit1Dr: tap_state_d = (tms_i ? UpdateDr : PauseDr);
-			PauseDr: tap_state_d = (tms_i ? Exit2Dr : PauseDr);
-			Exit2Dr: tap_state_d = (tms_i ? UpdateDr : ShiftDr);
-			UpdateDr: begin
-				update_dr_o = 1'b1;
-				tap_state_d = (tms_i ? SelectDrScan : RunTestIdle);
-			end
-			SelectIrScan: tap_state_d = (tms_i ? TestLogicReset : CaptureIr);
-			CaptureIr: begin
-				capture_ir = 1'b1;
-				tap_state_d = (tms_i ? Exit1Ir : ShiftIr);
-			end
-			ShiftIr: begin
-				shift_ir = 1'b1;
-				tap_state_d = (tms_i ? Exit1Ir : ShiftIr);
-			end
-			Exit1Ir: tap_state_d = (tms_i ? UpdateIr : PauseIr);
-			PauseIr: tap_state_d = (tms_i ? Exit2Ir : PauseIr);
-			Exit2Ir: tap_state_d = (tms_i ? UpdateIr : ShiftIr);
-			UpdateIr: begin
-				update_ir = 1'b1;
-				tap_state_d = (tms_i ? SelectDrScan : RunTestIdle);
-			end
-			default:
-				;
-		endcase
-	end
-	always @(posedge tck_i or negedge trst_ni) begin : p_regs
-		if (!trst_ni) begin
-			tap_state_q <= RunTestIdle;
-			idcode_q <= IdcodeValue;
-			bypass_q <= 1'b0;
-			dtmcs_q <= {32 {1'sb0}};
-		end
-		else begin
-			tap_state_q <= tap_state_d;
-			idcode_q <= idcode_d;
-			bypass_q <= bypass_d;
-			dtmcs_q <= dtmcs_d;
-		end
-	end
-endmodule
-module dm_mem (
-	clk_i,
-	rst_ni,
-	debug_req_o,
-	hartsel_i,
-	haltreq_i,
-	resumereq_i,
-	clear_resumeack_i,
-	halted_o,
-	resuming_o,
-	progbuf_i,
-	data_i,
-	data_o,
-	data_valid_o,
-	cmd_valid_i,
-	cmd_i,
-	cmderror_valid_o,
-	cmderror_o,
-	cmdbusy_o,
-	req_i,
-	we_i,
-	addr_i,
-	wdata_i,
-	be_i,
-	rdata_o
-);
-	parameter [31:0] NrHarts = 1;
-	parameter [31:0] BusWidth = 32;
-	parameter [NrHarts - 1:0] SelectableHarts = {NrHarts {1'b1}};
-	parameter [31:0] DmBaseAddress = 1'sb0;
-	input wire clk_i;
-	input wire rst_ni;
-	output wire [NrHarts - 1:0] debug_req_o;
-	input wire [19:0] hartsel_i;
-	input wire [NrHarts - 1:0] haltreq_i;
-	input wire [NrHarts - 1:0] resumereq_i;
-	input wire clear_resumeack_i;
-	output wire [NrHarts - 1:0] halted_o;
-	output wire [NrHarts - 1:0] resuming_o;
-	localparam [4:0] dm_ProgBufSize = 5'h08;
-	input wire [(dm_ProgBufSize * 32) - 1:0] progbuf_i;
-	localparam [3:0] dm_DataCount = 4'h2;
-	input wire [(dm_DataCount * 32) - 1:0] data_i;
-	output reg [(dm_DataCount * 32) - 1:0] data_o;
-	output reg data_valid_o;
-	input wire cmd_valid_i;
-	input wire [31:0] cmd_i;
-	output reg cmderror_valid_o;
-	output reg [2:0] cmderror_o;
-	output reg cmdbusy_o;
-	input wire req_i;
-	input wire we_i;
-	input wire [BusWidth - 1:0] addr_i;
-	input wire [BusWidth - 1:0] wdata_i;
-	input wire [(BusWidth / 8) - 1:0] be_i;
-	output wire [BusWidth - 1:0] rdata_o;
-	localparam [31:0] DbgAddressBits = 12;
-	localparam [31:0] HartSelLen = (NrHarts == 1 ? 1 : $clog2(NrHarts));
-	localparam [31:0] NrHartsAligned = 2 ** HartSelLen;
-	localparam [31:0] MaxAar = (BusWidth == 64 ? 4 : 3);
-	localparam [0:0] HasSndScratch = DmBaseAddress != 0;
-	localparam [4:0] LoadBaseAddr = (DmBaseAddress == 0 ? 5'd0 : 5'd10);
-	localparam [11:0] dm_DataAddr = 12'h380;
-	localparam [11:0] DataBaseAddr = dm_DataAddr;
-	localparam [11:0] DataEndAddr = (dm_DataAddr + (4 * dm_DataCount)) - 1;
-	localparam [11:0] ProgBufBaseAddr = dm_DataAddr - (4 * dm_ProgBufSize);
-	localparam [11:0] ProgBufEndAddr = dm_DataAddr - 1;
-	localparam [11:0] AbstractCmdBaseAddr = ProgBufBaseAddr - 40;
-	localparam [11:0] AbstractCmdEndAddr = ProgBufBaseAddr - 1;
-	localparam [11:0] WhereToAddr = 'h300;
-	localparam [11:0] FlagsBaseAddr = 'h400;
-	localparam [11:0] FlagsEndAddr = 'h7ff;
-	localparam [11:0] HaltedAddr = 'h100;
-	localparam [11:0] GoingAddr = 'h104;
-	localparam [11:0] ResumingAddr = 'h108;
-	localparam [11:0] ExceptionAddr = 'h10c;
-	wire [((dm_ProgBufSize / 2) * 64) - 1:0] progbuf;
-	reg [511:0] abstract_cmd;
-	wire [NrHarts - 1:0] halted_d;
-	reg [NrHarts - 1:0] halted_q;
-	wire [NrHarts - 1:0] resuming_d;
-	reg [NrHarts - 1:0] resuming_q;
-	reg resume;
-	reg go;
-	reg going;
-	reg exception;
-	reg unsupported_command;
-	wire [63:0] rom_rdata;
-	reg [63:0] rdata_d;
-	reg [63:0] rdata_q;
-	reg word_enable32_q;
-	wire [HartSelLen - 1:0] hartsel;
-	wire [HartSelLen - 1:0] wdata_hartsel;
-	assign hartsel = hartsel_i[HartSelLen - 1:0];
-	assign wdata_hartsel = wdata_i[HartSelLen - 1:0];
-	wire [NrHartsAligned - 1:0] resumereq_aligned;
-	wire [NrHartsAligned - 1:0] haltreq_aligned;
-	reg [NrHartsAligned - 1:0] halted_d_aligned;
-	wire [NrHartsAligned - 1:0] halted_q_aligned;
-	reg [NrHartsAligned - 1:0] halted_aligned;
-	wire [NrHartsAligned - 1:0] resumereq_wdata_aligned;
-	reg [NrHartsAligned - 1:0] resuming_d_aligned;
-	wire [NrHartsAligned - 1:0] resuming_q_aligned;
-	function automatic [NrHartsAligned - 1:0] sv2v_cast_C60B8;
-		input reg [NrHartsAligned - 1:0] inp;
-		sv2v_cast_C60B8 = inp;
-	endfunction
-	assign resumereq_aligned = sv2v_cast_C60B8(resumereq_i);
-	assign haltreq_aligned = sv2v_cast_C60B8(haltreq_i);
-	assign resumereq_wdata_aligned = sv2v_cast_C60B8(resumereq_i);
-	assign halted_q_aligned = sv2v_cast_C60B8(halted_q);
-	function automatic [NrHarts - 1:0] sv2v_cast_25FFB;
-		input reg [NrHarts - 1:0] inp;
-		sv2v_cast_25FFB = inp;
-	endfunction
-	assign halted_d = sv2v_cast_25FFB(halted_d_aligned);
-	assign resuming_q_aligned = sv2v_cast_C60B8(resuming_q);
-	assign resuming_d = sv2v_cast_25FFB(resuming_d_aligned);
-	wire fwd_rom_d;
-	reg fwd_rom_q;
-	wire [23:0] ac_ar;
-	function automatic [23:0] sv2v_cast_24;
-		input reg [23:0] inp;
-		sv2v_cast_24 = inp;
-	endfunction
-	assign ac_ar = sv2v_cast_24(cmd_i[23-:24]);
-	assign debug_req_o = haltreq_i;
-	assign halted_o = halted_q;
-	assign resuming_o = resuming_q;
-	assign progbuf = progbuf_i;
-	reg [1:0] state_d;
-	reg [1:0] state_q;
-	localparam [1:0] CmdExecuting = 3;
-	localparam [1:0] Go = 1;
-	localparam [1:0] Idle = 0;
-	localparam [1:0] Resume = 2;
-	localparam [2:0] dm_CmdErrNone = 0;
-	localparam [2:0] dm_CmdErrNotSupported = 2;
-	localparam [2:0] dm_CmdErrorException = 3;
-	localparam [2:0] dm_CmdErrorHaltResume = 4;
-	always @(*) begin : p_hart_ctrl_queue
-		cmderror_valid_o = 1'b0;
-		cmderror_o = dm_CmdErrNone;
-		state_d = state_q;
-		go = 1'b0;
-		resume = 1'b0;
-		cmdbusy_o = 1'b1;
-		case (state_q)
-			Idle: begin
-				cmdbusy_o = 1'b0;
-				if ((cmd_valid_i && halted_q_aligned[hartsel]) && !unsupported_command)
-					state_d = Go;
-				else if (cmd_valid_i) begin
-					cmderror_valid_o = 1'b1;
-					cmderror_o = dm_CmdErrorHaltResume;
-				end
-				if (((resumereq_aligned[hartsel] && !resuming_q_aligned[hartsel]) && !haltreq_aligned[hartsel]) && halted_q_aligned[hartsel])
-					state_d = Resume;
-			end
-			Go: begin
-				cmdbusy_o = 1'b1;
-				go = 1'b1;
-				if (going)
-					state_d = CmdExecuting;
-			end
-			Resume: begin
-				cmdbusy_o = 1'b1;
-				resume = 1'b1;
-				if (resuming_q_aligned[hartsel])
-					state_d = Idle;
-			end
-			CmdExecuting: begin
-				cmdbusy_o = 1'b1;
-				go = 1'b0;
-				if (halted_aligned[hartsel])
-					state_d = Idle;
-			end
-			default:
-				;
-		endcase
-		if (unsupported_command && cmd_valid_i) begin
-			cmderror_valid_o = 1'b1;
-			cmderror_o = dm_CmdErrNotSupported;
-		end
-		if (exception) begin
-			cmderror_valid_o = 1'b1;
-			cmderror_o = dm_CmdErrorException;
-		end
-	end
-	wire [63:0] word_mux;
-	assign word_mux = (fwd_rom_q ? rom_rdata : rdata_q);
-	generate
-		if (BusWidth == 64) begin : gen_word_mux64
-			assign rdata_o = word_mux;
-		end
-		else begin : gen_word_mux32
-			assign rdata_o = (word_enable32_q ? word_mux[32+:32] : word_mux[0+:32]);
-		end
-	endgenerate
-	reg [63:0] data_bits;
-	reg [63:0] rdata;
-	localparam [63:0] dm_HaltAddress = 64'h0000000000000800;
-	localparam [63:0] dm_ResumeAddress = dm_HaltAddress + 4;
-	function automatic [31:0] dm_jal;
-		input reg [4:0] rd;
-		input reg [20:0] imm;
-		dm_jal = {imm[20], imm[10:1], imm[11], imm[19:12], rd, 7'h6f};
-	endfunction
-	localparam [7:0] dm_AccessRegister = 8'h00;
-	function automatic [20:0] sv2v_cast_21;
-		input reg [20:0] inp;
-		sv2v_cast_21 = inp;
-	endfunction
-	function automatic [$clog2(5'h08) - 1:0] sv2v_cast_2F779;
-		input reg [$clog2(5'h08) - 1:0] inp;
-		sv2v_cast_2F779 = inp;
-	endfunction
-	function automatic [2:0] sv2v_cast_3;
-		input reg [2:0] inp;
-		sv2v_cast_3 = inp;
-	endfunction
-	function automatic [11:0] sv2v_cast_9D1F2;
-		input reg [11:0] inp;
-		sv2v_cast_9D1F2 = inp;
-	endfunction
-	always @(*) begin : p_rw_logic
-		halted_d_aligned = sv2v_cast_C60B8(halted_q);
-		resuming_d_aligned = sv2v_cast_C60B8(resuming_q);
-		rdata_d = rdata_q;
-		data_bits = data_i;
-		rdata = {64 {1'sb0}};
-		data_valid_o = 1'b0;
-		exception = 1'b0;
-		halted_aligned = {NrHartsAligned {1'sb0}};
-		going = 1'b0;
-		if (clear_resumeack_i)
-			resuming_d_aligned[hartsel] = 1'b0;
-		if (req_i)
-			if (we_i) begin
-				if (addr_i[11:0] == HaltedAddr) begin
-					halted_aligned[wdata_hartsel] = 1'b1;
-					halted_d_aligned[wdata_hartsel] = 1'b1;
-				end
-				else if (addr_i[11:0] == GoingAddr)
-					going = 1'b1;
-				else if (addr_i[11:0] == ResumingAddr) begin
-					halted_d_aligned[wdata_hartsel] = 1'b0;
-					resuming_d_aligned[wdata_hartsel] = 1'b1;
-				end
-				else if (addr_i[11:0] == ExceptionAddr)
-					exception = 1'b1;
-				else if ((DataBaseAddr <= addr_i[11:0]) && (DataEndAddr >= addr_i[11:0])) begin
-					data_valid_o = 1'b1;
-					begin : sv2v_autoblock_103
-						reg signed [31:0] i;
-						for (i = 0; i < (BusWidth / 8); i = i + 1)
-							if (be_i[i])
-								data_bits[i * 8+:8] = wdata_i[i * 8+:8];
-					end
-				end
-			end
-			else if (addr_i[11:0] == WhereToAddr) begin
-				if (resumereq_wdata_aligned[wdata_hartsel])
-					rdata_d = {32'b00000000000000000000000000000000, dm_jal(1'sb0, sv2v_cast_21(dm_ResumeAddress[11:0]) - sv2v_cast_21(WhereToAddr))};
-				if (cmdbusy_o)
-					if (((cmd_i[31-:8] == dm_AccessRegister) && !ac_ar[17]) && ac_ar[18])
-						rdata_d = {32'b00000000000000000000000000000000, dm_jal(1'sb0, sv2v_cast_21(ProgBufBaseAddr) - sv2v_cast_21(WhereToAddr))};
-					else
-						rdata_d = {32'b00000000000000000000000000000000, dm_jal(1'sb0, sv2v_cast_21(AbstractCmdBaseAddr) - sv2v_cast_21(WhereToAddr))};
-			end
-			else if ((DataBaseAddr <= addr_i[11:0]) && (DataEndAddr >= addr_i[11:0]))
-				rdata_d = {data_i[sv2v_cast_2F779((addr_i[11:3] - DataBaseAddr[11:3]) + 1'b1) * 32+:32], data_i[sv2v_cast_2F779(addr_i[11:3] - DataBaseAddr[11:3]) * 32+:32]};
-			else if ((ProgBufBaseAddr <= addr_i[11:0]) && (ProgBufEndAddr >= addr_i[11:0]))
-				rdata_d = progbuf[sv2v_cast_2F779(addr_i[11:3] - ProgBufBaseAddr[11:3]) * 64+:64];
-			else if ((AbstractCmdBaseAddr <= addr_i[11:0]) && (AbstractCmdEndAddr >= addr_i[11:0]))
-				rdata_d = abstract_cmd[sv2v_cast_3(addr_i[11:3] - AbstractCmdBaseAddr[11:3]) * 64+:64];
-			else if ((FlagsBaseAddr <= addr_i[11:0]) && (FlagsEndAddr >= addr_i[11:0])) begin
-				if (({addr_i[11:3], 3'b000} - FlagsBaseAddr[11:0]) == (sv2v_cast_9D1F2(hartsel) & {{9 {1'b1}}, 3'b000}))
-					rdata[(sv2v_cast_9D1F2(hartsel) & sv2v_cast_9D1F2(3'b111)) * 8+:8] = {6'b000000, resume, go};
-				rdata_d = rdata;
-			end
-		data_o = data_bits;
-	end
-	function automatic [31:0] dm_auipc;
-		input reg [4:0] rd;
-		input reg [20:0] imm;
-		dm_auipc = {imm[20], imm[10:1], imm[11], imm[19:12], rd, 7'h17};
-	endfunction
-	function automatic [31:0] dm_csrr;
-		input reg [11:0] csr;
-		input reg [4:0] dest;
-		dm_csrr = {csr, 5'h00, 3'h2, dest, 7'h73};
-	endfunction
-	function automatic [31:0] dm_csrw;
-		input reg [11:0] csr;
-		input reg [4:0] rs1;
-		dm_csrw = {csr, rs1, 3'h1, 5'h00, 7'h73};
-	endfunction
-	function automatic [31:0] dm_ebreak;
-		input reg _sv2v_unused;
-		dm_ebreak = 32'h00100073;
-	endfunction
-	function automatic [31:0] dm_float_load;
-		input reg [2:0] size;
-		input reg [4:0] dest;
-		input reg [4:0] base;
-		input reg [11:0] offset;
-		dm_float_load = {offset[11:0], base, size, dest, 7'b0000111};
-	endfunction
-	function automatic [31:0] dm_float_store;
-		input reg [2:0] size;
-		input reg [4:0] src;
-		input reg [4:0] base;
-		input reg [11:0] offset;
-		dm_float_store = {offset[11:5], src, base, size, offset[4:0], 7'b0100111};
-	endfunction
-	function automatic [31:0] dm_illegal;
-		input reg _sv2v_unused;
-		dm_illegal = 32'h00000000;
-	endfunction
-	function automatic [31:0] dm_load;
-		input reg [2:0] size;
-		input reg [4:0] dest;
-		input reg [4:0] base;
-		input reg [11:0] offset;
-		dm_load = {offset[11:0], base, size, dest, 7'h03};
-	endfunction
-	function automatic [31:0] dm_nop;
-		input reg _sv2v_unused;
-		dm_nop = 32'h00000013;
-	endfunction
-	function automatic [31:0] dm_slli;
-		input reg [4:0] rd;
-		input reg [4:0] rs1;
-		input reg [5:0] shamt;
-		dm_slli = {6'b000000, shamt[5:0], rs1, 3'h1, rd, 7'h13};
-	endfunction
-	function automatic [31:0] dm_srli;
-		input reg [4:0] rd;
-		input reg [4:0] rs1;
-		input reg [5:0] shamt;
-		dm_srli = {6'b000000, shamt[5:0], rs1, 3'h5, rd, 7'h13};
-	endfunction
-	function automatic [31:0] dm_store;
-		input reg [2:0] size;
-		input reg [4:0] src;
-		input reg [4:0] base;
-		input reg [11:0] offset;
-		dm_store = {offset[11:5], src, base, size, offset[4:0], 7'h23};
-	endfunction
-	localparam [11:0] dm_CSR_DSCRATCH0 = 12'h7b2;
-	localparam [11:0] dm_CSR_DSCRATCH1 = 12'h7b3;
-	function automatic [31:0] sv2v_cast_32;
-		input reg [31:0] inp;
-		sv2v_cast_32 = inp;
-	endfunction
-	always @(*) begin : p_abstract_cmd_rom
-		unsupported_command = 1'b0;
-		abstract_cmd[31-:32] = dm_illegal(0);
-		abstract_cmd[63-:32] = (HasSndScratch ? dm_auipc(5'd10, 1'sb0) : dm_nop(0));
-		abstract_cmd[95-:32] = (HasSndScratch ? dm_srli(5'd10, 5'd10, 6'd12) : dm_nop(0));
-		abstract_cmd[127-:32] = (HasSndScratch ? dm_slli(5'd10, 5'd10, 6'd12) : dm_nop(0));
-		abstract_cmd[159-:32] = dm_nop(0);
-		abstract_cmd[191-:32] = dm_nop(0);
-		abstract_cmd[223-:32] = dm_nop(0);
-		abstract_cmd[255-:32] = dm_nop(0);
-		abstract_cmd[287-:32] = (HasSndScratch ? dm_csrr(dm_CSR_DSCRATCH1, 5'd10) : dm_nop(0));
-		abstract_cmd[319-:32] = dm_ebreak(0);
-		abstract_cmd[320+:192] = {192 {1'sb0}};
-		case (cmd_i[31-:8])
-			dm_AccessRegister: begin
-				if (((sv2v_cast_32(ac_ar[22-:3]) < MaxAar) && ac_ar[17]) && ac_ar[16]) begin
-					abstract_cmd[31-:32] = (HasSndScratch ? dm_csrw(dm_CSR_DSCRATCH1, 5'd10) : dm_nop(0));
-					if (ac_ar[15:14] != {2 {1'sb0}}) begin
-						abstract_cmd[31-:32] = dm_ebreak(0);
-						unsupported_command = 1'b1;
-					end
-					else if (((HasSndScratch && ac_ar[12]) && !ac_ar[5]) && (ac_ar[4:0] == 5'd10)) begin
-						abstract_cmd[159-:32] = dm_csrw(dm_CSR_DSCRATCH0, 5'd8);
-						abstract_cmd[191-:32] = dm_load(ac_ar[22-:3], 5'd8, LoadBaseAddr, dm_DataAddr);
-						abstract_cmd[223-:32] = dm_csrw(dm_CSR_DSCRATCH1, 5'd8);
-						abstract_cmd[255-:32] = dm_csrr(dm_CSR_DSCRATCH0, 5'd8);
-					end
-					else if (ac_ar[12]) begin
-						if (ac_ar[5])
-							abstract_cmd[159-:32] = dm_float_load(ac_ar[22-:3], ac_ar[4:0], LoadBaseAddr, dm_DataAddr);
-						else
-							abstract_cmd[159-:32] = dm_load(ac_ar[22-:3], ac_ar[4:0], LoadBaseAddr, dm_DataAddr);
-					end
-					else begin
-						abstract_cmd[159-:32] = dm_csrw(dm_CSR_DSCRATCH0, 5'd8);
-						abstract_cmd[191-:32] = dm_load(ac_ar[22-:3], 5'd8, LoadBaseAddr, dm_DataAddr);
-						abstract_cmd[223-:32] = dm_csrw(ac_ar[11:0], 5'd8);
-						abstract_cmd[255-:32] = dm_csrr(dm_CSR_DSCRATCH0, 5'd8);
-					end
-				end
-				else if (((sv2v_cast_32(ac_ar[22-:3]) < MaxAar) && ac_ar[17]) && !ac_ar[16]) begin
-					abstract_cmd[31-:32] = (HasSndScratch ? dm_csrw(dm_CSR_DSCRATCH1, LoadBaseAddr) : dm_nop(0));
-					if (ac_ar[15:14] != {2 {1'sb0}}) begin
-						abstract_cmd[31-:32] = dm_ebreak(0);
-						unsupported_command = 1'b1;
-					end
-					else if (((HasSndScratch && ac_ar[12]) && !ac_ar[5]) && (ac_ar[4:0] == 5'd10)) begin
-						abstract_cmd[159-:32] = dm_csrw(dm_CSR_DSCRATCH0, 5'd8);
-						abstract_cmd[191-:32] = dm_csrr(dm_CSR_DSCRATCH1, 5'd8);
-						abstract_cmd[223-:32] = dm_store(ac_ar[22-:3], 5'd8, LoadBaseAddr, dm_DataAddr);
-						abstract_cmd[255-:32] = dm_csrr(dm_CSR_DSCRATCH0, 5'd8);
-					end
-					else if (ac_ar[12]) begin
-						if (ac_ar[5])
-							abstract_cmd[159-:32] = dm_float_store(ac_ar[22-:3], ac_ar[4:0], LoadBaseAddr, dm_DataAddr);
-						else
-							abstract_cmd[159-:32] = dm_store(ac_ar[22-:3], ac_ar[4:0], LoadBaseAddr, dm_DataAddr);
-					end
-					else begin
-						abstract_cmd[159-:32] = dm_csrw(dm_CSR_DSCRATCH0, 5'd8);
-						abstract_cmd[191-:32] = dm_csrr(ac_ar[11:0], 5'd8);
-						abstract_cmd[223-:32] = dm_store(ac_ar[22-:3], 5'd8, LoadBaseAddr, dm_DataAddr);
-						abstract_cmd[255-:32] = dm_csrr(dm_CSR_DSCRATCH0, 5'd8);
-					end
-				end
-				else if ((sv2v_cast_32(ac_ar[22-:3]) >= MaxAar) || (ac_ar[19] == 1'b1)) begin
-					abstract_cmd[31-:32] = dm_ebreak(0);
-					unsupported_command = 1'b1;
-				end
-				if (ac_ar[18] && !unsupported_command)
-					abstract_cmd[319-:32] = dm_nop(0);
-			end
-			default: begin
-				abstract_cmd[31-:32] = dm_ebreak(0);
-				unsupported_command = 1'b1;
-			end
-		endcase
-	end
-	wire [63:0] rom_addr;
-	function automatic [63:0] sv2v_cast_64;
-		input reg [63:0] inp;
-		sv2v_cast_64 = inp;
-	endfunction
-	assign rom_addr = sv2v_cast_64(addr_i);
-	generate
-		if (HasSndScratch) begin : gen_rom_snd_scratch
-			debug_rom i_debug_rom(
-				.clk_i(clk_i),
-				.req_i(req_i),
-				.addr_i(rom_addr),
-				.rdata_o(rom_rdata)
-			);
-		end
-		else begin : gen_rom_one_scratch
-			debug_rom_one_scratch i_debug_rom(
-				.clk_i(clk_i),
-				.req_i(req_i),
-				.addr_i(rom_addr),
-				.rdata_o(rom_rdata)
-			);
-		end
-	endgenerate
-	assign fwd_rom_d = addr_i[11:0] >= dm_HaltAddress[11:0];
-	always @(posedge clk_i or negedge rst_ni) begin : p_regs
-		if (!rst_ni) begin
-			fwd_rom_q <= 1'b0;
-			rdata_q <= {64 {1'sb0}};
-			state_q <= Idle;
-			word_enable32_q <= 1'b0;
-		end
-		else begin
-			fwd_rom_q <= fwd_rom_d;
-			rdata_q <= rdata_d;
-			state_q <= state_d;
-			word_enable32_q <= addr_i[2];
-		end
-	end
-	always @(posedge clk_i or negedge rst_ni)
-		if (!rst_ni) begin
-			halted_q <= 1'b0;
-			resuming_q <= 1'b0;
-		end
-		else begin
-			halted_q <= SelectableHarts & halted_d;
-			resuming_q <= SelectableHarts & resuming_d;
-		end
-endmodule
-module dm_sba (
-	clk_i,
-	rst_ni,
-	dmactive_i,
-	master_req_o,
-	master_add_o,
-	master_we_o,
-	master_wdata_o,
-	master_be_o,
-	master_gnt_i,
-	master_r_valid_i,
-	master_r_rdata_i,
-	sbaddress_i,
-	sbaddress_write_valid_i,
-	sbreadonaddr_i,
-	sbaddress_o,
-	sbautoincrement_i,
-	sbaccess_i,
-	sbreadondata_i,
-	sbdata_i,
-	sbdata_read_valid_i,
-	sbdata_write_valid_i,
-	sbdata_o,
-	sbdata_valid_o,
-	sbbusy_o,
-	sberror_valid_o,
-	sberror_o
-);
-	parameter [31:0] BusWidth = 32;
-	parameter [0:0] ReadByteEnable = 1;
-	input wire clk_i;
-	input wire rst_ni;
-	input wire dmactive_i;
-	output wire master_req_o;
-	output wire [BusWidth - 1:0] master_add_o;
-	output wire master_we_o;
-	output wire [BusWidth - 1:0] master_wdata_o;
-	output wire [(BusWidth / 8) - 1:0] master_be_o;
-	input wire master_gnt_i;
-	input wire master_r_valid_i;
-	input wire [BusWidth - 1:0] master_r_rdata_i;
-	input wire [BusWidth - 1:0] sbaddress_i;
-	input wire sbaddress_write_valid_i;
-	input wire sbreadonaddr_i;
-	output reg [BusWidth - 1:0] sbaddress_o;
-	input wire sbautoincrement_i;
-	input wire [2:0] sbaccess_i;
-	input wire sbreadondata_i;
-	input wire [BusWidth - 1:0] sbdata_i;
-	input wire sbdata_read_valid_i;
-	input wire sbdata_write_valid_i;
-	output wire [BusWidth - 1:0] sbdata_o;
-	output wire sbdata_valid_o;
-	output wire sbbusy_o;
-	output reg sberror_valid_o;
-	output reg [2:0] sberror_o;
-	reg [2:0] state_d;
-	reg [2:0] state_q;
-	reg [BusWidth - 1:0] address;
-	reg req;
-	wire gnt;
-	reg we;
-	reg [(BusWidth / 8) - 1:0] be;
-	reg [(BusWidth / 8) - 1:0] be_mask;
-	reg [$clog2(BusWidth / 8) - 1:0] be_idx;
-	localparam [2:0] dm_Idle = 0;
-	assign sbbusy_o = state_q != dm_Idle;
-	function automatic signed [31:0] sv2v_cast_32_signed;
-		input reg signed [31:0] inp;
-		sv2v_cast_32_signed = inp;
-	endfunction
-	always @(*) begin : p_be_mask
-		be_mask = {BusWidth / 8 {1'sb0}};
-		case (sbaccess_i)
-			3'b000: be_mask[be_idx] = 1'b1;
-			3'b001: be_mask[sv2v_cast_32_signed({be_idx[$clog2(BusWidth / 8) - 1:1], 1'b0})+:2] = {2 {1'sb1}};
-			3'b010:
-				if (BusWidth == 32'd64)
-					be_mask[sv2v_cast_32_signed({be_idx[$clog2(BusWidth / 8) - 1], 2'h0})+:4] = {4 {1'sb1}};
-				else
-					be_mask = {BusWidth / 8 {1'sb1}};
-			3'b011: be_mask = {BusWidth / 8 {1'sb1}};
-			default:
-				;
-		endcase
-	end
-	localparam [2:0] dm_Read = 1;
-	localparam [2:0] dm_WaitRead = 3;
-	localparam [2:0] dm_WaitWrite = 4;
-	localparam [2:0] dm_Write = 2;
-	always @(*) begin : p_fsm
-		req = 1'b0;
-		address = sbaddress_i;
-		we = 1'b0;
-		be = {BusWidth / 8 {1'sb0}};
-		be_idx = sbaddress_i[$clog2(BusWidth / 8) - 1:0];
-		sberror_o = {3 {1'sb0}};
-		sberror_valid_o = 1'b0;
-		sbaddress_o = sbaddress_i;
-		state_d = state_q;
-		case (state_q)
-			dm_Idle: begin
-				if (sbaddress_write_valid_i && sbreadonaddr_i)
-					state_d = dm_Read;
-				if (sbdata_write_valid_i)
-					state_d = dm_Write;
-				if (sbdata_read_valid_i && sbreadondata_i)
-					state_d = dm_Read;
-			end
-			dm_Read: begin
-				req = 1'b1;
-				if (ReadByteEnable)
-					be = be_mask;
-				if (gnt)
-					state_d = dm_WaitRead;
-			end
-			dm_Write: begin
-				req = 1'b1;
-				we = 1'b1;
-				be = be_mask;
-				if (gnt)
-					state_d = dm_WaitWrite;
-			end
-			dm_WaitRead:
-				if (sbdata_valid_o) begin
-					state_d = dm_Idle;
-					if (sbautoincrement_i)
-						sbaddress_o = sbaddress_i + (32'h00000001 << sbaccess_i);
-				end
-			dm_WaitWrite:
-				if (sbdata_valid_o) begin
-					state_d = dm_Idle;
-					if (sbautoincrement_i)
-						sbaddress_o = sbaddress_i + (32'h00000001 << sbaccess_i);
-				end
-			default: state_d = dm_Idle;
-		endcase
-		if ((sbaccess_i > 3) && (state_q != dm_Idle)) begin
-			req = 1'b0;
-			state_d = dm_Idle;
-			sberror_valid_o = 1'b1;
-			sberror_o = 3'd3;
-		end
-	end
-	always @(posedge clk_i or negedge rst_ni) begin : p_regs
-		if (!rst_ni)
-			state_q <= dm_Idle;
-		else
-			state_q <= state_d;
-	end
-	assign master_req_o = req;
-	assign master_add_o = address[BusWidth - 1:0];
-	assign master_we_o = we;
-	assign master_wdata_o = sbdata_i[BusWidth - 1:0];
-	assign master_be_o = be[(BusWidth / 8) - 1:0];
-	assign gnt = master_gnt_i;
-	assign sbdata_valid_o = master_r_valid_i;
-	assign sbdata_o = master_r_rdata_i[BusWidth - 1:0];
-endmodule
 module fifo_async (
 	clk_wr_i,
 	rst_wr_ni,
@@ -12736,7 +11079,7 @@
 	assign fifo_incr_rptr = rvalid_o & rready_i;
 	always @(posedge clk_wr_i or negedge rst_wr_ni)
 		if (!rst_wr_ni)
-			fifo_wptr <= {PTR_WIDTH {1'b0}};
+			fifo_wptr <= {PTR_WIDTH {1'sb0}};
 		else if (fifo_incr_wptr)
 			if (fifo_wptr[PTR_WIDTH - 2:0] == DepthMinus1)
 				fifo_wptr <= {~fifo_wptr[PTR_WIDTH - 1], {PTR_WIDTH - 1 {1'b0}}};
@@ -12759,7 +11102,7 @@
 	endfunction
 	always @(posedge clk_wr_i or negedge rst_wr_ni)
 		if (!rst_wr_ni)
-			fifo_wptr_gray <= {PTR_WIDTH {1'b0}};
+			fifo_wptr_gray <= {PTR_WIDTH {1'sb0}};
 		else if (fifo_incr_wptr)
 			if (fifo_wptr[PTR_WIDTH - 2:0] == DepthMinus1)
 				fifo_wptr_gray <= dec2gray({~fifo_wptr[PTR_WIDTH - 1], {PTR_WIDTH - 1 {1'b0}}});
@@ -12782,7 +11125,7 @@
 		reg unused_decsub_msb;
 		begin
 			dec_tmp[PTR_WIDTH - 2] = grayval[PTR_WIDTH - 2];
-			begin : sv2v_autoblock_104
+			begin : sv2v_autoblock_106
 				reg signed [31:0] i;
 				for (i = PTR_WIDTH - 3; i >= 0; i = i - 1)
 					dec_tmp[i] = dec_tmp[i + 1] ^ grayval[i];
@@ -12797,7 +11140,7 @@
 	assign fifo_wptr_sync_combi = gray2dec(fifo_wptr_gray_sync);
 	always @(posedge clk_rd_i or negedge rst_rd_ni)
 		if (!rst_rd_ni)
-			fifo_rptr <= {PTR_WIDTH {1'b0}};
+			fifo_rptr <= {PTR_WIDTH {1'sb0}};
 		else if (fifo_incr_rptr)
 			if (fifo_rptr[PTR_WIDTH - 2:0] == DepthMinus1)
 				fifo_rptr <= {~fifo_rptr[PTR_WIDTH - 1], {PTR_WIDTH - 1 {1'b0}}};
@@ -12805,7 +11148,7 @@
 				fifo_rptr <= fifo_rptr + {{PTR_WIDTH - 1 {1'b0}}, 1'b1};
 	always @(posedge clk_rd_i or negedge rst_rd_ni)
 		if (!rst_rd_ni)
-			fifo_rptr_gray <= {PTR_WIDTH {1'b0}};
+			fifo_rptr_gray <= {PTR_WIDTH {1'sb0}};
 		else if (fifo_incr_rptr)
 			if (fifo_rptr[PTR_WIDTH - 2:0] == DepthMinus1)
 				fifo_rptr_gray <= dec2gray({~fifo_rptr[PTR_WIDTH - 1], {PTR_WIDTH - 1 {1'b0}}});
@@ -12819,7 +11162,7 @@
 	);
 	always @(posedge clk_wr_i or negedge rst_wr_ni)
 		if (!rst_wr_ni)
-			fifo_rptr_sync <= {PTR_WIDTH {1'b0}};
+			fifo_rptr_sync <= {PTR_WIDTH {1'sb0}};
 		else
 			fifo_rptr_sync <= gray2dec(fifo_rptr_gray_sync);
 	assign full_wclk = fifo_wptr == (fifo_rptr_sync ^ {1'b1, {PTR_WIDTH - 1 {1'b0}}});
@@ -12849,7 +11192,9 @@
 	assign rdepth_o = (full_rclk ? sv2v_cast_703F8(Depth) : (wptr_sync_msb == rptr_msb ? sv2v_cast_703F8(wptr_sync_value) - sv2v_cast_703F8(rptr_value) : (sv2v_cast_703F8(Depth) - sv2v_cast_703F8(rptr_value)) + sv2v_cast_703F8(wptr_sync_value)));
 	reg [Width - 1:0] storage [0:Depth - 1];
 	always @(posedge clk_wr_i)
-		if (fifo_incr_wptr)
+		if (~rst_wr_ni)
+			storage[fifo_wptr[PTR_WIDTH - 2:0]] <= {Width {1'sb0}};
+		else if (fifo_incr_wptr)
 			storage[fifo_wptr[PTR_WIDTH - 2:0]] <= wdata_i;
 	assign rdata_o = storage[fifo_rptr[PTR_WIDTH - 2:0]];
 endmodule
@@ -12932,10 +11277,10 @@
 			assign rvalid_o = ~empty & ~under_rst;
 			always @(posedge clk_i or negedge rst_ni)
 				if (!rst_ni)
-					fifo_wptr <= {PTR_WIDTH {1'b0}};
+					fifo_wptr <= {PTR_WIDTH {1'sb0}};
 				else if (clr_i)
 					fifo_wptr <= {PTR_WIDTH {1'b0}};
-				else if (fifo_incr_wptr) begin : sv2v_autoblock_105
+				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)
@@ -12945,10 +11290,10 @@
 				end
 			always @(posedge clk_i or negedge rst_ni)
 				if (!rst_ni)
-					fifo_rptr <= {PTR_WIDTH {1'b0}};
+					fifo_rptr <= {PTR_WIDTH {1'sb0}};
 				else if (clr_i)
 					fifo_rptr <= {PTR_WIDTH {1'b0}};
-				else if (fifo_incr_rptr) begin : sv2v_autoblock_106
+				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)
@@ -12963,13 +11308,17 @@
 			if (Depth == 1) begin : gen_depth_eq1
 				assign storage_rdata = storage[0+:Width];
 				always @(posedge clk_i)
-					if (fifo_incr_wptr)
+					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 (fifo_incr_wptr)
+					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;
@@ -13016,34 +11365,34 @@
 	busy_o
 );
 	parameter [31:0] AuxType_AUX_BITS = 0;
-	localparam [31:0] fpnew_pkg_NUM_FP_FORMATS = 1;
-	parameter [0:0] FpFmtConfig = 1'sb1;
-	localparam [31:0] fpnew_pkg_NUM_INT_FORMATS = 1;
-	parameter [0:0] IntFmtConfig = 1'sb1;
+	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 = 0;
-	localparam [63:0] fpnew_pkg_FP_ENCODINGS = 64'h0000000800000017;
+	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 [fpnew_pkg_FP_FORMAT_BITS - 1:0] fmt;
-		fpnew_pkg_fp_width = (fpnew_pkg_FP_ENCODINGS[(fmt * 64) + 63-:32] + fpnew_pkg_FP_ENCODINGS[(fmt * 64) + 31-:32]) + 1;
+		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 [fpnew_pkg_FP_FORMAT_BITS - 1:0] sv2v_cast_9359B;
-		input reg [fpnew_pkg_FP_FORMAT_BITS - 1:0] inp;
+	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:0] cfg;
+		input reg [0:3] cfg;
 		reg [31:0] res;
 		begin
 			res = 0;
-			begin : sv2v_autoblock_107
+			begin : sv2v_autoblock_109
 				reg [31:0] i;
 				for (i = 0; i < fpnew_pkg_NUM_FP_FORMATS; i = i + 1)
 					if (cfg[i])
@@ -13052,24 +11401,30 @@
 			fpnew_pkg_max_fp_width = res;
 		end
 	endfunction
-	localparam [31:0] fpnew_pkg_INT_FORMAT_BITS = 0;
-	localparam [fpnew_pkg_INT_FORMAT_BITS - 1:0] fpnew_pkg_INT32 = 0;
+	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 [fpnew_pkg_INT_FORMAT_BITS - 1:0] ifmt;
+		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 [fpnew_pkg_INT_FORMAT_BITS - 1:0] sv2v_cast_D812A;
-		input reg [fpnew_pkg_INT_FORMAT_BITS - 1:0] inp;
+	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:0] cfg;
+		input reg [0:3] cfg;
 		reg [31:0] res;
 		begin
 			res = 0;
-			begin : sv2v_autoblock_108
+			begin : sv2v_autoblock_110
 				reg signed [31:0] ifmt;
 				for (ifmt = 0; ifmt < fpnew_pkg_NUM_INT_FORMATS; ifmt = ifmt + 1)
 					if (cfg[ifmt])
@@ -13083,14 +11438,14 @@
 	input wire clk_i;
 	input wire rst_ni;
 	input wire [WIDTH - 1:0] operands_i;
-	input wire [0:0] is_boxed_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 [fpnew_pkg_FP_FORMAT_BITS - 1:0] src_fmt_i;
-	input wire [fpnew_pkg_FP_FORMAT_BITS - 1:0] dst_fmt_i;
-	input wire [fpnew_pkg_INT_FORMAT_BITS - 1:0] int_fmt_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;
@@ -13117,19 +11472,19 @@
 	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 [fpnew_pkg_FP_FORMAT_BITS - 1:0] fmt;
-		fpnew_pkg_exp_bits = fpnew_pkg_FP_ENCODINGS[(fmt * 64) + 63-:32];
+		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 [fpnew_pkg_FP_FORMAT_BITS - 1:0] fmt;
-		fpnew_pkg_man_bits = fpnew_pkg_FP_ENCODINGS[(fmt * 64) + 31-:32];
+		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:0] cfg;
+		input reg [0:3] cfg;
 		reg [63:0] res;
 		begin
 			res = {64 {1'sb0}};
-			begin : sv2v_autoblock_109
+			begin : sv2v_autoblock_111
 				reg [31:0] fmt;
 				for (fmt = 0; fmt < fpnew_pkg_NUM_FP_FORMATS; fmt = fmt + 1)
 					if (cfg[fmt]) begin
@@ -13154,19 +11509,19 @@
 	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 [0:0] is_boxed_q;
+	wire [3:0] is_boxed_q;
 	wire op_mod_q;
-	wire [fpnew_pkg_FP_FORMAT_BITS - 1:0] src_fmt_q;
-	wire [fpnew_pkg_FP_FORMAT_BITS - 1:0] dst_fmt_q;
-	wire [fpnew_pkg_INT_FORMAT_BITS - 1:0] int_fmt_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 : -1):(0 >= NUM_INP_REGS ? 0 : 0)] inp_pipe_src_fmt_q;
-	wire [(0 >= NUM_INP_REGS ? -1 : -1):(0 >= NUM_INP_REGS ? 0 : 0)] inp_pipe_dst_fmt_q;
-	wire [(0 >= NUM_INP_REGS ? -1 : -1):(0 >= NUM_INP_REGS ? 0 : 0)] inp_pipe_int_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_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;
@@ -13176,9 +11531,9 @@
 	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+:fpnew_pkg_FP_FORMAT_BITS] = src_fmt_i;
-	assign inp_pipe_dst_fmt_q[0+:fpnew_pkg_FP_FORMAT_BITS] = dst_fmt_i;
-	assign inp_pipe_int_fmt_q[0+:fpnew_pkg_INT_FORMAT_BITS] = int_fmt_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;
@@ -13194,9 +11549,9 @@
 	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+:fpnew_pkg_FP_FORMAT_BITS];
-	assign dst_fmt_q = inp_pipe_dst_fmt_q[0+:fpnew_pkg_FP_FORMAT_BITS];
-	assign int_fmt_q = inp_pipe_int_fmt_q[0+:fpnew_pkg_INT_FORMAT_BITS];
+	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;
@@ -13204,11 +11559,11 @@
 	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 [0:0] fmt_sign;
+	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 [7:0] info;
+	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;
@@ -13221,16 +11576,16 @@
 			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 [fpnew_pkg_FP_FORMAT_BITS - 1:0] sv2v_cast_9359B;
-				input reg [fpnew_pkg_FP_FORMAT_BITS - 1:0] inp;
+			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 [fpnew_pkg_FP_FORMAT_BITS - 1:0] sv2v_cast_9359B;
-					input reg [fpnew_pkg_FP_FORMAT_BITS - 1:0] inp;
+				function automatic [1:0] sv2v_cast_9359B;
+					input reg [1:0] inp;
 					sv2v_cast_9359B = inp;
 				endfunction
 				fpnew_classifier #(
@@ -13262,8 +11617,8 @@
 	generate
 		genvar ifmt;
 		for (ifmt = 0; ifmt < sv2v_cast_32_signed(NUM_INT_FORMATS); ifmt = ifmt + 1) begin : gen_sign_extend_int
-			function automatic [fpnew_pkg_INT_FORMAT_BITS - 1:0] sv2v_cast_D812A;
-				input reg [fpnew_pkg_INT_FORMAT_BITS - 1:0] inp;
+			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));
@@ -13293,8 +11648,8 @@
 	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 [fpnew_pkg_FP_FORMAT_BITS - 1:0] fmt;
-		fpnew_pkg_bias = $unsigned((2 ** (fpnew_pkg_FP_ENCODINGS[(fmt * 64) + 63-:32] - 1)) - 1);
+		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];
@@ -13334,9 +11689,9 @@
 	wire mant_is_zero_q;
 	wire op_mod_q2;
 	wire [2:0] rnd_mode_q;
-	wire [fpnew_pkg_FP_FORMAT_BITS - 1:0] src_fmt_q2;
-	wire [fpnew_pkg_FP_FORMAT_BITS - 1:0] dst_fmt_q2;
-	wire [fpnew_pkg_INT_FORMAT_BITS - 1:0] int_fmt_q2;
+	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;
@@ -13347,9 +11702,9 @@
 	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 : -1):(0 >= NUM_MID_REGS ? 0 : 0)] mid_pipe_src_fmt_q;
-	wire [(0 >= NUM_MID_REGS ? -1 : -1):(0 >= NUM_MID_REGS ? 0 : 0)] mid_pipe_dst_fmt_q;
-	wire [(0 >= NUM_MID_REGS ? -1 : -1):(0 >= NUM_MID_REGS ? 0 : 0)] mid_pipe_int_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_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;
@@ -13364,9 +11719,9 @@
 	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+:fpnew_pkg_FP_FORMAT_BITS] = src_fmt_q;
-	assign mid_pipe_dst_fmt_q[0+:fpnew_pkg_FP_FORMAT_BITS] = dst_fmt_q;
-	assign mid_pipe_int_fmt_q[0+:fpnew_pkg_INT_FORMAT_BITS] = int_fmt_q;
+	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];
@@ -13388,9 +11743,9 @@
 	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+:fpnew_pkg_FP_FORMAT_BITS];
-	assign dst_fmt_q2 = mid_pipe_dst_fmt_q[0+:fpnew_pkg_FP_FORMAT_BITS];
-	assign int_fmt_q2 = mid_pipe_int_fmt_q[0+:fpnew_pkg_INT_FORMAT_BITS];
+	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;
@@ -13448,8 +11803,8 @@
 	wire of_after_round;
 	wire uf_after_round;
 	reg [(NUM_FORMATS * WIDTH) - 1:0] fmt_pre_round_abs;
-	reg [0:0] fmt_of_after_round;
-	reg [0:0] fmt_uf_after_round;
+	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;
@@ -13458,8 +11813,8 @@
 	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 [fpnew_pkg_FP_FORMAT_BITS - 1:0] sv2v_cast_9359B;
-				input reg [fpnew_pkg_FP_FORMAT_BITS - 1:0] inp;
+			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));
@@ -13478,8 +11833,8 @@
 	endgenerate
 	generate
 		for (ifmt = 0; ifmt < sv2v_cast_32_signed(NUM_INT_FORMATS); ifmt = ifmt + 1) begin : gen_int_res_sign_ext
-			function automatic [fpnew_pkg_INT_FORMAT_BITS - 1:0] sv2v_cast_D812A;
-				input reg [fpnew_pkg_INT_FORMAT_BITS - 1:0] inp;
+			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));
@@ -13510,8 +11865,8 @@
 	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 [fpnew_pkg_FP_FORMAT_BITS - 1:0] sv2v_cast_9359B;
-				input reg [fpnew_pkg_FP_FORMAT_BITS - 1:0] inp;
+			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));
@@ -13548,8 +11903,8 @@
 	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 [fpnew_pkg_FP_FORMAT_BITS - 1:0] sv2v_cast_9359B;
-				input reg [fpnew_pkg_FP_FORMAT_BITS - 1:0] inp;
+			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));
@@ -13581,8 +11936,8 @@
 	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 [fpnew_pkg_INT_FORMAT_BITS - 1:0] sv2v_cast_D812A;
-				input reg [fpnew_pkg_INT_FORMAT_BITS - 1:0] inp;
+			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));
@@ -13664,31 +12019,31 @@
 	is_boxed_i,
 	info_o
 );
-	localparam [31:0] fpnew_pkg_NUM_FP_FORMATS = 1;
-	localparam [31:0] fpnew_pkg_FP_FORMAT_BITS = 0;
-	function automatic [fpnew_pkg_FP_FORMAT_BITS - 1:0] sv2v_cast_9E068;
-		input reg [fpnew_pkg_FP_FORMAT_BITS - 1:0] inp;
+	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 [fpnew_pkg_FP_FORMAT_BITS - 1:0] FpFormat = sv2v_cast_9E068(0);
+	parameter [1:0] FpFormat = sv2v_cast_9E068(0);
 	parameter [31:0] NumOperands = 1;
-	localparam [63:0] fpnew_pkg_FP_ENCODINGS = 64'h0000000800000017;
+	localparam [255:0] fpnew_pkg_FP_ENCODINGS = 256'h00000008000000170000000b00000034000000050000000a0000000500000002;
 	function automatic [31:0] fpnew_pkg_fp_width;
-		input reg [fpnew_pkg_FP_FORMAT_BITS - 1:0] fmt;
-		fpnew_pkg_fp_width = (fpnew_pkg_FP_ENCODINGS[(fmt * 64) + 63-:32] + fpnew_pkg_FP_ENCODINGS[(fmt * 64) + 31-:32]) + 1;
+		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 [fpnew_pkg_FP_FORMAT_BITS - 1:0] fmt;
-		fpnew_pkg_exp_bits = fpnew_pkg_FP_ENCODINGS[(fmt * 64) + 63-:32];
+		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 [fpnew_pkg_FP_FORMAT_BITS - 1:0] fmt;
-		fpnew_pkg_man_bits = fpnew_pkg_FP_ENCODINGS[(fmt * 64) + 31-:32];
+		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
@@ -13752,32 +12107,32 @@
 	busy_o
 );
 	parameter [31:0] AuxType_AUX_BITS = 0;
-	localparam [31:0] fpnew_pkg_NUM_FP_FORMATS = 1;
-	parameter [0:0] FpFmtConfig = 1'sb1;
+	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 = 0;
-	localparam [63:0] fpnew_pkg_FP_ENCODINGS = 64'h0000000800000017;
+	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 [fpnew_pkg_FP_FORMAT_BITS - 1:0] fmt;
-		fpnew_pkg_fp_width = (fpnew_pkg_FP_ENCODINGS[(fmt * 64) + 63-:32] + fpnew_pkg_FP_ENCODINGS[(fmt * 64) + 31-:32]) + 1;
+		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 [fpnew_pkg_FP_FORMAT_BITS - 1:0] sv2v_cast_8C7A2;
-		input reg [fpnew_pkg_FP_FORMAT_BITS - 1:0] inp;
+	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:0] cfg;
+		input reg [0:3] cfg;
 		reg [31:0] res;
 		begin
 			res = 0;
-			begin : sv2v_autoblock_110
+			begin : sv2v_autoblock_112
 				reg [31:0] i;
 				for (i = 0; i < fpnew_pkg_NUM_FP_FORMATS; i = i + 1)
 					if (cfg[i])
@@ -13791,11 +12146,11 @@
 	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 [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 [fpnew_pkg_FP_FORMAT_BITS - 1:0] dst_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;
@@ -13817,12 +12172,12 @@
 	wire [(2 * WIDTH) - 1:0] operands_q;
 	wire [2:0] rnd_mode_q;
 	wire [3:0] op_q;
-	wire [fpnew_pkg_FP_FORMAT_BITS - 1:0] dst_fmt_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 : -1):(0 >= NUM_INP_REGS ? 0 : 0)] inp_pipe_dst_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;
@@ -13830,7 +12185,7 @@
 	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+:fpnew_pkg_FP_FORMAT_BITS] = dst_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;
@@ -13846,20 +12201,25 @@
 	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+: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 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 [fpnew_pkg_FP_FORMAT_BITS - 1:0] fpnew_pkg_FP32 = 'd0;
+	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 = 1'b0;
-		divsqrt_operands[0+:64] = operands_q[0+:WIDTH];
-		divsqrt_operands[64+:64] = operands_q[WIDTH+:WIDTH];
+		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;
@@ -13961,8 +12321,8 @@
 		.Ready_SO(unit_ready),
 		.Done_SO(unit_done)
 	);
-	assign adjusted_result = (result_is_fp8_q ? unit_result >> 8 : unit_result);
 	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);
@@ -14020,32 +12380,32 @@
 	busy_o
 );
 	parameter [31:0] AuxType_AUX_BITS = 0;
-	localparam [31:0] fpnew_pkg_NUM_FP_FORMATS = 1;
-	parameter [0:0] FpFmtConfig = 1'sb1;
+	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 = 0;
-	localparam [63:0] fpnew_pkg_FP_ENCODINGS = 64'h0000000800000017;
+	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 [fpnew_pkg_FP_FORMAT_BITS - 1:0] fmt;
-		fpnew_pkg_fp_width = (fpnew_pkg_FP_ENCODINGS[(fmt * 64) + 63-:32] + fpnew_pkg_FP_ENCODINGS[(fmt * 64) + 31-:32]) + 1;
+		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 [fpnew_pkg_FP_FORMAT_BITS - 1:0] sv2v_cast_3AA4D;
-		input reg [fpnew_pkg_FP_FORMAT_BITS - 1:0] inp;
+	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:0] cfg;
+		input reg [0:3] cfg;
 		reg [31:0] res;
 		begin
 			res = 0;
-			begin : sv2v_autoblock_111
+			begin : sv2v_autoblock_113
 				reg [31:0] i;
 				for (i = 0; i < fpnew_pkg_NUM_FP_FORMATS; i = i + 1)
 					if (cfg[i])
@@ -14059,13 +12419,13 @@
 	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 [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 [fpnew_pkg_FP_FORMAT_BITS - 1:0] src_fmt_i;
-	input wire [fpnew_pkg_FP_FORMAT_BITS - 1:0] dst_fmt_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;
@@ -14080,19 +12440,19 @@
 	input wire out_ready_i;
 	output wire busy_o;
 	function automatic [31:0] fpnew_pkg_exp_bits;
-		input reg [fpnew_pkg_FP_FORMAT_BITS - 1:0] fmt;
-		fpnew_pkg_exp_bits = fpnew_pkg_FP_ENCODINGS[(fmt * 64) + 63-:32];
+		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 [fpnew_pkg_FP_FORMAT_BITS - 1:0] fmt;
-		fpnew_pkg_man_bits = fpnew_pkg_FP_ENCODINGS[(fmt * 64) + 31-:32];
+		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:0] cfg;
+		input reg [0:3] cfg;
 		reg [63:0] res;
 		begin
 			res = {64 {1'sb0}};
-			begin : sv2v_autoblock_112
+			begin : sv2v_autoblock_114
 				reg [31:0] fmt;
 				for (fmt = 0; fmt < fpnew_pkg_NUM_FP_FORMATS; fmt = fmt + 1)
 					if (cfg[fmt]) begin
@@ -14118,26 +12478,26 @@
 	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 [fpnew_pkg_FP_FORMAT_BITS - 1:0] src_fmt_q;
-	wire [fpnew_pkg_FP_FORMAT_BITS - 1:0] dst_fmt_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_INP_REGS - 1) : NUM_INP_REGS) >= (0 >= NUM_INP_REGS ? NUM_INP_REGS : 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_INP_REGS - 1) : NUM_INP_REGS) >= (0 >= NUM_INP_REGS ? NUM_INP_REGS : 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) * 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 : -1):(0 >= NUM_INP_REGS ? 0 : 0)] inp_pipe_src_fmt_q;
-	wire [(0 >= NUM_INP_REGS ? -1 : -1):(0 >= NUM_INP_REGS ? 0 : 0)] inp_pipe_dst_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_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_INP_REGS - 1) : NUM_INP_REGS) >= (0 >= NUM_INP_REGS ? NUM_INP_REGS : 0) ? ((0 >= NUM_INP_REGS ? (1 - NUM_INP_REGS) + (NUM_INP_REGS - 1) : NUM_INP_REGS) >= (0 >= NUM_INP_REGS ? NUM_INP_REGS : 0) ? (0 >= NUM_INP_REGS ? 0 : NUM_INP_REGS) * NUM_FORMATS : (0 >= NUM_INP_REGS ? 0 : NUM_INP_REGS) * NUM_FORMATS) : (0 >= NUM_INP_REGS ? NUM_INP_REGS * NUM_FORMATS : 0) - (((0 >= NUM_INP_REGS ? (1 - NUM_INP_REGS) + (NUM_INP_REGS - 1) : NUM_INP_REGS) >= (0 >= NUM_INP_REGS ? NUM_INP_REGS : 0) ? (0 >= NUM_INP_REGS ? 0 : NUM_INP_REGS) * NUM_FORMATS : (0 >= NUM_INP_REGS ? 0 : NUM_INP_REGS) * NUM_FORMATS) - (0 >= NUM_INP_REGS ? ((1 - NUM_INP_REGS) * NUM_FORMATS) + ((NUM_INP_REGS * NUM_FORMATS) - 1) : ((NUM_INP_REGS + 1) * NUM_FORMATS) - 1)))+:3] = is_boxed_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+:fpnew_pkg_FP_FORMAT_BITS] = src_fmt_i;
-	assign inp_pipe_dst_fmt_q[0+:fpnew_pkg_FP_FORMAT_BITS] = dst_fmt_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;
@@ -14151,12 +12511,12 @@
 		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+:fpnew_pkg_FP_FORMAT_BITS];
-	assign dst_fmt_q = inp_pipe_dst_fmt_q[0+:fpnew_pkg_FP_FORMAT_BITS];
-	wire [2:0] fmt_sign;
-	wire signed [(3 * SUPER_EXP_BITS) - 1:0] fmt_exponent;
-	wire [(3 * SUPER_MAN_BITS) - 1:0] fmt_mantissa;
-	wire [23:0] info_q;
+	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;
@@ -14165,8 +12525,8 @@
 			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 [fpnew_pkg_FP_FORMAT_BITS - 1:0] sv2v_cast_3AA4D;
-				input reg [fpnew_pkg_FP_FORMAT_BITS - 1:0] inp;
+			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));
@@ -14174,8 +12534,8 @@
 			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 [fpnew_pkg_FP_FORMAT_BITS - 1:0] sv2v_cast_3AA4D;
-					input reg [fpnew_pkg_FP_FORMAT_BITS - 1:0] inp;
+				function automatic [1:0] sv2v_cast_3AA4D;
+					input reg [1:0] inp;
 					sv2v_cast_3AA4D = inp;
 				endfunction
 				fpnew_classifier #(
@@ -14183,7 +12543,7 @@
 					.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_INP_REGS - 1) : NUM_INP_REGS) >= (0 >= NUM_INP_REGS ? NUM_INP_REGS : 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]),
+					.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;
@@ -14225,8 +12585,8 @@
 	reg [7:0] info_b;
 	reg [7:0] info_c;
 	function automatic [31:0] fpnew_pkg_bias;
-		input reg [fpnew_pkg_FP_FORMAT_BITS - 1:0] fmt;
-		fpnew_pkg_bias = $unsigned((2 ** (fpnew_pkg_FP_ENCODINGS[(fmt * 64) + 63-:32] - 1)) - 1);
+		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;
@@ -14284,12 +12644,12 @@
 	wire [4:0] special_status;
 	wire result_is_special;
 	reg [(NUM_FORMATS * WIDTH) - 1:0] fmt_special_result;
-	reg [4:0] fmt_special_status;
-	reg [0:0] fmt_result_is_special;
+	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 [fpnew_pkg_FP_FORMAT_BITS - 1:0] sv2v_cast_3AA4D;
-				input reg [fpnew_pkg_FP_FORMAT_BITS - 1:0] inp;
+			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));
@@ -14399,7 +12759,7 @@
 	wire sticky_before_add_q;
 	wire [(3 * PRECISION_BITS) + 3:0] sum_q;
 	wire final_sign_q;
-	wire [fpnew_pkg_FP_FORMAT_BITS - 1:0] dst_fmt_q2;
+	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;
@@ -14413,7 +12773,7 @@
 	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 : -1):(0 >= NUM_MID_REGS ? 0 : 0)] mid_pipe_dst_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] 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;
@@ -14430,7 +12790,7 @@
 	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+:fpnew_pkg_FP_FORMAT_BITS] = dst_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_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;
@@ -14454,7 +12814,7 @@
 	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+: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 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];
@@ -14521,9 +12881,9 @@
 	wire uf_before_round;
 	wire uf_after_round;
 	wire [(NUM_FORMATS * (SUPER_EXP_BITS + SUPER_MAN_BITS)) - 1:0] fmt_pre_round_abs;
-	wire [1:0] fmt_round_sticky_bits;
-	reg [0:0] fmt_of_after_round;
-	reg [0:0] fmt_uf_after_round;
+	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;
@@ -14531,8 +12891,8 @@
 	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 [fpnew_pkg_FP_FORMAT_BITS - 1:0] sv2v_cast_3AA4D;
-				input reg [fpnew_pkg_FP_FORMAT_BITS - 1:0] inp;
+			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));
@@ -14577,8 +12937,8 @@
 	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 [fpnew_pkg_FP_FORMAT_BITS - 1:0] sv2v_cast_3AA4D;
-				input reg [fpnew_pkg_FP_FORMAT_BITS - 1:0] inp;
+			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));
@@ -14669,20 +13029,20 @@
 	out_ready_i,
 	busy_o
 );
-	localparam [31:0] fpnew_pkg_NUM_FP_FORMATS = 1;
-	localparam [31:0] fpnew_pkg_FP_FORMAT_BITS = 0;
-	function automatic [fpnew_pkg_FP_FORMAT_BITS - 1:0] sv2v_cast_1ED13;
-		input reg [fpnew_pkg_FP_FORMAT_BITS - 1:0] inp;
+	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 [fpnew_pkg_FP_FORMAT_BITS - 1:0] FpFormat = sv2v_cast_1ED13(0);
+	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 [63:0] fpnew_pkg_FP_ENCODINGS = 64'h0000000800000017;
+	localparam [255:0] fpnew_pkg_FP_ENCODINGS = 256'h00000008000000170000000b00000034000000050000000a0000000500000002;
 	function automatic [31:0] fpnew_pkg_fp_width;
-		input reg [fpnew_pkg_FP_FORMAT_BITS - 1:0] fmt;
-		fpnew_pkg_fp_width = (fpnew_pkg_FP_ENCODINGS[(fmt * 64) + 63-:32] + fpnew_pkg_FP_ENCODINGS[(fmt * 64) + 31-:32]) + 1;
+		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;
@@ -14707,18 +13067,18 @@
 	input wire out_ready_i;
 	output wire busy_o;
 	function automatic [31:0] fpnew_pkg_exp_bits;
-		input reg [fpnew_pkg_FP_FORMAT_BITS - 1:0] fmt;
-		fpnew_pkg_exp_bits = fpnew_pkg_FP_ENCODINGS[(fmt * 64) + 63-:32];
+		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 [fpnew_pkg_FP_FORMAT_BITS - 1:0] fmt;
-		fpnew_pkg_man_bits = fpnew_pkg_FP_ENCODINGS[(fmt * 64) + 31-:32];
+		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 [fpnew_pkg_FP_FORMAT_BITS - 1:0] fmt;
-		fpnew_pkg_bias = $unsigned((2 ** (fpnew_pkg_FP_ENCODINGS[(fmt * 64) + 63-:32] - 1)) - 1);
+		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;
@@ -15119,20 +13479,20 @@
 	out_ready_i,
 	busy_o
 );
-	localparam [31:0] fpnew_pkg_NUM_FP_FORMATS = 1;
-	localparam [31:0] fpnew_pkg_FP_FORMAT_BITS = 0;
-	function automatic [fpnew_pkg_FP_FORMAT_BITS - 1:0] sv2v_cast_F7742;
-		input reg [fpnew_pkg_FP_FORMAT_BITS - 1:0] inp;
+	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 [fpnew_pkg_FP_FORMAT_BITS - 1:0] FpFormat = sv2v_cast_F7742(0);
+	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 [63:0] fpnew_pkg_FP_ENCODINGS = 64'h0000000800000017;
+	localparam [255:0] fpnew_pkg_FP_ENCODINGS = 256'h00000008000000170000000b00000034000000050000000a0000000500000002;
 	function automatic [31:0] fpnew_pkg_fp_width;
-		input reg [fpnew_pkg_FP_FORMAT_BITS - 1:0] fmt;
-		fpnew_pkg_fp_width = (fpnew_pkg_FP_ENCODINGS[(fmt * 64) + 63-:32] + fpnew_pkg_FP_ENCODINGS[(fmt * 64) + 31-:32]) + 1;
+		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;
@@ -15159,13 +13519,13 @@
 	input wire out_ready_i;
 	output wire busy_o;
 	function automatic [31:0] fpnew_pkg_exp_bits;
-		input reg [fpnew_pkg_FP_FORMAT_BITS - 1:0] fmt;
-		fpnew_pkg_exp_bits = fpnew_pkg_FP_ENCODINGS[(fmt * 64) + 63-:32];
+		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 [fpnew_pkg_FP_FORMAT_BITS - 1:0] fmt;
-		fpnew_pkg_man_bits = fpnew_pkg_FP_ENCODINGS[(fmt * 64) + 31-:32];
+		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;
@@ -15412,9 +13772,11 @@
 	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,
@@ -15440,13 +13802,13 @@
 	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 = 1;
-	parameter [0:0] FpFmtMask = 1'sb1;
-	localparam [31:0] fpnew_pkg_NUM_INT_FORMATS = 1;
-	parameter [0:0] IntFmtMask = 1'sb1;
-	parameter [31:0] FmtPipeRegs = 32'd0;
+	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 [1:0] FmtUnitTypes = {fpnew_pkg_PARALLEL};
+	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;
@@ -15464,6 +13826,7 @@
 		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;
@@ -15472,11 +13835,11 @@
 	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 = 0;
-	input wire [fpnew_pkg_FP_FORMAT_BITS - 1:0] src_fmt_i;
-	input wire [fpnew_pkg_FP_FORMAT_BITS - 1:0] dst_fmt_i;
-	localparam [31:0] fpnew_pkg_INT_FORMAT_BITS = 0;
-	input wire [fpnew_pkg_INT_FORMAT_BITS - 1:0] int_fmt_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;
@@ -15489,26 +13852,26 @@
 	output wire out_valid_o;
 	input wire out_ready_i;
 	output wire busy_o;
-	wire [0:0] fmt_in_ready;
-	wire [0:0] fmt_out_valid;
-	wire [0:0] fmt_out_ready;
-	wire [0:0] fmt_busy;
-	wire [((Width + 6) >= 0 ? Width + 6 : (1 - (Width + 6)) + (Width + 5)):((Width + 6) >= 0 ? 0 : Width + 6)] fmt_outputs;
+	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 [1:0] types;
-		input reg [0:0] cfg;
+		input reg [7:0] types;
+		input reg [0:3] cfg;
 		reg [0:1] _sv2v_jump;
 		begin
 			_sv2v_jump = 2'b00;
-			begin : sv2v_autoblock_113
+			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[i * 2+:2] == fpnew_pkg_MERGED)) begin
+						if (cfg[i] && (types[(3 - i) * 2+:2] == fpnew_pkg_MERGED)) begin
 							fpnew_pkg_any_enabled_multi = 1'b1;
 							_sv2v_jump = 2'b11;
 						end
@@ -15522,22 +13885,22 @@
 			end
 		end
 	endfunction
-	function automatic [fpnew_pkg_FP_FORMAT_BITS - 1:0] sv2v_cast_F6DD6;
-		input reg [fpnew_pkg_FP_FORMAT_BITS - 1:0] inp;
+	function automatic [1:0] sv2v_cast_F6DD6;
+		input reg [1:0] inp;
 		sv2v_cast_F6DD6 = inp;
 	endfunction
-	function automatic [fpnew_pkg_FP_FORMAT_BITS - 1:0] fpnew_pkg_get_first_enabled_multi;
-		input reg [1:0] types;
-		input reg [0:0] cfg;
+	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_114
+			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[i * 2+:2] == fpnew_pkg_MERGED)) begin
+						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
@@ -15552,32 +13915,53 @@
 		end
 	endfunction
 	function automatic fpnew_pkg_is_first_enabled_multi;
-		input reg [fpnew_pkg_FP_FORMAT_BITS - 1:0] fmt;
-		input reg [1:0] types;
-		input reg [0:0] 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[i * 2+:2] == fpnew_pkg_MERGED)) begin
-							fpnew_pkg_is_first_enabled_multi = sv2v_cast_F6DD6(i) == fmt;
-							_sv2v_jump = 2'b11;
+		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
-			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
+				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;
@@ -15586,16 +13970,16 @@
 		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 [fpnew_pkg_FP_FORMAT_BITS - 1:0] sv2v_cast_F6DD6;
-				input reg [fpnew_pkg_FP_FORMAT_BITS - 1:0] inp;
+			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[fmt * 2+:2] == fpnew_pkg_PARALLEL)) begin : active_format
+			//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 [fpnew_pkg_FP_FORMAT_BITS - 1:0] sv2v_cast_F6DD6;
-					input reg [fpnew_pkg_FP_FORMAT_BITS - 1:0] inp;
+				function automatic [1:0] sv2v_cast_F6DD6;
+					input reg [1:0] inp;
 					sv2v_cast_F6DD6 = inp;
 				endfunction
 				fpnew_opgroup_fmt_slice_30528 #(
@@ -15603,7 +13987,7 @@
 					.FpFormat(sv2v_cast_F6DD6(fmt)),
 					.Width(Width),
 					.EnableVectors(EnableVectors),
-					.NumPipeRegs(FmtPipeRegs[fmt * 32+:32]),
+					.NumPipeRegs(FmtPipeRegs[(3 - fmt) * 32+:32]),
 					.PipeConfig(PipeConfig)
 				) i_fmt_slice(
 					.clk_i(clk_i),
@@ -15641,7 +14025,7 @@
 				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[fmt * 2+:2] == fpnew_pkg_DISABLED)) begin : disable_fmt
+			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;
@@ -15658,17 +14042,17 @@
 		fpnew_pkg_maximum = (a > b ? a : b);
 	endfunction
 	function automatic [31:0] fpnew_pkg_get_num_regs_multi;
-		input reg [31:0] regs;
-		input reg [1:0] types;
-		input reg [0:0] cfg;
+		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_116
+			begin : sv2v_autoblock_118
 				reg [31:0] i;
 				for (i = 0; i < fpnew_pkg_NUM_FP_FORMATS; i = i + 1)
-					if (cfg[i] && (types[i * 2+:2] == fpnew_pkg_MERGED))
-						res = fpnew_pkg_maximum(res, regs[i * 32+:32]);
+					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
@@ -15678,7 +14062,7 @@
 			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[dst_fmt_i * 2+:2] == fpnew_pkg_MERGED);
+			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),
@@ -15722,7 +14106,310 @@
 		.clk_i(clk_i),
 		.rst_ni(rst_ni),
 		.flush_i(flush_i),
-		.rr_i({32'd1 {1'sb0}}),
+		.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),
@@ -15760,13 +14447,13 @@
 );
 	localparam [1:0] fpnew_pkg_ADDMUL = 0;
 	parameter [1:0] OpGroup = fpnew_pkg_ADDMUL;
-	localparam [31:0] fpnew_pkg_NUM_FP_FORMATS = 1;
-	localparam [31:0] fpnew_pkg_FP_FORMAT_BITS = 0;
-	function automatic [fpnew_pkg_FP_FORMAT_BITS - 1:0] sv2v_cast_CA66C;
-		input reg [fpnew_pkg_FP_FORMAT_BITS - 1:0] inp;
+	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 [fpnew_pkg_FP_FORMAT_BITS - 1:0] FpFormat = sv2v_cast_CA66C(0);
+	parameter [1:0] FpFormat = sv2v_cast_CA66C(0);
 	parameter [31:0] Width = 32;
 	parameter [0:0] EnableVectors = 1'b1;
 	parameter [31:0] NumPipeRegs = 0;
@@ -15806,15 +14493,15 @@
 	output wire out_valid_o;
 	input wire out_ready_i;
 	output wire busy_o;
-	localparam [63:0] fpnew_pkg_FP_ENCODINGS = 64'h0000000800000017;
+	localparam [255:0] fpnew_pkg_FP_ENCODINGS = 256'h00000008000000170000000b00000034000000050000000a0000000500000002;
 	function automatic [31:0] fpnew_pkg_fp_width;
-		input reg [fpnew_pkg_FP_FORMAT_BITS - 1:0] fmt;
-		fpnew_pkg_fp_width = (fpnew_pkg_FP_ENCODINGS[(fmt * 64) + 63-:32] + fpnew_pkg_FP_ENCODINGS[(fmt * 64) + 31-:32]) + 1;
+		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 [fpnew_pkg_FP_FORMAT_BITS - 1:0] fmt;
+		input reg [1:0] fmt;
 		input reg vec;
 		fpnew_pkg_num_lanes = (vec ? width / fpnew_pkg_fp_width(fmt) : 1);
 	endfunction
@@ -15869,7 +14556,7 @@
 					sv2v_cast_32_signed = inp;
 				endfunction
 				always @(*) begin : prepare_input
-					begin : sv2v_autoblock_117
+					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)];
@@ -15974,7 +14661,7 @@
 	always @(*) begin : output_processing
 		reg [4:0] temp_status;
 		temp_status = {5 {1'sb0}};
-		begin : sv2v_autoblock_118
+		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];
@@ -16009,10 +14696,10 @@
 	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 = 1;
-	parameter [0:0] FpFmtConfig = 1'sb1;
-	localparam [31:0] fpnew_pkg_NUM_INT_FORMATS = 1;
-	parameter [0:0] IntFmtConfig = 1'sb1;
+	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;
@@ -16040,11 +14727,11 @@
 	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 = 0;
-	input wire [fpnew_pkg_FP_FORMAT_BITS - 1:0] src_fmt_i;
-	input wire [fpnew_pkg_FP_FORMAT_BITS - 1:0] dst_fmt_i;
-	localparam [31:0] fpnew_pkg_INT_FORMAT_BITS = 0;
-	input wire [fpnew_pkg_INT_FORMAT_BITS - 1:0] int_fmt_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;
@@ -16057,26 +14744,26 @@
 	output wire out_valid_o;
 	input wire out_ready_i;
 	output wire busy_o;
-	localparam [63:0] fpnew_pkg_FP_ENCODINGS = 64'h0000000800000017;
+	localparam [255:0] fpnew_pkg_FP_ENCODINGS = 256'h00000008000000170000000b00000034000000050000000a0000000500000002;
 	function automatic [31:0] fpnew_pkg_fp_width;
-		input reg [fpnew_pkg_FP_FORMAT_BITS - 1:0] fmt;
-		fpnew_pkg_fp_width = (fpnew_pkg_FP_ENCODINGS[(fmt * 64) + 63-:32] + fpnew_pkg_FP_ENCODINGS[(fmt * 64) + 31-:32]) + 1;
+		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 [fpnew_pkg_FP_FORMAT_BITS - 1:0] sv2v_cast_38622;
-		input reg [fpnew_pkg_FP_FORMAT_BITS - 1:0] inp;
+	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:0] cfg;
+		input reg [0:3] cfg;
 		reg [31:0] res;
 		begin
 			res = 0;
-			begin : sv2v_autoblock_119
+			begin : sv2v_autoblock_121
 				reg [31:0] i;
 				for (i = 0; i < fpnew_pkg_NUM_FP_FORMATS; i = i + 1)
 					if (cfg[i])
@@ -16086,23 +14773,29 @@
 		end
 	endfunction
 	localparam [31:0] MAX_FP_WIDTH = fpnew_pkg_max_fp_width(FpFmtConfig);
-	localparam [fpnew_pkg_INT_FORMAT_BITS - 1:0] fpnew_pkg_INT32 = 0;
+	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 [fpnew_pkg_INT_FORMAT_BITS - 1:0] ifmt;
+		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 [fpnew_pkg_INT_FORMAT_BITS - 1:0] sv2v_cast_E880F;
-		input reg [fpnew_pkg_INT_FORMAT_BITS - 1:0] inp;
+	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:0] cfg;
+		input reg [0:3] cfg;
 		reg [31:0] res;
 		begin
 			res = 0;
-			begin : sv2v_autoblock_120
+			begin : sv2v_autoblock_122
 				reg signed [31:0] ifmt;
 				for (ifmt = 0; ifmt < fpnew_pkg_NUM_INT_FORMATS; ifmt = ifmt + 1)
 					if (cfg[ifmt])
@@ -16118,11 +14811,11 @@
 		fpnew_pkg_minimum = (a < b ? a : b);
 	endfunction
 	function automatic [31:0] fpnew_pkg_min_fp_width;
-		input reg [0:0] cfg;
+		input reg [0:3] cfg;
 		reg [31:0] res;
 		begin
 			res = fpnew_pkg_max_fp_width(cfg);
-			begin : sv2v_autoblock_121
+			begin : sv2v_autoblock_123
 				reg [31:0] i;
 				for (i = 0; i < fpnew_pkg_NUM_FP_FORMATS; i = i + 1)
 					if (cfg[i])
@@ -16133,13 +14826,13 @@
 	endfunction
 	function automatic [31:0] fpnew_pkg_max_num_lanes;
 		input reg [31:0] width;
-		input reg [0:0] cfg;
+		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(0, 0);
+	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;
@@ -16186,10 +14879,10 @@
 			assign conv_target_d = (dst_is_cpk ? operands_i[2 * Width+:Width] : operands_i[Width+:Width]);
 		end
 	endgenerate
-	reg [0:0] is_boxed_1op;
-	reg [1:0] is_boxed_2op;
+	reg [3:0] is_boxed_1op;
+	reg [7:0] is_boxed_2op;
 	always @(*) begin : boxed_2op
-		begin : sv2v_autoblock_122
+		begin : sv2v_autoblock_124
 			reg signed [31:0] fmt;
 			for (fmt = 0; fmt < NUM_FORMATS; fmt = fmt + 1)
 				begin
@@ -16198,12 +14891,12 @@
 				end
 		end
 	end
-	localparam [0:0] fpnew_pkg_CPK_FORMATS = 5'b11000;
-	function automatic [0:0] fpnew_pkg_get_conv_lane_formats;
+	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:0] cfg;
+		input reg [0:3] cfg;
 		input reg [31:0] lane_no;
-		reg [0:0] res;
+		reg [0:3] res;
 		reg [31:0] fmt;
 		begin
 			for (fmt = 0; fmt < fpnew_pkg_NUM_FP_FORMATS; fmt = fmt + 1)
@@ -16211,20 +14904,20 @@
 			fpnew_pkg_get_conv_lane_formats = res;
 		end
 	endfunction
-	function automatic [0:0] fpnew_pkg_get_conv_lane_int_formats;
+	function automatic [0:3] fpnew_pkg_get_conv_lane_int_formats;
 		input reg [31:0] width;
-		input reg [0:0] cfg;
-		input reg [0:0] icfg;
+		input reg [0:3] cfg;
+		input reg [0:3] icfg;
 		input reg [31:0] lane_no;
-		reg [0:0] res;
-		reg [0:0] lanefmts;
+		reg [0:3] res;
+		reg [0:3] lanefmts;
 		begin
-			res = 1'b0;
+			res = {4 {1'sb0}};
 			lanefmts = fpnew_pkg_get_conv_lane_formats(width, cfg, lane_no);
-			begin : sv2v_autoblock_123
+			begin : sv2v_autoblock_125
 				reg [31:0] ifmt;
 				for (ifmt = 0; ifmt < fpnew_pkg_NUM_INT_FORMATS; ifmt = ifmt + 1)
-					begin : sv2v_autoblock_124
+					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))));
@@ -16233,11 +14926,11 @@
 			fpnew_pkg_get_conv_lane_int_formats = res;
 		end
 	endfunction
-	function automatic [0:0] fpnew_pkg_get_lane_formats;
+	function automatic [0:3] fpnew_pkg_get_lane_formats;
 		input reg [31:0] width;
-		input reg [0:0] cfg;
+		input reg [0:3] cfg;
 		input reg [31:0] lane_no;
-		reg [0:0] res;
+		reg [0:3] res;
 		reg [31:0] fmt;
 		begin
 			for (fmt = 0; fmt < fpnew_pkg_NUM_FP_FORMATS; fmt = fmt + 1)
@@ -16245,20 +14938,20 @@
 			fpnew_pkg_get_lane_formats = res;
 		end
 	endfunction
-	function automatic [0:0] fpnew_pkg_get_lane_int_formats;
+	function automatic [0:3] fpnew_pkg_get_lane_int_formats;
 		input reg [31:0] width;
-		input reg [0:0] cfg;
-		input reg [0:0] icfg;
+		input reg [0:3] cfg;
+		input reg [0:3] icfg;
 		input reg [31:0] lane_no;
-		reg [0:0] res;
-		reg [0:0] lanefmts;
+		reg [0:3] res;
+		reg [0:3] lanefmts;
 		begin
-			res = 1'b0;
+			res = {4 {1'sb0}};
 			lanefmts = fpnew_pkg_get_lane_formats(width, cfg, lane_no);
-			begin : sv2v_autoblock_125
+			begin : sv2v_autoblock_127
 				reg [31:0] ifmt;
 				for (ifmt = 0; ifmt < fpnew_pkg_NUM_INT_FORMATS; ifmt = ifmt + 1)
-					begin : sv2v_autoblock_126
+					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)))
@@ -16278,13 +14971,13 @@
 		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:0] ACTIVE_FORMATS = fpnew_pkg_get_lane_formats(Width, FpFmtConfig, LANE);
-			localparam [0:0] ACTIVE_INT_FORMATS = fpnew_pkg_get_lane_int_formats(Width, FpFmtConfig, IntFmtConfig, 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:0] CONV_FORMATS = fpnew_pkg_get_conv_lane_formats(Width, FpFmtConfig, LANE);
-			localparam [0:0] CONV_INT_FORMATS = fpnew_pkg_get_conv_lane_int_formats(Width, FpFmtConfig, IntFmtConfig, LANE);
+			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:0] LANE_FORMATS = (OpGroup == fpnew_pkg_CONV ? CONV_FORMATS : ACTIVE_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
@@ -16299,26 +14992,26 @@
 					input reg [31:0] inp;
 					sv2v_cast_32 = inp;
 				endfunction
-				function automatic [0:0] sv2v_cast_1;
-					input reg [0:0] inp;
-					sv2v_cast_1 = inp;
+				function automatic [3:0] sv2v_cast_4;
+					input reg [3:0] inp;
+					sv2v_cast_4 = inp;
 				endfunction
 				always @(*) begin : prepare_input
-					begin : sv2v_autoblock_127
+					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_1(fpnew_pkg_get_conv_lane_formats(Width, FpFmtConfig, sv2v_cast_32($unsigned(lane)))))) : sv2v_cast_32(fpnew_pkg_max_fp_width(sv2v_cast_1(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_1(fpnew_pkg_get_conv_lane_formats(Width, FpFmtConfig, sv2v_cast_32($unsigned(lane)))))) : sv2v_cast_32(fpnew_pkg_max_fp_width(sv2v_cast_1(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));
+							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_1(fpnew_pkg_get_conv_lane_formats(Width, FpFmtConfig, sv2v_cast_32($unsigned(lane)))))) : sv2v_cast_32(fpnew_pkg_max_fp_width(sv2v_cast_1(fpnew_pkg_get_lane_formats(Width, FpFmtConfig, sv2v_cast_32($unsigned(lane))))))))] = operands_i[0+:Width] >> (LANE * fpnew_pkg_int_width(int_fmt_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))))))))] = 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_1(fpnew_pkg_get_conv_lane_formats(Width, FpFmtConfig, sv2v_cast_32($unsigned(lane)))))) : sv2v_cast_32(fpnew_pkg_max_fp_width(sv2v_cast_1(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));
+								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_1(fpnew_pkg_get_conv_lane_formats(Width, FpFmtConfig, sv2v_cast_32($unsigned(lane)))))) : sv2v_cast_32(fpnew_pkg_max_fp_width(sv2v_cast_1(fpnew_pkg_get_lane_formats(Width, FpFmtConfig, sv2v_cast_32($unsigned(lane))))))))] = operands_i[Width + (LANE_WIDTH - 1)-:LANE_WIDTH];
+								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 #(
@@ -16356,9 +15049,9 @@
 						input reg [31:0] inp;
 						sv2v_cast_32 = inp;
 					endfunction
-					function automatic [0:0] sv2v_cast_1;
-						input reg [0:0] inp;
-						sv2v_cast_1 = inp;
+					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),
@@ -16368,7 +15061,7 @@
 					) 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_1(fpnew_pkg_get_conv_lane_formats(Width, FpFmtConfig, sv2v_cast_32($unsigned(lane)))))) : sv2v_cast_32(fpnew_pkg_max_fp_width(sv2v_cast_1(fpnew_pkg_get_lane_formats(Width, FpFmtConfig, sv2v_cast_32($unsigned(lane)))))))) * 2]),
+						.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),
@@ -16394,9 +15087,9 @@
 						input reg [31:0] inp;
 						sv2v_cast_32 = inp;
 					endfunction
-					function automatic [0:0] sv2v_cast_1;
-						input reg [0:0] inp;
-						sv2v_cast_1 = inp;
+					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),
@@ -16407,7 +15100,7 @@
 					) 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_1(fpnew_pkg_get_conv_lane_formats(Width, FpFmtConfig, sv2v_cast_32($unsigned(lane)))))) : sv2v_cast_32(fpnew_pkg_max_fp_width(sv2v_cast_1(fpnew_pkg_get_lane_formats(Width, FpFmtConfig, sv2v_cast_32($unsigned(lane))))))))]),
+						.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),
@@ -16432,8 +15125,8 @@
 				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 [0:0] sv2v_cast_18C91;
-					input reg [0:0] inp;
+				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]}});
@@ -16442,8 +15135,8 @@
 			else begin : inactive_lane
 				assign lane_out_valid[lane] = 1'b0;
 				assign lane_in_ready[lane] = 1'b0;
-				function automatic [0:0] sv2v_cast_18C91;
-					input reg [0:0] inp;
+				function automatic [3:0] sv2v_cast_18C91;
+					input reg [3:0] inp;
 					sv2v_cast_18C91 = inp;
 				endfunction
 				function automatic [31:0] sv2v_cast_32;
@@ -16456,8 +15149,8 @@
 			end
 			genvar fmt;
 			for (fmt = 0; fmt < NUM_FORMATS; fmt = fmt + 1) begin : pack_fp_result
-				function automatic [fpnew_pkg_FP_FORMAT_BITS - 1:0] sv2v_cast_38622;
-					input reg [fpnew_pkg_FP_FORMAT_BITS - 1:0] inp;
+				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));
@@ -16472,8 +15165,8 @@
 			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 [fpnew_pkg_INT_FORMAT_BITS - 1:0] sv2v_cast_E880F;
-						input reg [fpnew_pkg_INT_FORMAT_BITS - 1:0] inp;
+					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));
@@ -16491,8 +15184,8 @@
 	generate
 		genvar fmt;
 		for (fmt = 0; fmt < NUM_FORMATS; fmt = fmt + 1) begin : extend_fp_result
-			function automatic [fpnew_pkg_FP_FORMAT_BITS - 1:0] sv2v_cast_38622;
-				input reg [fpnew_pkg_FP_FORMAT_BITS - 1:0] inp;
+			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));
@@ -16539,7 +15232,7 @@
 	always @(*) begin : output_processing
 		reg [4:0] temp_status;
 		temp_status = {5 {1'sb0}};
-		begin : sv2v_autoblock_128
+		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];
@@ -16614,33 +15307,33 @@
 	out_ready_i,
 	busy_o
 );
-	localparam [31:0] fpnew_pkg_NUM_FP_FORMATS = 1;
-	localparam [31:0] fpnew_pkg_NUM_INT_FORMATS = 1;
-	function automatic [0:0] sv2v_cast_1;
-		input reg [0:0] inp;
-		sv2v_cast_1 = inp;
+	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 [35:0] fpnew_pkg_RV64D_Xsflt = {34'b0000000000000000000000000100000011, sv2v_cast_1(5'b11111), sv2v_cast_1(4'b1111)};
-	parameter [35:0] Features = fpnew_pkg_RV64D_Xsflt;
+	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 [31:0] sv2v_cast_33F2F;
-		input reg [31:0] inp;
+	function automatic [127:0] sv2v_cast_33F2F;
+		input reg [127:0] inp;
 		sv2v_cast_33F2F = inp;
 	endfunction
-	function automatic [127:0] sv2v_cast_128;
-		input reg [127:0] inp;
-		sv2v_cast_128 = inp;
+	function automatic [511:0] sv2v_cast_512;
+		input reg [511:0] inp;
+		sv2v_cast_512 = inp;
 	endfunction
-	function automatic [7:0] sv2v_cast_8;
-		input reg [7:0] inp;
-		sv2v_cast_8 = inp;
+	function automatic [31:0] sv2v_cast_32;
+		input reg [31:0] inp;
+		sv2v_cast_32 = inp;
 	endfunction
-	localparam [137:0] fpnew_pkg_DEFAULT_NOREGS = {sv2v_cast_128({fpnew_pkg_NUM_OPGROUPS {sv2v_cast_33F2F(0)}}), sv2v_cast_8({{fpnew_pkg_PARALLEL}, {fpnew_pkg_MERGED}, {fpnew_pkg_PARALLEL}, {fpnew_pkg_MERGED}}), fpnew_pkg_BEFORE};
-	parameter [137:0] Implementation = fpnew_pkg_DEFAULT_NOREGS;
-	localparam [31:0] WIDTH = Features[35-:32];
+	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;
@@ -16649,11 +15342,11 @@
 	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 = 0;
-	input wire [fpnew_pkg_FP_FORMAT_BITS - 1:0] src_fmt_i;
-	input wire [fpnew_pkg_FP_FORMAT_BITS - 1:0] dst_fmt_i;
-	localparam [31:0] fpnew_pkg_INT_FORMAT_BITS = 0;
-	input wire [fpnew_pkg_INT_FORMAT_BITS - 1:0] int_fmt_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;
@@ -16673,7 +15366,7 @@
 	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 [2:0] is_boxed;
+	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;
@@ -16704,29 +15397,29 @@
 		endcase
 	endfunction
 	assign in_ready_o = in_valid_i & opgrp_in_ready[fpnew_pkg_get_opgroup(op_i)];
-	localparam [63:0] fpnew_pkg_FP_ENCODINGS = 64'h0000000800000017;
+	localparam [255:0] fpnew_pkg_FP_ENCODINGS = 256'h00000008000000170000000b00000034000000050000000a0000000500000002;
 	function automatic [31:0] fpnew_pkg_fp_width;
-		input reg [fpnew_pkg_FP_FORMAT_BITS - 1:0] fmt;
-		fpnew_pkg_fp_width = (fpnew_pkg_FP_ENCODINGS[(fmt * 64) + 63-:32] + fpnew_pkg_FP_ENCODINGS[(fmt * 64) + 31-:32]) + 1;
+		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;
+		/*function automatic signed [31:0] sv2v_cast_32_signed;
 			input reg signed [31:0] inp;
 			sv2v_cast_32_signed = inp;
-		endfunction
+		endfunction*/
 		for (fmt = 0; fmt < sv2v_cast_32_signed(NUM_FORMATS); fmt = fmt + 1) begin : gen_nanbox_check
-			function automatic [fpnew_pkg_FP_FORMAT_BITS - 1:0] sv2v_cast_B5DD5;
-				input reg [fpnew_pkg_FP_FORMAT_BITS - 1:0] inp;
-				sv2v_cast_B5DD5 = inp;
-			endfunction
 			localparam [31:0] FP_WIDTH = fpnew_pkg_fp_width(sv2v_cast_B5DD5(fmt));
-			if (Features[2] && (FP_WIDTH < WIDTH)) begin : check
+			if (Features[8] && (FP_WIDTH < WIDTH)) begin : check
 				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(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
@@ -16762,20 +15455,21 @@
 				sv2v_cast_32 = inp;
 			endfunction
 			always @(*) begin : slice_inputs
-				begin : sv2v_autoblock_129
+				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[3]),
-				.FpFmtMask(Features[1-:1]),
-				.IntFmtMask(Features[0-:1]),
-				.FmtPipeRegs(Implementation[10 + (32 * (3 - opgrp))+:32]),
-				.FmtUnitTypes(Implementation[2 + (2 * (3 - opgrp))+:2]),
+				.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),
@@ -17428,6 +16122,7 @@
 		.devmode_i(1'b1)
 	);
 endmodule
+
 module iccm_controller (
 	clk_i,
 	rst_ni,
@@ -17467,8 +16162,8 @@
 	localparam [1:0] PROG = 2;
 	localparam [1:0] RESET = 0;
 	always @(*) begin
-		we_d = we_q;
-		addr_d = addr_q;
+		we_d    = we_q;
+		addr_d  = addr_q;
 		reset_d = reset_q;
 		ctrl_fsm_ns = ctrl_fsm_cs;
 		case (ctrl_fsm_cs)
@@ -17492,7 +16187,7 @@
 				ctrl_fsm_ns = DONE;
 			end
 			DONE:
-				if ((wdata_o == 32'h00000fff) || !rst_ni) begin
+				if (wdata_o == 32'h00000fff || (!rst_ni)) begin
 					ctrl_fsm_ns = DONE;
 					reset_d = 1'b1;
 				end
@@ -17500,6 +16195,7 @@
 					ctrl_fsm_ns = LOAD;
 				else
 					ctrl_fsm_ns = DONE;
+		//	default: ctrl_fsm_ns = RESET;
 		endcase
 	end
 	assign rx_byte_d = rx_byte_i;
@@ -17518,17 +16214,17 @@
 			reset_q <= 1'b1;
 			byte_count <= 2'b00;
 			ctrl_fsm_cs <= DONE;
-		end
+		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;
+            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;
@@ -17604,7 +16300,7 @@
 	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 = ~(prog_rst_ni ? tl_req : iccm_ctrl_we);
+	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);
@@ -17697,7 +16393,7 @@
 			wire [((2 ** NumLevels) * NumLevels) - 1:0] index_nodes;
 			reg [WIDTH - 1:0] in_tmp;
 			always @(*) begin : flip_vector
-				begin : sv2v_autoblock_130
+				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]);
@@ -18538,7 +17234,7 @@
 			assign arb_req = (|masked_req ? masked_req : req_i);
 			always @(*) begin
 				ppc_out[0] = arb_req[0];
-				begin : sv2v_autoblock_131
+				begin : sv2v_autoblock_133
 					reg signed [31:0] i;
 					for (i = 1; i < N; i = i + 1)
 						ppc_out[i] = ppc_out[i - 1] | arb_req[i];
@@ -18558,7 +17254,7 @@
 			if (EnDataPort == 1) begin : gen_datapath
 				always @(*) begin
 					data_o = {DW {1'sb0}};
-					begin : sv2v_autoblock_132
+					begin : sv2v_autoblock_134
 						reg signed [31:0] i;
 						for (i = 0; i < N; i = i + 1)
 							if (winner[i])
@@ -18573,7 +17269,7 @@
 			end
 			always @(*) begin
 				idx_o = {IdxW {1'sb0}};
-				begin : sv2v_autoblock_133
+				begin : sv2v_autoblock_135
 					reg [31:0] i;
 					for (i = 0; i < N; i = i + 1)
 						if (winner[i])
@@ -18598,6 +17294,13 @@
 		.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,
@@ -18635,7 +17338,7 @@
 			stored_value_q <= filter_i;
 	always @(posedge clk_i or negedge rst_ni)
 		if (!rst_ni)
-			diff_ctr_q <= {CTR_WIDTH {1'b0}};
+			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));
@@ -19529,303 +18232,7 @@
 		end
 	endgenerate
 endmodule
-module rstmgr (
-	clk_i,
-	rst_ni,
-	prog_rst_ni,
-	ndmreset,
-	sys_rst_ni
-);
-	input wire clk_i;
-	input wire rst_ni;
-	input wire prog_rst_ni;
-	input wire ndmreset;
-	output reg sys_rst_ni;
-	always @(*)
-		if (!rst_ni)
-			sys_rst_ni = 1'b0;
-		else if (!prog_rst_ni)
-			sys_rst_ni = 1'b0;
-		else if (ndmreset)
-			sys_rst_ni = 1'b0;
-		else
-			sys_rst_ni = prog_rst_ni;
-endmodule
-module rv_dm (
-	clk_i,
-	rst_ni,
-	testmode_i,
-	ndmreset_o,
-	dmactive_o,
-	debug_req_o,
-	unavailable_i,
-	tl_d_i,
-	tl_d_o,
-	tl_h_o,
-	tl_h_i,
-	jtag_req_i,
-	jtag_rsp_o
-);
-	parameter signed [31:0] NrHarts = 1;
-	parameter [31:0] IdcodeValue = 32'h00000001;
-	parameter [0:0] DirectDmiTap = 1'b1;
-	input wire clk_i;
-	input wire rst_ni;
-	input wire testmode_i;
-	output wire ndmreset_o;
-	output wire dmactive_o;
-	output wire [NrHarts - 1:0] debug_req_o;
-	input wire [NrHarts - 1:0] unavailable_i;
-	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 [85:0] tl_h_o;
-	input wire [51:0] tl_h_i;
-	input wire [3:0] jtag_req_i;
-	output wire [1:0] jtag_rsp_o;
-	localparam signed [31:0] BusWidth = 32;
-	localparam [NrHarts - 1:0] SelectableHarts = {NrHarts {1'b1}};
-	wire [(NrHarts * 32) - 1:0] hartinfo;
-	wire [NrHarts - 1:0] halted;
-	wire [NrHarts - 1:0] resumeack;
-	wire [NrHarts - 1:0] haltreq;
-	wire [NrHarts - 1:0] resumereq;
-	wire clear_resumeack;
-	wire cmd_valid;
-	wire [31:0] cmd;
-	wire cmderror_valid;
-	wire [2:0] cmderror;
-	wire cmdbusy;
-	localparam [4:0] dm_ProgBufSize = 5'h08;
-	wire [(dm_ProgBufSize * 32) - 1:0] progbuf;
-	localparam [3:0] dm_DataCount = 4'h2;
-	wire [(dm_DataCount * 32) - 1:0] data_csrs_mem;
-	wire [(dm_DataCount * 32) - 1:0] data_mem_csrs;
-	wire data_valid;
-	wire [19:0] hartsel;
-	wire [31:0] sbaddress_csrs_sba;
-	wire [31:0] sbaddress_sba_csrs;
-	wire sbaddress_write_valid;
-	wire sbreadonaddr;
-	wire sbautoincrement;
-	wire [2:0] sbaccess;
-	wire sbreadondata;
-	wire [31:0] sbdata_write;
-	wire sbdata_read_valid;
-	wire sbdata_write_valid;
-	wire [31:0] sbdata_read;
-	wire sbdata_valid;
-	wire sbbusy;
-	wire sberror_valid;
-	wire [2:0] sberror;
-	wire [40:0] dmi_req;
-	wire [33:0] dmi_rsp;
-	wire dmi_req_valid;
-	wire dmi_req_ready;
-	wire dmi_rsp_valid;
-	wire dmi_rsp_ready;
-	wire dmi_rst_n;
-	localparam [11:0] dm_DataAddr = 12'h380;
-	localparam [31:0] DebugHartInfo = {16'b0000000000100001, dm_DataCount, dm_DataAddr};
-	generate
-		genvar i;
-		for (i = 0; i < NrHarts; i = i + 1) begin : gen_dm_hart_ctrl
-			assign hartinfo[i * 32+:32] = DebugHartInfo;
-		end
-	endgenerate
-	dm_csrs #(
-		.NrHarts(NrHarts),
-		.BusWidth(BusWidth),
-		.SelectableHarts(SelectableHarts)
-	) i_dm_csrs(
-		.clk_i(clk_i),
-		.rst_ni(rst_ni),
-		.testmode_i(testmode_i),
-		.dmi_rst_ni(dmi_rst_n),
-		.dmi_req_valid_i(dmi_req_valid),
-		.dmi_req_ready_o(dmi_req_ready),
-		.dmi_req_i(dmi_req),
-		.dmi_resp_valid_o(dmi_rsp_valid),
-		.dmi_resp_ready_i(dmi_rsp_ready),
-		.dmi_resp_o(dmi_rsp),
-		.ndmreset_o(ndmreset_o),
-		.dmactive_o(dmactive_o),
-		.hartsel_o(hartsel),
-		.hartinfo_i(hartinfo),
-		.halted_i(halted),
-		.unavailable_i(unavailable_i),
-		.resumeack_i(resumeack),
-		.haltreq_o(haltreq),
-		.resumereq_o(resumereq),
-		.clear_resumeack_o(clear_resumeack),
-		.cmd_valid_o(cmd_valid),
-		.cmd_o(cmd),
-		.cmderror_valid_i(cmderror_valid),
-		.cmderror_i(cmderror),
-		.cmdbusy_i(cmdbusy),
-		.progbuf_o(progbuf),
-		.data_i(data_mem_csrs),
-		.data_valid_i(data_valid),
-		.data_o(data_csrs_mem),
-		.sbaddress_o(sbaddress_csrs_sba),
-		.sbaddress_i(sbaddress_sba_csrs),
-		.sbaddress_write_valid_o(sbaddress_write_valid),
-		.sbreadonaddr_o(sbreadonaddr),
-		.sbautoincrement_o(sbautoincrement),
-		.sbaccess_o(sbaccess),
-		.sbreadondata_o(sbreadondata),
-		.sbdata_o(sbdata_write),
-		.sbdata_read_valid_o(sbdata_read_valid),
-		.sbdata_write_valid_o(sbdata_write_valid),
-		.sbdata_i(sbdata_read),
-		.sbdata_valid_i(sbdata_valid),
-		.sbbusy_i(sbbusy),
-		.sberror_valid_i(sberror_valid),
-		.sberror_i(sberror)
-	);
-	wire host_req;
-	wire [31:0] host_add;
-	wire host_we;
-	wire [31:0] host_wdata;
-	wire [3:0] host_be;
-	wire host_gnt;
-	wire host_r_valid;
-	wire [31:0] host_r_rdata;
-	wire host_r_err;
-	dm_sba #(.BusWidth(BusWidth)) i_dm_sba(
-		.clk_i(clk_i),
-		.rst_ni(rst_ni),
-		.master_req_o(host_req),
-		.master_add_o(host_add),
-		.master_we_o(host_we),
-		.master_wdata_o(host_wdata),
-		.master_be_o(host_be),
-		.master_gnt_i(host_gnt),
-		.master_r_valid_i(host_r_valid),
-		.master_r_rdata_i(host_r_rdata),
-		.dmactive_i(dmactive_o),
-		.sbaddress_i(sbaddress_csrs_sba),
-		.sbaddress_o(sbaddress_sba_csrs),
-		.sbaddress_write_valid_i(sbaddress_write_valid),
-		.sbreadonaddr_i(sbreadonaddr),
-		.sbautoincrement_i(sbautoincrement),
-		.sbaccess_i(sbaccess),
-		.sbreadondata_i(sbreadondata),
-		.sbdata_i(sbdata_write),
-		.sbdata_read_valid_i(sbdata_read_valid),
-		.sbdata_write_valid_i(sbdata_write_valid),
-		.sbdata_o(sbdata_read),
-		.sbdata_valid_o(sbdata_valid),
-		.sbbusy_o(sbbusy),
-		.sberror_valid_o(sberror_valid),
-		.sberror_o(sberror)
-	);
-	tlul_host_adapter #(.MAX_REQS(1)) tl_adapter_host_sba(
-		.clk_i(clk_i),
-		.rst_ni(rst_ni),
-		.req_i(host_req),
-		.gnt_o(host_gnt),
-		.addr_i(host_add),
-		.we_i(host_we),
-		.wdata_i(host_wdata),
-		.be_i(host_be),
-		.valid_o(host_r_valid),
-		.rdata_o(host_r_rdata),
-		.err_o(host_r_err),
-		.tl_h_c_a(tl_h_o),
-		.tl_h_c_d(tl_h_i)
-	);
-	localparam [31:0] AddressWidthWords = 30;
-	wire req;
-	wire we;
-	wire [3:0] be;
-	wire [31:0] wdata;
-	wire [31:0] rdata;
-	reg rvalid;
-	wire [31:0] addr_b;
-	wire [29:0] addr_w;
-	assign be = {4 {1'b1}};
-	assign addr_b = {addr_w, {2 {1'b0}}};
-	dm_mem #(
-		.NrHarts(NrHarts),
-		.BusWidth(BusWidth),
-		.SelectableHarts(SelectableHarts),
-		.DmBaseAddress(1)
-	) i_dm_mem(
-		.clk_i(clk_i),
-		.rst_ni(rst_ni),
-		.debug_req_o(debug_req_o),
-		.hartsel_i(hartsel),
-		.haltreq_i(haltreq),
-		.resumereq_i(resumereq),
-		.clear_resumeack_i(clear_resumeack),
-		.halted_o(halted),
-		.resuming_o(resumeack),
-		.cmd_valid_i(cmd_valid),
-		.cmd_i(cmd),
-		.cmderror_valid_o(cmderror_valid),
-		.cmderror_o(cmderror),
-		.cmdbusy_o(cmdbusy),
-		.progbuf_i(progbuf),
-		.data_i(data_csrs_mem),
-		.data_o(data_mem_csrs),
-		.data_valid_o(data_valid),
-		.req_i(req),
-		.we_i(we),
-		.addr_i(addr_b),
-		.wdata_i(wdata),
-		.be_i(be),
-		.rdata_o(rdata)
-	);
-	dmi_jtag #(.IdcodeValue(IdcodeValue)) dap(
-		.clk_i(clk_i),
-		.rst_ni(rst_ni),
-		.testmode_i(testmode_i),
-		.dmi_rst_no(dmi_rst_n),
-		.dmi_req_o(dmi_req),
-		.dmi_req_valid_o(dmi_req_valid),
-		.dmi_req_ready_i(dmi_req_ready),
-		.dmi_resp_i(dmi_rsp),
-		.dmi_resp_ready_o(dmi_rsp_ready),
-		.dmi_resp_valid_i(dmi_rsp_valid),
-		.tck_i(jtag_req_i[3]),
-		.tms_i(jtag_req_i[2]),
-		.trst_ni(jtag_req_i[1]),
-		.td_i(jtag_req_i[0]),
-		.td_o(jtag_rsp_o[1]),
-		.tdo_oe_o(jtag_rsp_o[0])
-	);
-	tlul_sram_adapter #(
-		.SramAw(AddressWidthWords),
-		.SramDw(BusWidth),
-		.Outstanding(1),
-		.ByteAccess(0)
-	) tl_adapter_device_mem(
-		.clk_i(clk_i),
-		.rst_ni(rst_ni),
-		.req_o(req),
-		.gnt_i(1'b1),
-		.we_o(we),
-		.addr_o(addr_w),
-		.wdata_o(wdata),
-		.wmask_o(),
-		.rdata_i(rdata),
-		.rvalid_i(rvalid),
-		.rerror_i(2'b00),
-		.tl_o(tl_d_o),
-		.tl_i(tl_d_i)
-	);
-	always @(posedge clk_i or negedge rst_ni)
-		if (!rst_ni)
-			rvalid <= 1'b0;
-		else
-			rvalid <= req & ~we;
-endmodule
+
 module rv_plic_gateway (
 	clk_i,
 	rst_ni,
@@ -19851,7 +18258,7 @@
 			src_q <= {N_SOURCE {1'sb0}};
 		else
 			src_q <= src_i;
-	always @(*) begin : sv2v_autoblock_134
+	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]);
@@ -23126,7 +21533,7 @@
 	assign cc_id = irq_id_o;
 	always @(*) begin
 		claim = {36 {1'sb0}};
-		begin : sv2v_autoblock_135
+		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])
@@ -23135,7 +21542,7 @@
 	end
 	always @(*) begin
 		complete = {36 {1'sb0}};
-		begin : sv2v_autoblock_136
+		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])
@@ -23726,88 +22133,6 @@
 		.devmode_i(1'b1)
 	);
 endmodule
-/*
-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;
-	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;
-	reg csb0_reg;
-	reg web0_reg;
-	reg [NUM_WMASKS - 1:0] wmask0_reg;
-	reg [ADDR_WIDTH - 1:0] addr0_reg;
-	reg [DATA_WIDTH - 1:0] din0_reg;
-	reg [DATA_WIDTH - 1:0] mem [0:RAM_DEPTH - 1];
-	always @(posedge clk0) begin
-		csb0_reg = csb0;
-		web0_reg = web0;
-		wmask0_reg = wmask0;
-		addr0_reg = addr0;
-		din0_reg = din0;
-		#(T_HOLD) dout0 = 32'bxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx;
-		if ((!csb0_reg && web0_reg) && VERBOSE)
-			$display($time, " Reading %m addr0=%b dout0=%b", addr0_reg, mem[addr0_reg]);
-		if ((!csb0_reg && !web0_reg) && VERBOSE)
-			$display($time, " Writing %m addr0=%b din0=%b wmask0=%b", addr0_reg, din0_reg, wmask0_reg);
-	end
-	reg csb1_reg;
-	reg [ADDR_WIDTH - 1:0] addr1_reg;
-	always @(posedge clk1) begin
-		csb1_reg = csb1;
-		addr1_reg = addr1;
-		if (((!csb0 && !web0) && !csb1) && (addr0 == addr1))
-			$display($time, " WARNING: Writing and reading addr0=%b and addr1=%b simultaneously!", addr0, addr1);
-		#(T_HOLD) dout1 = 32'bxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx;
-		if (!csb1_reg && VERBOSE)
-			$display($time, " Reading %m addr1=%b dout1=%b", addr1_reg, mem[addr1_reg]);
-	end
-	always @(negedge clk0) begin : MEM_WRITE0
-		if (!csb0_reg && !web0_reg) begin
-			if (wmask0_reg[0])
-				mem[addr0_reg][7:0] = din0_reg[7:0];
-			if (wmask0_reg[1])
-				mem[addr0_reg][15:8] = din0_reg[15:8];
-			if (wmask0_reg[2])
-				mem[addr0_reg][23:16] = din0_reg[23:16];
-			if (wmask0_reg[3])
-				mem[addr0_reg][31:24] = din0_reg[31:24];
-		end
-	end
-	always @(negedge clk0) begin : MEM_READ0
-		if (!csb0_reg && web0_reg)
-			dout0 <= #(DELAY) mem[addr0_reg];
-	end
-	always @(negedge clk1) begin : MEM_READ1
-		if (!csb1_reg)
-			dout1 <= #(DELAY) mem[addr1_reg];
-	end
-endmodule*/
 module spi_clgen (
 	clk_i,
 	rst_ni,
@@ -24580,10 +22905,10 @@
 	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
+	 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}};
@@ -24605,6 +22930,10 @@
 					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
@@ -24734,7 +23063,7 @@
 	endfunction
 	always @(*) begin
 		hfifo_reqready = tl_u_i[N][0];
-		begin : sv2v_autoblock_137
+		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))
@@ -24746,7 +23075,7 @@
 	assign tl_t_i[0] = tl_t_o[85] & hfifo_reqready;
 	always @(*) begin
 		tl_t_p = tl_u_i[N];
-		begin : sv2v_autoblock_138
+		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))
@@ -25169,7 +23498,7 @@
 	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_139
+		if (tl_i[85]) begin : sv2v_autoblock_141
 			reg signed [31:0] i;
 			for (i = 0; i < 4; i = i + 1)
 				begin
@@ -25220,7 +23549,7 @@
 	wire [31:0] rdata_tlword;
 	always @(*) begin
 		rmask = {WidthMult * tlul_pkg_TL_DW {1'sb0}};
-		begin : sv2v_autoblock_140
+		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)]}};
@@ -25285,380 +23614,6 @@
 		.rdata_o(rspfifo_rdata)
 	);
 endmodule
-module tl_xbar_main (
-	clk_i,
-	rst_ni,
-	tl_brqif_i,
-	tl_brqif_o,
-	tl_brqlsu_i,
-	tl_brqlsu_o,
-	tl_dm_sba_i,
-	tl_dm_sba_o,
-	tl_iccm_o,
-	tl_iccm_i,
-	tl_debug_rom_o,
-	tl_debug_rom_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;
-	input wire [85:0] tl_dm_sba_i;
-	output wire [51:0] tl_dm_sba_o;
-	output wire [85:0] tl_iccm_o;
-	input wire [51:0] tl_iccm_i;
-	output wire [85:0] tl_debug_rom_o;
-	input wire [51:0] tl_debug_rom_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] brqifu_to_s1n;
-	wire [51:0] s1n_to_brqifu;
-	reg [1:0] device_sel_1;
-	wire [85:0] brqlsu_to_s1n;
-	wire [51:0] s1n_to_brqlsu;
-	reg [3:0] device_sel_2;
-	wire [85:0] dbg_to_s1n;
-	wire [51:0] s1n_to_dbg;
-	reg [3:0] device_sel_3;
-	wire [171:0] h1_dv_i;
-	wire [103:0] h1_dv_o;
-	wire [773:0] h2_dv_i;
-	wire [467:0] h2_dv_o;
-	wire [687:0] h3_dv_i;
-	wire [415:0] h3_dv_o;
-	wire [257:0] s1n_sm1_1;
-	wire [155:0] sm1_s1n_1;
-	wire [171:0] s1n_sm1_2;
-	wire [103:0] sm1_s1n_2;
-	wire [171:0] s1n_sm1_4;
-	wire [103:0] sm1_s1n_4;
-	wire [171:0] s1n_sm1_5;
-	wire [103:0] sm1_s1n_5;
-	wire [171:0] s1n_sm1_6;
-	wire [103:0] sm1_s1n_6;
-	wire [171:0] s1n_sm1_7;
-	wire [103:0] sm1_s1n_7;
-	wire [171:0] s1n_sm1_8;
-	wire [103:0] sm1_s1n_8;
-	wire [171:0] s1n_sm1_9;
-	wire [103:0] sm1_s1n_9;
-	wire [171:0] s1n_sm1_10;
-	wire [103:0] sm1_s1n_10;
-	assign h1_dv_o[52+:52] = sm1_s1n_1[104+:52];
-	assign h3_dv_o[312+:52] = sm1_s1n_1[52+:52];
-	assign h2_dv_o[0+:52] = sm1_s1n_1[0+:52];
-	assign s1n_sm1_1[172+:86] = h1_dv_i[86+:86];
-	assign s1n_sm1_1[86+:86] = h3_dv_i[516+:86];
-	assign s1n_sm1_1[0+:86] = h2_dv_i[0+:86];
-	assign h2_dv_o[416+:52] = sm1_s1n_2[52+:52];
-	assign h3_dv_o[364+:52] = sm1_s1n_2[0+:52];
-	assign s1n_sm1_2[86+:86] = h2_dv_i[688+:86];
-	assign s1n_sm1_2[0+:86] = h3_dv_i[602+:86];
-	assign h1_dv_o[0+:52] = sm1_s1n_4[52+:52];
-	assign h2_dv_o[364+:52] = sm1_s1n_4[0+:52];
-	assign s1n_sm1_4[86+:86] = h1_dv_i[0+:86];
-	assign s1n_sm1_4[0+:86] = h2_dv_i[602+:86];
-	assign h2_dv_o[312+:52] = sm1_s1n_5[52+:52];
-	assign h3_dv_o[260+:52] = sm1_s1n_5[0+:52];
-	assign s1n_sm1_5[86+:86] = h2_dv_i[516+:86];
-	assign s1n_sm1_5[0+:86] = h3_dv_i[430+:86];
-	assign h2_dv_o[260+:52] = sm1_s1n_6[52+:52];
-	assign h3_dv_o[208+:52] = sm1_s1n_6[0+:52];
-	assign s1n_sm1_6[86+:86] = h2_dv_i[430+:86];
-	assign s1n_sm1_6[0+:86] = h3_dv_i[344+:86];
-	assign h2_dv_o[208+:52] = sm1_s1n_7[52+:52];
-	assign h3_dv_o[156+:52] = sm1_s1n_7[0+:52];
-	assign s1n_sm1_7[86+:86] = h2_dv_i[344+:86];
-	assign s1n_sm1_7[0+:86] = h3_dv_i[258+:86];
-	assign h2_dv_o[156+:52] = sm1_s1n_8[52+:52];
-	assign h3_dv_o[104+:52] = sm1_s1n_8[0+:52];
-	assign s1n_sm1_8[86+:86] = h2_dv_i[258+:86];
-	assign s1n_sm1_8[0+:86] = h3_dv_i[172+:86];
-	assign h2_dv_o[104+:52] = sm1_s1n_9[52+:52];
-	assign h3_dv_o[52+:52] = sm1_s1n_9[0+:52];
-	assign s1n_sm1_9[86+:86] = h2_dv_i[172+:86];
-	assign s1n_sm1_9[0+:86] = h3_dv_i[86+:86];
-	assign h2_dv_o[52+:52] = sm1_s1n_10[52+:52];
-	assign h3_dv_o[0+:52] = sm1_s1n_10[0+:52];
-	assign s1n_sm1_10[86+:86] = h2_dv_i[86+:86];
-	assign s1n_sm1_10[0+:86] = h3_dv_i[0+:86];
-	assign brqifu_to_s1n = tl_brqif_i;
-	assign tl_brqif_o = s1n_to_brqifu;
-	assign brqlsu_to_s1n = tl_brqlsu_i;
-	assign tl_brqlsu_o = s1n_to_brqlsu;
-	assign dbg_to_s1n = tl_dm_sba_i;
-	assign tl_dm_sba_o = s1n_to_dbg;
-	localparam [31:0] tl_main_pkg_ADDR_MASK_DEBUG_ROM = 32'h0000ffff;
-	localparam [31:0] tl_main_pkg_ADDR_MASK_ICCM = 32'h0000ffff;
-	localparam [31:0] tl_main_pkg_ADDR_SPACE_DEBUG_ROM = 32'h10040000;
-	localparam [31:0] tl_main_pkg_ADDR_SPACE_ICCM = 32'h20000000;
-	always @(*) begin
-		device_sel_1 = 2'd2;
-		if ((brqifu_to_s1n[68-:32] & ~tl_main_pkg_ADDR_MASK_ICCM) == tl_main_pkg_ADDR_SPACE_ICCM)
-			device_sel_1 = 2'd0;
-		else if ((brqifu_to_s1n[68-:32] & ~tl_main_pkg_ADDR_MASK_DEBUG_ROM) == tl_main_pkg_ADDR_SPACE_DEBUG_ROM)
-			device_sel_1 = 2'd1;
-	end
-	tlul_socket_1n #(
-		.HReqDepth(4'h0),
-		.HRspDepth(4'h0),
-		.DReqDepth(12'h000),
-		.DRspDepth(12'h000),
-		.N(2)
-	) host_1(
-		.clk_i(clk_i),
-		.rst_ni(rst_ni),
-		.tl_h_i(brqifu_to_s1n),
-		.tl_h_o(s1n_to_brqifu),
-		.tl_d_o(h1_dv_i),
-		.tl_d_i(h1_dv_o),
-		.dev_select_i(device_sel_1)
-	);
-	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_2 = 4'd9;
-		if ((brqlsu_to_s1n[68-:32] & ~tl_main_pkg_ADDR_MASK_DCCM) == tl_main_pkg_ADDR_SPACE_DCCM)
-			device_sel_2 = 4'd0;
-		else if ((brqlsu_to_s1n[68-:32] & ~tl_main_pkg_ADDR_MASK_DEBUG_ROM) == tl_main_pkg_ADDR_SPACE_DEBUG_ROM)
-			device_sel_2 = 4'd1;
-		else if ((brqlsu_to_s1n[68-:32] & ~tl_main_pkg_ADDR_MASK_TIMER0) == tl_main_pkg_ADDR_SPACE_TIMER0)
-			device_sel_2 = 4'd2;
-		else if ((brqlsu_to_s1n[68-:32] & ~tl_main_pkg_ADDR_MASK_UART0) == tl_main_pkg_ADDR_SPACE_UART0)
-			device_sel_2 = 4'd3;
-		else if ((brqlsu_to_s1n[68-:32] & ~tl_main_pkg_ADDR_MASK_SPI0) == tl_main_pkg_ADDR_SPACE_SPI0)
-			device_sel_2 = 4'd4;
-		else if ((brqlsu_to_s1n[68-:32] & ~tl_main_pkg_ADDR_MASK_PWM) == tl_main_pkg_ADDR_SPACE_PWM)
-			device_sel_2 = 4'd5;
-		else if ((brqlsu_to_s1n[68-:32] & ~tl_main_pkg_ADDR_MASK_GPIO) == tl_main_pkg_ADDR_SPACE_GPIO)
-			device_sel_2 = 4'd6;
-		else if ((brqlsu_to_s1n[68-:32] & ~tl_main_pkg_ADDR_MASK_PLIC) == tl_main_pkg_ADDR_SPACE_PLIC)
-			device_sel_2 = 4'd7;
-		else if ((brqlsu_to_s1n[68-:32] & ~tl_main_pkg_ADDR_MASK_ICCM) == tl_main_pkg_ADDR_SPACE_ICCM)
-			device_sel_2 = 4'd8;
-	end
-	tlul_socket_1n #(
-		.HReqDepth(4'h0),
-		.HRspDepth(4'h0),
-		.DReqDepth(36'h000000000),
-		.DRspDepth(36'h000000000),
-		.N(9)
-	) host_2(
-		.clk_i(clk_i),
-		.rst_ni(rst_ni),
-		.tl_h_i(brqlsu_to_s1n),
-		.tl_h_o(s1n_to_brqlsu),
-		.tl_d_o(h2_dv_i),
-		.tl_d_i(h2_dv_o),
-		.dev_select_i(device_sel_2)
-	);
-	always @(*) begin
-		device_sel_3 = 4'd8;
-		if ((brqlsu_to_s1n[68-:32] & ~tl_main_pkg_ADDR_MASK_DCCM) == tl_main_pkg_ADDR_SPACE_DCCM)
-			device_sel_3 = 4'd0;
-		else if ((brqlsu_to_s1n[68-:32] & ~tl_main_pkg_ADDR_MASK_ICCM) == tl_main_pkg_ADDR_SPACE_ICCM)
-			device_sel_3 = 4'd1;
-		else if ((brqlsu_to_s1n[68-:32] & ~tl_main_pkg_ADDR_MASK_TIMER0) == tl_main_pkg_ADDR_SPACE_TIMER0)
-			device_sel_3 = 4'd2;
-		else if ((brqlsu_to_s1n[68-:32] & ~tl_main_pkg_ADDR_MASK_UART0) == tl_main_pkg_ADDR_SPACE_UART0)
-			device_sel_3 = 4'd3;
-		else if ((brqlsu_to_s1n[68-:32] & ~tl_main_pkg_ADDR_MASK_SPI0) == tl_main_pkg_ADDR_SPACE_SPI0)
-			device_sel_3 = 4'd4;
-		else if ((brqlsu_to_s1n[68-:32] & ~tl_main_pkg_ADDR_MASK_PWM) == tl_main_pkg_ADDR_SPACE_PWM)
-			device_sel_3 = 4'd5;
-		else if ((brqlsu_to_s1n[68-:32] & ~tl_main_pkg_ADDR_MASK_GPIO) == tl_main_pkg_ADDR_SPACE_GPIO)
-			device_sel_3 = 4'd6;
-		else if ((brqlsu_to_s1n[68-:32] & ~tl_main_pkg_ADDR_MASK_PLIC) == tl_main_pkg_ADDR_SPACE_PLIC)
-			device_sel_3 = 4'd7;
-	end
-	tlul_socket_1n #(
-		.HReqDepth(4'h0),
-		.HRspDepth(4'h0),
-		.DReqDepth(36'h000000000),
-		.DRspDepth(36'h000000000),
-		.N(8)
-	) host_3(
-		.clk_i(clk_i),
-		.rst_ni(rst_ni),
-		.tl_h_i(dbg_to_s1n),
-		.tl_h_o(s1n_to_dbg),
-		.tl_d_o(h3_dv_i),
-		.tl_d_i(h3_dv_o),
-		.dev_select_i(device_sel_3)
-	);
-	tlul_socket_m1 #(
-		.HReqDepth(8'h00),
-		.HRspDepth(8'h00),
-		.DReqDepth(4'h0),
-		.DRspDepth(4'h0),
-		.M(3)
-	) ICCM(
-		.clk_i(clk_i),
-		.rst_ni(rst_ni),
-		.tl_h_i(s1n_sm1_1),
-		.tl_h_o(sm1_s1n_1),
-		.tl_d_o(tl_iccm_o),
-		.tl_d_i(tl_iccm_i)
-	);
-	tlul_socket_m1 #(
-		.HReqDepth(8'h00),
-		.HRspDepth(8'h00),
-		.DReqDepth(4'h0),
-		.DRspDepth(4'h0),
-		.M(2)
-	) DCCM(
-		.clk_i(clk_i),
-		.rst_ni(rst_ni),
-		.tl_h_i(s1n_sm1_2),
-		.tl_h_o(sm1_s1n_2),
-		.tl_d_o(tl_dccm_o),
-		.tl_d_i(tl_dccm_i)
-	);
-	tlul_socket_m1 #(
-		.HReqDepth(8'h00),
-		.HRspDepth(8'h00),
-		.DReqDepth(4'h0),
-		.DRspDepth(4'h0),
-		.M(2)
-	) DEBUG_ROM(
-		.clk_i(clk_i),
-		.rst_ni(rst_ni),
-		.tl_h_i(s1n_sm1_4),
-		.tl_h_o(sm1_s1n_4),
-		.tl_d_o(tl_debug_rom_o),
-		.tl_d_i(tl_debug_rom_i)
-	);
-	tlul_socket_m1 #(
-		.HReqDepth(8'h00),
-		.HRspDepth(8'h00),
-		.DReqDepth(4'h0),
-		.DRspDepth(4'h0),
-		.M(2)
-	) TIMER(
-		.clk_i(clk_i),
-		.rst_ni(rst_ni),
-		.tl_h_i(s1n_sm1_5),
-		.tl_h_o(sm1_s1n_5),
-		.tl_d_o(tl_timer0_o),
-		.tl_d_i(tl_timer0_i)
-	);
-	tlul_socket_m1 #(
-		.HReqDepth(8'h00),
-		.HRspDepth(8'h00),
-		.DReqDepth(4'h0),
-		.DRspDepth(4'h0),
-		.M(2)
-	) UART(
-		.clk_i(clk_i),
-		.rst_ni(rst_ni),
-		.tl_h_i(s1n_sm1_6),
-		.tl_h_o(sm1_s1n_6),
-		.tl_d_o(tl_uart_o),
-		.tl_d_i(tl_uart_i)
-	);
-	tlul_socket_m1 #(
-		.HReqDepth(8'h00),
-		.HRspDepth(8'h00),
-		.DReqDepth(4'h0),
-		.DRspDepth(4'h0),
-		.M(2)
-	) SPI(
-		.clk_i(clk_i),
-		.rst_ni(rst_ni),
-		.tl_h_i(s1n_sm1_7),
-		.tl_h_o(sm1_s1n_7),
-		.tl_d_o(tl_spi_o),
-		.tl_d_i(tl_spi_i)
-	);
-	tlul_socket_m1 #(
-		.HReqDepth(8'h00),
-		.HRspDepth(8'h00),
-		.DReqDepth(4'h0),
-		.DRspDepth(4'h0),
-		.M(2)
-	) PWM(
-		.clk_i(clk_i),
-		.rst_ni(rst_ni),
-		.tl_h_i(s1n_sm1_8),
-		.tl_h_o(sm1_s1n_8),
-		.tl_d_o(tl_pwm_o),
-		.tl_d_i(tl_pwm_i)
-	);
-	tlul_socket_m1 #(
-		.HReqDepth(8'h00),
-		.HRspDepth(8'h00),
-		.DReqDepth(4'h0),
-		.DRspDepth(4'h0),
-		.M(2)
-	) GPIO(
-		.clk_i(clk_i),
-		.rst_ni(rst_ni),
-		.tl_h_i(s1n_sm1_9),
-		.tl_h_o(sm1_s1n_9),
-		.tl_d_o(tl_gpio_o),
-		.tl_d_i(tl_gpio_i)
-	);
-	tlul_socket_m1 #(
-		.HReqDepth(8'h00),
-		.HRspDepth(8'h00),
-		.DReqDepth(4'h0),
-		.DRspDepth(4'h0),
-		.M(2)
-	) PLIC(
-		.clk_i(clk_i),
-		.rst_ni(rst_ni),
-		.tl_h_i(s1n_sm1_10),
-		.tl_h_o(sm1_s1n_10),
-		.tl_d_o(tl_plic_o),
-		.tl_d_i(tl_plic_i)
-	);
-endmodule
 module uart_core (
 	clk_i,
 	rst_ni,
@@ -25727,109 +23682,161 @@
 	);
 	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 (
-	clk_i,
-	rst_ni,
-	i_Rx_Serial,
-	CLKS_PER_BIT,
-	o_Rx_DV,
-	o_Rx_Byte
-);
-	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;
-	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;
-			r_Rx_Byte <= 8'b00000000;
-		end
-		else
-			case (r_SM_Main)
-				s_IDLE: begin
-					r_Rx_DV <= 1'b0;
-					r_Clock_Count <= 16'b0000000000000000;
-					r_Bit_Index <= 3'b000;
-					r_Rx_Byte <= 8'b00000000;
-					if (r_Rx_Data == 1'b0)
-						r_SM_Main <= s_RX_START_BIT;
-					else
-						r_SM_Main <= s_IDLE;
-				end
-				s_RX_START_BIT:
-					if (r_Clock_Count == ((CLKS_PER_BIT - 1) >> 1)) begin
-						if (r_Rx_Data == 1'b0) begin
-							r_Clock_Count <= 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 - 1)) 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 - 1)) 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;
+   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,
@@ -26095,7 +24102,7 @@
 endmodule
 
 (* blackbox *)
-module sky130_sram_4kbyte_1rw1r_32x1024_8 (clk0, csb0,  web0,   wmask0, addr0, din0, dout0, clk1,       csb1,   addr1, dout1);
+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;
@@ -26118,4 +24125,4 @@
         input csb1;
         input [ADDR_WIDTH - 1:0] addr1;
         output [DATA_WIDTH - 1:0] dout1;
-endmodule
+endmodule
\ No newline at end of file
