Merge branch 'main' of https://github.com/AmoghLonkar/openram_testchip into main
diff --git a/openlane/user_project_wrapper/config.tcl b/openlane/user_project_wrapper/config.tcl
index 4e78d51..4e2a110 100755
--- a/openlane/user_project_wrapper/config.tcl
+++ b/openlane/user_project_wrapper/config.tcl
@@ -93,13 +93,16 @@
#set ::env(PL_RANDOM_GLB_PLACEMENT) 1
set ::env(GLB_RT_ADJUSTMENT) 0.25
-set ::env(PL_TARGET_DENSITY) 0.3
+set ::env(PL_TARGET_DENSITY) 0.25
#set ::env(MAGIC_DRC_USE_GDS) 0
set ::env(RUN_KLAYOUT_DRC) 0
set ::env(RUN_KLAYOUT_XOR) 0
+# Spray diodes
+
+set ::env(DIODE_INSERTION_STRATEGY) 1
# The following is because there are no std cells in the example wrapper project.
#set ::env(SYNTH_TOP_LEVEL) 1
#set ::env(PL_RANDOM_GLB_PLACEMENT) 1
diff --git a/verilog/rtl/openram_testchip.v b/verilog/rtl/openram_testchip.v
index 809d0b7..e46077e 100644
--- a/verilog/rtl/openram_testchip.v
+++ b/verilog/rtl/openram_testchip.v
@@ -56,26 +56,18 @@
input [`DATA_SIZE-1:0] sram15_data1,
// Shared control/data to the SRAMs
- output reg [`ADDR_SIZE-1:0] left_addr0,
- output reg [`DATA_SIZE-1:0] left_din0,
- output reg left_web0,
- output reg [`WMASK_SIZE-1:0] left_wmask0,
- output reg [`ADDR_SIZE-1:0] left_addr1,
- output reg [`DATA_SIZE-1:0] left_din1,
- output reg left_web1,
- output reg [`WMASK_SIZE-1:0] left_wmask1,
+ output reg [`ADDR_SIZE-1:0] addr0,
+ output reg [`DATA_SIZE-1:0] din0,
+ output reg web0,
+ output reg [`WMASK_SIZE-1:0] wmask0,
+ output reg [`ADDR_SIZE-1:0] addr1,
+ output reg [`DATA_SIZE-1:0] din1,
+ output reg web1,
+ output reg [`WMASK_SIZE-1:0] wmask1,
// One CSB for each SRAM
// One CSB for each SRAM
- output reg [`MAX_CHIPS-1:0] left_csb0,
- output reg [`MAX_CHIPS-1:0] left_csb1,
-
- // Shared control/data to the SRAMs
- output [`ADDR_SIZE-1:0] right_addr0,
- output [`DATA_SIZE-1:0] right_din0,
- output right_web0,
- output [`WMASK_SIZE-1:0] right_wmask0,
- // One CSB for each SRAM
- output [`MAX_CHIPS-1:0] right_csb0,
+ output reg [`MAX_CHIPS-1:0] csb0,
+ output reg [`MAX_CHIPS-1:0] csb1,
output reg [`TOTAL_SIZE-1:0] la_data_out,
output reg gpio_out
@@ -94,13 +86,6 @@
// SRAM input connections
reg [`SELECT_SIZE-1:0] chip_select;
- // Duplicate pins on other side
- wire [`ADDR_SIZE-1:0] right_addr0 = left_addr0;
- wire [`DATA_SIZE-1:0] right_din0 = left_din0;
- wire right_web0 = left_web0;
- wire [`WMASK_SIZE-1:0] right_wmask0 = left_wmask0;
- wire [`MAX_CHIPS-1:0] right_csb0 = left_csb0;
-
always @ (posedge clk) begin
if(!resetn) begin
sram_register <= {`TOTAL_SIZE{1'b0}};
@@ -129,23 +114,23 @@
always @(*) begin
chip_select = sram_register[`TOTAL_SIZE-1:`TOTAL_SIZE-`SELECT_SIZE];
- left_addr0 = sram_register[`TOTAL_SIZE-`SELECT_SIZE-1:`TOTAL_SIZE-`SELECT_SIZE-`ADDR_SIZE];
- left_din0 = sram_register[`DATA_SIZE+`PORT_SIZE+`WMASK_SIZE+1:`PORT_SIZE+`WMASK_SIZE+2];
+ addr0 = sram_register[`TOTAL_SIZE-`SELECT_SIZE-1:`TOTAL_SIZE-`SELECT_SIZE-`ADDR_SIZE];
+ din0 = sram_register[`DATA_SIZE+`PORT_SIZE+`WMASK_SIZE+1:`PORT_SIZE+`WMASK_SIZE+2];
csb0_temp = global_csr | sram_register[`PORT_SIZE+`WMASK_SIZE+1];
- left_web0 = sram_register[`PORT_SIZE+`WMASK_SIZE];
- left_wmask0 = sram_register[`PORT_SIZE+`WMASK_SIZE-1:`PORT_SIZE];
+ web0 = sram_register[`PORT_SIZE+`WMASK_SIZE];
+ wmask0 = sram_register[`PORT_SIZE+`WMASK_SIZE-1:`PORT_SIZE];
- left_addr1 = sram_register[`PORT_SIZE-1:`DATA_SIZE+`WMASK_SIZE+2];
- left_din1 = sram_register[`DATA_SIZE+`WMASK_SIZE+1:`WMASK_SIZE+2];
+ addr1 = sram_register[`PORT_SIZE-1:`DATA_SIZE+`WMASK_SIZE+2];
+ din1 = sram_register[`DATA_SIZE+`WMASK_SIZE+1:`WMASK_SIZE+2];
csb1_temp = global_csr | sram_register[`WMASK_SIZE+1];
- left_web1 = sram_register[`WMASK_SIZE];
- left_wmask1 = sram_register[`WMASK_SIZE-1:0];
+ web1 = sram_register[`WMASK_SIZE];
+ wmask1 = sram_register[`WMASK_SIZE-1:0];
end
// Apply the correct CSB
always @(*) begin
- left_csb0 = ~( (~{15'b111111111111111, csb0_temp}) << chip_select);
- left_csb1 = ~( (~{15'b111111111111111, csb1_temp}) << chip_select);
+ csb0 = ~( (~{15'b111111111111111, csb0_temp}) << chip_select);
+ csb1 = ~( (~{15'b111111111111111, csb1_temp}) << chip_select);
end
// Mux value of correct SRAM data input to feed into
diff --git a/verilog/rtl/user_project_wrapper.v b/verilog/rtl/user_project_wrapper.v
index 53569e8..87b870d 100644
--- a/verilog/rtl/user_project_wrapper.v
+++ b/verilog/rtl/user_project_wrapper.v
@@ -98,7 +98,7 @@
wire gpio_sram_clk = io_in[18];
wire gpio_scan = io_in[19];
wire gpio_sram_load = io_in[20];
- wire global_csr = io_in[21];
+ wire global_csr = io_in[21];
wire la_clk = la_data_in[127];
wire la_in_load = la_data_in[125];
wire la_sram_load = la_data_in[124];
@@ -129,24 +129,16 @@
.gpio_out(gpio_out),
// Shared control/data to the SRAMs
- .left_addr0(left_addr0),
- .left_din0(left_din0),
- .left_web0(left_web0),
- .left_wmask0(left_wmask0),
- .left_addr1(left_addr1),
- .left_web1(left_web1),
- .left_wmask1(left_wmask1),
+ .addr0(addr0),
+ .din0(din0),
+ .web0(web0),
+ .wmask0(wmask0),
+ .addr1(addr1),
+ .web1(web1),
+ .wmask1(wmask1),
// One CSB for each SRAM
- .left_csb0(left_csb0),
- .left_csb1(left_csb1),
-
- // Shared control/data to the SRAMs
- .right_addr0(right_addr0),
- .right_din0(right_din0),
- .right_web0(right_web0),
- .right_wmask0(right_wmask0),
- // One CSB for each SRAM
- .right_csb0(right_csb0),
+ .csb0(csb0),
+ .csb1(csb1),
// SRAM data outputs to be captured
.sram0_data0(sram0_data0),
@@ -184,22 +176,16 @@
);
- wire [`ADDR_SIZE-1:0] left_addr0;
- wire [`DATA_SIZE-1:0] left_din0;
- wire left_web0;
- wire [`WMASK_SIZE-1:0] left_wmask0;
- wire [`ADDR_SIZE-1:0] left_addr1;
- wire [`DATA_SIZE-1:0] left_din1;
- wire left_web1;
- wire [`WMASK_SIZE-1:0] left_wmask1;
- wire [`MAX_CHIPS-1:0] left_csb0;
- wire [`MAX_CHIPS-1:0] left_csb1;
-
- wire [`ADDR_SIZE-1:0] right_addr0;
- wire [`DATA_SIZE-1:0] right_din0;
- wire right_web0;
- wire [`WMASK_SIZE-1:0] right_wmask0;
- wire [`MAX_CHIPS-1:0] right_csb0;
+ wire [`ADDR_SIZE-1:0] addr0;
+ wire [`DATA_SIZE-1:0] din0;
+ wire web0;
+ wire [`WMASK_SIZE-1:0] wmask0;
+ wire [`ADDR_SIZE-1:0] addr1;
+ wire [`DATA_SIZE-1:0] din1;
+ wire web1;
+ wire [`WMASK_SIZE-1:0] wmask1;
+ wire [`MAX_CHIPS-1:0] csb0;
+ wire [`MAX_CHIPS-1:0] csb1;
wire [`DATA_SIZE-1:0] sram0_dout0;
wire [`DATA_SIZE-1:0] sram0_dout1;
@@ -241,15 +227,15 @@
.vssd1(vssd1),
`endif
.clk0 (clk),
- .csb0 (left_csb0[0]),
- .web0 (left_web0),
- .wmask0 (left_wmask0),
- .addr0 (left_addr0),
- .din0 (left_din0),
+ .csb0 (csb0[0]),
+ .web0 (web0),
+ .wmask0 (wmask0),
+ .addr0 (addr0),
+ .din0 (din0),
.dout0 (sram0_dout0[7:0]),
.clk1 (clk),
- .csb1 (left_csb1[0]),
- .addr1 (left_addr1),
+ .csb1 (csb1[0]),
+ .addr1 (addr1),
.dout1 (sram0_dout1[7:0])
);
assign sram0_dout0[`DATA_SIZE-1:8] = 0;
@@ -262,15 +248,15 @@
.vssd1(vssd1),
`endif
.clk0 (clk),
- .csb0 (left_csb0[1]),
- .web0 (left_web0),
- .wmask0 (left_wmask0),
- .addr0 (left_addr0),
- .din0 (left_din0),
+ .csb0 (csb0[1]),
+ .web0 (web0),
+ .wmask0 (wmask0),
+ .addr0 (addr0),
+ .din0 (din0),
.dout0 (sram1_dout0),
.clk1 (clk),
- .csb1 (left_csb1[1]),
- .addr1 (left_addr1),
+ .csb1 (csb1[1]),
+ .addr1 (addr1),
.dout1 (sram1_dout1)
);
@@ -281,15 +267,15 @@
.vssd1(vssd1),
`endif
.clk0 (clk),
- .csb0 (left_csb0[2]),
- .web0 (left_web0),
- .wmask0 (left_wmask0),
- .addr0 (left_addr0),
- .din0 (left_din0),
+ .csb0 (csb0[2]),
+ .web0 (web0),
+ .wmask0 (wmask0),
+ .addr0 (addr0),
+ .din0 (din0),
.dout0 (sram2_dout0),
.clk1 (clk),
- .csb1 (left_csb1[2]),
- .addr1 (left_addr1),
+ .csb1 (csb1[2]),
+ .addr1 (addr1),
.dout1 (sram2_dout1)
);
@@ -300,15 +286,15 @@
.vssd1(vssd1),
`endif
.clk0 (clk),
- .csb0 (left_csb0[3]),
- .web0 (left_web0),
- .wmask0 (left_wmask0),
- .addr0 (left_addr0),
- .din0 (left_din0),
+ .csb0 (csb0[3]),
+ .web0 (web0),
+ .wmask0 (wmask0),
+ .addr0 (addr0),
+ .din0 (din0),
.dout0 (sram3_dout0),
.clk1 (clk),
- .csb1 (left_csb1[3]),
- .addr1 (left_addr1),
+ .csb1 (csb1[3]),
+ .addr1 (addr1),
.dout1 (sram3_dout1)
);
@@ -319,15 +305,15 @@
.vssd1(vssd1),
`endif
.clk0 (clk),
- .csb0 (left_csb0[4]),
- .web0 (left_web0),
- .wmask0 (left_wmask0),
- .addr0 (left_addr0),
- .din0 (left_din0),
+ .csb0 (csb0[4]),
+ .web0 (web0),
+ .wmask0 (wmask0),
+ .addr0 (addr0),
+ .din0 (din0),
.dout0 (sram4_dout0),
.clk1 (clk),
- .csb1 (left_csb1[4]),
- .addr1 (left_addr1),
+ .csb1 (csb1[4]),
+ .addr1 (addr1),
.dout1 (sram4_dout1)
);
@@ -361,14 +347,13 @@
.vssd1(vssd1),
`endif
.clk0 (clk),
- .csb0 (right_csb0[8]),
- .web0 (right_web0),
- .wmask0 (right_wmask0),
- .addr0 (right_addr0),
- .din0 (right_din0),
+ .csb0 (csb0[8]),
+ .web0 (web0),
+ .wmask0 (wmask0),
+ .addr0 (addr0),
+ .din0 (din0),
.dout0 (sram8_dout0)
);
- assign sram8_dout1 = 0;
sram_1rw0r0w_32_512_sky130 SRAM9
(
@@ -377,14 +362,13 @@
.vssd1(vssd1),
`endif
.clk0 (clk),
- .csb0 (right_csb0[9]),
- .web0 (right_web0),
- .wmask0 (right_wmask0),
- .addr0 (right_addr0),
- .din0 (right_din0),
+ .csb0 (csb0[9]),
+ .web0 (web0),
+ .wmask0 (wmask0),
+ .addr0 (addr0),
+ .din0 (din0),
.dout0 (sram9_dout0)
);
- assign sram9_dout1 = 0;
sram_1rw0r0w_32_1024_sky130 SRAM10
(
@@ -393,14 +377,14 @@
.vssd1(vssd1),
`endif
.clk0 (clk),
- .csb0 (right_csb0[10]),
- .web0 (right_web0),
- .wmask0 (right_wmask0),
- .addr0 (right_addr0),
- .din0 (right_din0),
+ .csb0 (csb0[10]),
+ .web0 (web0),
+ .wmask0 (wmask0),
+ .addr0 (addr0),
+ .din0 (din0),
.dout0 (sram10_dout0)
);
- assign sram10_dout1 = 0;
+
wire [63:0] temp_sram11_dout0;
sram_1rw0r0w_64_512_sky130 SRAM11
@@ -410,14 +394,13 @@
.vssd1(vssd1),
`endif
.clk0 (clk),
- .csb0 (right_csb0[11]),
- .web0 (right_web0),
- .wmask0 (right_wmask0),
- .addr0 (right_addr0),
- .din0 ({right_din0[31:16], 32'd0, right_din0[15:0]}),
+ .csb0 (csb0[11]),
+ .web0 (web0),
+ .wmask0 (wmask0),
+ .addr0 (addr0),
+ .din0 ({din0[31:16], 32'd0, din0[15:0]}),
.dout0 (temp_sram11_dout0)
);
- assign sram11_dout1 = 0;
assign sram11_dout0 = {temp_sram11_dout0[64:49], temp_sram11_dout0[15:0]};
// Hold dout from SRAM
@@ -439,13 +422,13 @@
//reg [`DATA_SIZE-1:0] sram7_data0;
//reg [`DATA_SIZE-1:0] sram7_data1;
reg [`DATA_SIZE-1:0] sram8_data0;
-reg [`DATA_SIZE-1:0] sram8_data1;
+//reg [`DATA_SIZE-1:0] sram8_data1;
reg [`DATA_SIZE-1:0] sram9_data0;
-reg [`DATA_SIZE-1:0] sram9_data1;
+//reg [`DATA_SIZE-1:0] sram9_data1;
reg [`DATA_SIZE-1:0] sram10_data0;
-reg [`DATA_SIZE-1:0] sram10_data1;
+//reg [`DATA_SIZE-1:0] sram10_data1;
reg [`DATA_SIZE-1:0] sram11_data0;
-reg [`DATA_SIZE-1:0] sram11_data1;
+//reg [`DATA_SIZE-1:0] sram11_data1;
//reg [`DATA_SIZE-1:0] sram12_data0;
//reg [`DATA_SIZE-1:0] sram12_data1;
//reg [`DATA_SIZE-1:0] sram13_data0;
@@ -474,13 +457,13 @@
// sram7_data0 <= 0;
// sram7_data1 <= 0;
sram8_data0 <= 0;
- sram8_data1 <= 0;
+ //sram8_data1 <= 0;
sram9_data0 <= 0;
- sram9_data1 <= 0;
+ //sram9_data1 <= 0;
sram10_data0 <= 0;
- sram10_data1 <= 0;
+ //sram10_data1 <= 0;
sram11_data0 <= 0;
- sram11_data1 <= 0;
+ //sram11_data1 <= 0;
//sram12_data0 <= 0;
//sram12_data1 <= 0;
//sram13_data0 <= 0;
@@ -508,13 +491,13 @@
// sram7_data0 <= sram7_dout0;
// sram7_data1 <= sram7_dout1;
sram8_data0 <= sram8_dout0;
- sram8_data1 <= sram8_dout1;
+ // sram8_data1 <= sram8_dout1;
sram9_data0 <= sram9_dout0;
- sram9_data1 <= sram9_dout1;
+ // sram9_data1 <= sram9_dout1;
sram10_data0 <= sram10_dout0;
- sram10_data1 <= sram10_dout1;
+ // sram10_data1 <= sram10_dout1;
sram11_data0 <= sram11_dout0;
- sram11_data1 <= sram11_dout1;
+ // sram11_data1 <= sram11_dout1;
// sram12_data0 <= sram12_dout0;
// sram12_data1 <= sram12_dout1;
// sram13_data0 <= sram13_dout0;
@@ -526,6 +509,11 @@
end
end
+ wire [`DATA_SIZE-1:0] sram8_dout1 = 0;
+ wire [`DATA_SIZE-1:0] sram9_dout1 = 0;
+ wire [`DATA_SIZE-1:0] sram10_dout1 = 0;
+ wire [`DATA_SIZE-1:0] sram11_dout1 = 0;
+
wire [`DATA_SIZE-1:0] sram5_data0 = 0;
wire [`DATA_SIZE-1:0] sram5_data1 = 0;
wire [`DATA_SIZE-1:0] sram6_data0 = 0;