Use single clock, top-level gate place and route
diff --git a/openlane/user_project_wrapper/config.tcl b/openlane/user_project_wrapper/config.tcl
index 2b7b886..e326646 100755
--- a/openlane/user_project_wrapper/config.tcl
+++ b/openlane/user_project_wrapper/config.tcl
@@ -27,14 +27,15 @@
 ## Source Verilog Files
 set ::env(VERILOG_FILES) "\
 	$script_dir/../../caravel/verilog/rtl/defines.v \
-	$script_dir/../../verilog/rtl/clock_mux.v \
+	$script_dir/../../verilog/rtl/openram_testchip.v \
 	$script_dir/../../verilog/rtl/user_project_wrapper.v "
 
 ## Clock configurations
-set ::env(CLOCK_PORT) "clkmux.clk"
-set ::env(CLOCK_NET) "clkmux.clk"
+set ::env(CLOCK_PORT) {io_in\[17\]}
+set ::env(CLOCK_NET) "CONTROL_LOGIC.clk"
+set ::env(RESET_PORT) {io_in\[15\] wb_rst_i}
 
-set ::env(CLOCK_PERIOD) "20"
+set ::env(CLOCK_PERIOD) "30"
 set ::env(BASE_SDC_FILE) "$script_dir/user_project_wrapper.sdc"
 
 ## Internal Macros
@@ -52,8 +53,8 @@
 	$script_dir/../../verilog/rtl/sram_1rw0r0w_32_1024_sky130.v \
 	$script_dir/../../verilog/rtl/sram_1rw0r0w_32_256_sky130.v \
 	$script_dir/../../verilog/rtl/sram_1rw0r0w_32_512_sky130.v \
-	$script_dir/../../verilog/rtl/sram_1rw0r0w_64_512_sky130.v \
-	$script_dir/../../verilog/rtl/openram_testchip.v "
+	$script_dir/../../verilog/rtl/sram_1rw0r0w_64_512_sky130.v"
+#$script_dir/../../verilog/rtl/openram_testchip.v
 
 set ::env(EXTRA_LEFS) "\
 	$script_dir/../../lef/sky130_sram_1kbyte_1rw1r_32x256_8.lef \
@@ -64,8 +65,8 @@
 	$script_dir/../../lef/sram_1rw0r0w_32_1024_sky130.lef \
 	$script_dir/../../lef/sram_1rw0r0w_32_256_sky130.lef \
 	$script_dir/../../lef/sram_1rw0r0w_32_512_sky130.lef \
-	$script_dir/../../lef/sram_1rw0r0w_64_512_sky130.lef \
-	$script_dir/../../lef/openram_testchip.lef "
+	$script_dir/../../lef/sram_1rw0r0w_64_512_sky130.lef"
+#	$script_dir/../../lef/openram_testchip.lef
 
 set ::env(EXTRA_GDS_FILES) "\
 	$script_dir/../../gds/sky130_sram_1kbyte_1rw1r_32x256_8.gds \
@@ -74,10 +75,10 @@
 	$script_dir/../../gds/sky130_sram_4kbyte_1rw1r_32x1024_8.gds \
 	$script_dir/../../gds/sky130_sram_8kbyte_1rw1r_32x2048_8.gds \
 	$script_dir/../../gds/sram_1rw0r0w_32_1024_sky130.gds \
-	$script_dir/../../gds/sram_1rw0r0w_32_256_sky130.gds \
+p	$script_dir/../../gds/sram_1rw0r0w_32_256_sky130.gds \
 	$script_dir/../../gds/sram_1rw0r0w_32_512_sky130.gds \
-	$script_dir/../../gds/sram_1rw0r0w_64_512_sky130.gds \
-	$script_dir/../../gds/openram_testchip.gds "
+	$script_dir/../../gds/sram_1rw0r0w_64_512_sky130.gds"
+#	$script_dir/../../gds/openram_testchip.gds
 
 set ::env(GLB_RT_MAXLAYER) 5
 
@@ -89,10 +90,10 @@
 # Placement config
 set ::env(PL_OPENPHYSYN_OPTIMIZATIONS) 0
 set ::env(PL_DIAMOND_SEARCH_HEIGHT) 500
-set ::env(PL_RANDOM_GLB_PLACEMENT) 1
+#set ::env(PL_RANDOM_GLB_PLACEMENT) 1
 
 set ::env(GLB_RT_ADJUSTMENT) 0.25
-set ::env(PL_TARGET_DENSITY) 0.5
+set ::env(PL_TARGET_DENSITY) 0.3
 
 #set ::env(MAGIC_DRC_USE_GDS) 0
 
diff --git a/openlane/user_project_wrapper/macro.cfg b/openlane/user_project_wrapper/macro.cfg
index ed4bc40..132d9a7 100644
--- a/openlane/user_project_wrapper/macro.cfg
+++ b/openlane/user_project_wrapper/macro.cfg
@@ -26,8 +26,8 @@
 # 1094 x 721
 SRAM4 200 2600 N
 
