sta clean up, global clock buf and reset buf added
diff --git a/openlane/clk_buf/config.tcl b/openlane/clk_buf/config.tcl
new file mode 100644
index 0000000..a4e28ab
--- /dev/null
+++ b/openlane/clk_buf/config.tcl
@@ -0,0 +1,68 @@
+# SPDX-FileCopyrightText: 2020 Efabless Corporation
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#      http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+# SPDX-License-Identifier: Apache-2.0
+# SPDX-FileContributor: Modified by Dinesh Annayya <dinesha@opencores.org>
+
+# Global
+# ------
+
+set script_dir [file dirname [file normalize [info script]]]
+
+set ::env(DESIGN_NAME) clk_buf
+set verilog_root $script_dir/../../verilog/
+set lef_root $script_dir/../../lef/
+set gds_root $script_dir/../../gds/
+#section end
+
+# User Configurations
+#
+set ::env(DESIGN_IS_CORE) 0
+set ::env(FP_PDN_CORE_RING) "0"
+
+
+## Source Verilog Files
+set ::env(VERILOG_FILES) "\
+	$script_dir/../../verilog/rtl/lib/clk_buf.v"
+
+## Clock configurations
+#set ::env(CLOCK_PORT) "clk_in"
+
+#set ::env(CLOCK_PERIOD) "10"
+
+## Internal Macros
+### Macro Placement
+set ::env(FP_PIN_ORDER_CFG) $::env(DESIGN_DIR)/pin_order.cfg
+
+set ::env(FP_SIZING) absolute
+set ::env(DIE_AREA) "0 0 30 30"
+
+
+
+
+set ::env(VDD_PIN) [list {vccd1}]
+set ::env(GND_PIN) [list {vssd1}]
+
+set ::env(SYNTH_READ_BLACKBOX_LIB) 1
+
+# Fill this
+set ::env(CLOCK_TREE_SYNTH) 0
+
+set ::env(CELL_PAD) 4
+
+set ::env(FP_CORE_UTIL) 60
+#set ::env(PL_RANDOM_GLB_PLACEMENT) 1
+
+set ::env(BOTTOM_MARGIN_MULT) 2
+set ::env(TOP_MARGIN_MULT) 2
+set ::env(GLB_RT_MAXLAYER) 4
diff --git a/openlane/clk_buf/pin_order.cfg b/openlane/clk_buf/pin_order.cfg
new file mode 100644
index 0000000..1b25a6f
--- /dev/null
+++ b/openlane/clk_buf/pin_order.cfg
@@ -0,0 +1,9 @@
+#BUS_SORT
+
+#MANUAL_PLACE
+
+#N
+clk_o              0000 0
+
+#S
+clk_i              0000 0
diff --git a/openlane/glbl_cfg/base.sdc b/openlane/glbl_cfg/base.sdc
index 0941e88..92c03ea 100644
--- a/openlane/glbl_cfg/base.sdc
+++ b/openlane/glbl_cfg/base.sdc
@@ -28,6 +28,8 @@
 puts "\[INFO\]: Setting wb output delay to:$wb_output_delay_value"
 puts "\[INFO\]: Setting wb input delay to: $wb_input_delay_value"
 
+set_clock_uncertainty -from $::env(WB_CLOCK_PORT) -to $::env(WB_CLOCK_PORT)  -setup 0.400
+set_clock_uncertainty -from $::env(WB_CLOCK_PORT) -to $::env(WB_CLOCK_PORT)  -hold  0.050
 
 set_input_delay 2.0 -clock [get_clocks $::env(WB_CLOCK_PORT)] {reset_n}
 
@@ -38,7 +40,6 @@
 set_input_delay  $wb_input_delay_value   -clock [get_clocks $::env(WB_CLOCK_PORT)] [get_port reg_be*]
 set_input_delay  $wb_input_delay_value   -clock [get_clocks $::env(WB_CLOCK_PORT)] [get_port sdr_init_done*]
 
-set_output_delay $wb_output_delay_value  -clock [get_clocks $::env(WB_CLOCK_PORT)] [get_port device_idcode*]
 set_output_delay $wb_output_delay_value  -clock [get_clocks $::env(WB_CLOCK_PORT)] [get_port reg_rdata*]
 set_output_delay $wb_output_delay_value  -clock [get_clocks $::env(WB_CLOCK_PORT)] [get_port reg_ack*]
 set_output_delay $wb_output_delay_value  -clock [get_clocks $::env(WB_CLOCK_PORT)] [get_port fuse_mhartid*]
@@ -69,11 +70,3 @@
 puts "\[INFO\]: Setting load to: $cap_load"
 set_load  $cap_load [all_outputs]
 
-## These are generated clock, only max delay added
-set_false_path -to [get_port sdram_clk] 
-set_false_path -to [get_port cpu_clk] 
-set_false_path -to [get_port rtc_clk] 
-
-#set_max_delay 2.0 [get_port sdram_clk]
-#set_max_delay 2.0 [get_port cpu_clk]
-#set_max_delay 2.0 [get_port rtc_clk]
diff --git a/openlane/glbl_cfg/pin_order.cfg b/openlane/glbl_cfg/pin_order.cfg
index 770b1f7..f111f5a 100644
--- a/openlane/glbl_cfg/pin_order.cfg
+++ b/openlane/glbl_cfg/pin_order.cfg
@@ -3,8 +3,7 @@
 #MANUAL_PLACE
 
 #N
-mclk                   0000 0
-reset_n                
+reset_n               0000 0        
 user_irq\[2\]          
 user_irq\[1\]          
 user_irq\[0\]          
@@ -69,7 +68,7 @@
 cfg_sdr_rfmax\[2\]   
 cfg_sdr_rfmax\[1\]   
 cfg_sdr_rfmax\[0\]   
-
+mclk                   0150 0
 
 #S
 reg_cs               0000 0
diff --git a/openlane/sdram/base.sdc b/openlane/sdram/base.sdc
index 2bdd058..a64cf51 100644
--- a/openlane/sdram/base.sdc
+++ b/openlane/sdram/base.sdc
@@ -18,59 +18,63 @@
 set_units -time ns
 set ::env(WB_CLOCK_PERIOD) "10"
 set ::env(WB_CLOCK_PORT)   "wb_clk_i"
+set ::env(WB_CLOCK_NAME)   "wb_clk"
 
 set ::env(SDRAM_CLOCK_PERIOD) "20"
 set ::env(SDRAM_CLOCK_PORT)   "sdram_clk"
+set ::env(SDRAM_CLOCK_NAME)   "sdram_clk"
 
 set ::env(PAD_SDRAM_CLOCK_PERIOD) "20"
 set ::env(PAD_SDRAM_CLOCK_PORT)   "io_in\[29\]"
+set ::env(PAD_SDRAM_CLOCK_NAME)   "pad_sdram_clk"
 ######################################
 # WB Clock domain input output
 ######################################
-create_clock [get_ports $::env(WB_CLOCK_PORT)]  -name $::env(WB_CLOCK_PORT)  -period $::env(WB_CLOCK_PERIOD)
+create_clock [get_ports $::env(WB_CLOCK_PORT)]  -name $::env(WB_CLOCK_NAME)  -period $::env(WB_CLOCK_PERIOD)
 set wb_input_delay_value [expr $::env(WB_CLOCK_PERIOD) * 0.6]
 set wb_output_delay_value [expr $::env(WB_CLOCK_PERIOD) * 0.6]
 puts "\[INFO\]: Setting wb output delay to:$wb_output_delay_value"
 puts "\[INFO\]: Setting wb input delay to: $wb_input_delay_value"
 
 
-set_input_delay 2.0 -clock [get_clocks $::env(WB_CLOCK_PORT)] {wb_rst_n}
-set_input_delay 2.0 -clock [get_clocks $::env(SDRAM_CLOCK_PORT)] {sdram_resetn}
+set_input_delay 2.0 -clock [get_clocks $::env(WB_CLOCK_NAME)] {wb_rst_n}
 
-set_input_delay  $wb_input_delay_value   -clock [get_clocks $::env(WB_CLOCK_PORT)] [get_port wb_stb_i*]
-set_input_delay  $wb_input_delay_value   -clock [get_clocks $::env(WB_CLOCK_PORT)] [get_port wb_addr_i*]
-set_input_delay  $wb_input_delay_value   -clock [get_clocks $::env(WB_CLOCK_PORT)] [get_port wb_we_i*]
-set_input_delay  $wb_input_delay_value   -clock [get_clocks $::env(WB_CLOCK_PORT)] [get_port wb_dat_i*]
-set_input_delay  $wb_input_delay_value   -clock [get_clocks $::env(WB_CLOCK_PORT)] [get_port wb_sel_i*]
-set_input_delay  $wb_input_delay_value   -clock [get_clocks $::env(WB_CLOCK_PORT)] [get_port wb_cyc_i*]
+set_input_delay  $wb_input_delay_value   -clock [get_clocks $::env(WB_CLOCK_NAME)] [get_port wb_stb_i*]
+set_input_delay  $wb_input_delay_value   -clock [get_clocks $::env(WB_CLOCK_NAME)] [get_port wb_addr_i*]
+set_input_delay  $wb_input_delay_value   -clock [get_clocks $::env(WB_CLOCK_NAME)] [get_port wb_we_i*]
+set_input_delay  $wb_input_delay_value   -clock [get_clocks $::env(WB_CLOCK_NAME)] [get_port wb_dat_i*]
+set_input_delay  $wb_input_delay_value   -clock [get_clocks $::env(WB_CLOCK_NAME)] [get_port wb_sel_i*]
+set_input_delay  $wb_input_delay_value   -clock [get_clocks $::env(WB_CLOCK_NAME)] [get_port wb_cyc_i*]
 
-set_input_delay  $wb_input_delay_value   -clock [get_clocks $::env(WB_CLOCK_PORT)] [get_port cfg_sdr_tras_d*]
-set_input_delay  $wb_input_delay_value   -clock [get_clocks $::env(WB_CLOCK_PORT)] [get_port cfg_sdr_trp_d*]
-set_input_delay  $wb_input_delay_value   -clock [get_clocks $::env(WB_CLOCK_PORT)] [get_port cfg_sdr_trcd_d*]
-set_input_delay  $wb_input_delay_value   -clock [get_clocks $::env(WB_CLOCK_PORT)] [get_port cfg_sdr_en*]
-set_input_delay  $wb_input_delay_value   -clock [get_clocks $::env(WB_CLOCK_PORT)] [get_port cfg_req_depth*]
-set_input_delay  $wb_input_delay_value   -clock [get_clocks $::env(WB_CLOCK_PORT)] [get_port cfg_sdr_mode_reg*]
-set_input_delay  $wb_input_delay_value   -clock [get_clocks $::env(WB_CLOCK_PORT)] [get_port cfg_sdr_cas*]
-set_input_delay  $wb_input_delay_value   -clock [get_clocks $::env(WB_CLOCK_PORT)] [get_port cfg_sdr_trcar_d*]
-set_input_delay  $wb_input_delay_value   -clock [get_clocks $::env(WB_CLOCK_PORT)] [get_port cfg_sdr_twr_d*]
-set_input_delay  $wb_input_delay_value   -clock [get_clocks $::env(WB_CLOCK_PORT)] [get_port cfg_sdr_rfsh*]
-set_input_delay  $wb_input_delay_value   -clock [get_clocks $::env(WB_CLOCK_PORT)] [get_port cfg_sdr_rfmax*]
-set_input_delay  $wb_input_delay_value   -clock [get_clocks $::env(WB_CLOCK_PORT)] [get_port cfg_colbits*]
-set_input_delay  $wb_input_delay_value   -clock [get_clocks $::env(WB_CLOCK_PORT)] [get_port cfg_sdr_width*]
+set_input_delay  $wb_input_delay_value   -clock [get_clocks $::env(WB_CLOCK_NAME)] [get_port cfg_sdr_tras_d*]
+set_input_delay  $wb_input_delay_value   -clock [get_clocks $::env(WB_CLOCK_NAME)] [get_port cfg_sdr_trp_d*]
+set_input_delay  $wb_input_delay_value   -clock [get_clocks $::env(WB_CLOCK_NAME)] [get_port cfg_sdr_trcd_d*]
+set_input_delay  $wb_input_delay_value   -clock [get_clocks $::env(WB_CLOCK_NAME)] [get_port cfg_sdr_en*]
+set_input_delay  $wb_input_delay_value   -clock [get_clocks $::env(WB_CLOCK_NAME)] [get_port cfg_req_depth*]
+set_input_delay  $wb_input_delay_value   -clock [get_clocks $::env(WB_CLOCK_NAME)] [get_port cfg_sdr_mode_reg*]
+set_input_delay  $wb_input_delay_value   -clock [get_clocks $::env(WB_CLOCK_NAME)] [get_port cfg_sdr_cas*]
+set_input_delay  $wb_input_delay_value   -clock [get_clocks $::env(WB_CLOCK_NAME)] [get_port cfg_sdr_trcar_d*]
+set_input_delay  $wb_input_delay_value   -clock [get_clocks $::env(WB_CLOCK_NAME)] [get_port cfg_sdr_twr_d*]
+set_input_delay  $wb_input_delay_value   -clock [get_clocks $::env(WB_CLOCK_NAME)] [get_port cfg_sdr_rfsh*]
+set_input_delay  $wb_input_delay_value   -clock [get_clocks $::env(WB_CLOCK_NAME)] [get_port cfg_sdr_rfmax*]
+set_input_delay  $wb_input_delay_value   -clock [get_clocks $::env(WB_CLOCK_NAME)] [get_port cfg_colbits*]
+set_input_delay  $wb_input_delay_value   -clock [get_clocks $::env(WB_CLOCK_NAME)] [get_port cfg_sdr_width*]
 
-set_output_delay $wb_output_delay_value  -clock [get_clocks $::env(WB_CLOCK_PORT)] [get_port wb_dat_o*]
-set_output_delay $wb_output_delay_value  -clock [get_clocks $::env(WB_CLOCK_PORT)] [get_port wb_ack_o*]
-set_output_delay $wb_output_delay_value  -clock [get_clocks $::env(WB_CLOCK_PORT)] [get_port sdr_init_done*]
+set_output_delay $wb_output_delay_value  -clock [get_clocks $::env(WB_CLOCK_NAME)] [get_port wb_dat_o*]
+set_output_delay $wb_output_delay_value  -clock [get_clocks $::env(WB_CLOCK_NAME)] [get_port wb_ack_o*]
+set_output_delay $wb_output_delay_value  -clock [get_clocks $::env(WB_CLOCK_NAME)] [get_port sdr_init_done*]
 
 ######################################
 # SDRAM Clock domain input output
 ######################################
