new hierarchy
diff --git a/openlane/user_project_wrapper/macro.cfg b/openlane/user_project_wrapper/macro.cfg
index a7365ab..32645a7 100644
--- a/openlane/user_project_wrapper/macro.cfg
+++ b/openlane/user_project_wrapper/macro.cfg
@@ -1 +1,3 @@
-mprj 1175 1690 N
+interconnect 400 1200 N
+wb_wrapper0 400 600 N
+u_sram1_1kb 2000 800 N
\ No newline at end of file
diff --git a/verilog/rtl/sram/sram_wb_wrapper.sv b/verilog/rtl/sram/sram_wb_wrapper.sv
index e003b4a..4bdfba8 100644
--- a/verilog/rtl/sram/sram_wb_wrapper.sv
+++ b/verilog/rtl/sram/sram_wb_wrapper.sv
@@ -17,14 +17,18 @@
// @revision :
// 0.1 - 10 March 2022, Sukru Uzun
// initial version
+// 0.2 - 16 March 2022, Sukru Uzun
+// remove SRAM design
//-----------------------------------------------------------------------------
module sram_wb_wrapper #(
- parameter SRAM_ADDR_WD = 9,
- parameter SRAM_DATA_WD = 32,
- parameter SRAM_ADDR_START = 9'h000,
- parameter SRAM_ADDR_END = 9'h1F8)
+ parameter SRAM_ADDR_WD = 8,
+ parameter SRAM_DATA_WD = 32)
(
+`ifdef USE_POWER_PINS
+ input logic vccd1, // User area 1 1.8V supply
+ input logic vssd1, // User area 1 digital ground
+`endif
input logic rst_n,
// Wishbone Interface
input logic wb_clk_i, // System clock
@@ -34,26 +38,37 @@
input logic wb_we_i, // write
input logic [SRAM_DATA_WD-1:0] wb_dat_i, // data output
input logic [SRAM_DATA_WD/8-1:0] wb_sel_i, // byte enable
- output wire [SRAM_DATA_WD-1:0] wb_dat_o, // data input
- output logic wb_ack_o // acknowlegement
+ // output wire [SRAM_DATA_WD-1:0] wb_dat_o, // data input
+ output logic wb_ack_o, // acknowlegement
+ // SRAM Interface
+ // Port A
+ output wire sram_csb_a,
+ output wire [SRAM_ADDR_WD-1:0] sram_addr_a,
+
+ // Port B
+ output wire sram_csb_b,
+ output wire sram_web_b,
+ output wire [SRAM_DATA_WD/8-1:0] sram_mask_b,
+ output wire [SRAM_ADDR_WD-1:0] sram_addr_b,
+ output wire [SRAM_DATA_WD-1:0] sram_din_b
);
-// Port A
-wire sram_clk_a;
-wire sram_csb_a;
-wire [SRAM_ADDR_WD-1:0] sram_addr_a;
-wire [SRAM_DATA_WD-1:0] sram_dout_a;
+// // Port A
+// wire sram_clk_a;
+// wire sram_csb_a;
+// wire [SRAM_ADDR_WD-1:0] sram_addr_a;
+// wire [SRAM_DATA_WD-1:0] sram_dout_a;
-// Port B
-wire sram_clk_b;
-wire sram_csb_b;
-wire sram_web_b;
-wire [SRAM_DATA_WD/8-1:0] sram_mask_b;
-wire [SRAM_ADDR_WD-1:0] sram_addr_b;
-wire [SRAM_DATA_WD-1:0] sram_din_b;
+// // Port B
+// wire sram_clk_b;
+// wire sram_csb_b;
+// wire sram_web_b;
+// wire [SRAM_DATA_WD/8-1:0] sram_mask_b;
+// wire [SRAM_ADDR_WD-1:0] sram_addr_b;
+// wire [SRAM_DATA_WD-1:0] sram_din_b;
// Memory Write Port
-assign sram_clk_b = wb_clk_i;
+// assign sram_clk_b = wb_clk_i;
assign sram_csb_b = !wb_stb_i;
assign sram_web_b = !wb_we_i;
assign sram_mask_b = wb_sel_i;
@@ -61,31 +76,31 @@
assign sram_din_b = wb_dat_i;
// Memory Read Port
-assign sram_clk_a = wb_clk_i;
+// assign sram_clk_a = wb_clk_i;
assign sram_csb_a = (wb_stb_i == 1'b1 && wb_we_i == 1'b0 && wb_cyc_i == 1'b1) ? 1'b0 : 1'b1;
assign sram_addr_a = wb_adr_i;
-assign wb_dat_o = sram_dout_a;
+// assign wb_dat_o = sram_dout_a;
-sky130_sram_2kbyte_1rw1r_32x512_8 u_sram1_2kb(
-`ifdef USE_POWER_PINS
- .vccd1 (vccd1), // User area 1 1.8V supply
- .vssd1 (vssd1), // User area 1 digital ground
-`endif
- // Port 0: RW
- .clk0 (sram_clk_b),
- .csb0 (sram_csb_b),
- .web0 (sram_web_b),
- .wmask0 (sram_mask_b),
- .addr0 (sram_addr_b),
- .din0 (sram_din_b),
- .dout0 (), // dont read from Port B
- // Port 1: R
- .clk1 (sram_clk_a),
- .csb1 (sram_csb_a),
- .addr1 (sram_addr_a),
- .dout1 (sram_dout_a)
-);
+// sky130_sram_1kbyte_1rw1r_32x256_8 u_sram1_1kb(
+// `ifdef USE_POWER_PINS
+// .vccd1 (vccd1), // User area 1 1.8V supply
+// .vssd1 (vssd1), // User area 1 digital ground
+// `endif
+// // Port 0: RW
+// .clk0 (sram_clk_b),
+// .csb0 (sram_csb_b),
+// .web0 (sram_web_b),
+// .wmask0 (sram_mask_b),
+// .addr0 (sram_addr_b),
+// .din0 (sram_din_b),
+// .dout0 (), // dont read from Port B
+// // Port 1: R
+// .clk1 (sram_clk_a),
+// .csb1 (sram_csb_a),
+// .addr1 (sram_addr_a),
+// .dout1 (sram_dout_a)
+// );
// Generate once cycle delayed ACK to get the data from SRAM
always @(negedge rst_n or posedge wb_clk_i)
diff --git a/verilog/rtl/user_project_wrapper.v b/verilog/rtl/user_project_wrapper.v
index 5ee1cee..e19ac9b 100644
--- a/verilog/rtl/user_project_wrapper.v
+++ b/verilog/rtl/user_project_wrapper.v
@@ -82,40 +82,157 @@
/* User project is instantiated here */
/*--------------------------------------*/
-user_proj_example mprj (
+parameter WB_WIDTH = 32; // WB ADDRESS/DATA WIDTH
+parameter SRAM_ADDR_WD = 8;
+parameter SRAM_DATA_WD = 32;
+
+//---------------------------------------------------------------------
+// WB Master Interface
+//---------------------------------------------------------------------
+wire rst_n = not(wb_rst_i);
+wire [`MPRJ_IO_PADS-1:0] io_in;
+wire [`MPRJ_IO_PADS-1:0] io_out;
+wire [`MPRJ_IO_PADS-1:0] io_oeb;
+
+//---------------------------------------------------------------------
+// SRAM
+//---------------------------------------------------------------------
+wire s0_wb_cyc_i;
+wire s0_wb_stb_i;
+wire [SRAM_ADDR_WD-1:0] s0_wb_adr_i;
+wire s0_wb_we_i;
+wire [SRAM_DATA_WD-1:0] s0_wb_dat_i;
+wire [SRAM_DATA_WD/8-1:0] s0_wb_sel_i;
+wire [SRAM_DATA_WD-1:0] s0_wb_dat_o;
+wire s0_wb_ack_o;
+
+// Port A
+wire sram_clk_a;
+wire sram_csb_a;
+wire [SRAM_ADDR_WD-1:0] sram_addr_a;
+wire [SRAM_DATA_WD-1:0] sram_dout_a;
+
+// Port B
+wire sram_clk_b;
+wire sram_csb_b;
+wire sram_web_b;
+wire [SRAM_DATA_WD/8-1:0] sram_mask_b;
+wire [SRAM_ADDR_WD-1:0] sram_addr_b;
+wire [SRAM_DATA_WD-1:0] sram_din_b;
+
+wb_interconnect interconnect
+(
`ifdef USE_POWER_PINS
- .vccd1(vccd1), // User area 1 1.8V power
- .vssd1(vssd1), // User area 1 digital ground
+ .vccd1(vccd1), // User area 1 1.8V supply
+ .vssd1(vssd1), // User area 1 digital ground
`endif
+ .clk_i(wb_clk_i),
+ .rst_n(rst_n),
- .wb_clk_i(wb_clk_i),
- .wb_rst_i(wb_rst_i),
+ // Master 0 Interface
+ .m0_wb_dat_i(wbs_dat_i),
+ .m0_wb_adr_i(wbs_adr_i),
+ .m0_wb_sel_i(wbs_sel_i),
+ .m0_wb_we_i (wbs_we_i),
+ .m0_wb_cyc_i(wbs_cyc_i),
+ .m0_wb_stb_i(wbs_stb_i),
+ .m0_wb_dat_o(wbs_dat_o),
+ .m0_wb_ack_o(wbs_ack_o),
- // MGMT SoC Wishbone Slave
+ // Slave 0 Interface
+ .s0_wb_dat_i(sram_dout_a),
+ .s0_wb_ack_i(s0_wb_ack_o),
+ .s0_wb_dat_o(s0_wb_dat_i),
+ .s0_wb_adr_o(s0_wb_adr_i),
+ .s0_wb_sel_o(s0_wb_sel_i),
+ .s0_wb_we_o (s0_wb_we_i),
+ .s0_wb_cyc_o(s0_wb_cyc_i),
+ .s0_wb_stb_o(s0_wb_stb_i)
- .wbs_cyc_i(wbs_cyc_i),
- .wbs_stb_i(wbs_stb_i),
- .wbs_we_i(wbs_we_i),
- .wbs_sel_i(wbs_sel_i),
- .wbs_adr_i(wbs_adr_i),
- .wbs_dat_i(wbs_dat_i),
- .wbs_ack_o(wbs_ack_o),
- .wbs_dat_o(wbs_dat_o),
+ // Slave 1 Interface
+ // .s1_wb_dat_i(),
+ // .s1_wb_ack_i(),
+ // .s1_wb_dat_o(),
+ // .s1_wb_adr_o(),
+ // .s1_wb_sel_o(),
+ // .s1_wb_we_o (),
+ // .s1_wb_cyc_o(),
+ // .s1_wb_stb_o(),
- // Logic Analyzer
+ // Slave 2 Interface
+ // .s2_wb_dat_i(),
+ // .s2_wb_ack_i(),
+ // .s2_wb_dat_o(),
+ // .s2_wb_adr_o(),
+ // .s2_wb_sel_o(),
+ // .s2_wb_we_o (),
+ // .s2_wb_cyc_o(),
+ // .s2_wb_stb_o(),
- .la_data_in(la_data_in),
- .la_data_out(la_data_out),
- .la_oenb (la_oenb),
+ // Slave 3 Interface
+ // .s3_wb_dat_i(),
+ // .s3_wb_ack_i(),
+ // .s3_wb_dat_o(),
+ // .s3_wb_adr_o(),
+ // .s3_wb_sel_o(),
+ // .s3_wb_we_o (),
+ // .s3_wb_cyc_o(),
+ // .s3_wb_stb_o()
+);
- // IO Pads
+sram_wb_wrapper #(
+`ifndef SYNTHESIS
+ .SRAM_ADDR_WD (SRAM_ADDR_WD),
+ .SRAM_DATA_WD (SRAM_DATA_WD)
+`endif
+ )
+ wb_wrapper0 (
+`ifdef USE_POWER_PINS
+ .vccd1 (vccd1), // User area 1 1.8V supply
+ .vssd1 (vssd1), // User area 1 digital ground
+`endif
+ .rst_n(rst_n),
+ // Wishbone Interface
+ .wb_clk_i(wb_clk_i), // System clock
+ .wb_cyc_i(s0_wb_cyc_i), // cycle enable
+ .wb_stb_i(s0_wb_stb_i), // strobe
+ .wb_adr_i(s0_wb_adr_i), // address
+ .wb_we_i (s0_wb_we_i), // write
+ .wb_dat_i(s0_wb_dat_i), // data output
+ .wb_sel_i(s0_wb_sel_i), // byte enable
+ // .wb_dat_o(s0_wb_dat_o), // data input
+ .wb_ack_o(s0_wb_ack_o), // acknowlegement
+ // SRAM Interface
+ // Port A
+ .sram_csb_a(sram_csb_a),
+ .sram_addr_a(sram_addr_a),
- .io_in (io_in),
- .io_out(io_out),
- .io_oeb(io_oeb),
+ // Port B
+ .sram_csb_b(sram_csb_b),
+ .sram_web_b(sram_web_b),
+ .sram_mask_b(sram_mask_b),
+ .sram_addr_b(sram_addr_b),
+ .sram_din_b(sram_din_b)
+);
- // IRQ
- .irq(user_irq)
+sky130_sram_1kbyte_1rw1r_32x256_8 u_sram1_1kb(
+`ifdef USE_POWER_PINS
+ .vccd1 (vccd1), // User area 1 1.8V supply
+ .vssd1 (vssd1), // User area 1 digital ground
+`endif
+ // Port 0: RW
+ .clk0 (wb_clk_i),
+ .csb0 (sram_csb_b),
+ .web0 (sram_web_b),
+ .wmask0 (sram_mask_b),
+ .addr0 (sram_addr_b),
+ .din0 (sram_din_b),
+ .dout0 (), // dont read from Port B
+ // Port 1: R
+ .clk1 (wb_clk_i),
+ .csb1 (sram_csb_a),
+ .addr1 (sram_addr_a),
+ .dout1 (sram_dout_a)
);
endmodule // user_project_wrapper
diff --git a/verilog/rtl/wb_interconnect/wb_interconnect.sv b/verilog/rtl/wb_interconnect/wb_interconnect.sv
index 05912ce..598322d 100644
--- a/verilog/rtl/wb_interconnect/wb_interconnect.sv
+++ b/verilog/rtl/wb_interconnect/wb_interconnect.sv
@@ -46,7 +46,7 @@
input logic [31:0] s0_wb_dat_i,
input logic s0_wb_ack_i,
output wire [31:0] s0_wb_dat_o,
- output wire [8:0] s0_wb_adr_o,
+ output wire [7:0] s0_wb_adr_o,
output wire [3:0] s0_wb_sel_o,
output wire s0_wb_we_o,
output wire s0_wb_cyc_o,
@@ -121,7 +121,7 @@
// Slave Mapping
//---------------------------------------
assign s0_wb_dat_o = m0_wb_dat_i_reg;
-assign s0_wb_adr_o = m0_wb_adr_reg[8:0];
+assign s0_wb_adr_o = m0_wb_adr_reg[7:0];
assign s0_wb_sel_o = m0_wb_sel_reg;
assign s0_wb_we_o = m0_wb_we_reg;
assign s0_wb_cyc_o = m0_wb_cyc_reg;