Switch to using config.json
diff --git a/openlane/Microwatt_FP_DFFRFile/config.json b/openlane/Microwatt_FP_DFFRFile/config.json
new file mode 100644
index 0000000..d50de31
--- /dev/null
+++ b/openlane/Microwatt_FP_DFFRFile/config.json
@@ -0,0 +1,49 @@
+{
+    "DESIGN_NAME": "Microwatt_FP_DFFRFile",
+    "VERILOG_FILES": ["dir::../../verilog/rtl/Microwatt_FP_DFFRFile.v"],
+
+    "CLOCK_PERIOD": 10,
+    "CLOCK_PORT": "CLK",
+    "CLOCK_NET": "CLK",
+    "BASE_SDC_FILE": "dir::base.sdc",
+
+    "FP_SIZING": "absolute",
+    "DIE_AREA": "0 0 700 700",
+
+    "DESIGN_IS_CORE": 0,
+    "FP_PDN_CORE_RING": 0,
+    "RT_MAX_LAYER": "met4",
+
+    "FP_PIN_ORDER_CFG": "dir::pin_order.cfg",
+
+    "IO_PCT": "0.3",
+
+    "VDD_NETS": ["VPWR"],
+    "GND_NETS": ["VGND"],
+
+    "FP_PDN_VWIDTH": 3.1,
+    "FP_PDN_HWIDTH": 3.1,
+    "FP_PDN_VSPACING": "expr::(5 * $FP_PDN_VWIDTH)",
+    "FP_PDN_HSPACING": "expr::(5 * $FP_PDN_VWIDTH)",
+    "FP_PDN_VPITCH": 180,
+    "FP_PDN_HPITCH": 180,
+    "FP_PDN_VOFFSET": 5,
+    "FP_PDN_HOFFSET": 5,
+
+    "SYNTH_STRATEGY": "DELAY 4",
+    "SYNTH_MAX_FANOUT": "10",
+
+    "PL_TARGET_DENSITY": "0.68",
+
+    "CTS_CLK_BUFFER_LIST": ["sky130_fd_sc_hd__clkbuf_8", "sky130_fd_sc_hd__clkbuf_4", "sky130_fd_sc_hd__clkbuf_2"],
+    "CTS_DISABLE_POST_PROCESSING": "1",
+    "CTS_DISTANCE_BETWEEN_BUFFERS": "250",
+
+    "RUN_KLAYOUT": "0",
+
+    "GPL_CELL_PADDING": "2",
+    "DPL_CELL_PADDING": "0",
+    "DIODE_PADDING": "0",
+
+    "ROUTING_CORES": "24"
+}
diff --git a/openlane/Microwatt_FP_DFFRFile/config.tcl b/openlane/Microwatt_FP_DFFRFile/config.tcl
deleted file mode 100644
index 902d44b..0000000
--- a/openlane/Microwatt_FP_DFFRFile/config.tcl
+++ /dev/null
@@ -1,68 +0,0 @@
-set script_dir $::env(DESIGN_DIR)
-
-set ::env(DESIGN_NAME) Microwatt_FP_DFFRFile
-
-set ::env(VERILOG_FILES) "\
-	$script_dir/../../verilog/rtl/Microwatt_FP_DFFRFile.v"
-
-set ::env(CLOCK_PORT) "CLK"
-set ::env(CLOCK_PERIOD) "10"
-set ::env(CLOCK_NET) $::env(CLOCK_PORT)
-set ::env(BASE_SDC_FILE) $script_dir/base.sdc
-
-set ::env(FP_SIZING) absolute
-set ::env(DIE_AREA) "0 0 700 700"
-
-# Settings for macros
-set ::env(DESIGN_IS_CORE) 0
-set ::env(FP_PDN_CORE_RING) 0
-set ::env(RT_MAX_LAYER) "met4"
-
-# Macro pin out
-set ::env(FP_PIN_ORDER_CFG) $script_dir/pin_order.cfg
-
-# Macro input/output delay - must match liberty file
-set ::env(IO_PCT) 0.3
-
-# Handle PDN
-set ::env(VDD_NETS) [list {VPWR} ]
-set ::env(GND_NETS) [list {VGND} ]
-
-# Make PDN match top level
-set ::env(FP_PDN_VWIDTH) 3.1
-set ::env(FP_PDN_HWIDTH) 3.1
-set ::env(FP_PDN_VSPACING) [expr 5*$::env(FP_PDN_VWIDTH)]
-set ::env(FP_PDN_HSPACING) [expr 5*$::env(FP_PDN_HWIDTH)]
-
-# PDN Pitch
-set ::env(FP_PDN_VPITCH) 180
-set ::env(FP_PDN_HPITCH) $::env(FP_PDN_VPITCH)
-
-# PDN Offset
-set ::env(FP_PDN_VOFFSET) 5
-set ::env(FP_PDN_HOFFSET) $::env(FP_PDN_VOFFSET)
-
-# Synthesis tuning
-set ::env(SYNTH_STRATEGY) {DELAY 4}
-set ::env(SYNTH_MAX_FANOUT) {10}
-
-# Placement tuning
-set ::env(PL_TARGET_DENSITY) 0.68
-
-# CTS tuning
-set ::env(CTS_CLK_BUFFER_LIST) {sky130_fd_sc_hd__clkbuf_8 sky130_fd_sc_hd__clkbuf_4 sky130_fd_sc_hd__clkbuf_2};
-set ::env(CTS_DISABLE_POST_PROCESSING) 1
-set ::env(CTS_DISTANCE_BETWEEN_BUFFERS) 250
-
-# Speed up tape out a bit
-set ::env(RUN_KLAYOUT) 0
-
-if {[catch {exec nproc} result] == 0} {
-	set ::env(ROUTING_CORES) $result
-} else {
-	set ::env(ROUTING_CORES) 4
-}
-
-set ::env(GPL_CELL_PADDING) 2
-set ::env(DPL_CELL_PADDING) 0
-set ::env(DIODE_PADDING) 0
diff --git a/openlane/multiply_add_64x64/config.json b/openlane/multiply_add_64x64/config.json
new file mode 100644
index 0000000..2cf75d6
--- /dev/null
+++ b/openlane/multiply_add_64x64/config.json
@@ -0,0 +1,52 @@
+{
+    "DESIGN_NAME": "multiply_add_64x64",
+    "VERILOG_FILES": ["dir::src/multiply_add_64x64.v"],
+
+    "CLOCK_PERIOD": 10,
+    "CLOCK_PORT": "clk",
+    "CLOCK_NET": "clk",
+
+    "FP_SIZING": "absolute",
+    "DIE_AREA": "0 0 500 500",
+
+    "DESIGN_IS_CORE": 0,
+    "FP_PDN_CORE_RING": 0,
+    "RT_MAX_LAYER": "met4",
+
+    "FP_PIN_ORDER_CFG": "dir::pin_order.cfg",
+
+    "IO_PCT": "0.4",
+
+    "SYNTH_READ_BLACKBOX_LIB": "1",
+
+    "VDD_NETS": ["VPWR"],
+    "GND_NETS": ["VGND"],
+
+    "FP_PDN_VWIDTH": 3.1,
+    "FP_PDN_HWIDTH": 3.1,
+    "FP_PDN_VSPACING": "expr::(5 * $FP_PDN_VWIDTH)",
+    "FP_PDN_HSPACING": "expr::(5 * $FP_PDN_VWIDTH)",
+    "FP_PDN_VPITCH": 180,
+    "FP_PDN_HPITCH": 180,
+    "FP_PDN_VOFFSET": 5,
+    "FP_PDN_HOFFSET": 5,
+
+    "SYNTH_STRATEGY": "DELAY 4",
+    "SYNTH_MAX_FANOUT": "10",
+
+    "PL_TARGET_DENSITY": "0.74",
+
+    "GRT_ADJUSTMENT": "0.2",
+
+    "CTS_CLK_BUFFER_LIST": ["sky130_fd_sc_hd__clkbuf_8", "sky130_fd_sc_hd__clkbuf_4", "sky130_fd_sc_hd__clkbuf_2"],
+    "CTS_DISABLE_POST_PROCESSING": "1",
+    "CTS_DISTANCE_BETWEEN_BUFFERS": "250",
+
+    "RUN_KLAYOUT": "0",
+
+    "GPL_CELL_PADDING": "2",
+    "DPL_CELL_PADDING": "0",
+    "DIODE_PADDING": "0",
+
+    "ROUTING_CORES": "24"
+}
diff --git a/openlane/multiply_add_64x64/config.tcl b/openlane/multiply_add_64x64/config.tcl
deleted file mode 100644
index 9cabd1c..0000000
--- a/openlane/multiply_add_64x64/config.tcl
+++ /dev/null
@@ -1,70 +0,0 @@
-set script_dir $::env(DESIGN_DIR)
-
-set ::env(DESIGN_NAME) multiply_add_64x64
-
-set ::env(VERILOG_FILES) "\
-	$script_dir/src/multiply_add_64x64.v"
-
-set ::env(CLOCK_PORT) "clk"
-set ::env(CLOCK_PERIOD) "10"
-set ::env(CLOCK_NET) $::env(CLOCK_PORT)
-
-set ::env(FP_SIZING) absolute
-set ::env(DIE_AREA) "0 0 500 500"
-
-# Settings for macros
-set ::env(DESIGN_IS_CORE) 0
-set ::env(FP_PDN_CORE_RING) 0
-set ::env(RT_MAX_LAYER) "met4"
-
-# Macro pin out
-set ::env(FP_PIN_ORDER_CFG) $script_dir/pin_order.cfg
-
-# Macro input/output delay - must match liberty file
-set ::env(IO_PCT) 0.4
-
-# Because the macro uses standard cells
-set ::env(SYNTH_READ_BLACKBOX_LIB) 1
-
-# Handle PDN
-set ::env(VDD_NETS) [list {VPWR} ]
-set ::env(GND_NETS) [list {VGND} ]
-
-# Make PDN match top level
-set ::env(FP_PDN_VWIDTH) 3.1
-set ::env(FP_PDN_HWIDTH) 3.1
-set ::env(FP_PDN_VSPACING) [expr 5*$::env(FP_PDN_VWIDTH)]
-set ::env(FP_PDN_HSPACING) [expr 5*$::env(FP_PDN_HWIDTH)]
-
-# PDN Pitch
-set ::env(FP_PDN_VPITCH) 180
-set ::env(FP_PDN_HPITCH) $::env(FP_PDN_VPITCH)
-
-# PDN Offset
-set ::env(FP_PDN_VOFFSET) 5
-set ::env(FP_PDN_HOFFSET) $::env(FP_PDN_VOFFSET)
-
-# Synthesis tuning
-set ::env(SYNTH_STRATEGY) {DELAY 4}
-set ::env(SYNTH_MAX_FANOUT) {10}
-
-# Placement tuning
-set ::env(PL_TARGET_DENSITY) 0.52
-
-# CTS tuning
-set ::env(CTS_CLK_BUFFER_LIST) {sky130_fd_sc_hd__clkbuf_8 sky130_fd_sc_hd__clkbuf_4 sky130_fd_sc_hd__clkbuf_2};
-set ::env(CTS_DISABLE_POST_PROCESSING) 1
-set ::env(CTS_DISTANCE_BETWEEN_BUFFERS) 250
-
-# Speed up tape out a bit
-set ::env(RUN_KLAYOUT) 0
-
-if {[catch {exec nproc} result] == 0} {
-	set ::env(ROUTING_CORES) $result
-} else {
-	set ::env(ROUTING_CORES) 4
-}
-
-set ::env(GPL_CELL_PADDING) 2
-set ::env(DPL_CELL_PADDING) 0
-set ::env(DIODE_PADDING) 0