-create_clock [get_ports $::env(SDRAM_CLOCK_PORT)]  -name $::env(SDRAM_CLOCK_PORT)  -period $::env(SDRAM_CLOCK_PERIOD)
+create_clock [get_ports $::env(SDRAM_CLOCK_PORT)]  -name $::env(SDRAM_CLOCK_NAME)  -period $::env(SDRAM_CLOCK_PERIOD)
 set sdram_input_delay_value [expr $::env(SDRAM_CLOCK_PERIOD) * 0.6]
 set sdram_output_delay_value [expr $::env(SDRAM_CLOCK_PERIOD) * 0.6]
 puts "\[INFO\]: Setting wb output delay to:$wb_output_delay_value"
 puts "\[INFO\]: Setting wb input delay to: $wb_input_delay_value"
 
+set_input_delay 2.0 -clock [get_clocks $::env(SDRAM_CLOCK_NAME)] {sdram_resetn}
+
 set_output_delay $sdram_output_delay_value  -max -clock [get_clocks $::env(SDRAM_CLOCK_PORT)] [get_port io_out[0]]
 set_output_delay $sdram_output_delay_value  -max -clock [get_clocks $::env(SDRAM_CLOCK_PORT)] [get_port io_out[1]]
 set_output_delay $sdram_output_delay_value  -max -clock [get_clocks $::env(SDRAM_CLOCK_PORT)] [get_port io_out[2]]
@@ -132,7 +136,7 @@
 set_output_delay -0.5  -min -clock [get_clocks $::env(SDRAM_CLOCK_PORT)] [get_port io_out[26]]
 set_output_delay -0.5  -min -clock [get_clocks $::env(SDRAM_CLOCK_PORT)] [get_port io_out[27]]
 set_output_delay -0.5  -min -clock [get_clocks $::env(SDRAM_CLOCK_PORT)] [get_port io_out[28]]
-#set_output_delay $sdram_output_delay_value  -clock [get_clocks $::env(SDRAM_CLOCK_PORT)] [get_port io_out[29]] Masked SDRAM clock
+#set_output_delay $sdram_output_delay_value  -clock [get_clocks $::env(SDRAM_CLOCK_PORT)] [get_port io_outp 29]] Masked SDRAM clock
 set_output_delay -0.5  -min -clock [get_clocks $::env(SDRAM_CLOCK_PORT)] [get_port io_oeb*]
 
 ################################################
@@ -141,13 +145,22 @@
 #       it's a feedback clock through pads
 ################################################
 
-create_clock [get_ports $::env(PAD_SDRAM_CLOCK_PORT)]  -name $::env(PAD_SDRAM_CLOCK_PORT)  -period $::env(SDRAM_CLOCK_PERIOD)
-set_input_delay  $sdram_input_delay_value -max  -clock [get_clocks $::env(PAD_SDRAM_CLOCK_PORT)] [get_port io_in*]
-set_input_delay  1                        -min -clock [get_clocks $::env(PAD_SDRAM_CLOCK_PORT)] [get_port io_in*]
+create_clock [get_ports $::env(PAD_SDRAM_CLOCK_PORT)]  -name $::env(PAD_SDRAM_CLOCK_NAME)  -period $::env(SDRAM_CLOCK_PERIOD)
+set_input_delay  $sdram_input_delay_value -max  -clock [get_clocks $::env(PAD_SDRAM_CLOCK_NAME)] [get_port io_in*]
+set_input_delay  1                        -min -clock [get_clocks $::env(PAD_SDRAM_CLOCK_NAME)] [get_port io_in*]
 
 
-set_clock_groups -name async_clock -asynchronous -comment "Async Clock group" -group [get_clocks $::env(WB_CLOCK_PORT)] -group [get_clocks $::env(SDRAM_CLOCK_PORT)]
+set_clock_groups -name async_clock -asynchronous -comment "Async Clock group" -group [get_clocks $::env(WB_CLOCK_NAME)] -group [get_clocks $::env(SDRAM_CLOCK_NAME)]
 
+## Add clock uncertainty
+#Note: We have PAD_SDRAM_CLOCK_NAME => SDRAM_CLOCK_NAME path only
+set_clock_uncertainty -from $::env(WB_CLOCK_NAME)        -to $::env(WB_CLOCK_NAME)    -setup 0.400
+set_clock_uncertainty -from $::env(SDRAM_CLOCK_NAME)     -to $::env(SDRAM_CLOCK_NAME) -setup 0.400
+set_clock_uncertainty -from $::env(PAD_SDRAM_CLOCK_NAME) -to $::env(SDRAM_CLOCK_NAME) -setup 0.400
+
+set_clock_uncertainty -from $::env(WB_CLOCK_NAME)        -to $::env(WB_CLOCK_NAME)    -hold 0.050
+set_clock_uncertainty -from $::env(SDRAM_CLOCK_NAME)     -to $::env(SDRAM_CLOCK_NAME) -hold 0.050
+set_clock_uncertainty -from $::env(PAD_SDRAM_CLOCK_NAME) -to $::env(SDRAM_CLOCK_NAME) -hold 0.050 
 
 # TODO set this as parameter
 set_driving_cell -lib_cell $::env(SYNTH_DRIVING_CELL) -pin $::env(SYNTH_DRIVING_CELL_PIN) [all_inputs]
diff --git a/openlane/spi_master/base.sdc b/openlane/spi_master/base.sdc
index aab27ac..129b737 100644
--- a/openlane/spi_master/base.sdc
+++ b/openlane/spi_master/base.sdc
@@ -92,6 +92,11 @@
 set_output_delay 0   -min -clock [get_clocks $::env(SPI_CLOCK_PORT)] [get_port io_oeb[2]]
 set_output_delay 0   -min -clock [get_clocks $::env(SPI_CLOCK_PORT)] [get_port io_oeb[1]]
 
+set_clock_uncertainty -from $::env(SPI_CLOCK_PORT)   -to $::env(SPI_CLOCK_PORT)   -setup 0.400
+set_clock_uncertainty -from $::env(WB_CLOCK_PERIOD)  -to $::env(WB_CLOCK_PERIOD)  -setup 0.400
+set_clock_uncertainty -from $::env(SPI_CLOCK_PORT)   -to $::env(SPI_CLOCK_PORT)   -hold 0.050
+set_clock_uncertainty -from $::env(WB_CLOCK_PERIOD)  -to $::env(WB_CLOCK_PERIOD)  -hold 0.050
+
 # TODO set this as parameter
 set_driving_cell -lib_cell $::env(SYNTH_DRIVING_CELL) -pin $::env(SYNTH_DRIVING_CELL_PIN) [all_inputs]
 set cap_load [expr $::env(SYNTH_CAP_LOAD) / 1000.0]
diff --git a/openlane/syntacore/base.sdc b/openlane/syntacore/base.sdc
index ec80763..508d423 100644
--- a/openlane/syntacore/base.sdc
+++ b/openlane/syntacore/base.sdc
@@ -19,47 +19,65 @@
 #Wishbone Clock
 set ::env(WB_CLOCK_PERIOD)    "10"
 set ::env(WB_CLOCK_PORT)      "wb_clk"
+set ::env(WB_CLOCK_NAME)      "wb_clk"
 
 #Risc Core Clock
-set ::env(CORE_CLOCK_PERIOD) "50"
+set ::env(CORE_CLOCK_PERIOD) "40"
 set ::env(CORE_CLOCK_PORT)   "core_clk"
+set ::env(CORE_CLOCK_NAME)   "core_clk"
+
+#RTC Core Clock
+set ::env(RTC_CLOCK_PERIOD) "40"
+set ::env(RTC_CLOCK_PORT)   "rtc_clk"
+set ::env(RTC_CLOCK_NAME)   "rtc_clk"
 
 ######################################
 # CORE Clock domain input output
 ######################################
-create_clock [get_ports $::env(CORE_CLOCK_PORT)]  -name $::env(CORE_CLOCK_PORT)  -period $::env(CORE_CLOCK_PERIOD)
+create_clock [get_ports $::env(CORE_CLOCK_PORT)]  -name $::env(CORE_CLOCK_NAME)  -period $::env(CORE_CLOCK_PERIOD)
 set core_input_delay_value [expr $::env(CORE_CLOCK_PERIOD) * 0.6]
 set core_output_delay_value [expr $::env(CORE_CLOCK_PERIOD) * 0.6]
 puts "\[INFO\]: Setting core output delay to: $core_output_delay_value"
 puts "\[INFO\]: Setting core input delay to: $core_input_delay_value"
-set core_clk_indx [lsearch [all_inputs] [get_port $::env(CORE_CLOCK_PORT)]]
+set core_clk_indx [lsearch [all_inputs] [get_port $::env(CORE_CLOCK_NAME)]]
 set core_rst_indx [lsearch [all_inputs] [get_port cpu_rst_n]]
 set all_inputs_wo_core_clk_rst [lreplace [all_inputs] $core_clk_indx $core_rst_indx]
 set all_outputs_core [all_outputs] 
 
-set_input_delay $core_input_delay_value  -clock [get_clocks $::env(CORE_CLOCK_PORT)] $all_inputs_wo_core_clk_rst
-set_input_delay 5.0 -clock [get_clocks $::env(CORE_CLOCK_PORT)] {cpu_rst_n}
-set_output_delay $core_output_delay_value  -clock [get_clocks $::env(CORE_CLOCK_PORT)] $all_outputs_core
+set_input_delay $core_input_delay_value  -clock [get_clocks $::env(CORE_CLOCK_NAME)] $all_inputs_wo_core_clk_rst
+set_input_delay 5.0 -clock [get_clocks $::env(CORE_CLOCK_NAME)] {cpu_rst_n}
+set_output_delay $core_output_delay_value  -clock [get_clocks $::env(CORE_CLOCK_NAME)] $all_outputs_core
+
+create_clock [get_ports $::env(RTC_CLOCK_PORT)]  -name $::env(RTC_CLOCK_NAME)  -period $::env(RTC_CLOCK_PERIOD)
 
 ######################################
 # WB Clock domain input output
 ######################################
-create_clock [get_ports $::env(WB_CLOCK_PORT)]  -name $::env(WB_CLOCK_PORT)  -period $::env(WB_CLOCK_PERIOD)
+create_clock [get_ports $::env(WB_CLOCK_PORT)]  -name $::env(WB_CLOCK_NAME)  -period $::env(WB_CLOCK_PERIOD)
 set wb_input_delay_value [expr $::env(WB_CLOCK_PERIOD) * 0.6]
 set wb_output_delay_value [expr $::env(WB_CLOCK_PERIOD) * 0.6]
 puts "\[INFO\]: Setting wb output delay to:$wb_output_delay_value"
 puts "\[INFO\]: Setting wb input delay to: $wb_input_delay_value"
-set wb_clk_indx [lsearch [all_inputs] [get_port $::env(WB_CLOCK_PORT)]]
+set wb_clk_indx [lsearch [all_inputs] [get_port $::env(WB_CLOCK_NAME)]]
 set wb_rst_indx [lsearch [all_inputs] [get_port wb_rst_n]]
 set all_inputs_wo_wb_clk_rst [lreplace [all_inputs] $wb_clk_indx $wb_rst_indx]
 set all_outputs_wb [all_outputs]
 
-set_input_delay $wb_input_delay_value  -clock [get_clocks $::env(WB_CLOCK_PORT)] $all_inputs_wo_wb_clk_rst
-set_input_delay 5.0 -clock [get_clocks $::env(WB_CLOCK_PORT)] {wb_rst_n}
-set_output_delay $wb_output_delay_value  -clock [get_clocks $::env(WB_CLOCK_PORT)] $all_outputs_wb
+set_input_delay $wb_input_delay_value  -clock [get_clocks $::env(WB_CLOCK_NAME)] $all_inputs_wo_wb_clk_rst
+set_input_delay 5.0 -clock [get_clocks $::env(WB_CLOCK_NAME)] {wb_rst_n}
+set_output_delay $wb_output_delay_value  -clock [get_clocks $::env(WB_CLOCK_NAME)] $all_outputs_wb
 
 #### Clock Async Defination
-set_clock_groups -name async_clock -asynchronous -comment "Async Clock group" -group [get_clocks $::env(WB_CLOCK_PORT)] -group [get_clocks $::env(CORE_CLOCK_PORT)]
+set_clock_groups -name async_clock -asynchronous -comment "Async Clock group" -group [get_clocks $::env(WB_CLOCK_NAME)] -group [get_clocks $::env(CORE_CLOCK_NAME)] -group [get_clocks $::env(RTC_CLOCK_NAME)]
+
+set_clock_uncertainty -from $::env(WB_CLOCK_NAME)    -to $::env(WB_CLOCK_NAME)    -setup 0.400
+set_clock_uncertainty -from $::env(CORE_CLOCK_NAME)  -to $::env(CORE_CLOCK_NAME)   -setup 0.400
+set_clock_uncertainty -from $::env(RTC_CLOCK_NAME)   -to $::env(RTC_CLOCK_NAME)   -setup 0.400
+
+set_clock_uncertainty -from $::env(WB_CLOCK_NAME)    -to $::env(WB_CLOCK_NAME)    -hold 0.050
+set_clock_uncertainty -from $::env(CORE_CLOCK_NAME)  -to $::env(CORE_CLOCK_NAME)   -hold 0.050
+set_clock_uncertainty -from $::env(RTC_CLOCK_NAME)   -to $::env(RTC_CLOCK_NAME)   -hold 0.050
+
 
 # TODO set this as parameter
 set_driving_cell -lib_cell $::env(SYNTH_DRIVING_CELL) -pin $::env(SYNTH_DRIVING_CELL_PIN) [all_inputs]
diff --git a/openlane/uart/base.sdc b/openlane/uart/base.sdc
index 01e5123..b64ad61 100644
--- a/openlane/uart/base.sdc
+++ b/openlane/uart/base.sdc
@@ -18,18 +18,17 @@
 set_units -time ns
 set ::env(CORE_CLOCK_PERIOD) "10"
 set ::env(CORE_CLOCK_PORT)   "app_clk"
+set ::env(CORE_CLOCK_NAME)   "app_clk"
 
 set ::env(LINE_CLOCK_PERIOD) "100"
-set ::env(LINE_CLOCK_PORT)   "line_clk"
+set ::env(LINE_CLOCK_PORT)   "u_lineclk_buf/X"
+set ::env(LINE_CLOCK_NAME)   "line_clk"
 
 ######################################
 # WB Clock domain input output
 ######################################
-create_clock [get_ports $::env(CORE_CLOCK_PORT)]  -name $::env(CORE_CLOCK_PORT)  -period $::env(CORE_CLOCK_PERIOD)
-create_clock [get_pins  u_lineclk_buf/X ]  -name $::env(LINE_CLOCK_PORT)  -period $::env(LINE_CLOCK_PERIOD)
-
-
-set_clock_groups -name sys_clk -asynchronous -group $::env(CORE_CLOCK_PORT) -group $::env(LINE_CLOCK_PORT)
+create_clock [get_ports $::env(CORE_CLOCK_PORT)]  -name $::env(CORE_CLOCK_NAME)  -period $::env(CORE_CLOCK_PERIOD)
+create_clock [get_pins  $::env(LINE_CLOCK_PORT)]  -name $::env(LINE_CLOCK_NAME)  -period $::env(LINE_CLOCK_PERIOD)
 
 set core_input_delay_value [expr $::env(CORE_CLOCK_PERIOD) * 0.6]
 set core_output_delay_value [expr $::env(CORE_CLOCK_PERIOD) * 0.6]
