Added openram version of RTL.
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