diff --git a/verilog/rtl/ghazi/ghazi_top_openram_csv.v b/verilog/rtl/ghazi/ghazi_top_openram_csv.v
new file mode 100644
index 0000000..85bcf18
--- /dev/null
+++ b/verilog/rtl/ghazi/ghazi_top_openram_csv.v
@@ -0,0 +1,207 @@
+// Licensed under the Apache License, Version 2.0, see LICENSE for details.
+// SPDX-License-Identifier: Apache-2.0
+
+module ghazi_top_dffram_csv (
+`ifdef USE_POWER_PINS
+    inout VPWR,	// User area 1 1.8V supply
+    inout VGND,	// User area 1 digital ground
+`endif
+
+    // Wishbone Slave ports (WB MI A)
+    input wb_clk_i,
+    input wb_rst_i,
+
+    // Logic Analyzer Signals
+    input  [127:0] la_data_in,
+    output [127:0] la_data_out,
+    input  [127:0] la_oen,
+
+    // IOs
+    input  [`MPRJ_IO_PADS-1:0] io_in,
+    output [`MPRJ_IO_PADS-1:0] io_out,
+    output [`MPRJ_IO_PADS-1:0] io_oeb
+);
+
+	wire RESET_n;
+	wire rst_ni;
+	wire rst_lc_ni;
+	wire ndmreset_req_o;
+	wire jtag_tck_i;
+	wire jtag_tms_i;
+	wire jtag_trst_ni;
+	wire jtag_tdi_i;
+	wire jtag_tdo_o;
+	wire cio_uart_rx_p2d;
+	wire cio_uart_tx_d2p;
+	wire cio_uart_tx_en_d2p;
+	wire [31:0] cio_gpio_gpio_p2d;
+	wire [31:0] cio_gpio_gpio_d2p;
+	wire [31:0] cio_gpio_gpio_en_d2p;
+	wire cio_spi_device_sck_p2d;
+	wire cio_spi_device_csb_p2d;
+	wire cio_spi_device_sdi_p2d;
+	wire cio_spi_device_sdo_d2p;
+	wire cio_spi_device_sdo_en_d2p;
+	wire [15:0] CLKS_PER_BIT;
+	assign CLKS_PER_BIT = la_data_in[47:32];
+	assign rst_lc_ni = la_data_in[64];
+	assign la_data_out[31:0] = cio_gpio_gpio_en_d2p;
+	assign la_data_out[32] = cio_uart_tx_en_d2p;
+	assign la_data_out[33] = ndmreset_req_o;
+	assign RESET_n = (~la_oen[0]) ? (~la_data_in[0]) : ~wb_rst_i;
+	// assign RESET_n = ~wb_rst_i;
+	assign jtag_tck_i = io_in[0];
+	assign jtag_tms_i = io_in[1];
+	assign jtag_trst_ni = io_in[2];
+	assign jtag_tdi_i = io_in[3];
+	assign io_out[4] = jtag_tdo_o;
+	assign cio_uart_rx_p2d = io_in[5];
+	assign cio_spi_device_sdi_p2d = io_in[18];
+	assign cio_spi_device_csb_p2d = io_in[19];
+	assign cio_spi_device_sck_p2d = io_in[20];
+	assign cio_gpio_gpio_p2d = io_in[36:5];
+	assign io_out[5] = cio_gpio_gpio_d2p[0];
+	assign io_out[6] = (cio_uart_tx_en_d2p ? cio_uart_tx_d2p : cio_gpio_gpio_d2p[1]);
+	assign io_out[16:7] = cio_gpio_gpio_d2p[11:2];
+	assign io_out[17] = (cio_spi_device_sdo_en_d2p ? cio_spi_device_sdo_d2p : cio_gpio_gpio_d2p[12]);
+	assign io_out[28:18] = cio_gpio_gpio_d2p[23:13];
+	assign io_out[36:29] = cio_gpio_gpio_d2p[31:24];
+	assign io_oeb[36:0] = {~cio_gpio_gpio_en_d2p[31:2], ~cio_gpio_gpio_en_d2p[1] | ~cio_uart_tx_en_d2p, ~cio_gpio_gpio_en_d2p[0], 1'b0, 4'b1111};
+	wire ram_main_instr_req;
+	wire ram_main_instr_we;
+	wire [13:0] ram_main_instr_addr;
+	wire [31:0] ram_main_instr_wdata;
+	wire [31:0] ram_main_instr_wmask;
+	wire [31:0] ram_main_instr_rdata;
+	reg ram_main_instr_rvalid;
+	wire [1:0] ram_main_instr_rerror;
+	wire ram_main_data_req;
+	wire ram_main_data_we;
+	wire [13:0] ram_main_data_addr;
+	wire [31:0] ram_main_data_wdata;
+	wire [31:0] ram_main_data_wmask;
+	wire [31:0] ram_main_data_rdata;
+	reg ram_main_data_rvalid;
+	wire [1:0] ram_main_data_rerror;
+	ghazi_top ghazi_top(
+		.clk_i(wb_clk_i),
+		.rst_lc_ni(rst_lc_ni),
+		.rst_ni(rst_ni),
+		.ram_main_instr_req(ram_main_instr_req),
+		.ram_main_instr_we(ram_main_instr_we),
+		.ram_main_instr_addr(ram_main_instr_addr),
+		.ram_main_instr_wdata(ram_main_instr_wdata),
+		.ram_main_instr_wmask(ram_main_instr_wmask),
+		.ram_main_instr_rdata(ram_main_instr_rdata),
+		.ram_main_instr_rvalid(ram_main_instr_rvalid),
+		.ram_main_instr_rerror(2'b00),
+		.ram_main_data_req(ram_main_data_req),
+		.ram_main_data_we(ram_main_data_we),
+		.ram_main_data_addr(ram_main_data_addr),
+		.ram_main_data_wdata(ram_main_data_wdata),
+		.ram_main_data_wmask(ram_main_data_wmask),
+		.ram_main_data_rdata(ram_main_data_rdata),
+		.ram_main_data_rvalid(ram_main_data_rvalid),
+		.ram_main_data_rerror(2'b00),
+		.jtag_tck_i(jtag_tck_i),
+		.jtag_tms_i(jtag_tms_i),
+		.jtag_trst_ni(jtag_trst_ni),
+		.jtag_tdi_i(jtag_tdi_i),
+		.jtag_tdo_o(jtag_tdo_o),
+		.cio_gpio_gpio_p2d(cio_gpio_gpio_p2d),
+		.cio_gpio_gpio_d2p(cio_gpio_gpio_d2p),
+		.cio_gpio_gpio_en_d2p(cio_gpio_gpio_en_d2p),
+		.cio_uart_rx_p2d(cio_uart_rx_p2d),
+		.cio_uart_tx_d2p(cio_uart_tx_d2p),
+		.cio_uart_tx_en_d2p(cio_uart_tx_en_d2p),
+		.cio_spi_device_sck_p2d(cio_spi_device_sck_p2d),
+		.cio_spi_device_csb_p2d(cio_spi_device_csb_p2d),
+		.cio_spi_device_sdi_p2d(cio_spi_device_sdi_p2d),
+		.cio_spi_device_sdo_d2p(cio_spi_device_sdo_d2p),
+		.cio_spi_device_sdo_en_d2p(cio_spi_device_sdo_en_d2p),
+		.ndmreset_req_o(ndmreset_req_o)
+	);
+	wire [3:0] instr_WE;
+	wire instr_EN;
+	wire ram_prog_instr_we;
+	wire [31:0] instr_Di;
+	wire [31:0] ram_prog_instr_wdata;
+	wire [13:0] instr_A;
+	wire [13:0] ram_prog_instr_addr;
+	assign instr_A = (rst_ni ? ram_main_instr_addr : ram_prog_instr_addr);
+	assign instr_Di = (rst_ni ? ram_main_instr_wdata : ram_prog_instr_wdata);
+	assign instr_WE = {4 {ram_prog_instr_we}} | {ram_main_instr_wmask[31:24] != 8'b00000000, ram_main_instr_wmask[23:16] != 8'b00000000, ram_main_instr_wmask[15:8] != 8'b00000000, ram_main_instr_wmask[7:0] != 8'b00000000};
+	assign instr_EN = ram_main_instr_req | ram_prog_instr_we;
+	always @(posedge wb_clk_i)
+		if (!rst_ni)
+			ram_main_instr_rvalid <= 1'b0;
+		else if (ram_main_instr_we || ram_prog_instr_we)
+			ram_main_instr_rvalid <= 1'b0;
+		else
+			ram_main_instr_rvalid <= ram_main_instr_req;
+    sram_1rw1r_32_256_8_sky130 SRAMI (
+    `ifdef USE_POWER_PINS
+        .vdd(VPWR),
+        .gnd(VGND),
+    `endif
+        .clk0   (wb_clk_i), // clock - input
+        .csb0   (~instr_EN), // active low chip select - input
+        .web0   (~(ram_main_instr_we | ram_prog_instr_we)), // active low write control - input
+        .wmask0 (instr_WE), // write mask - input [3:0]
+        .addr0  (instr_A[7:0]), // input [7:0]
+        .din0   (instr_Di), // input [31:0]
+        .dout0  (ram_main_instr_rdata), // output [31:0]
+        .clk1   (1'b0), // clock - input
+        .csb1   (1'b1), // active low chip select - input
+        .addr1  (8'b0), // input [7:0]
+        .dout1  (    )  // output [31:0]
+    );
+	wire [3:0] data_WE;
+	assign data_WE = {ram_main_data_wmask[31:24] != 8'b00000000, ram_main_data_wmask[23:16] != 8'b00000000, ram_main_data_wmask[15:8] != 8'b00000000, ram_main_data_wmask[7:0] != 8'b00000000};
+	always @(posedge wb_clk_i)
+		if (!rst_ni)
+			ram_main_data_rvalid <= 1'b0;
+		else if (ram_main_data_we)
+			ram_main_data_rvalid <= 1'b0;
+		else
+			ram_main_data_rvalid <= ram_main_data_req;
+    
+
+    sram_1rw1r_32_256_8_sky130 SRAMD (
+    `ifdef USE_POWER_PINS
+        .vdd(VPWR),
+        .gnd(VGND),
+    `endif
+        .clk0   (wb_clk_i), // clock - input
+        .csb0   (~ram_main_data_req),   // active low chip select - input
+        .web0   (~ram_main_data_we), // active low write control - input
+        .wmask0 (data_WE), // write mask - input [3:0]
+        .addr0  (ram_main_data_addr[7:0]), // input [7:0]
+        .din0   (ram_main_data_wdata), // input [31:0]
+        .dout0  (ram_main_data_rdata), // output [31:0]
+        .clk1   (1'b0), // clock - input
+        .csb1   (1'b1), // active low chip select - input
+        .addr1  (8'b0), // input [7:0]
+        .dout1  (    )  // output [31:0]
+    );
+	wire rx_dv_i;
+	wire [7:0] rx_byte_i;
+	iccm_controller u_dut(
+		.clk_i(wb_clk_i),
+		.rst_ni(RESET_n),
+		.rx_dv_i(rx_dv_i),
+		.rx_byte_i(rx_byte_i),
+		.we_o(ram_prog_instr_we),
+		.addr_o(ram_prog_instr_addr),
+		.wdata_o(ram_prog_instr_wdata),
+		.reset_o(rst_ni)
+	);
+	uart_rx_prog u_uart_rx(
+		.i_Clock(wb_clk_i),
+		.rst_ni(RESET_n),
+		.i_Rx_Serial(cio_uart_rx_p2d),
+		.CLKS_PER_BIT(CLKS_PER_BIT),
+		.o_Rx_DV(rx_dv_i),
+		.o_Rx_Byte(rx_byte_i)
+	);
+endmodule