@@ -40,23 +39,31 @@
 puts "\[INFO\]: Setting wb input delay to: $core_input_delay_value"
 
 
-set_input_delay 2.0 -clock [get_clocks $::env(CORE_CLOCK_PORT)] {arst_n}
+set_input_delay 2.0 -clock [get_clocks $::env(CORE_CLOCK_NAME)] {arst_n}
 
-set_input_delay  $core_input_delay_value   -clock [get_clocks $::env(CORE_CLOCK_PORT)] [get_port reg_cs*]
-set_input_delay  $core_input_delay_value   -clock [get_clocks $::env(CORE_CLOCK_PORT)] [get_port reg_addr*]
-set_input_delay  $core_input_delay_value   -clock [get_clocks $::env(CORE_CLOCK_PORT)] [get_port reg_wr*]
-set_input_delay  $core_input_delay_value   -clock [get_clocks $::env(CORE_CLOCK_PORT)] [get_port reg_be*]
-set_input_delay  $core_input_delay_value   -clock [get_clocks $::env(CORE_CLOCK_PORT)] [get_port reg_wdata*]
+set_input_delay  $core_input_delay_value   -clock [get_clocks $::env(CORE_CLOCK_NAME)] [get_port reg_cs*]
+set_input_delay  $core_input_delay_value   -clock [get_clocks $::env(CORE_CLOCK_NAME)] [get_port reg_addr*]
+set_input_delay  $core_input_delay_value   -clock [get_clocks $::env(CORE_CLOCK_NAME)] [get_port reg_wr*]
+set_input_delay  $core_input_delay_value   -clock [get_clocks $::env(CORE_CLOCK_NAME)] [get_port reg_be*]
+set_input_delay  $core_input_delay_value   -clock [get_clocks $::env(CORE_CLOCK_NAME)] [get_port reg_wdata*]
 
 
-set_output_delay $core_output_delay_value  -clock [get_clocks $::env(CORE_CLOCK_PORT)] [get_port reg_rdata*]
-set_output_delay $core_output_delay_value  -clock [get_clocks $::env(CORE_CLOCK_PORT)] [get_port reg_ack*]
+set_output_delay $core_output_delay_value  -clock [get_clocks $::env(CORE_CLOCK_NAME)] [get_port reg_rdata*]
+set_output_delay $core_output_delay_value  -clock [get_clocks $::env(CORE_CLOCK_NAME)] [get_port reg_ack*]
 
-set_input_delay  $line_input_delay_value   -clock [get_clocks $::env(LINE_CLOCK_PORT)] [get_port io_in*]
-set_output_delay $line_input_delay_value   -clock [get_clocks $::env(LINE_CLOCK_PORT)] [get_port io_oeb*]
-set_output_delay $line_output_delay_value  -clock [get_clocks $::env(LINE_CLOCK_PORT)] [get_port io_out*]
+set_input_delay  $line_input_delay_value   -clock [get_clocks $::env(LINE_CLOCK_NAME)] [get_port io_in*]
+set_output_delay $line_input_delay_value   -clock [get_clocks $::env(LINE_CLOCK_NAME)] [get_port io_oeb*]
+set_output_delay $line_output_delay_value  -clock [get_clocks $::env(LINE_CLOCK_NAME)] [get_port io_out*]
 
 
+set_clock_groups -name async_clock -asynchronous -comment "Async Clock group" -group [get_clocks $::env(CORE_CLOCK_NAME)] -group [get_clocks $::env(LINE_CLOCK_NAME)] 
+
+set_clock_uncertainty -from $::env(CORE_CLOCK_NAME)   -to $::env(CORE_CLOCK_NAME)  -setup 0.400
+set_clock_uncertainty -from $::env(LINE_CLOCK_NAME)   -to $::env(LINE_CLOCK_NAME) -setup 0.400
+
+set_clock_uncertainty -from $::env(CORE_CLOCK_NAME)   -to $::env(CORE_CLOCK_NAME)  -hold 0.050
+set_clock_uncertainty -from $::env(LINE_CLOCK_NAME)   -to $::env(LINE_CLOCK_NAME) -hold 0.050
+
 # TODO set this as parameter
 set_driving_cell -lib_cell $::env(SYNTH_DRIVING_CELL) -pin $::env(SYNTH_DRIVING_CELL_PIN) [all_inputs]
 set cap_load [expr $::env(SYNTH_CAP_LOAD) / 1000.0]
diff --git a/openlane/user_project_wrapper/base.sdc b/openlane/user_project_wrapper/base.sdc
index 6aabd5a..509c8cb 100644
--- a/openlane/user_project_wrapper/base.sdc
+++ b/openlane/user_project_wrapper/base.sdc
@@ -21,25 +21,29 @@
 set ::env(WBM_CLOCK_NAME)   "wbm_clk_i"
 
 set ::env(WBS_CLOCK_PERIOD) "10"
-set ::env(WBS_CLOCK_PORT)   "u_wb_host*wbs_clk_i"
+set ::env(WBS_CLOCK_PORT)   "u_wb_host*wbs_clk_out"
 set ::env(WBS_CLOCK_NAME)   "wbs_clk_i"
 
 set ::env(SDRAM_CLOCK_PERIOD) "20"
-set ::env(SDRAM_CLOCK_PORT)   "u_glbl_cfg*sdram_clk"
+set ::env(SDRAM_CLOCK_PORT)   "u_wb_host*sdram_clk"
 set ::env(SDRAM_CLOCK_NAME)   "sdram_clk"
 
 set ::env(PAD_SDRAM_CLOCK_PERIOD) "20"
-set ::env(PAD_SDRAM_CLOCK_PORT)   "u_skew_sd_ci*sclk_out"
+set ::env(PAD_SDRAM_CLOCK_PORT)   "u_skew_sd_ci*clk_in"
 set ::env(PAD_SDRAM_CLOCK_NAME)   "sdram_pad_clk"
 
 set ::env(CPU_CLOCK_PERIOD) "50"
-set ::env(CPU_CLOCK_PORT)   "u_glbl_cfg*cpu_clk"
+set ::env(CPU_CLOCK_PORT)   "u_wb_host*cpu_clk"
 set ::env(CPU_CLOCK_NAME)   "cpu_clk"
 
 set ::env(RTC_CLOCK_PERIOD) "50"
-set ::env(RTC_CLOCK_PORT)   "u_glbl_cfg*rtc_clk"
+set ::env(RTC_CLOCK_PORT)   "u_wb_host*rtc_clk"
 set ::env(RTC_CLOCK_NAME)   "rtc_clk"
 
+set ::env(UART_CLOCK_PERIOD) "100"
+set ::env(UART_CLOCK_PORT)   "u_uart_core*u_lineclk_buf/X"
+set ::env(UART_CLOCK_NAME)   "line_clk"
+
 #Setting clock delay to center of the tap
 set_case_analysis 1 [get_pins -hierarchical u_skew_wi*sel[3]]
 set_case_analysis 0 [get_pins -hierarchical u_skew_wi*sel[2]] 
@@ -61,10 +65,10 @@
 set_case_analysis 0 [get_pins -hierarchical u_skew_spi*sel[1]]
 set_case_analysis 0 [get_pins -hierarchical u_skew_spi*sel[0]]
 
-set_case_analysis 1 [get_pins -hierarchical u_skew_glbl*sel[3]]
-set_case_analysis 0 [get_pins -hierarchical u_skew_glbl*sel[2]]
-set_case_analysis 0 [get_pins -hierarchical u_skew_glbl*sel[1]]
-set_case_analysis 0 [get_pins -hierarchical u_skew_glbl*sel[0]]
+set_case_analysis 0 [get_pins -hierarchical u_skew_glbl*sel[3]]
+set_case_analysis 1 [get_pins -hierarchical u_skew_glbl*sel[2]]
+set_case_analysis 1 [get_pins -hierarchical u_skew_glbl*sel[1]]
+set_case_analysis 1 [get_pins -hierarchical u_skew_glbl*sel[0]]
 
 set_case_analysis 1 [get_pins -hierarchical u_skew_wh*sel[3]]
 set_case_analysis 0 [get_pins -hierarchical u_skew_wh*sel[2]]
@@ -80,7 +84,7 @@
 set_case_analysis 0 [get_pins -hierarchical u_skew_sd_ci*sel[3]]
 set_case_analysis 0 [get_pins -hierarchical u_skew_sd_ci*sel[2]]
 set_case_analysis 0 [get_pins -hierarchical u_skew_sd_ci*sel[1]]
-set_case_analysis 0 [get_pins -hierarchical u_skew_sd_ci*sel[0]]
+set_case_analysis 1 [get_pins -hierarchical u_skew_sd_ci*sel[0]]
 
 set_case_analysis 0 [get_pins -hierarchical u_skew_sp_co*sel[3]]
 set_case_analysis 0 [get_pins -hierarchical u_skew_sp_co*sel[2]]
@@ -91,8 +95,8 @@
 # WB MASTER Clock domain input output
 ######################################
 create_clock [get_ports $::env(WBM_CLOCK_PORT)]  -name $::env(WBM_CLOCK_NAME)  -period $::env(WBM_CLOCK_PERIOD)
-set wb_input_delay_value [expr $::env(WBM_CLOCK_PERIOD) * 0.6]
-set wb_output_delay_value [expr $::env(WBM_CLOCK_PERIOD) * 0.6]
+set wb_input_delay_value [expr $::env(WBM_CLOCK_PERIOD) * 0.54]
+set wb_output_delay_value [expr $::env(WBM_CLOCK_PERIOD) * 0.54]
 puts "\[INFO\]: Setting wb output delay to:$wb_output_delay_value"
 puts "\[INFO\]: Setting wb input delay to: $wb_input_delay_value"
 
@@ -108,7 +112,7 @@
 set_input_delay  $wb_input_delay_value   -clock [get_clocks $::env(WBM_CLOCK_NAME)] [get_port wb_cti_i*]
 
 set_output_delay $wb_output_delay_value  -clock [get_clocks $::env(WBM_CLOCK_NAME)] [get_port wbs_dat_o*]
-set_output_delay 3.0                     -clock [get_clocks $::env(WBM_CLOCK_NAME)] [get_port wbs_ack_o*]
+set_output_delay $wb_output_delay_value  -clock [get_clocks $::env(WBM_CLOCK_NAME)] [get_port wbs_ack_o*]
 
 ######################################
 # WishBone Slave Port
@@ -121,10 +125,29 @@
 create_clock [get_pins -hierarchical $::env(PAD_SDRAM_CLOCK_PORT)]  -name $::env(PAD_SDRAM_CLOCK_NAME)  -period $::env(PAD_SDRAM_CLOCK_PERIOD)
 create_clock [get_pins -hierarchical $::env(CPU_CLOCK_PORT)] -name $::env(CPU_CLOCK_NAME)  -period $::env(CPU_CLOCK_PERIOD)
 create_clock [get_pins -hierarchical $::env(RTC_CLOCK_PORT)] -name $::env(RTC_CLOCK_NAME)  -period $::env(RTC_CLOCK_PERIOD)
+create_clock [get_pins -hierarchical $::env(UART_CLOCK_PORT)]  -name $::env(UART_CLOCK_NAME)  -period $::env(UART_CLOCK_PERIOD)
 
-set_clock_groups -name async_clock -asynchronous -comment "Async Clock group" -group [get_clocks $::env(WBM_CLOCK_NAME)] -group [get_clocks $::env(WBS_CLOCK_NAME)] -group [get_clocks $::env(SDRAM_CLOCK_NAME)] -group [get_clocks $::env(CPU_CLOCK_NAME)] -group [get_clocks $::env(RTC_CLOCK_NAME)] 
+set_clock_groups -name async_clock -asynchronous -comment "Async Clock group" -group [get_clocks $::env(WBM_CLOCK_NAME)] -group [get_clocks $::env(WBS_CLOCK_NAME)] -group [get_clocks $::env(SDRAM_CLOCK_NAME)] -group [get_clocks $::env(CPU_CLOCK_NAME)] -group [get_clocks $::env(RTC_CLOCK_NAME)] -group [get_clocks $::env(UART_CLOCK_NAME)] 
 
 
+## Add clock uncertainty
+#Note: We have PAD_SDRAM_CLOCK_NAME => SDRAM_CLOCK_NAME path only
+
+set_clock_uncertainty -from $::env(WBM_CLOCK_NAME)          -to $::env(WBM_CLOCK_NAME)    -setup 0.200
+set_clock_uncertainty -from $::env(WBS_CLOCK_NAME)          -to $::env(WBS_CLOCK_NAME)    -setup 0.200
+set_clock_uncertainty -from $::env(SDRAM_CLOCK_NAME)        -to $::env(SDRAM_CLOCK_NAME)  -setup 0.200
+set_clock_uncertainty -from $::env(PAD_SDRAM_CLOCK_NAME)    -to $::env(SDRAM_CLOCK_NAME)  -setup 0.200
+set_clock_uncertainty -from $::env(CPU_CLOCK_NAME)          -to $::env(CPU_CLOCK_NAME)    -setup 0.200
+set_clock_uncertainty -from $::env(RTC_CLOCK_NAME)          -to $::env(RTC_CLOCK_NAME)    -setup 0.200
+set_clock_uncertainty -from $::env(UART_CLOCK_NAME)         -to $::env(UART_CLOCK_NAME)   -setup 0.200
+
+set_clock_uncertainty -from $::env(WBM_CLOCK_NAME)          -to $::env(WBM_CLOCK_NAME)    -hold 0.050
+set_clock_uncertainty -from $::env(WBS_CLOCK_NAME)          -to $::env(WBS_CLOCK_NAME)    -hold 0.050
+set_clock_uncertainty -from $::env(SDRAM_CLOCK_NAME)        -to $::env(SDRAM_CLOCK_NAME)  -hold 0.050
+set_clock_uncertainty -from $::env(PAD_SDRAM_CLOCK_NAME)    -to $::env(SDRAM_CLOCK_NAME)  -hold 0.050
+set_clock_uncertainty -from $::env(CPU_CLOCK_NAME)          -to $::env(CPU_CLOCK_NAME)    -hold 0.050
+set_clock_uncertainty -from $::env(RTC_CLOCK_NAME)          -to $::env(RTC_CLOCK_NAME)    -hold 0.050
+set_clock_uncertainty -from $::env(UART_CLOCK_NAME)         -to $::env(UART_CLOCK_NAME)   -hold 0.050
 
 # TODO set this as parameter
 set_driving_cell -lib_cell $::env(SYNTH_DRIVING_CELL) -pin $::env(SYNTH_DRIVING_CELL_PIN) [all_inputs]
@@ -132,3 +155,9 @@
 puts "\[INFO\]: Setting load to: $cap_load"
 set_load  $cap_load [all_outputs]
 
