Move sram_clk to user_project_wrapper
diff --git a/openlane/openram_testchip/config.tcl b/openlane/openram_testchip/config.tcl index de26d8b..3c81ce3 100644 --- a/openlane/openram_testchip/config.tcl +++ b/openlane/openram_testchip/config.tcl
@@ -8,16 +8,16 @@ set ::env(VERILOG_FILES) "$script_dir/../../verilog/rtl/openram_defines.v \ $script_dir/../../verilog/rtl/openram_testchip.v" -set ::env(BASE_SDC_FILE) "$script_dir/openram_testchip.sdc" +#set ::env(BASE_SDC_FILE) "$script_dir/openram_testchip.sdc" -set ::env(CLOCK_PORT) "clk" -set ::env(CLOCK_NET) "clk sram_clk" +set ::env(CLOCK_PORT) "la_clk" +set ::env(CLOCK_NET) "clk" #set ::env(CLOCK_NET) "" set ::env(CLOCK_PERIOD) "20" set ::env(IO_PCT) 0.1 set ::env(FP_SIZING) absolute -set ::env(DIE_AREA) "0 0 400 2600" +set ::env(DIE_AREA) "0 0 400 2400" set ::env(DESIGN_IS_CORE) 0 set ::env(VDD_NETS) [list {vccd1} {vccd2} {vdda1} {vdda2}] @@ -28,7 +28,7 @@ #set ::env(SYNTH_NO_FLAT) 1 set ::env(GLB_RT_ADJUSTMENT) 0.20 set ::env(RUN_KLAYOUT_DRC) 0 -set ::env(PL_TARGET_DENSITY) 0.40 +set ::env(PL_TARGET_DENSITY) 0.25 # This doesn't check for supply connectivity: set ::env(FP_PDN_CHECK_NODES) 0
diff --git a/openlane/openram_testchip/openram_testchip.sdc b/openlane/openram_testchip/openram_testchip.sdc index 644e49a..5f91463 100644 --- a/openlane/openram_testchip/openram_testchip.sdc +++ b/openlane/openram_testchip/openram_testchip.sdc
@@ -15,6 +15,9 @@ # correct resetn set_input_delay $input_delay_value -clock [get_clocks $::env(CLOCK_PORT)] $all_inputs_wo_clk_rst #set_input_delay 0.0 -clock [get_clocks $::env(CLOCK_PORT)] {resetn} +#set clk_indx [lsearch [all_outputs] [get_port sram*_clk]] +#set all_outputs_wo_clk [lreplace [all_outputs] $clk_indx $clk_indx] +#set_output_delay $output_delay_value -clock [get_clocks $::env(CLOCK_PORT)] $all_outputs_wo_clk set_output_delay $output_delay_value -clock [get_clocks $::env(CLOCK_PORT)] [all_outputs] # TODO set this as parameter
diff --git a/openlane/openram_testchip/pin_order.cfg b/openlane/openram_testchip/pin_order.cfg index 2031dcb..9402f88 100644 --- a/openlane/openram_testchip/pin_order.cfg +++ b/openlane/openram_testchip/pin_order.cfg
@@ -8,39 +8,23 @@ la_.* #E -sram0_clk sram0_data[0-1] -sram1_clk sram1_data[0-1] -sram2_clk sram2_data[0-1] -sram3_clk sram3_data[0-1] right_data[0-1] -sram4_clk sram4_data[0-1] -sram5_clk sram5_data[0-1] -sram6_clk sram6_data[0-1] -sram7_clk sram7_data[0-1] #WR -sram8_clk sram8_data[0-1] -sram9_clk sram9_data[0-1] -sram10_clk sram10_data[0-1] -sram11_clk sram11_data[0-1] left_data[0-1] -sram12_clk sram12_data[0-1] -sram13_clk sram13_data[0-1] -sram14_clk sram14_data[0-1] -sram15_clk sram15_data[0-1] \ No newline at end of file
diff --git a/openlane/user_project_wrapper/config.tcl b/openlane/user_project_wrapper/config.tcl index f40c1d4..4b6844c 100755 --- a/openlane/user_project_wrapper/config.tcl +++ b/openlane/user_project_wrapper/config.tcl
@@ -30,8 +30,8 @@ $script_dir/../../verilog/rtl/user_project_wrapper.v " ## Clock configurations -set ::env(CLOCK_PORT) "user_clock2" -set ::env(CLOCK_NET) "wb_clk_i" +set ::env(CLOCK_PORT) "la_sram_clk" +set ::env(CLOCK_NET) "sram_clk" set ::env(CLOCK_PERIOD) "10"
diff --git a/openlane/user_project_wrapper/macro.cfg b/openlane/user_project_wrapper/macro.cfg index 9a9ef9c..ed4bc40 100644 --- a/openlane/user_project_wrapper/macro.cfg +++ b/openlane/user_project_wrapper/macro.cfg
@@ -48,4 +48,4 @@ # 823 x 335 SRAM8 2000 2600 N -CONTROL_LOGIC 1475 100 N +CONTROL_LOGIC 1300 100 N
diff --git a/verilog/rtl/openram_testchip.v b/verilog/rtl/openram_testchip.v index f8aa54e..8dbb34d 100644 --- a/verilog/rtl/openram_testchip.v +++ b/verilog/rtl/openram_testchip.v
@@ -16,50 +16,48 @@ input in_select, input la_clk, - input la_sram_clk, input la_in_load, input la_sram_load, input [`TOTAL_SIZE-1:0] la_data_in, // GPIO bit to clock control register input gpio_clk, input gpio_in, - input gpio_sram_clk, input gpio_scan, input gpio_sram_load, // SRAM data outputs to be captured - input [`DATA_SIZE-1:0] sram0_dout0, - input [`DATA_SIZE-1:0] sram0_dout1, - input [`DATA_SIZE-1:0] sram1_dout0, - input [`DATA_SIZE-1:0] sram1_dout1, - input [`DATA_SIZE-1:0] sram2_dout0, - input [`DATA_SIZE-1:0] sram2_dout1, - input [`DATA_SIZE-1:0] sram3_dout0, - input [`DATA_SIZE-1:0] sram3_dout1, - input [`DATA_SIZE-1:0] sram4_dout0, - input [`DATA_SIZE-1:0] sram4_dout1, - input [`DATA_SIZE-1:0] sram5_dout0, - input [`DATA_SIZE-1:0] sram5_dout1, - input [`DATA_SIZE-1:0] sram6_dout0, - input [`DATA_SIZE-1:0] sram6_dout1, - input [`DATA_SIZE-1:0] sram7_dout0, - input [`DATA_SIZE-1:0] sram7_dout1, - input [`DATA_SIZE-1:0] sram8_dout0, - input [`DATA_SIZE-1:0] sram8_dout1, - input [`DATA_SIZE-1:0] sram9_dout0, - input [`DATA_SIZE-1:0] sram9_dout1, - input [`DATA_SIZE-1:0] sram10_dout0, - input [`DATA_SIZE-1:0] sram10_dout1, - input [`DATA_SIZE-1:0] sram11_dout0, - input [`DATA_SIZE-1:0] sram11_dout1, - input [`DATA_SIZE-1:0] sram12_dout0, - input [`DATA_SIZE-1:0] sram12_dout1, - input [`DATA_SIZE-1:0] sram13_dout0, - input [`DATA_SIZE-1:0] sram13_dout1, - input [`DATA_SIZE-1:0] sram14_dout0, - input [`DATA_SIZE-1:0] sram14_dout1, - input [`DATA_SIZE-1:0] sram15_dout0, - input [`DATA_SIZE-1:0] sram15_dout1, + input [`DATA_SIZE-1:0] sram0_data0, + input [`DATA_SIZE-1:0] sram0_data1, + input [`DATA_SIZE-1:0] sram1_data0, + input [`DATA_SIZE-1:0] sram1_data1, + input [`DATA_SIZE-1:0] sram2_data0, + input [`DATA_SIZE-1:0] sram2_data1, + input [`DATA_SIZE-1:0] sram3_data0, + input [`DATA_SIZE-1:0] sram3_data1, + input [`DATA_SIZE-1:0] sram4_data0, + input [`DATA_SIZE-1:0] sram4_data1, + input [`DATA_SIZE-1:0] sram5_data0, + input [`DATA_SIZE-1:0] sram5_data1, + input [`DATA_SIZE-1:0] sram6_data0, + input [`DATA_SIZE-1:0] sram6_data1, + input [`DATA_SIZE-1:0] sram7_data0, + input [`DATA_SIZE-1:0] sram7_data1, + input [`DATA_SIZE-1:0] sram8_data0, + input [`DATA_SIZE-1:0] sram8_data1, + input [`DATA_SIZE-1:0] sram9_data0, + input [`DATA_SIZE-1:0] sram9_data1, + input [`DATA_SIZE-1:0] sram10_data0, + input [`DATA_SIZE-1:0] sram10_data1, + input [`DATA_SIZE-1:0] sram11_data0, + input [`DATA_SIZE-1:0] sram11_data1, + input [`DATA_SIZE-1:0] sram12_data0, + input [`DATA_SIZE-1:0] sram12_data1, + input [`DATA_SIZE-1:0] sram13_data0, + input [`DATA_SIZE-1:0] sram13_data1, + input [`DATA_SIZE-1:0] sram14_data0, + input [`DATA_SIZE-1:0] sram14_data1, + input [`DATA_SIZE-1:0] sram15_data0, + input [`DATA_SIZE-1:0] sram15_data1, // Shared control/data to the SRAMs output reg [`ADDR_SIZE-1:0] left_addr0, @@ -83,70 +81,17 @@ // One CSB for each SRAM output [`MAX_CHIPS-1:0] right_csb0, - // Clocks for each SRAM - output reg sram0_clk, - output reg sram1_clk, - output reg sram2_clk, - output reg sram3_clk, - output reg sram4_clk, - output reg sram5_clk, - output reg sram6_clk, - output reg sram7_clk, - output reg sram8_clk, - output reg sram9_clk, - output reg sram10_clk, - output reg sram11_clk, - output reg sram12_clk, - output reg sram13_clk, - output reg sram14_clk, - output reg sram15_clk, output reg [`TOTAL_SIZE-1:0] la_data_out, output reg gpio_out ); reg clk; - reg sram_clk; // Store input instruction reg [`TOTAL_SIZE-1:0] sram_register; reg csb0_temp; reg csb1_temp; -// Hold dout from SRAM -// clocked by SRAM clk - reg [`DATA_SIZE-1:0] sram0_data0; - reg [`DATA_SIZE-1:0] sram0_data1; - reg [`DATA_SIZE-1:0] sram1_data0; - reg [`DATA_SIZE-1:0] sram1_data1; - reg [`DATA_SIZE-1:0] sram2_data0; - reg [`DATA_SIZE-1:0] sram2_data1; - reg [`DATA_SIZE-1:0] sram3_data0; - reg [`DATA_SIZE-1:0] sram3_data1; - reg [`DATA_SIZE-1:0] sram4_data0; - reg [`DATA_SIZE-1:0] sram4_data1; - reg [`DATA_SIZE-1:0] sram5_data0; - reg [`DATA_SIZE-1:0] sram5_data1; - reg [`DATA_SIZE-1:0] sram6_data0; - reg [`DATA_SIZE-1:0] sram6_data1; - 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] sram9_data0; - 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] sram11_data0; - 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; - reg [`DATA_SIZE-1:0] sram13_data1; - reg [`DATA_SIZE-1:0] sram14_data0; - reg [`DATA_SIZE-1:0] sram14_data1; - reg [`DATA_SIZE-1:0] sram15_data0; - reg [`DATA_SIZE-1:0] sram15_data1; - // Mux output to connect final output data // into sram_register reg [`DATA_SIZE-1:0] read_data0; @@ -167,23 +112,6 @@ //Selecting clock pin always @(*) begin clk = in_select ? gpio_clk : la_clk; - sram_clk = in_select ? gpio_sram_clk : la_sram_clk; - sram0_clk = sram_clk; - sram1_clk = sram_clk; - sram2_clk = sram_clk; - sram3_clk = sram_clk; - sram4_clk = sram_clk; - sram5_clk = sram_clk; - sram6_clk = sram_clk; - sram7_clk = sram_clk; - sram8_clk = sram_clk; - sram9_clk = sram_clk; - sram10_clk = sram_clk; - sram11_clk = sram_clk; - sram12_clk = sram_clk; - sram13_clk = sram_clk; - sram14_clk = sram_clk; - sram15_clk = sram_clk; end always @ (posedge clk) begin @@ -222,88 +150,15 @@ left_addr1 = sram_register[`PORT_SIZE-1:`DATA_SIZE+`WMASK_SIZE+2]; left_din1 = sram_register[`DATA_SIZE+`WMASK_SIZE+1:`WMASK_SIZE+2]; - left_csb1_temp = sram_register[`WMASK_SIZE+1]; + csb1_temp = sram_register[`WMASK_SIZE+1]; left_web1 = sram_register[`WMASK_SIZE]; left_wmask1 = sram_register[`WMASK_SIZE-1:0]; end // Apply the correct CSB always @(*) begin - csb0 = csb0_temp << chip_select; - csb1 = csb1_temp << chip_select; -end - - -// Store dout of each SRAM -always @(posedge sram_clk) begin - if(reset) begin - sram0_data0 <= 0; - sram0_data1 <= 0; - sram1_data0 <= 0; - sram1_data1 <= 0; - sram2_data0 <= 0; - sram2_data1 <= 0; - sram3_data0 <= 0; - sram3_data1 <= 0; - sram4_data0 <= 0; - sram4_data1 <= 0; - sram5_data0 <= 0; - sram5_data1 <= 0; - sram6_data0 <= 0; - sram6_data1 <= 0; - sram7_data0 <= 0; - sram7_data1 <= 0; - sram8_data0 <= 0; - sram8_data1 <= 0; - sram9_data0 <= 0; - sram9_data1 <= 0; - sram10_data0 <= 0; - sram10_data1 <= 0; - sram11_data0 <= 0; - sram11_data1 <= 0; - sram12_data0 <= 0; - sram12_data1 <= 0; - sram13_data0 <= 0; - sram13_data1 <= 0; - sram14_data0 <= 0; - sram14_data1 <= 0; - sram15_data0 <= 0; - sram15_data1 <= 0; - end - else begin - sram0_data0 <= sram0_dout0; - sram0_data1 <= sram0_dout1; - sram1_data0 <= sram1_dout0; - sram1_data1 <= sram1_dout1; - sram2_data0 <= sram2_dout0; - sram2_data1 <= sram2_dout1; - sram3_data0 <= sram3_dout0; - sram3_data1 <= sram3_dout1; - sram4_data0 <= sram4_dout0; - sram4_data1 <= sram4_dout1; - sram5_data0 <= sram5_dout0; - sram5_data1 <= sram5_dout1; - sram6_data0 <= sram6_dout0; - sram6_data1 <= sram6_dout1; - sram7_data0 <= sram7_dout0; - sram7_data1 <= sram7_dout1; - sram8_data0 <= sram8_dout0; - sram8_data1 <= sram8_dout1; - sram9_data0 <= sram9_dout0; - sram9_data1 <= sram9_dout1; - sram10_data0 <= sram10_dout0; - sram10_data1 <= sram10_dout1; - sram11_data0 <= sram11_dout0; - sram11_data1 <= sram11_dout1; - sram12_data0 <= sram12_dout0; - sram12_data1 <= sram12_dout1; - sram13_data0 <= sram13_dout0; - sram13_data1 <= sram13_dout1; - sram14_data0 <= sram14_dout0; - sram14_data1 <= sram14_dout1; - sram15_data0 <= sram15_dout0; - sram15_data1 <= sram15_dout1; - end + left_csb0 = csb0_temp << chip_select; + left_csb1 = csb1_temp << chip_select; end // Mux value of correct SRAM dout FF to feed into
diff --git a/verilog/rtl/user_project_wrapper.v b/verilog/rtl/user_project_wrapper.v index d74db1e..5e9e3e5 100644 --- a/verilog/rtl/user_project_wrapper.v +++ b/verilog/rtl/user_project_wrapper.v
@@ -125,96 +125,97 @@ wire [31:0] sram14_dout0; wire [31:0] sram14_dout1; - + + wire in_select = io_in[16]; + wire in_reset = io_in[15]; + wire gpio_clk = io_in[17]; + wire gpio_sram_clk = io_in[18]; + wire gpio_scan = io_in[19]; + wire gpio_sram_load = io_in[20]; + + // Only io_out[21] is output + assign io_oeb = ~(1'b1 << 21); + // Assign other outputs to 0 + assign io_out[`MPRJ_IO_PADS:22] = 0; + wire gpio_out; + assign io_out[21] = gpio_out; + assign io_out[20:0] = 0; + + wire la_sram_clk = la_data_in[126]; + + reg sram_clk; + +always @(*) begin + sram_clk = in_select ? gpio_sram_clk : la_sram_clk; +end openram_testchip CONTROL_LOGIC( - .reset(io_in[15]|~wb_rst_i), - .in_select(io_in[16]), - .gpio_clk(io_in[17]), - .gpio_sram_clk(io_in[18]), - .gpio_scan(io_in[19]), - .gpio_sram_load(io_in[20]), + .reset(in_reset|~wb_rst_i), + .in_select(in_select), + .gpio_clk(gpio_clk), + .gpio_scan(gpio_scan), + .gpio_sram_load(gpio_sram_load), .la_clk(la_data_in[127]), - .la_sram_clk(la_data_in[126]), .la_in_load(la_data_in[125]), .la_sram_load(la_data_in[124]), .la_data_in(la_data_in[111:0]), .la_data_out(la_data_out[111:0]), - .gpio_out(io_out[21]), + .gpio_out(gpio_out), // Shared control/data to the SRAMs - .left_addr0(addr0), - .left_din0(din0), - .left_web0(web0), - .left_wmask0(wmask0), - .left_addr1(addr1), - .left_web1(web1), - .left_wmask1(wmask1), + .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), // One CSB for each SRAM - .left_csb0(csb0), - .left_csb1(csb1), + .left_csb0(left_csb0), + .left_csb1(left_csb1), // Shared control/data to the SRAMs - .right_addr0(addr0), - .right_din0(din0), - .right_web0(web0), - .right_wmask0(wmask0), + .right_addr0(right_addr0), + .right_din0(right_din0), + .right_web0(right_web0), + .right_wmask0(right_wmask0), // One CSB for each SRAM - .right_csb0(csb0), + .right_csb0(right_csb0), - // Clocks for each SRAM - .sram0_clk(sram0_clk), - .sram1_clk(sram1_clk), - .sram2_clk(sram2_clk), - .sram3_clk(sram3_clk), - .sram4_clk(sram4_clk), - .sram5_clk(sram5_clk), - .sram6_clk(sram6_clk), - .sram7_clk(sram7_clk), - .sram8_clk(sram8_clk), - .sram9_clk(sram9_clk), - .sram10_clk(sram10_clk), - .sram11_clk(sram11_clk), - .sram12_clk(sram12_clk), - .sram13_clk(sram13_clk), - .sram14_clk(sram14_clk), - .sram15_clk(sram15_clk), - // SRAM data outputs to be captured - .sram0_dout0(sram0_dout0), - .sram0_dout1(sram0_dout1), - .sram1_dout0(sram1_dout0), - .sram1_dout1(sram1_dout1), - .sram2_dout0(sram2_dout0), - .sram2_dout1(sram2_dout1), - .sram3_dout0(sram3_dout0), - .sram3_dout1(sram3_dout1), - .sram4_dout0(sram4_dout0), - .sram4_dout1(sram4_dout1), - .sram5_dout0(sram5_dout0), - .sram5_dout1(sram5_dout1), - .sram6_dout0(sram6_dout0), - .sram6_dout1(sram6_dout1), - .sram7_dout0(sram7_dout0), - .sram7_dout1(sram7_dout1), - .sram8_dout0(sram8_dout0), - .sram8_dout1(sram8_dout1), - .sram9_dout0(sram9_dout0), - .sram9_dout1(sram9_dout1), - .sram10_dout0(sram10_dout0), - .sram10_dout1(sram10_dout1), - .sram11_dout0(sram11_dout0), - .sram11_dout1(sram11_dout1), - .sram12_dout0(sram12_dout0), - .sram12_dout1(sram12_dout1), - .sram13_dout0(sram13_dout0), - .sram13_dout1(sram13_dout1), - .sram14_dout0(sram14_dout0), - .sram14_dout1(sram14_dout1), - .sram15_dout0(sram15_dout0), - .sram15_dout1(sram15_dout1), - + .sram0_data0(sram0_data0), + .sram0_data1(sram0_data1), + .sram1_data0(sram1_data0), + .sram1_data1(sram1_data1), + .sram2_data0(sram2_data0), + .sram2_data1(sram2_data1), + .sram3_data0(sram3_data0), + .sram3_data1(sram3_data1), + .sram4_data0(sram4_data0), + .sram4_data1(sram4_data1), + .sram5_data0(sram5_data0), + .sram5_data1(sram5_data1), + .sram6_data0(sram6_data0), + .sram6_data1(sram6_data1), + .sram7_data0(sram7_data0), + .sram7_data1(sram7_data1), + .sram8_data0(sram8_data0), + .sram8_data1(sram8_data1), + .sram9_data0(sram9_data0), + .sram9_data1(sram9_data1), + .sram10_data0(sram10_data0), + .sram10_data1(sram10_data1), + .sram11_data0(sram11_data0), + .sram11_data1(sram11_data1), + .sram12_data0(sram12_data0), + .sram12_data1(sram12_data1), + .sram13_data0(sram13_data0), + .sram13_data1(sram13_data1), + .sram14_data0(sram14_data0), + .sram14_data1(sram14_data1), + .sram15_data0(sram15_data0), + .sram15_data1(sram15_data1) ); @@ -268,23 +269,20 @@ wire [`DATA_SIZE-1:0] sram15_dout0; wire [`DATA_SIZE-1:0] sram15_dout1; - // Only io_out[27] is output - assign io_oeb = 1'b1 << 21; - sky130_sram_1kbyte_1rw1r_8x1024_8 SRAM0 ( `ifdef USE_POWER_PINS .vccd1(vccd1), .vssd1(vssd1), `endif - .clk0 (sram0_clk), + .clk0 (sram_clk), .csb0 (left_csb0[0]), .web0 (left_web0), .wmask0 (left_wmask0), .addr0 (left_addr0), .din0 (left_din0), .dout0 (sram0_dout0[7:0]), - .clk1 (sram0_clk), + .clk1 (sram_clk), .csb1 (left_csb1[0]), .addr1 (left_addr0), .dout1 (sram0_dout1[7:0]) @@ -298,14 +296,14 @@ .vccd1(vccd1), .vssd1(vssd1), `endif - .clk0 (sram1_clk), + .clk0 (sram_clk), .csb0 (left_csb0[1]), .web0 (left_web0), .wmask0 (left_wmask0), .addr0 (left_addr0), .din0 (left_din0), .dout0 (sram1_dout0), - .clk1 (sram1_clk), + .clk1 (sram_clk), .csb1 (left_csb1[1]), .addr1 (left_addr1), .dout1 (sram1_dout1) @@ -317,14 +315,14 @@ .vccd1(vccd1), .vssd1(vssd1), `endif - .clk0 (sram2_clk), + .clk0 (sram_clk), .csb0 (left_csb0[2]), .web0 (left_web0), .wmask0 (left_wmask0), .addr0 (left_addr0), .din0 (left_din0), .dout0 (sram2_dout0), - .clk1 (sram2_clk), + .clk1 (sram_clk), .csb1 (left_csb1[2]), .addr1 (left_addr1), .dout1 (sram2_dout1) @@ -336,14 +334,14 @@ .vccd1(vccd1), .vssd1(vssd1), `endif - .clk0 (sram3_clk), + .clk0 (sram_clk), .csb0 (left_csb0[3]), .web0 (left_web0), .wmask0 (left_wmask0), .addr0 (left_addr0), .din0 (left_din0), .dout0 (sram3_dout0), - .clk1 (sram3_clk), + .clk1 (sram_clk), .csb1 (left_csb1[3]), .addr1 (left_addr1), .dout1 (sram3_dout1) @@ -355,14 +353,14 @@ .vccd1(vccd1), .vssd1(vssd1), `endif - .clk0 (sram4_clk), + .clk0 (sram_clk), .csb0 (left_csb0[4]), .web0 (left_web0), .wmask0 (left_wmask0), .addr0 (left_addr0), .din0 (left_din0), .dout0 (sram4_dout0), - .clk1 (sram4_clk), + .clk1 (sram_clk), .csb1 (left_csb1[4]), .addr1 (left_addr1), .dout1 (sram4_dout1) @@ -375,14 +373,14 @@ // .vccd1(vccd1), // .vssd1(vssd1), // `endif -// .clk0 (sram6_clk), +// .clk0 (sram_clk), // .csb0 (csb0[6]), // .web0 (web0), // .wmask0 (wmask0), // .addr0 (addr0), // .din0 (din0), // .dout0 (sram6_dout0), -// .clk1 (sram6_clk), +// .clk1 (sram_clk), // .csb1 (csb1[6]), // .addr1 (addr1), // .dout1 (sram6_dout1) @@ -397,7 +395,7 @@ .vccd1(vccd1), .vssd1(vssd1), `endif - .clk0 (sram8_clk), + .clk0 (sram_clk), .csb0 (right_csb0[8]), .web0 (right_web0), .wmask0 (right_wmask0), @@ -413,7 +411,7 @@ .vccd1(vccd1), .vssd1(vssd1), `endif - .clk0 (sram9_clk), + .clk0 (sram_clk), .csb0 (right_csb0[9]), .web0 (right_web0), .wmask0 (right_wmask0), @@ -429,7 +427,7 @@ .vccd1(vccd1), .vssd1(vssd1), `endif - .clk0 (sram10_clk), + .clk0 (sram_clk), .csb0 (right_csb0[10]), .web0 (right_web0), .wmask0 (right_wmask0), @@ -439,13 +437,14 @@ ); assign sram10_dout1 = 0; + wire [63:0] temp_sram11_dout0; sram_1rw0r0w_64_512_sky130 SRAM11 ( `ifdef USE_POWER_PINS .vccd1(vccd1), .vssd1(vssd1), `endif - .clk0 (sram11_clk), + .clk0 (sram_clk), .csb0 (right_csb0[11]), .web0 (right_web0), .wmask0 (right_wmask0), @@ -453,11 +452,117 @@ .din0 ({right_din0[31:16], 32'd0, right_din0[15:0]}), .dout0 (temp_sram11_dout0) ); - - wire [63:0] temp_sram11_dout0; assign sram11_dout1 = 0; assign sram11_dout0 = {temp_sram11_dout0[64:33], temp_sram11_dout[15:0]}; + + + +// Hold dout from SRAM +// clocked by SRAM clk + reg [`DATA_SIZE-1:0] sram0_data0; + reg [`DATA_SIZE-1:0] sram0_data1; + reg [`DATA_SIZE-1:0] sram1_data0; + reg [`DATA_SIZE-1:0] sram1_data1; + reg [`DATA_SIZE-1:0] sram2_data0; + reg [`DATA_SIZE-1:0] sram2_data1; + reg [`DATA_SIZE-1:0] sram3_data0; + reg [`DATA_SIZE-1:0] sram3_data1; + reg [`DATA_SIZE-1:0] sram4_data0; + reg [`DATA_SIZE-1:0] sram4_data1; + reg [`DATA_SIZE-1:0] sram5_data0; + reg [`DATA_SIZE-1:0] sram5_data1; + reg [`DATA_SIZE-1:0] sram6_data0; + reg [`DATA_SIZE-1:0] sram6_data1; + 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] sram9_data0; + 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] sram11_data0; + 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; + reg [`DATA_SIZE-1:0] sram13_data1; + reg [`DATA_SIZE-1:0] sram14_data0; + reg [`DATA_SIZE-1:0] sram14_data1; + reg [`DATA_SIZE-1:0] sram15_data0; + reg [`DATA_SIZE-1:0] sram15_data1; + +always @(posedge sram_clk) begin + if (in_reset) begin + sram0_data0 <= 0; + sram0_data1 <= 0; + sram1_data0 <= 0; + sram1_data1 <= 0; + sram2_data0 <= 0; + sram2_data1 <= 0; + sram3_data0 <= 0; + sram3_data1 <= 0; + sram4_data0 <= 0; + sram4_data1 <= 0; + // sram5_data0 <= 0; + // sram5_data1 <= 0; + // sram6_data0 <= 0; + // sram6_data1 <= 0; + // sram7_data0 <= 0; + // sram7_data1 <= 0; + sram8_data0 <= 0; + sram8_data1 <= 0; + sram9_data0 <= 0; + sram9_data1 <= 0; + sram10_data0 <= 0; + sram10_data1 <= 0; + sram11_data0 <= 0; + sram11_data1 <= 0; + sram12_data0 <= 0; + sram12_data1 <= 0; + sram13_data0 <= 0; + sram13_data1 <= 0; + sram14_data0 <= 0; + sram14_data1 <= 0; + sram15_data0 <= 0; + sram15_data1 <= 0; + end + else begin + sram0_data0 <= sram0_dout0; + sram0_data1 <= sram0_dout1; + sram1_data0 <= sram1_dout0; + sram1_data1 <= sram1_dout1; + sram2_data0 <= sram2_dout0; + sram2_data1 <= sram2_dout1; + sram3_data0 <= sram3_dout0; + sram3_data1 <= sram3_dout1; + sram4_data0 <= sram4_dout0; + sram4_data1 <= sram4_dout1; + // sram5_data0 <= sram5_dout0; + // sram5_data1 <= sram5_dout1; + // sram6_data0 <= sram6_dout0; + // sram6_data1 <= sram6_dout1; + // sram7_data0 <= sram7_dout0; + // sram7_data1 <= sram7_dout1; + sram8_data0 <= sram8_dout0; + sram8_data1 <= sram8_dout1; + sram9_data0 <= sram9_dout0; + sram9_data1 <= sram9_dout1; + sram10_data0 <= sram10_dout0; + sram10_data1 <= sram10_dout1; + sram11_data0 <= sram11_dout0; + sram11_data1 <= sram11_dout1; + // sram12_data0 <= sram12_dout0; + // sram12_data1 <= sram12_dout1; + // sram13_data0 <= sram13_dout0; + // sram13_data1 <= sram13_dout1; + // sram14_data0 <= sram14_dout0; + // sram14_data1 <= sram14_dout1; + // sram15_data0 <= sram15_dout0; + // sram15_data1 <= sram15_dout1; + end +end endmodule // user_project_wrapper