-# sky130_sram_16kbyte_1rw1w_32x4096_8 
-#SRAM6 
+# sky130_sram_16kbyte_1rw1w_32x4096_8
+#SRAM6
 
 # Control is 800 wide with 100 margin
 # so 2000
@@ -48,4 +48,4 @@
 # 823 x 335
 SRAM8 2000 2600 N
 
-CONTROL_LOGIC 1300 100 N
+#CONTROL_LOGIC 1300 100 N
diff --git a/verilog/rtl/clock_mux.v b/verilog/rtl/clock_mux.v
deleted file mode 100644
index c1a92b1..0000000
--- a/verilog/rtl/clock_mux.v
+++ /dev/null
@@ -1,11 +0,0 @@
-module clock_mux(
-		 input 	clk0,
-		 input 	clk1,
-		 input 	sel,
-		 output reg clk);
-
-always @(*) begin
-   clk = sel ? clk1 : clk0;
-end
-
-endmodule // clock_mux
diff --git a/verilog/rtl/openram_testchip.v b/verilog/rtl/openram_testchip.v
index 0bff047..50a227b 100644
--- a/verilog/rtl/openram_testchip.v
+++ b/verilog/rtl/openram_testchip.v
@@ -12,15 +12,11 @@
 			inout vssd2,        // User area 2 digital ground
 `endif
 			input         resetn,
-			// Select either GPIO or LA mode
-			input         in_select,
-
-			input         la_clk,
+			input         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_scan,
 			input         gpio_sram_load,
@@ -105,16 +101,6 @@
    wire [`WMASK_SIZE-1:0] right_wmask0 = left_wmask0;
    wire [`MAX_CHIPS-1:0]  right_csb0 = left_csb0;
 
-
-
-   // Selecting clock pin
-   wire 		  clk;
-   clock_mux clkmux(.clk0(la_clk),
-		    .clk1(gpio_clk),
-		    .sel(in_select),
-		    .clk(clk));
-
-
 always @ (posedge clk) begin
    if(!resetn) begin
       sram_register <= {`TOTAL_SIZE{1'b0}};
@@ -138,19 +124,20 @@
    end
 end
 
+
 // Splitting register bits into fields
 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];
-   csb0_temp = sram_register[`PORT_SIZE+`WMASK_SIZE+1];
+   csb0_temp = gpio_scan | la_in_load | 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];
 
    left_addr1 = sram_register[`PORT_SIZE-1:`DATA_SIZE+`WMASK_SIZE+2];
    left_din1 = sram_register[`DATA_SIZE+`WMASK_SIZE+1:`WMASK_SIZE+2];
-   csb1_temp = sram_register[`WMASK_SIZE+1];
+   csb1_temp = gpio_scan | la_in_load | sram_register[`WMASK_SIZE+1];
    left_web1 = sram_register[`WMASK_SIZE];
    left_wmask1 = sram_register[`WMASK_SIZE-1:0];
 end
diff --git a/verilog/rtl/user_project_wrapper.v b/verilog/rtl/user_project_wrapper.v
index b7b672d..9885f23 100644
--- a/verilog/rtl/user_project_wrapper.v
+++ b/verilog/rtl/user_project_wrapper.v
@@ -98,6 +98,9 @@
    wire     gpio_sram_clk = io_in[18];
    wire     gpio_scan = io_in[19];
    wire     gpio_sram_load = io_in[20];