+## 2 Multi-cycle setup and 0 hold
+set_multicycle_path -setup -from wbs_adr_i* 2
+set_multicycle_path -hold -from wbs_adr_i* 2
+
+set_multicycle_path -setup -from wbs_we_i* 2
+set_multicycle_path -hold -from wbs_we_i* 2
diff --git a/openlane/user_project_wrapper/config.tcl b/openlane/user_project_wrapper/config.tcl
index f51d3d1..66a7991 100644
--- a/openlane/user_project_wrapper/config.tcl
+++ b/openlane/user_project_wrapper/config.tcl
@@ -50,6 +50,7 @@
 set ::env(SDC_FILE) "$script_dir/base.sdc"
 set ::env(BASE_SDC_FILE) "$script_dir/base.sdc"
 
+set ::env(SYNTH_READ_BLACKBOX_LIB) 1
 
 ### Black-box verilog and views
 set ::env(VERILOG_FILES_BLACKBOX) "\
@@ -59,6 +60,7 @@
         $script_dir/../../verilog/gl/uart.v     \
 	$script_dir/../../verilog/gl/sdram.v \
 	$script_dir/../../verilog/gl/wb_host.v \
+	$script_dir/../../verilog/gl/clk_buf.v \
 	$script_dir/../../verilog/gl/clk_skew_adjust.v \
 	$script_dir/../../verilog/gl/syntacore.v \
 	"
@@ -70,6 +72,7 @@
 	$lef_root/sdram.lef \
 	$lef_root/uart.lef \
 	$lef_root/wb_host.lef \
+	$lef_root/clk_buf.lef \
 	$lef_root/clk_skew_adjust.lef \
 	$lef_root/syntacore.lef \
 	"
@@ -81,6 +84,7 @@
 	$gds_root/uart.gds \
 	$gds_root/sdram.gds \
 	$gds_root/wb_host.gds \
+	$gds_root/clk_buf.gds \
 	$gds_root/clk_skew_adjust.gds \
 	$gds_root/syntacore.gds \
 	"
@@ -101,16 +105,16 @@
 
 # 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
+#set ::env(PL_RANDOM_GLB_PLACEMENT) 1
 
 set ::env(PL_RESIZER_DESIGN_OPTIMIZATIONS) 0
 set ::env(PL_RESIZER_TIMING_OPTIMIZATIONS) 0
 set ::env(PL_RESIZER_BUFFER_INPUT_PORTS) 0
 set ::env(PL_RESIZER_BUFFER_OUTPUT_PORTS) 0
 
+set ::env(TAP_DECAP_INSERTION) "0"
 set ::env(DIODE_INSERTION_STRATEGY) 0
 set ::env(FILL_INSERTION) 0
-set ::env(TAP_DECAP_INSERTION) 0
 set ::env(CLOCK_TREE_SYNTH) 0
 
 #set ::env(MAGIC_EXT_USE_GDS) "1"
diff --git a/openlane/user_project_wrapper/macro.cfg b/openlane/user_project_wrapper/macro.cfg
index c5044dc..ca7a467 100644
--- a/openlane/user_project_wrapper/macro.cfg
+++ b/openlane/user_project_wrapper/macro.cfg
@@ -1,17 +1,21 @@
 u_spi_master            300             2700            N
 u_sdram_ctrl            1000            2700            N
 u_glbl_cfg              2000            2700            N
-u_riscv_top	       500	       800	       N
+u_riscv_top	        500	        800	        N
 u_uart_core             2200            1600            N
 u_intercon              300             2300            N
 u_wb_host               300             300             N
 u_skew_wi               2600            2300            N
-u_skew_riscv            400             800             N
+u_skew_riscv            500             700             N
 u_skew_uart             2200            1500            N
 u_skew_spi              200             2700            E
 u_skew_sdram            900             2700            E
-u_skew_glbl             2000            3200            N
-u_skew_wh               1400            300             N
+u_skew_glbl             1900            2850            N
+u_skew_wh               800             600             N
 u_skew_sd_co            950             3300            N
 u_skew_sd_ci            1100            3300            N
-u_skew_sp_co            300             3400            N
+u_skew_sp_co            100             1800            N
+u_buf1_wb_rstn          2000            500             N
+u_buf2_wb_rstn          2600            1700            N
+u_buf1_wbclk            2100            700             N
+u_buf2_wbclk            1500            2100            N
diff --git a/openlane/user_project_wrapper/sta.tcl b/openlane/user_project_wrapper/sta.tcl
index 72967bd..ac444aa 100644
--- a/openlane/user_project_wrapper/sta.tcl
+++ b/openlane/user_project_wrapper/sta.tcl
@@ -15,55 +15,59 @@
 # SPDX-FileContributor: Modified by Dinesh Annayya <dinesha@opencores.org>
 
 
-set ::env(LIB_FASTEST) "/home/dinesha/workarea/pdk/sky130A/libs.ref/sky130_fd_sc_hd/lib/sky130_fd_sc_hd__ff_n40C_1v95.lib"
-set ::env(LIB_SLOWEST) "/home/dinesha/workarea/pdk/sky130A/libs.ref/sky130_fd_sc_hd/lib/sky130_fd_sc_hd__ss_100C_1v60.lib"
+set ::env(LIB_FASTEST) "$::env(PDK_ROOT)/sky130A/libs.ref/sky130_fd_sc_hd/lib/sky130_fd_sc_hd__ff_n40C_1v95.lib"
+set ::env(LIB_SLOWEST) "$::env(PDK_ROOT)/sky130A/libs.ref/sky130_fd_sc_hd/lib/sky130_fd_sc_hd__ss_100C_1v60.lib"
 set ::env(DESIGN_NAME) "user_project_wrapper"
-set ::env(BASE_SDC_FILE) "/project/openlane/user_project_wrapper/base.sdc"
+set ::env(BASE_SDC_FILE) "base.sdc"
 set ::env(SYNTH_DRIVING_CELL) "sky130_fd_sc_hd__inv_8"
 set ::env(SYNTH_DRIVING_CELL_PIN) "Y"
 set ::env(SYNTH_CAP_LOAD) "17.65"
 set ::env(WIRE_RC_LAYER) "met1"
 
+#To disable empty filler cell black box get created
+#set link_make_black_boxes 0
+
 
 set_cmd_units -time ns -capacitance pF -current mA -voltage V -resistance kOhm -distance um
 define_corners wc bc
 read_liberty -corner bc $::env(LIB_FASTEST)
 read_liberty -corner wc $::env(LIB_SLOWEST)
-read_verilog /project/verilog/gl/clk_skew_adjust.v  
-read_verilog /project/verilog/gl/glbl_cfg.v  
-#read_verilog /project/verilog/gl/sdram.v  
-read_verilog /project/verilog/gl/spi_master.v  
-#read_verilog /project/verilog/gl/syntacore.v  
-read_verilog /project/verilog/gl/uart.v  
-read_verilog /project/verilog/gl/wb_host.v  
-read_verilog /project/verilog/gl/wb_interconnect.v
-read_verilog /project/verilog/gl/user_project_wrapper.v  
+read_verilog netlist/clk_skew_adjust.v  
+read_verilog netlist/glbl_cfg.v  
+read_verilog netlist/sdram.v  
+read_verilog netlist/spi_master.v 
+read_verilog netlist/syntacore.v  
+read_verilog netlist/uart.v  
+read_verilog netlist/wb_host.v  
+read_verilog netlist/wb_interconnect.v
+read_verilog netlist/user_project_wrapper.v  
 link_design  $::env(DESIGN_NAME)
 
-read_spef -path u_skew_wi    /project/spef/clk_skew_adjust.spef  
-read_spef -path u_skew_riscv /project/spef/clk_skew_adjust.spef  
-read_spef -path u_skew_uart  /project/spef/clk_skew_adjust.spef  
-read_spef -path u_skew_spi   /project/spef/clk_skew_adjust.spef  
-read_spef -path u_skew_sdram /project/spef/clk_skew_adjust.spef  
-read_spef -path u_skew_glbl  /project/spef/clk_skew_adjust.spef  
-read_spef -path u_skew_wh    /project/spef/clk_skew_adjust.spef  
-read_spef -path u_skew_sd_co /project/spef/clk_skew_adjust.spef  
-read_spef -path u_skew_sd_ci /project/spef/clk_skew_adjust.spef  
-read_spef -path u_skew_sp_co /project/spef/clk_skew_adjust.spef  
-read_spef -path u_glbl_cfg   /project/spef/glbl_cfg.spef  
-#read_spef -path u_riscv_top  /project/spef/scr1_top_wb.spef  
-#read_spef -path u_sdram_ctrl /project/spef/sdrc_top.spef  
-read_spef -path u_spi_master /project/spef/spim_top.spef  
-read_spef -path u_uart_core  /project/spef/uart_core.spef  
-read_spef -path u_wb_host    /project/spef/wb_host.spef  
-read_spef -path u_intercon   /project/spef/wb_interconnect.spef
-read_spef /project/spef/user_project_wrapper.spef  
+
+read_spef -path u_skew_wi    ../../spef/clk_skew_adjust.spef  
+read_spef -path u_skew_riscv ../../spef/clk_skew_adjust.spef  
+read_spef -path u_skew_uart  ../../spef/clk_skew_adjust.spef  
+read_spef -path u_skew_spi   ../../spef/clk_skew_adjust.spef  
+read_spef -path u_skew_sdram ../../spef/clk_skew_adjust.spef  
+read_spef -path u_skew_glbl  ../../spef/clk_skew_adjust.spef  
+read_spef -path u_skew_wh    ../../spef/clk_skew_adjust.spef  
+read_spef -path u_skew_sd_co ../../spef/clk_skew_adjust.spef  
+read_spef -path u_skew_sd_ci ../../spef/clk_skew_adjust.spef  
+read_spef -path u_skew_sp_co ../../spef/clk_skew_adjust.spef  
+read_spef -path u_glbl_cfg   ../../spef/glbl_cfg.spef  
+read_spef -path u_riscv_top  ../../spef/scr1_top_wb.spef  
+read_spef -path u_sdram_ctrl ../../spef/sdrc_top.spef  
+read_spef -path u_spi_master ../../spef/spim_top.spef  
+read_spef -path u_uart_core  ../../spef/uart_core.spef  
+read_spef -path u_wb_host    ../../spef/wb_host.spef  
+read_spef -path u_intercon   ../../spef/wb_interconnect.spef
+read_spef ../..//spef/user_project_wrapper.spef  
 
 
 read_sdc -echo $::env(BASE_SDC_FILE)
 
 # check for missing constraints
-check_setup  -verbose > unconstraints.rpt
+#check_setup  -verbose > unconstraints.rpt
 
 set_operating_conditions -analysis_type single
 # Propgate the clock
@@ -71,11 +75,25 @@
 
 report_tns
 report_wns
-report_power 
-report_checks -unique -slack_max -0.0 -group_count 100 
-report_checks -unique -slack_min -0.0 -group_count 100 
+#report_power 
+echo "################ CORNER : WC (SLOW) TIMING Report ###################" > timing_max.rpt
+report_checks -unique -path_delay max -slack_max -0.0 -group_count 100 -corner wc >> timing_max.rpt
+report_checks -group_count 100 -path_delay max  -slack_max -0.01 -path_group $::env(WBM_CLOCK_NAME)       -corner wc  > timing_max.rpt
+report_checks -group_count 100 -path_delay max  -slack_max -0.01 -path_group $::env(WBS_CLOCK_NAME)       -corner wc  > timing_max.rpt
+report_checks -group_count 100 -path_delay max  -slack_max -0.01 -path_group $::env(SDRAM_CLOCK_NAME)     -corner wc  > timing_max.rpt
+report_checks -group_count 100 -path_delay max  -slack_max -0.01 -path_group $::env(PAD_SDRAM_CLOCK_NAME) -corner wc  > timing_max.rpt
+report_checks -group_count 100 -path_delay max  -slack_max -0.01 -path_group $::env(CPU_CLOCK_NAME)       -corner wc  > timing_max.rpt
+report_checks -group_count 100 -path_delay max  -slack_max -0.01 -path_group $::env(RTC_CLOCK_NAME)       -corner wc  > timing_max.rpt
+
+echo "################ CORNER : BC (SLOW) TIMING Report ###################" > timing_min.rpt
+report_checks -unique -path_delay min -slack_min -0.0 -group_count 100 -corner bc >> timing_min.rpt
+report_checks -group_count 100  -path_delay min -slack_min -0.01 -path_group $::env(WBM_CLOCK_NAME)        -corner bc  > timing_min.rpt
+report_checks -group_count 100  -path_delay min -slack_min -0.01 -path_group $::env(WBS_CLOCK_NAME)        -corner bc  > timing_min.rpt
+report_checks -group_count 100  -path_delay min -slack_min -0.01 -path_group $::env(SDRAM_CLOCK_NAME)      -corner bc  > timing_min.rpt
+report_checks -group_count 100  -path_delay min -slack_min -0.01 -path_group $::env(PAD_SDRAM_CLOCK_NAME)  -corner bc  > timing_min.rpt
+report_checks -group_count 100  -path_delay min -slack_min -0.01 -path_group $::env(CPU_CLOCK_NAME)        -corner bc  > timing_min.rpt
+report_checks -group_count 100  -path_delay min -slack_min -0.01 -path_group $::env(RTC_CLOCK_NAME)        -corner bc  > timing_min.rpt
+
 report_checks -path_delay min_max 
-report_checks -group_count 100  -slack_max -0.01  > timing.rpt
 
-report_checks -group_count 100  -slack_min -0.01 >> timing.rpt
-
+exit
diff --git a/openlane/wb_host/base.sdc b/openlane/wb_host/base.sdc
index 0b5df4d..cd46516 100644
--- a/openlane/wb_host/base.sdc
+++ b/openlane/wb_host/base.sdc
@@ -18,9 +18,11 @@
 set_units -time ns
 set ::env(WBM_CLOCK_PERIOD) "10"
 set ::env(WBM_CLOCK_PORT)   "wbm_clk_i"
+set ::env(WBM_CLOCK_NAME)   "wbm_clk_i"
 
 set ::env(WBS_CLOCK_PERIOD) "10"
 set ::env(WBS_CLOCK_PORT)   "wbs_clk_i"
+set ::env(WBS_CLOCK_NAME)   "wbs_clk_i"
 
 ######################################
 # WB Clock domain input output
@@ -48,20 +50,35 @@
 set_output_delay $wb_output_delay_value  -clock [get_clocks $::env(WBM_CLOCK_PORT)] [get_port wbm_ack_o*]
 set_output_delay $wb_output_delay_value  -clock [get_clocks $::env(WBM_CLOCK_PORT)] [get_port wbm_err_o*]
 
-set_output_delay  $wb_input_delay_value   -clock [get_clocks $::env(WBS_CLOCK_PORT)] [get_port wbs_cyc_o*]
-set_output_delay  $wb_input_delay_value   -clock [get_clocks $::env(WBS_CLOCK_PORT)] [get_port wbs_stb_o*]
-set_output_delay  $wb_input_delay_value   -clock [get_clocks $::env(WBS_CLOCK_PORT)] [get_port wbs_adr_o*]
-set_output_delay  $wb_input_delay_value   -clock [get_clocks $::env(WBS_CLOCK_PORT)] [get_port wbs_we_o*]
-set_output_delay  $wb_input_delay_value   -clock [get_clocks $::env(WBS_CLOCK_PORT)] [get_port wbs_dat_o*]
-set_output_delay  $wb_input_delay_value   -clock [get_clocks $::env(WBS_CLOCK_PORT)] [get_port wbs_sel_o*]
+set_output_delay 4.5   -clock [get_clocks $::env(WBS_CLOCK_PORT)] [get_port wbs_cyc_o*]
+set_output_delay 4.5   -clock [get_clocks $::env(WBS_CLOCK_PORT)] [get_port wbs_stb_o*]
+set_output_delay 4.5   -clock [get_clocks $::env(WBS_CLOCK_PORT)] [get_port wbs_adr_o*]
+set_output_delay 4.5   -clock [get_clocks $::env(WBS_CLOCK_PORT)] [get_port wbs_we_o*]
+set_output_delay 4.5   -clock [get_clocks $::env(WBS_CLOCK_PORT)] [get_port wbs_dat_o*]
+set_output_delay 4.5   -clock [get_clocks $::env(WBS_CLOCK_PORT)] [get_port wbs_sel_o*]
 
 set_input_delay $wb_output_delay_value  -clock [get_clocks $::env(WBS_CLOCK_PORT)] [get_port wbs_dat_i*]
 set_input_delay $wb_output_delay_value  -clock [get_clocks $::env(WBS_CLOCK_PORT)] [get_port wbs_ack_i*]
 
 
+# WBM and WBS are async to each other
+set_clock_groups -name async_clock -asynchronous -comment "Async Clock group" -group [get_clocks $::env(WBM_CLOCK_PORT)] -group [get_clocks $::env(WBS_CLOCK_NAME)]
+
+set_clock_uncertainty -from $::env(WBM_CLOCK_NAME)          -to $::env(WBM_CLOCK_NAME)    -setup 0.400
+set_clock_uncertainty -from $::env(WBS_CLOCK_NAME)          -to $::env(WBS_CLOCK_NAME)    -setup 0.400
+
+set_clock_uncertainty -from $::env(WBM_CLOCK_NAME)          -to $::env(WBM_CLOCK_NAME)    -hold 0.050
+set_clock_uncertainty -from $::env(WBS_CLOCK_NAME)          -to $::env(WBS_CLOCK_NAME)    -hold 0.050
+
 # TODO set this as parameter
 set_driving_cell -lib_cell $::env(SYNTH_DRIVING_CELL) -pin $::env(SYNTH_DRIVING_CELL_PIN) [all_inputs]
 set cap_load [expr $::env(SYNTH_CAP_LOAD) / 1000.0]
 puts "\[INFO\]: Setting load to: $cap_load"
 set_load  $cap_load [all_outputs]
 
+## 2 Multi-cycle setup and 0 hold
+set_multicycle_path -setup -from wbm_adr_i* 2
+set_multicycle_path -hold -from wbm_adr_i* 2
+
+set_multicycle_path -setup -from wbm_we_i* 2
+set_multicycle_path -hold -from wbm_we_i* 2
diff --git a/openlane/wb_host/pin_order.cfg b/openlane/wb_host/pin_order.cfg
index d0b09f1..6b90110 100644
--- a/openlane/wb_host/pin_order.cfg
+++ b/openlane/wb_host/pin_order.cfg
@@ -2,44 +2,29 @@
 
 #MANUAL_PLACE
 
-#E
-wbs_clk_i     0000 0 2   
-wbs_clk_out   
-cpu_clk
-rtc_clk
-wbd_int_rst_n
-cpu_rst_n
-spi_rst_n
-sdram_rst_n
-cfg_clk_ctrl1\[27\]
-cfg_clk_ctrl1\[26\]
-cfg_clk_ctrl1\[25\]
-cfg_clk_ctrl1\[24\]
-cfg_clk_ctrl1\[11\]
-cfg_clk_ctrl1\[10\]
-cfg_clk_ctrl1\[9\]
-cfg_clk_ctrl1\[8\]
-
 
 #W
+sdram_clk           0000 0 4
+sdram_rst_n
+cpu_rst_n
+spi_rst_n
 cfg_clk_ctrl1\[15\]
 cfg_clk_ctrl1\[14\]
 cfg_clk_ctrl1\[13\]
 cfg_clk_ctrl1\[12\]
-sdram_clk
 
 
 
 
 #S
-user_clock2     0000 0  2
-user_clock1  
+user_clock2     
+user_clock1     
 wbm_clk_i       
-wbm_rst_i        
+wbm_rst_i       
 wbm_ack_o       
-wbm_cyc_i        
-wbm_stb_i        
-wbm_we_i         
+wbm_cyc_i       
+wbm_stb_i       
+wbm_we_i        
 wbm_adr_i\[0\]  
 wbm_dat_i\[0\]  
 wbm_dat_o\[0\]  
@@ -74,41 +59,42 @@
 wbm_adr_i\[9\]  
 wbm_dat_i\[9\]  
 wbm_dat_o\[9\]  
-wbm_adr_i\[10\]  
-wbm_dat_i\[10\]  
-wbm_dat_o\[10\]  
-wbm_adr_i\[11\]  
-wbm_dat_i\[11\]  
-wbm_dat_o\[11\]  
-wbm_adr_i\[12\]  
-wbm_dat_i\[12\]  
-wbm_dat_o\[12\]  
-wbm_adr_i\[13\]  
-wbm_dat_i\[13\]  
-wbm_dat_o\[13\]  
-wbm_adr_i\[14\]  
-wbm_dat_i\[14\]  
-wbm_dat_o\[14\]  
-wbm_adr_i\[15\]  
-wbm_dat_i\[15\]  
-wbm_dat_o\[15\]  
-wbm_adr_i\[16\]  
-wbm_dat_i\[16\]  
-wbm_dat_o\[16\]  
-wbm_adr_i\[17\]  
-wbm_dat_i\[17\]  
-wbm_dat_o\[17\]  
-wbm_adr_i\[18\]  
-wbm_dat_i\[18\]  
-wbm_dat_o\[18\]  
-wbm_adr_i\[19\]  
-wbm_dat_i\[19\]  
-wbm_dat_o\[19\]  
-wbm_adr_i\[20\]  
-wbm_dat_i\[20\]  
-wbm_dat_o\[20\]  
-wbm_adr_i\[21\]  
-wbm_dat_i\[21\]  
+wbm_adr_i\[10\] 
+wbm_dat_i\[10\] 
+wbm_dat_o\[10\] 
+wbm_adr_i\[11\] 
+wbm_dat_i\[11\] 
+wbm_dat_o\[11\] 
+wbm_adr_i\[12\] 
+wbm_dat_i\[12\] 
+wbm_dat_o\[12\] 
+wbm_adr_i\[13\] 
+wbm_dat_i\[13\] 
+wbm_dat_o\[13\] 
+wbm_adr_i\[14\] 
+wbm_dat_i\[14\] 
+wbm_dat_o\[14\] 
+wbm_adr_i\[15\] 
+wbm_dat_i\[15\] 
+wbm_dat_o\[15\] 
+wbm_adr_i\[16\] 
+wbm_dat_i\[16\] 
+wbm_dat_o\[16\] 
+wbm_adr_i\[17\] 
+
+wbm_dat_i\[17\] 
+wbm_dat_o\[17\] 
+wbm_adr_i\[18\] 
+wbm_dat_i\[18\] 
+wbm_dat_o\[18\] 
+wbm_adr_i\[19\] 
+wbm_dat_i\[19\] 
+wbm_dat_o\[19\] 
+wbm_adr_i\[20\] 
+wbm_dat_i\[20\] 
+wbm_dat_o\[20\] 
+wbm_adr_i\[21\] 
+wbm_dat_i\[21\] 
 wbm_dat_o\[21\]  
 wbm_adr_i\[22\]  
 wbm_dat_i\[22\]  
@@ -142,6 +128,19 @@
 wbm_dat_o\[31\]  
 wbm_err_o        
 
+cfg_clk_ctrl1\[11\] 200 0 4
+cfg_clk_ctrl1\[10\]
+cfg_clk_ctrl1\[9\]
+cfg_clk_ctrl1\[8\]
+cfg_clk_ctrl1\[27\]
+cfg_clk_ctrl1\[26\]
+cfg_clk_ctrl1\[25\]
+cfg_clk_ctrl1\[24\]
+wbs_clk_i            400 0 4
+wbs_clk_out   
+cpu_clk
+rtc_clk
+wbd_int_rst_n
 
 #N
 wbs_stb_o        0000 0 2
diff --git a/openlane/wb_interconnect/base.sdc b/openlane/wb_interconnect/base.sdc
index 6cadf2f..9be4a55 100644
--- a/openlane/wb_interconnect/base.sdc
+++ b/openlane/wb_interconnect/base.sdc
@@ -32,6 +32,8 @@
 set rst_indx [lsearch [all_inputs] [get_port rst_n]]
 set all_inputs_wo_clk_rst [lreplace [all_inputs] $clk_indx $rst_indx]
 
+set_clock_uncertainty -from $::env(CLOCK_PORT) -to $::env(CLOCK_PORT)  -setup 0.400
+set_clock_uncertainty -from $::env(CLOCK_PORT) -to $::env(CLOCK_PORT)  -hold  0.050
 
 # correct resetn
 set_input_delay $input_delay_value  -clock [get_clocks $::env(CLOCK_PORT)] $all_inputs_wo_clk_rst
diff --git a/signoff/clk_buf/OPENLANE_VERSION b/signoff/clk_buf/OPENLANE_VERSION
new file mode 100644
index 0000000..a2633b1
--- /dev/null
+++ b/signoff/clk_buf/OPENLANE_VERSION
@@ -0,0 +1 @@
+openlane rc7
diff --git a/signoff/clk_buf/PDK_SOURCES b/signoff/clk_buf/PDK_SOURCES
new file mode 100644
index 0000000..8b58bd5
--- /dev/null
+++ b/signoff/clk_buf/PDK_SOURCES
@@ -0,0 +1,6 @@
+-ne openlane 
+a68c95289612a361870acedb7f6478fcfae32e49
+-ne skywater-pdk 
+f6f76f3dc99526c6fc2cfede19b5b1227d4ebde7
+-ne open_pdks 
+522a373441a865fee9d6e3783015b4445f11afe6
diff --git a/signoff/clk_buf/final_summary_report.csv b/signoff/clk_buf/final_summary_report.csv
new file mode 100644
index 0000000..c4c7b1f
--- /dev/null
+++ b/signoff/clk_buf/final_summary_report.csv
@@ -0,0 +1,2 @@
+,design,design_name,config,flow_status,total_runtime,routed_runtime,(Cell/mm^2)/Core_Util,DIEAREA_mm^2,CellPer_mm^2,OpenDP_Util,Peak_Memory_Usage_MB,cell_count,tritonRoute_violations,Short_violations,MetSpc_violations,OffGrid_violations,MinHole_violations,Other_violations,Magic_violations,antenna_violations,lvs_total_errors,cvc_total_errors,klayout_violations,wire_length,vias,wns,pl_wns,optimized_wns,fastroute_wns,spef_wns,tns,pl_tns,optimized_tns,fastroute_tns,spef_tns,HPWL,routing_layer1_pct,routing_layer2_pct,routing_layer3_pct,routing_layer4_pct,routing_layer5_pct,routing_layer6_pct,wires_count,wire_bits,public_wires_count,public_wire_bits,memories_count,memory_bits,processes_count,cells_pre_abc,AND,DFF,NAND,NOR,OR,XOR,XNOR,MUX,inputs,outputs,level,EndCaps,TapCells,Diodes,Total_Physical_Cells,suggested_clock_frequency,suggested_clock_period,CLOCK_PERIOD,SYNTH_STRATEGY,SYNTH_MAX_FANOUT,FP_CORE_UTIL,FP_ASPECT_RATIO,FP_PDN_VPITCH,FP_PDN_HPITCH,PL_TARGET_DENSITY,GLB_RT_ADJUSTMENT,STD_CELL_LIBRARY,CELL_PAD,DIODE_INSERTION_STRATEGY
+0,/project/openlane/clk_buf,clk_buf,clk_buf,Flow_completed,0h1m1s,0h0m25s,1851.851851851852,0.0009,1111.111111111111,8,379.25,1,0,0,0,0,0,0,0,0,0,0,0,41,4,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,45365,0.0,0.93,0.53,0.0,-1,-1,2,2,2,2,0,0,0,1,0,0,0,0,0,0,0,0,-1,-1,-1,14,4,0,18,90.9090909090909,11,10,AREA 0,5,60,1,153.6,153.18,0.55,0,sky130_fd_sc_hd,4,3
diff --git a/signoff/glbl_cfg/final_summary_report.csv b/signoff/glbl_cfg/final_summary_report.csv
index 359db11..1ec2d16 100644
--- a/signoff/glbl_cfg/final_summary_report.csv
+++ b/signoff/glbl_cfg/final_summary_report.csv
@@ -1,2 +1,2 @@
 ,design,design_name,config,flow_status,total_runtime,routed_runtime,(Cell/mm^2)/Core_Util,DIEAREA_mm^2,CellPer_mm^2,OpenDP_Util,Peak_Memory_Usage_MB,cell_count,tritonRoute_violations,Short_violations,MetSpc_violations,OffGrid_violations,MinHole_violations,Other_violations,Magic_violations,antenna_violations,lvs_total_errors,cvc_total_errors,klayout_violations,wire_length,vias,wns,pl_wns,optimized_wns,fastroute_wns,spef_wns,tns,pl_tns,optimized_tns,fastroute_tns,spef_tns,HPWL,routing_layer1_pct,routing_layer2_pct,routing_layer3_pct,routing_layer4_pct,routing_layer5_pct,routing_layer6_pct,wires_count,wire_bits,public_wires_count,public_wire_bits,memories_count,memory_bits,processes_count,cells_pre_abc,AND,DFF,NAND,NOR,OR,XOR,XNOR,MUX,inputs,outputs,level,EndCaps,TapCells,Diodes,Total_Physical_Cells,suggested_clock_frequency,suggested_clock_period,CLOCK_PERIOD,SYNTH_STRATEGY,SYNTH_MAX_FANOUT,FP_CORE_UTIL,FP_ASPECT_RATIO,FP_PDN_VPITCH,FP_PDN_HPITCH,PL_TARGET_DENSITY,GLB_RT_ADJUSTMENT,STD_CELL_LIBRARY,CELL_PAD,DIODE_INSERTION_STRATEGY