+   wire     la_clk = la_data_in[127];
+   wire     la_in_load = la_data_in[125];
+   wire     la_sram_load = la_data_in[124];
 
    // Only io_out[21] is output
    assign io_oeb = ~(1'b1 << 21);
@@ -107,23 +110,19 @@
    assign io_out[21] = gpio_out;
    assign io_out[20:0] = 0;
 
-   wire sram_clk;
-   clock_mux clkmux(.clk0(la_data_in[126]),
-		    .clk1(gpio_sram_clk),
-		    .sel(in_select),
-		    .clk(sram_clk));
-
+   // Selecting clock pin
+   reg clk;
+   always @(*) begin
+      clk = in_select ? gpio_clk : la_clk;
+   end
 
    openram_testchip CONTROL_LOGIC(
 				  .resetn(resetn & wb_rst_i),
-				  .in_select(in_select),
-				  .gpio_clk(gpio_clk),
+				  .clk(clk),
 				  .gpio_scan(gpio_scan),
 				  .gpio_sram_load(gpio_sram_load),
-
-				  .la_clk(la_data_in[127]),
-				  .la_in_load(la_data_in[125]),
-				  .la_sram_load(la_data_in[124]),
+				  .la_in_load(la_in_load),
+				  .la_sram_load(la_sram_load),
 				  .la_data_in(la_data_in[111:0]),
 				  .la_data_out(la_data_out[111:0]),
 				  .gpio_out(gpio_out),
@@ -240,14 +239,14 @@
       .vccd1(vccd1),
       .vssd1(vssd1),
       `endif
-      .clk0   (sram_clk),
+      .clk0   (clk),
       .csb0   (left_csb0[0]),
       .web0   (left_web0),
       .wmask0 (left_wmask0),
       .addr0  (left_addr0),
       .din0   (left_din0),
       .dout0  (sram0_dout0[7:0]),
-      .clk1   (sram_clk),
+      .clk1   (clk),
       .csb1   (left_csb1[0]),
       .addr1  (left_addr1),
       .dout1  (sram0_dout1[7:0])
@@ -261,14 +260,14 @@
       .vccd1(vccd1),
       .vssd1(vssd1),
       `endif
-      .clk0   (sram_clk),
+      .clk0   (clk),
       .csb0   (left_csb0[1]),
       .web0   (left_web0),
       .wmask0 (left_wmask0),
       .addr0  (left_addr0),
       .din0   (left_din0),
       .dout0  (sram1_dout0),
-      .clk1   (sram_clk),
+      .clk1   (clk),
       .csb1   (left_csb1[1]),
       .addr1  (left_addr1),
       .dout1  (sram1_dout1)
@@ -280,14 +279,14 @@
       .vccd1(vccd1),
       .vssd1(vssd1),
       `endif
-      .clk0   (sram_clk),
+      .clk0   (clk),
       .csb0   (left_csb0[2]),
       .web0   (left_web0),
       .wmask0 (left_wmask0),
       .addr0  (left_addr0),
       .din0   (left_din0),
       .dout0  (sram2_dout0),
-      .clk1   (sram_clk),
+      .clk1   (clk),
       .csb1   (left_csb1[2]),
       .addr1  (left_addr1),
       .dout1  (sram2_dout1)
@@ -299,14 +298,14 @@
       .vccd1(vccd1),
       .vssd1(vssd1),
       `endif
-      .clk0   (sram_clk),
+      .clk0   (clk),
       .csb0   (left_csb0[3]),
       .web0   (left_web0),
       .wmask0 (left_wmask0),
       .addr0  (left_addr0),
       .din0   (left_din0),
       .dout0  (sram3_dout0),
-      .clk1   (sram_clk),
+      .clk1   (clk),
       .csb1   (left_csb1[3]),
       .addr1  (left_addr1),
       .dout1  (sram3_dout1)
@@ -318,14 +317,14 @@
       .vccd1(vccd1),
       .vssd1(vssd1),
       `endif
-      .clk0   (sram_clk),
+      .clk0   (clk),
       .csb0   (left_csb0[4]),
       .web0   (left_web0),
       .wmask0 (left_wmask0),
       .addr0  (left_addr0),
       .din0   (left_din0),
       .dout0  (sram4_dout0),
-      .clk1   (sram_clk),
+      .clk1   (clk),
       .csb1   (left_csb1[4]),
       .addr1  (left_addr1),
       .dout1  (sram4_dout1)
@@ -338,14 +337,14 @@
 //       .vccd1(vccd1),
 //       .vssd1(vssd1),
 //       `endif
-//       .clk0   (sram_clk),
+//       .clk0   (clk),
 //       .csb0   (csb0[6]),
 //       .web0   (web0),
 //       .wmask0 (wmask0),
 //       .addr0  (addr0),
 //       .din0   (din0),
 //       .dout0  (sram6_dout0),
-//       .clk1   (sram_clk),
+//       .clk1   (clk),
 //       .csb1   (csb1[6]),
 //       .addr1  (addr1),
 //       .dout1  (sram6_dout1)
@@ -360,7 +359,7 @@
       .vccd1(vccd1),
       .vssd1(vssd1),
       `endif
-      .clk0   (sram_clk),
+      .clk0   (clk),
       .csb0   (right_csb0[8]),
       .web0   (right_web0),
       .wmask0 (right_wmask0),
@@ -376,7 +375,7 @@
       .vccd1(vccd1),
       .vssd1(vssd1),
       `endif
-      .clk0   (sram_clk),
+      .clk0   (clk),
       .csb0   (right_csb0[9]),
       .web0   (right_web0),
       .wmask0 (right_wmask0),
@@ -392,7 +391,7 @@
       .vccd1(vccd1),
       .vssd1(vssd1),
       `endif
-      .clk0   (sram_clk),
+      .clk0   (clk),
       .csb0   (right_csb0[10]),
       .web0   (right_web0),
       .wmask0 (right_wmask0),
@@ -409,7 +408,7 @@
       .vccd1(vccd1),
       .vssd1(vssd1),
       `endif
-      .clk0   (sram_clk),
+      .clk0   (clk),
       .csb0   (right_csb0[11]),
       .web0   (right_web0),
       .wmask0 (right_wmask0),
@@ -455,7 +454,7 @@
 //reg [`DATA_SIZE-1:0] sram15_data0;
 //reg [`DATA_SIZE-1:0] sram15_data1;
 
-always @(posedge sram_clk) begin
+always @(posedge clk) begin
    if (!resetn) begin
       sram0_data0 <= 0;
       sram0_data1 <= 0;
@@ -523,7 +522,7 @@
        // sram14_data1 <= sram14_dout1;
        // sram15_data0 <= sram15_dout0;
        // sram15_data1 <= sram15_dout1;
-   end // else: !if(in_reset)
+   end
 end
 
    wire [`DATA_SIZE-1:0] sram5_data0 = 0;