-0,/project/openlane/glbl_cfg,glbl_cfg,glbl_cfg,Flow_completed,0h5m23s,0h3m25s,45883.33333333334,0.12,22941.66666666667,40,553.93,2753,0,0,0,0,0,0,0,4,0,-1,0,141562,23694,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,98863982,0.0,29.06,28.48,0.34,-1,-1,2637,2802,459,624,0,0,0,2753,1,0,3,0,471,0,0,562,577,533,10,278,1410,0,1688,100.0,10.0,10,AREA 0,4,50,1,153.6,153.18,0.55,0,sky130_fd_sc_hd,4,4
+0,/project/openlane/glbl_cfg,glbl_cfg,glbl_cfg,Flow_completed,0h5m16s,0h3m23s,45883.33333333334,0.12,22941.66666666667,40,559.94,2753,0,0,0,0,0,0,0,1,0,-1,0,141067,23714,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,98939272,0.0,28.84,28.31,0.23,-1,-1,2637,2802,459,624,0,0,0,2753,1,0,3,0,471,0,0,562,577,533,10,278,1410,0,1688,100.0,10.0,10,AREA 0,4,50,1,153.6,153.18,0.55,0,sky130_fd_sc_hd,4,4
diff --git a/signoff/sdram/final_summary_report.csv b/signoff/sdram/final_summary_report.csv
index 7d8ac3a..9f8bba1 100644
--- a/signoff/sdram/final_summary_report.csv
+++ b/signoff/sdram/final_summary_report.csv
@@ -1,2 +1,2 @@
 ,design,design_name,config,flow_status,total_runtime,routed_runtime,(Cell/mm^2)/Core_Util,DIEAREA_mm^2,CellPer_mm^2,OpenDP_Util,Peak_Memory_Usage_MB,cell_count,tritonRoute_violations,Short_violations,MetSpc_violations,OffGrid_violations,MinHole_violations,Other_violations,Magic_violations,antenna_violations,lvs_total_errors,cvc_total_errors,klayout_violations,wire_length,vias,wns,pl_wns,optimized_wns,fastroute_wns,spef_wns,tns,pl_tns,optimized_tns,fastroute_tns,spef_tns,HPWL,routing_layer1_pct,routing_layer2_pct,routing_layer3_pct,routing_layer4_pct,routing_layer5_pct,routing_layer6_pct,wires_count,wire_bits,public_wires_count,public_wire_bits,memories_count,memory_bits,processes_count,cells_pre_abc,AND,DFF,NAND,NOR,OR,XOR,XNOR,MUX,inputs,outputs,level,EndCaps,TapCells,Diodes,Total_Physical_Cells,suggested_clock_frequency,suggested_clock_period,CLOCK_PERIOD,SYNTH_STRATEGY,SYNTH_MAX_FANOUT,FP_CORE_UTIL,FP_ASPECT_RATIO,FP_PDN_VPITCH,FP_PDN_HPITCH,PL_TARGET_DENSITY,GLB_RT_ADJUSTMENT,STD_CELL_LIBRARY,CELL_PAD,DIODE_INSERTION_STRATEGY
-0,/project/openlane/sdram,sdrc_top,sdram,Flow_completed,0h9m25s,0h5m13s,41131.42857142857,0.35,20565.714285714286,27,654.48,7198,0,0,0,0,0,0,0,14,0,-1,0,307108,51429,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,245789185,0.0,20.86,16.44,1.36,-1,-1,7102,7361,1246,1505,0,0,0,7198,197,107,83,94,354,211,32,2289,1267,1186,27,350,4248,0,4598,100.0,10.0,10,AREA 0,4,50,1,153.6,153.18,0.55,0,sky130_fd_sc_hd,4,3
+0,/project/openlane/sdram,sdrc_top,sdram,Flow_completed,0h8m49s,0h4m33s,41131.42857142857,0.35,20565.714285714286,27,656.29,7198,0,0,0,0,0,0,0,14,0,-1,0,307108,51429,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,245789185,0.0,20.86,16.44,1.36,-1,-1,7102,7361,1246,1505,0,0,0,7198,197,107,83,94,354,211,32,2289,1267,1186,27,350,4248,0,4598,100.0,10.0,10,AREA 0,4,50,1,153.6,153.18,0.55,0,sky130_fd_sc_hd,4,3
diff --git a/signoff/spi_master/final_summary_report.csv b/signoff/spi_master/final_summary_report.csv
index dae8ae2..9d40c99 100644
--- a/signoff/spi_master/final_summary_report.csv
+++ b/signoff/spi_master/final_summary_report.csv
@@ -1,2 +1,2 @@
 ,design,design_name,config,flow_status,total_runtime,routed_runtime,(Cell/mm^2)/Core_Util,DIEAREA_mm^2,CellPer_mm^2,OpenDP_Util,Peak_Memory_Usage_MB,cell_count,tritonRoute_violations,Short_violations,MetSpc_violations,OffGrid_violations,MinHole_violations,Other_violations,Magic_violations,antenna_violations,lvs_total_errors,cvc_total_errors,klayout_violations,wire_length,vias,wns,pl_wns,optimized_wns,fastroute_wns,spef_wns,tns,pl_tns,optimized_tns,fastroute_tns,spef_tns,HPWL,routing_layer1_pct,routing_layer2_pct,routing_layer3_pct,routing_layer4_pct,routing_layer5_pct,routing_layer6_pct,wires_count,wire_bits,public_wires_count,public_wire_bits,memories_count,memory_bits,processes_count,cells_pre_abc,AND,DFF,NAND,NOR,OR,XOR,XNOR,MUX,inputs,outputs,level,EndCaps,TapCells,Diodes,Total_Physical_Cells,suggested_clock_frequency,suggested_clock_period,CLOCK_PERIOD,SYNTH_STRATEGY,SYNTH_MAX_FANOUT,FP_CORE_UTIL,FP_ASPECT_RATIO,FP_PDN_VPITCH,FP_PDN_HPITCH,PL_TARGET_DENSITY,GLB_RT_ADJUSTMENT,STD_CELL_LIBRARY,CELL_PAD,DIODE_INSERTION_STRATEGY
-0,/project/openlane/spi_master,spim_top,spi_master,Flow_completed,0h6m47s,0h3m51s,45758.33333333334,0.24,22879.16666666667,33,615.0,5491,0,0,0,0,0,0,0,4,4,-1,0,244856,41928,-0.01,-0.01,0.0,0.0,0.0,-0.01,-0.01,0.0,0.0,0.0,192084576,0.0,17.57,28.06,0.0,-1,-1,5427,5567,901,1041,0,0,0,5491,223,0,184,93,748,126,37,1613,982,921,24,424,2889,0,3313,100.0,10.0,10,AREA 0,4,50,1,153.6,153.18,0.55,0,sky130_fd_sc_hd,4,3
+0,/project/openlane/spi_master,spim_top,spi_master,Flow_completed,0h7m22s,0h4m17s,45758.33333333334,0.24,22879.16666666667,33,609.27,5491,0,0,0,0,0,0,0,4,4,-1,0,244856,41928,-0.01,-0.01,0.0,0.0,0.0,-0.01,-0.01,0.0,0.0,0.0,192084576,0.0,17.57,28.06,0.0,-1,-1,5427,5567,901,1041,0,0,0,5491,223,0,184,93,748,126,37,1613,982,921,24,424,2889,0,3313,100.0,10.0,10,AREA 0,4,50,1,153.6,153.18,0.55,0,sky130_fd_sc_hd,4,3
diff --git a/signoff/syntacore/final_summary_report.csv b/signoff/syntacore/final_summary_report.csv
index a01c86f..0fd7224 100644
--- a/signoff/syntacore/final_summary_report.csv
+++ b/signoff/syntacore/final_summary_report.csv
@@ -1,2 +1,2 @@
 ,design,design_name,config,flow_status,total_runtime,routed_runtime,(Cell/mm^2)/Core_Util,DIEAREA_mm^2,CellPer_mm^2,OpenDP_Util,Peak_Memory_Usage_MB,cell_count,tritonRoute_violations,Short_violations,MetSpc_violations,OffGrid_violations,MinHole_violations,Other_violations,Magic_violations,antenna_violations,lvs_total_errors,cvc_total_errors,klayout_violations,wire_length,vias,wns,pl_wns,optimized_wns,fastroute_wns,spef_wns,tns,pl_tns,optimized_tns,fastroute_tns,spef_tns,HPWL,routing_layer1_pct,routing_layer2_pct,routing_layer3_pct,routing_layer4_pct,routing_layer5_pct,routing_layer6_pct,wires_count,wire_bits,public_wires_count,public_wire_bits,memories_count,memory_bits,processes_count,cells_pre_abc,AND,DFF,NAND,NOR,OR,XOR,XNOR,MUX,inputs,outputs,level,EndCaps,TapCells,Diodes,Total_Physical_Cells,suggested_clock_frequency,suggested_clock_period,CLOCK_PERIOD,SYNTH_STRATEGY,SYNTH_MAX_FANOUT,FP_CORE_UTIL,FP_ASPECT_RATIO,FP_PDN_VPITCH,FP_PDN_HPITCH,PL_TARGET_DENSITY,GLB_RT_ADJUSTMENT,STD_CELL_LIBRARY,CELL_PAD,DIODE_INSERTION_STRATEGY
-0,/project/openlane/syntacore,scr1_top_wb,syntacore,Flow_completed,0h51m11s,0h28m28s,34498.88888888888,1.8,17249.44444444444,23,1210.03,31049,0,0,0,0,0,0,0,76,9,-1,0,1617218,250691,-4.42,-4.42,-4.38,-4.38,-4.45,-34.56,-34.56,-34.86,-34.86,-35.41,1349556396,0.0,18.48,16.7,4.85,0.56,-1,30872,31173,2777,3078,0,0,0,31049,637,0,695,2031,3988,2108,1314,7432,2838,2808,95,866,22836,0,23702,69.20415224913495,14.45,10,AREA 0,4,50,1,153.6,153.18,0.55,0,sky130_fd_sc_hd,4,3
+0,/project/openlane/syntacore,scr1_top_wb,syntacore,Flow_completed,0h53m13s,0h28m58s,34498.88888888888,1.8,17249.44444444444,23,1213.48,31049,0,0,0,0,0,0,0,57,10,-1,0,1624212,251814,-4.82,-4.82,-4.79,-4.79,-4.92,-38.56,-38.56,-38.91,-38.91,-39.55,1349556396,0.0,18.58,16.71,4.86,0.69,-1,30872,31173,2777,3078,0,0,0,31049,637,0,695,2031,3988,2108,1314,7432,2838,2808,95,866,22836,5,23707,67.02412868632707,14.92,10,AREA 0,4,50,1,153.6,153.18,0.55,0,sky130_fd_sc_hd,4,3
diff --git a/signoff/uart/final_summary_report.csv b/signoff/uart/final_summary_report.csv
index 63ea5b4..ee96d6e 100644
--- a/signoff/uart/final_summary_report.csv
+++ b/signoff/uart/final_summary_report.csv
@@ -1,2 +1,2 @@
 ,design,design_name,config,flow_status,total_runtime,routed_runtime,(Cell/mm^2)/Core_Util,DIEAREA_mm^2,CellPer_mm^2,OpenDP_Util,Peak_Memory_Usage_MB,cell_count,tritonRoute_violations,Short_violations,MetSpc_violations,OffGrid_violations,MinHole_violations,Other_violations,Magic_violations,antenna_violations,lvs_total_errors,cvc_total_errors,klayout_violations,wire_length,vias,wns,pl_wns,optimized_wns,fastroute_wns,spef_wns,tns,pl_tns,optimized_tns,fastroute_tns,spef_tns,HPWL,routing_layer1_pct,routing_layer2_pct,routing_layer3_pct,routing_layer4_pct,routing_layer5_pct,routing_layer6_pct,wires_count,wire_bits,public_wires_count,public_wire_bits,memories_count,memory_bits,processes_count,cells_pre_abc,AND,DFF,NAND,NOR,OR,XOR,XNOR,MUX,inputs,outputs,level,EndCaps,TapCells,Diodes,Total_Physical_Cells,suggested_clock_frequency,suggested_clock_period,CLOCK_PERIOD,SYNTH_STRATEGY,SYNTH_MAX_FANOUT,FP_CORE_UTIL,FP_ASPECT_RATIO,FP_PDN_VPITCH,FP_PDN_HPITCH,PL_TARGET_DENSITY,GLB_RT_ADJUSTMENT,STD_CELL_LIBRARY,CELL_PAD,DIODE_INSERTION_STRATEGY
-0,/project/openlane/uart,uart_core,uart,Flow_completed,0h4m21s,0h2m40s,46166.66666666667,0.12,23083.333333333336,35,540.52,2770,0,0,0,0,0,0,0,0,0,-1,0,91807,20722,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,62462955,0.0,19.42,18.96,0.0,-1,-1,2769,2789,456,476,0,0,0,2770,56,0,29,41,182,125,26,685,435,396,18,278,1410,0,1688,100.0,10.0,10,AREA 0,4,50,1,153.6,153.18,0.55,0,sky130_fd_sc_hd,4,4
+0,/project/openlane/uart,uart_core,uart,Flow_completed,0h4m44s,0h2m53s,46166.66666666667,0.12,23083.333333333336,35,547.19,2770,0,0,0,0,0,0,0,0,0,-1,0,93003,20847,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,62462955,0.0,19.71,19.11,0.0,-1,-1,2769,2789,456,476,0,0,0,2770,56,0,29,41,182,125,26,685,435,396,18,278,1410,0,1688,100.0,10.0,10,AREA 0,4,50,1,153.6,153.18,0.55,0,sky130_fd_sc_hd,4,4
diff --git a/signoff/user_project_wrapper/final_summary_report.csv b/signoff/user_project_wrapper/final_summary_report.csv
index cd729d9..9d16e43 100644
--- a/signoff/user_project_wrapper/final_summary_report.csv
+++ b/signoff/user_project_wrapper/final_summary_report.csv
@@ -1,2 +1,2 @@
 ,design,design_name,config,flow_status,total_runtime,routed_runtime,(Cell/mm^2)/Core_Util,DIEAREA_mm^2,CellPer_mm^2,OpenDP_Util,Peak_Memory_Usage_MB,cell_count,tritonRoute_violations,Short_violations,MetSpc_violations,OffGrid_violations,MinHole_violations,Other_violations,Magic_violations,antenna_violations,lvs_total_errors,cvc_total_errors,klayout_violations,wire_length,vias,wns,pl_wns,optimized_wns,fastroute_wns,spef_wns,tns,pl_tns,optimized_tns,fastroute_tns,spef_tns,HPWL,routing_layer1_pct,routing_layer2_pct,routing_layer3_pct,routing_layer4_pct,routing_layer5_pct,routing_layer6_pct,wires_count,wire_bits,public_wires_count,public_wire_bits,memories_count,memory_bits,processes_count,cells_pre_abc,AND,DFF,NAND,NOR,OR,XOR,XNOR,MUX,inputs,outputs,level,EndCaps,TapCells,Diodes,Total_Physical_Cells,suggested_clock_frequency,suggested_clock_period,CLOCK_PERIOD,SYNTH_STRATEGY,SYNTH_MAX_FANOUT,FP_CORE_UTIL,FP_ASPECT_RATIO,FP_PDN_VPITCH,FP_PDN_HPITCH,PL_TARGET_DENSITY,GLB_RT_ADJUSTMENT,STD_CELL_LIBRARY,CELL_PAD,DIODE_INSERTION_STRATEGY
-0,/project/openlane/user_project_wrapper,user_project_wrapper,user_project_wrapper,Flow_completed,0h40m38s,0h4m51s,3.3079078455790785,10.2784,1.6539539227895392,0,568.44,17,0,0,0,0,0,0,0,0,24,-1,-1,1182176,4163,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,-1,0.0,1.24,4.03,1.04,2.32,-1,848,1466,848,1466,0,0,0,17,0,0,0,0,0,0,0,0,-1,-1,-1,0,0,0,0,100.0,10.0,10,AREA 0,5,50,1,180,180,0.55,0,sky130_fd_sc_hd,4,0
+0,/project/openlane/user_project_wrapper,user_project_wrapper,user_project_wrapper,Flow_completed,0h41m55s,0h4m57s,4.086239103362392,10.2784,2.043119551681196,0,570.2,21,0,0,0,0,0,0,0,0,38,-1,-1,1176072,4123,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,-1,0.0,1.35,4.28,0.87,1.77,-1,852,1470,852,1470,0,0,0,21,0,0,0,0,0,0,0,0,-1,-1,-1,0,0,0,0,100.0,10.0,10,AREA 0,5,50,1,180,180,0.55,0,sky130_fd_sc_hd,4,0
diff --git a/signoff/wb_host/final_summary_report.csv b/signoff/wb_host/final_summary_report.csv
index 2cc30c1..7d06a32 100644
--- a/signoff/wb_host/final_summary_report.csv
+++ b/signoff/wb_host/final_summary_report.csv
@@ -1,2 +1,2 @@
 ,design,design_name,config,flow_status,total_runtime,routed_runtime,(Cell/mm^2)/Core_Util,DIEAREA_mm^2,CellPer_mm^2,OpenDP_Util,Peak_Memory_Usage_MB,cell_count,tritonRoute_violations,Short_violations,MetSpc_violations,OffGrid_violations,MinHole_violations,Other_violations,Magic_violations,antenna_violations,lvs_total_errors,cvc_total_errors,klayout_violations,wire_length,vias,wns,pl_wns,optimized_wns,fastroute_wns,spef_wns,tns,pl_tns,optimized_tns,fastroute_tns,spef_tns,HPWL,routing_layer1_pct,routing_layer2_pct,routing_layer3_pct,routing_layer4_pct,routing_layer5_pct,routing_layer6_pct,wires_count,wire_bits,public_wires_count,public_wire_bits,memories_count,memory_bits,processes_count,cells_pre_abc,AND,DFF,NAND,NOR,OR,XOR,XNOR,MUX,inputs,outputs,level,EndCaps,TapCells,Diodes,Total_Physical_Cells,suggested_clock_frequency,suggested_clock_period,CLOCK_PERIOD,SYNTH_STRATEGY,SYNTH_MAX_FANOUT,FP_CORE_UTIL,FP_ASPECT_RATIO,FP_PDN_VPITCH,FP_PDN_HPITCH,PL_TARGET_DENSITY,GLB_RT_ADJUSTMENT,STD_CELL_LIBRARY,CELL_PAD,DIODE_INSERTION_STRATEGY
-0,/project/openlane/wb_host,wb_host,wb_host,Flow_completed,0h5m36s,0h3m45s,61400.0,0.1,30700.0,49,587.03,3070,0,0,0,0,0,0,0,1,0,-1,0,173130,26433,-2.81,-2.81,-2.74,-2.74,-2.73,-85.26,-85.26,-84.77,-84.77,-85.68,139031696,0.0,48.06,23.93,17.81,-1,-1,2926,3180,551,805,0,0,0,3070,78,0,3,11,50,27,10,799,605,775,14,130,1139,0,1269,78.55459544383346,12.73,10,AREA 0,4,50,1,153.6,153.18,0.55,0,sky130_fd_sc_hd,4,5
+0,/project/openlane/wb_host,wb_host,wb_host,Flow_completed,0h5m14s,0h3m25s,61400.0,0.1,30700.0,49,582.5,3070,0,0,0,0,0,0,0,0,0,-1,0,172500,26194,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,140873672,0.0,49.1,23.43,16.91,-1,-1,2926,3180,551,805,0,0,0,3070,78,0,3,11,50,27,10,799,605,775,14,130,1139,0,1269,100.0,10.0,10,AREA 0,4,50,1,153.6,153.18,0.55,0,sky130_fd_sc_hd,4,5
diff --git a/signoff/wb_interconnect/final_summary_report.csv b/signoff/wb_interconnect/final_summary_report.csv
index 61ca705..afa6597 100644
--- a/signoff/wb_interconnect/final_summary_report.csv
+++ b/signoff/wb_interconnect/final_summary_report.csv
@@ -1,2 +1,2 @@
 ,design,design_name,config,flow_status,total_runtime,routed_runtime,(Cell/mm^2)/Core_Util,DIEAREA_mm^2,CellPer_mm^2,OpenDP_Util,Peak_Memory_Usage_MB,cell_count,tritonRoute_violations,Short_violations,MetSpc_violations,OffGrid_violations,MinHole_violations,Other_violations,Magic_violations,antenna_violations,lvs_total_errors,cvc_total_errors,klayout_violations,wire_length,vias,wns,pl_wns,optimized_wns,fastroute_wns,spef_wns,tns,pl_tns,optimized_tns,fastroute_tns,spef_tns,HPWL,routing_layer1_pct,routing_layer2_pct,routing_layer3_pct,routing_layer4_pct,routing_layer5_pct,routing_layer6_pct,wires_count,wire_bits,public_wires_count,public_wire_bits,memories_count,memory_bits,processes_count,cells_pre_abc,AND,DFF,NAND,NOR,OR,XOR,XNOR,MUX,inputs,outputs,level,EndCaps,TapCells,Diodes,Total_Physical_Cells,suggested_clock_frequency,suggested_clock_period,CLOCK_PERIOD,SYNTH_STRATEGY,SYNTH_MAX_FANOUT,FP_CORE_UTIL,FP_ASPECT_RATIO,FP_PDN_VPITCH,FP_PDN_HPITCH,PL_TARGET_DENSITY,GLB_RT_ADJUSTMENT,STD_CELL_LIBRARY,CELL_PAD,DIODE_INSERTION_STRATEGY
-0,/project/openlane/wb_interconnect,wb_interconnect,wb_interconnect,Flow_completed,0h8m41s,0h4m48s,5868.181818181818,0.44,2934.090909090909,5,582.16,1291,0,0,0,0,0,0,0,1,0,-1,0,483038,20167,0.0,0.0,0.0,0.0,-1.08,0.0,0.0,0.0,0.0,-86.31,415470896,0.0,32.3,8.43,19.36,-1,-1,1041,1614,204,777,0,0,0,1291,244,0,75,15,111,0,0,180,431,414,11,130,5189,0,5319,90.25270758122744,11.08,10,AREA 0,4,50,1,153.6,153.18,0.55,0,sky130_fd_sc_hd,4,4
+0,/project/openlane/wb_interconnect,wb_interconnect,wb_interconnect,Flow_completed,0h10m20s,0h6m12s,5868.181818181818,0.44,2934.090909090909,5,576.81,1291,0,0,0,0,0,0,0,2,0,-1,0,483765,20458,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,415470896,0.0,32.05,8.47,19.72,-1,-1,1041,1614,204,777,0,0,0,1291,244,0,75,15,111,0,0,180,431,414,11,130,5189,0,5319,100.0,10.0,10,AREA 0,4,50,1,153.6,153.18,0.55,0,sky130_fd_sc_hd,4,4
diff --git a/verilog/dv/risc_boot/risc_boot_tb.v b/verilog/dv/risc_boot/risc_boot_tb.v
index 2cb80c3..666880f 100644
--- a/verilog/dv/risc_boot/risc_boot_tb.v
+++ b/verilog/dv/risc_boot/risc_boot_tb.v
@@ -476,6 +476,25 @@
 	force uut.mprj.u_wb_host.u_clkbuf_rtc.VGND =VSS;
 	force uut.mprj.u_wb_host.u_clkbuf_rtc.VNB = VSS;
 
+	force uut.mprj.u_buf1_wb_rstn.u_buf.VPWR =USER_VDD1V8;
+	force uut.mprj.u_buf1_wb_rstn.u_buf.VPB  =USER_VDD1V8;
+	force uut.mprj.u_buf1_wb_rstn.u_buf.VGND =VSS;
+	force uut.mprj.u_buf1_wb_rstn.u_buf.VNB = VSS;
+
+	force uut.mprj.u_buf2_wb_rstn.u_buf.VPWR =USER_VDD1V8;
+	force uut.mprj.u_buf2_wb_rstn.u_buf.VPB  =USER_VDD1V8;
+	force uut.mprj.u_buf2_wb_rstn.u_buf.VGND =VSS;
+	force uut.mprj.u_buf2_wb_rstn.u_buf.VNB = VSS;
+
+	force uut.mprj.u_buf1_wbclk.u_buf.VPWR =USER_VDD1V8;
+	force uut.mprj.u_buf1_wbclk.u_buf.VPB  =USER_VDD1V8;
+	force uut.mprj.u_buf1_wbclk.u_buf.VGND =VSS;
+	force uut.mprj.u_buf1_wbclk.u_buf.VNB = VSS;
+
+	force uut.mprj.u_buf2_wbclk.u_buf.VPWR =USER_VDD1V8;
+	force uut.mprj.u_buf2_wbclk.u_buf.VPB  =USER_VDD1V8;
+	force uut.mprj.u_buf2_wbclk.u_buf.VGND =VSS;
+	force uut.mprj.u_buf2_wbclk.u_buf.VNB = VSS;
     end
 `endif    
 
diff --git a/verilog/dv/user_risc_boot/uprj_netlists.v b/verilog/dv/user_risc_boot/uprj_netlists.v
index ae6502e..29925ab 100644
--- a/verilog/dv/user_risc_boot/uprj_netlists.v
+++ b/verilog/dv/user_risc_boot/uprj_netlists.v
@@ -35,6 +35,7 @@
         `include "syntacore.v"
         `include "wb_host.v"
 	`include "clk_skew_adjust.v"
+	`include "clk_buf.v"
 
 `else
 
@@ -60,6 +61,7 @@
      `include "lib/async_fifo_th.sv"  
      `include "lib/reset_sync.sv"  
      `include "lib/double_sync_low.v"  
+     `include "lib/clk_buf.v"  
 
      `include "sdram_ctrl/src/top/sdrc_top.v" 
      `include "sdram_ctrl/src/wb2sdrc/wb2sdrc.v" 
diff --git a/verilog/dv/user_risc_boot/user_risc_boot_tb.v b/verilog/dv/user_risc_boot/user_risc_boot_tb.v
index aa4c71a..8da63e3 100644
--- a/verilog/dv/user_risc_boot/user_risc_boot_tb.v
+++ b/verilog/dv/user_risc_boot/user_risc_boot_tb.v
@@ -346,6 +346,25 @@
 	force u_top.u_wb_host.u_clkbuf_rtc.VPB  =USER_VDD1V8;
 	force u_top.u_wb_host.u_clkbuf_rtc.VGND =VSS;
 	force u_top.u_wb_host.u_clkbuf_rtc.VNB = VSS;
+	force u_top.u_buf1_wb_rstn.u_buf.VPWR =USER_VDD1V8;
+	force u_top.u_buf1_wb_rstn.u_buf.VPB  =USER_VDD1V8;
+	force u_top.u_buf1_wb_rstn.u_buf.VGND =VSS;
+	force u_top.u_buf1_wb_rstn.u_buf.VNB = VSS;
+
+	force u_top.u_buf2_wb_rstn.u_buf.VPWR =USER_VDD1V8;
+	force u_top.u_buf2_wb_rstn.u_buf.VPB  =USER_VDD1V8;
+	force u_top.u_buf2_wb_rstn.u_buf.VGND =VSS;
+	force u_top.u_buf2_wb_rstn.u_buf.VNB = VSS;
+
+	force u_top.u_buf1_wbclk.u_buf.VPWR =USER_VDD1V8;
+	force u_top.u_buf1_wbclk.u_buf.VPB  =USER_VDD1V8;
+	force u_top.u_buf1_wbclk.u_buf.VGND =VSS;
+	force u_top.u_buf1_wbclk.u_buf.VNB = VSS;
+
+	force u_top.u_buf2_wbclk.u_buf.VPWR =USER_VDD1V8;
+	force u_top.u_buf2_wbclk.u_buf.VPB  =USER_VDD1V8;
+	force u_top.u_buf2_wbclk.u_buf.VGND =VSS;
+	force u_top.u_buf2_wbclk.u_buf.VNB = VSS;
     end
 `endif    
 
diff --git a/verilog/dv/user_spi/uprj_netlists.v b/verilog/dv/user_spi/uprj_netlists.v
index ae6502e..29925ab 100644
--- a/verilog/dv/user_spi/uprj_netlists.v
+++ b/verilog/dv/user_spi/uprj_netlists.v
@@ -35,6 +35,7 @@
         `include "syntacore.v"
         `include "wb_host.v"
 	`include "clk_skew_adjust.v"
+	`include "clk_buf.v"
 
 `else
 
@@ -60,6 +61,7 @@
      `include "lib/async_fifo_th.sv"  
      `include "lib/reset_sync.sv"  
      `include "lib/double_sync_low.v"  
+     `include "lib/clk_buf.v"  
 
      `include "sdram_ctrl/src/top/sdrc_top.v" 
      `include "sdram_ctrl/src/wb2sdrc/wb2sdrc.v" 
diff --git a/verilog/dv/user_spi/user_spi_tb.v b/verilog/dv/user_spi/user_spi_tb.v
index 60ad1f9..9b1e753 100644
--- a/verilog/dv/user_spi/user_spi_tb.v
+++ b/verilog/dv/user_spi/user_spi_tb.v
@@ -480,6 +480,25 @@
 	force u_top.u_wb_host.u_clkbuf_rtc.VPB  =USER_VDD1V8;
 	force u_top.u_wb_host.u_clkbuf_rtc.VGND =VSS;
 	force u_top.u_wb_host.u_clkbuf_rtc.VNB = VSS;
+	force u_top.u_buf1_wb_rstn.u_buf.VPWR =USER_VDD1V8;
+	force u_top.u_buf1_wb_rstn.u_buf.VPB  =USER_VDD1V8;
+	force u_top.u_buf1_wb_rstn.u_buf.VGND =VSS;
+	force u_top.u_buf1_wb_rstn.u_buf.VNB = VSS;
+
+	force u_top.u_buf2_wb_rstn.u_buf.VPWR =USER_VDD1V8;
+	force u_top.u_buf2_wb_rstn.u_buf.VPB  =USER_VDD1V8;
+	force u_top.u_buf2_wb_rstn.u_buf.VGND =VSS;
+	force u_top.u_buf2_wb_rstn.u_buf.VNB = VSS;
+
+	force u_top.u_buf1_wbclk.u_buf.VPWR =USER_VDD1V8;
+	force u_top.u_buf1_wbclk.u_buf.VPB  =USER_VDD1V8;
+	force u_top.u_buf1_wbclk.u_buf.VGND =VSS;
+	force u_top.u_buf1_wbclk.u_buf.VNB = VSS;
+
+	force u_top.u_buf2_wbclk.u_buf.VPWR =USER_VDD1V8;
+	force u_top.u_buf2_wbclk.u_buf.VPB  =USER_VDD1V8;
+	force u_top.u_buf2_wbclk.u_buf.VGND =VSS;
+	force u_top.u_buf2_wbclk.u_buf.VNB = VSS;
     end
 `endif    
 
diff --git a/verilog/dv/user_uart/uprj_netlists.v b/verilog/dv/user_uart/uprj_netlists.v
index e8f024b..89364ec 100644
--- a/verilog/dv/user_uart/uprj_netlists.v
+++ b/verilog/dv/user_uart/uprj_netlists.v
@@ -34,6 +34,7 @@
         `include "syntacore.v"
         `include "wb_host.v"
 	`include "clk_skew_adjust.v"
+	`include "clk_buf.v"
 
 `else
      `include "libs.ref/sky130_fd_sc_hd/verilog/primitives.v"
@@ -58,6 +59,7 @@
      `include "lib/async_fifo_th.sv"  
      `include "lib/reset_sync.sv"  
      `include "lib/double_sync_low.v"  
+     `include "lib/clk_buf.v"  
 
      `include "sdram_ctrl/src/top/sdrc_top.v" 
      `include "sdram_ctrl/src/wb2sdrc/wb2sdrc.v" 
diff --git a/verilog/dv/user_uart/user_uart_tb.v b/verilog/dv/user_uart/user_uart_tb.v
index d6fb8a0..986be10 100644
--- a/verilog/dv/user_uart/user_uart_tb.v
+++ b/verilog/dv/user_uart/user_uart_tb.v
@@ -385,6 +385,26 @@
 	force u_top.u_wb_host.u_clkbuf_rtc.VPB  =USER_VDD1V8;
 	force u_top.u_wb_host.u_clkbuf_rtc.VGND =VSS;
 	force u_top.u_wb_host.u_clkbuf_rtc.VNB = VSS;
+
+	force u_top.u_buf1_wb_rstn.u_buf.VPWR =USER_VDD1V8;
+	force u_top.u_buf1_wb_rstn.u_buf.VPB  =USER_VDD1V8;
+	force u_top.u_buf1_wb_rstn.u_buf.VGND =VSS;
+	force u_top.u_buf1_wb_rstn.u_buf.VNB = VSS;
+
+	force u_top.u_buf2_wb_rstn.u_buf.VPWR =USER_VDD1V8;
+	force u_top.u_buf2_wb_rstn.u_buf.VPB  =USER_VDD1V8;
+	force u_top.u_buf2_wb_rstn.u_buf.VGND =VSS;
+	force u_top.u_buf2_wb_rstn.u_buf.VNB = VSS;
+
+	force u_top.u_buf1_wbclk.u_buf.VPWR =USER_VDD1V8;
+	force u_top.u_buf1_wbclk.u_buf.VPB  =USER_VDD1V8;
+	force u_top.u_buf1_wbclk.u_buf.VGND =VSS;
+	force u_top.u_buf1_wbclk.u_buf.VNB = VSS;
+
+	force u_top.u_buf2_wbclk.u_buf.VPWR =USER_VDD1V8;
+	force u_top.u_buf2_wbclk.u_buf.VPB  =USER_VDD1V8;
+	force u_top.u_buf2_wbclk.u_buf.VGND =VSS;
+	force u_top.u_buf2_wbclk.u_buf.VNB = VSS;
     end
 `endif    
 //------------------------------------------------------
diff --git a/verilog/dv/wb_port/wb_port_tb.v b/verilog/dv/wb_port/wb_port_tb.v
index 7b12e0e..b045e13 100644
--- a/verilog/dv/wb_port/wb_port_tb.v
+++ b/verilog/dv/wb_port/wb_port_tb.v
@@ -261,6 +261,25 @@
 	force uut.mprj.u_wb_host.u_clkbuf_rtc.VGND =VSS;
 	force uut.mprj.u_wb_host.u_clkbuf_rtc.VNB = VSS;
 
+	force uut.mprj.u_buf1_wb_rstn.u_buf.VPWR =USER_VDD1V8;
+	force uut.mprj.u_buf1_wb_rstn.u_buf.VPB  =USER_VDD1V8;
+	force uut.mprj.u_buf1_wb_rstn.u_buf.VGND =VSS;
+	force uut.mprj.u_buf1_wb_rstn.u_buf.VNB = VSS;
+
+	force uut.mprj.u_buf2_wb_rstn.u_buf.VPWR =USER_VDD1V8;
+	force uut.mprj.u_buf2_wb_rstn.u_buf.VPB  =USER_VDD1V8;
+	force uut.mprj.u_buf2_wb_rstn.u_buf.VGND =VSS;
+	force uut.mprj.u_buf2_wb_rstn.u_buf.VNB = VSS;
+
+	force uut.mprj.u_buf1_wbclk.u_buf.VPWR =USER_VDD1V8;
+	force uut.mprj.u_buf1_wbclk.u_buf.VPB  =USER_VDD1V8;
+	force uut.mprj.u_buf1_wbclk.u_buf.VGND =VSS;
+	force uut.mprj.u_buf1_wbclk.u_buf.VNB = VSS;
+
+	force uut.mprj.u_buf2_wbclk.u_buf.VPWR =USER_VDD1V8;
+	force uut.mprj.u_buf2_wbclk.u_buf.VPB  =USER_VDD1V8;
+	force uut.mprj.u_buf2_wbclk.u_buf.VGND =VSS;
+	force uut.mprj.u_buf2_wbclk.u_buf.VNB = VSS;
     end
 `endif    
 endmodule
diff --git a/verilog/rtl/lib/clk_buf.v b/verilog/rtl/lib/clk_buf.v
new file mode 100644
index 0000000..dad8fc6
--- /dev/null
+++ b/verilog/rtl/lib/clk_buf.v
@@ -0,0 +1,85 @@
+//////////////////////////////////////////////////////////////////////////////
+// SPDX-FileCopyrightText: 2021 , Dinesh Annayya                          
+// 
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+//      http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+// SPDX-License-Identifier: Apache-2.0
+// SPDX-FileContributor: Created by Dinesh Annayya <dinesha@opencores.org>
+//
+//////////////////////////////////////////////////////////////////////
+////                                                              ////
+////  Clk Buf                                                     ////
+////                                                              ////
+////  This file is part of the YIFive cores project               ////
+////  https://github.com/dineshannayya/yifive_r0.git              ////
+////  http://www.opencores.org/cores/yifive/                      ////
+////                                                              ////
+////  Description                                                 ////
+////     Adding clock buf for manual clock tree at SOC level      ////
+////  To Do:                                                      ////
+////    nothing                                                   ////
+////                                                              ////
+////  Author(s):                                                  ////
+////      - Dinesh Annayya, dinesha@opencores.org                 ////
+////                                                              ////
+////  Revision :                                                  ////
+//////////////////////////////////////////////////////////////////////
+////                                                              ////
+//// Copyright (C) 2000 Authors and OPENCORES.ORG                 ////
+////                                                              ////
+//// This source file may be used and distributed without         ////
+//// restriction provided that this copyright statement is not    ////
+//// removed from the file and that any derivative work contains  ////
+//// the original copyright notice and the associated disclaimer. ////
+////                                                              ////
+//// This source file is free software; you can redistribute it   ////
+//// and/or modify it under the terms of the GNU Lesser General   ////
+//// Public License as published by the Free Software Foundation; ////
+//// either version 2.1 of the License, or (at your option) any   ////
+//// later version.                                               ////
+////                                                              ////
+//// This source is distributed in the hope that it will be       ////
+//// useful, but WITHOUT ANY WARRANTY; without even the implied   ////
+//// warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR      ////
+//// PURPOSE.  See the GNU Lesser General Public License for more ////
+//// details.                                                     ////
+////                                                              ////
+//// You should have received a copy of the GNU Lesser General    ////
+//// Public License along with this source; if not, download it   ////
+//// from http://www.opencores.org/lgpl.shtml                     ////
+////                                                              ////
+//////////////////////////////////////////////////////////////////////
+
+
+module clk_buf (
+   // Outputs
+       clk_o,
+   // Inputs
+       clk_i
+   );
+
+//---------------------------------------------
+// All the input to this block are declared here
+// --------------------------------------------
+   input        clk_i          ;// 
+   
+//---------------------------------------------
+// All the output to this block are declared here
+// --------------------------------------------
+   output       clk_o             ; // clock out
+
+               
+
+sky130_fd_sc_hd__clkbuf_16 u_buf  (.A(clk_i),.X(clk_o));
+
+endmodule 
+
diff --git a/verilog/rtl/uprj_netlists.v b/verilog/rtl/uprj_netlists.v
index ae6502e..29925ab 100644
--- a/verilog/rtl/uprj_netlists.v
+++ b/verilog/rtl/uprj_netlists.v
@@ -35,6 +35,7 @@
         `include "syntacore.v"
         `include "wb_host.v"
 	`include "clk_skew_adjust.v"
+	`include "clk_buf.v"
 
 `else
 
@@ -60,6 +61,7 @@
      `include "lib/async_fifo_th.sv"  
      `include "lib/reset_sync.sv"  
      `include "lib/double_sync_low.v"  
+     `include "lib/clk_buf.v"  
 
      `include "sdram_ctrl/src/top/sdrc_top.v" 
      `include "sdram_ctrl/src/wb2sdrc/wb2sdrc.v" 
diff --git a/verilog/rtl/user_project_wrapper.v b/verilog/rtl/user_project_wrapper.v
index bb9c9b2..35e10c8 100644
--- a/verilog/rtl/user_project_wrapper.v
+++ b/verilog/rtl/user_project_wrapper.v
@@ -271,7 +271,11 @@
 wire                              cpu_clk       ;
 wire                              rtc_clk       ;
 wire                              wbd_clk_int   ;
+wire                              wbd_clk_int1  ;
+wire                              wbd_clk_int2  ;
 wire                              wbd_int_rst_n ;
+wire                              wbd_int1_rst_n ;
+wire                              wbd_int2_rst_n ;
 
 wire [31:0]                       fuse_mhartid  ;
 wire [15:0]                       irq_lines     ;
@@ -348,6 +352,11 @@
 //assign la_data_out    = {riscv_debug,spi_debug,sdram_debug};
 assign la_data_out[127:0]    = {sdram_debug,spi_debug,riscv_debug};
 
+clk_buf u_buf1_wb_rstn  (.clk_i(wbd_int_rst_n),.clk_o(wbd_int1_rst_n));
+clk_buf u_buf2_wb_rstn  (.clk_i(wbd_int1_rst_n),.clk_o(wbd_int2_rst_n));
+
+clk_buf u_buf1_wbclk    (.clk_i(wbd_clk_int),.clk_o(wbd_clk_int1));
+clk_buf u_buf2_wbclk    (.clk_i(wbd_clk_int1),.clk_o(wbd_clk_int2));
 
 wb_host u_wb_host(
        .user_clock1      (wb_clk_i             ),
@@ -495,7 +504,7 @@
     .sdram_debug            (sdram_debug                ),
                     
     // WB bus
-    .wb_rst_n               (wbd_int_rst_n              ),
+    .wb_rst_n               (wbd_int2_rst_n             ),
     .wb_clk_i               (wbd_clk_sdram              ),
     
     .wb_stb_i               (wbd_sdram_stb_o            ),
@@ -535,7 +544,7 @@
 
 wb_interconnect  u_intercon (
          .clk_i         (wbd_clk_wi            ), 
-         .rst_n         (wbd_int_rst_n         ),
+         .rst_n         (wbd_int2_rst_n        ),
 
          // Master 0 Interface
          .m0_wbd_dat_i  (wbd_int_dat_i         ),
@@ -619,7 +628,7 @@
 glbl_cfg   u_glbl_cfg (
 
        .mclk                   (wbd_clk_glbl              ),
-       .reset_n                (wbd_int_rst_n             ),
+       .reset_n                (wbd_int2_rst_n            ),
 
         // Reg Bus Interface Signal
        .reg_cs                 (wbd_glbl_stb_o            ),
@@ -660,7 +669,7 @@
         );
 
 uart_core   u_uart_core (
-        .arst_n                 (wbd_int_rst_n            ), // async reset
+        .arst_n                 (wbd_int1_rst_n           ), // async reset
         .app_clk                (wbd_clk_uart             ),
 
         // Reg Bus Interface Signal
@@ -692,7 +701,7 @@
                .vccd1      (vccd1                      ),// User area 1 1.8V supply
                .vssd1      (vssd1                      ),// User area 1 digital ground
 `endif
-	       .clk_in     (wbd_clk_int                 ), 
+	       .clk_in     (wbd_clk_int1                ), 
 	       .sel        (cfg_cska_wi                 ), 
 	       .clk_out    (wbd_clk_wi                  ) 
        );
@@ -716,7 +725,7 @@
                .vccd1      (vccd1                      ),// User area 1 1.8V supply
                .vssd1      (vssd1                      ),// User area 1 digital ground
 `endif
-	       .clk_in     (wbd_clk_int                 ), 
+	       .clk_in     (wbd_clk_int1                ), 
 	       .sel        (cfg_cska_uart               ), 
 	       .clk_out    (wbd_clk_uart                ) 
        );
@@ -728,7 +737,7 @@
                .vccd1      (vccd1                      ),// User area 1 1.8V supply
                .vssd1      (vssd1                      ),// User area 1 digital ground
 `endif
-	       .clk_in     (wbd_clk_int                ), 
+	       .clk_in     (wbd_clk_int2               ), 
 	       .sel        (cfg_cska_spi               ), 
 	       .clk_out    (wbd_clk_spi                ) 
        );
@@ -740,7 +749,7 @@
                .vccd1      (vccd1                      ),// User area 1 1.8V supply
                .vssd1      (vssd1                      ),// User area 1 digital ground
 `endif
-	       .clk_in     (wbd_clk_int                ), 
+	       .clk_in     (wbd_clk_int2               ), 
 	       .sel        (cfg_cska_sdram             ), 
 	       .clk_out    (wbd_clk_sdram              ) 
        );
@@ -752,7 +761,7 @@
                .vccd1      (vccd1                      ),// User area 1 1.8V supply
                .vssd1      (vssd1                      ),// User area 1 digital ground
 `endif
-	       .clk_in     (wbd_clk_int               ), 
+	       .clk_in     (wbd_clk_int2              ), 
 	       .sel        (cfg_cska_glbl             ), 
 	       .clk_out    (wbd_clk_glbl              ) 
        );