user_project_wrapper: DRT do not finish...
diff --git a/gds/Marmot.gds.gz b/gds/Marmot.gds.gz
index cd14fbe..784b9d1 100644
--- a/gds/Marmot.gds.gz
+++ b/gds/Marmot.gds.gz
Binary files differ
diff --git a/gds/user_project_wrapper.gds.gz b/gds/user_project_wrapper.gds.gz
index b787a4a..e659690 100644
--- a/gds/user_project_wrapper.gds.gz
+++ b/gds/user_project_wrapper.gds.gz
Binary files differ
diff --git a/openlane/marmot/base.sdc b/openlane/marmot/base.sdc
index da6753b..39ed907 100644
--- a/openlane/marmot/base.sdc
+++ b/openlane/marmot/base.sdc
@@ -31,10 +31,10 @@
-group [get_clocks {jtag_TCK}]\
# max delay for RAM clocks
-set MAX_DELAY_RAM_CLOCK 6.0
+#set MAX_DELAY_RAM_CLOCK 6.0
#set_max_delay $MAX_DELAY_RAM_CLOCK -from [get_ports wb_clk_i] -to [get_ports data_arrays_0_ext_ram_clk]
-set_max_delay $MAX_DELAY_RAM_CLOCK -from [get_ports wb_clk_i] -to [get_ports tag_array_ext_ram_clk]
-set_max_delay $MAX_DELAY_RAM_CLOCK -from [get_ports wb_clk_i] -to [get_ports data_arrays_0_0_ext_ram_clk]
+#set_max_delay $MAX_DELAY_RAM_CLOCK -from [get_ports wb_clk_i] -to [get_ports tag_array_ext_ram_clk]
+#set_max_delay $MAX_DELAY_RAM_CLOCK -from [get_ports wb_clk_i] -to [get_ports data_arrays_0_0_ext_ram_clk]
# input/output delay
set input_delay_value [expr $::env(CLOCK_PERIOD) * $::env(IO_PCT)]
@@ -103,10 +103,6 @@
set_input_delay $input_delay_value -clock [get_clocks jtag_TCK] [get_ports $TDI_port]
set_output_delay $output_delay_value -clock [get_clocks jtag_TCK] [get_ports $TDO_port]
-# false path: static RAM clock skew adjust signals
-set_false_path -from [get_ports la_data_in[46:32]]
-set_false_path -from [get_ports la_oenb[46:32]]
-
# max fanout
set_max_fanout $::env(SYNTH_MAX_FANOUT) [current_design]
diff --git a/openlane/marmot/config.tcl b/openlane/marmot/config.tcl
index 5f076af..7b2577c 100644
--- a/openlane/marmot/config.tcl
+++ b/openlane/marmot/config.tcl
@@ -25,27 +25,23 @@
set ::env(SYNTH_READ_BLACKBOX_LIB) 1
set ::env(DESIGN_IS_CORE) 0
+
set ::env(DESIGN_NAME) Marmot
set ::env(VERILOG_INCLUDE_DIRS) [glob $script_dir/../../verilog/rtl/marmot]
set ::env(VERILOG_FILES) "\
$::env(CARAVEL_ROOT)/verilog/rtl/defines.v \
- $script_dir/../../verilog/lib/clk_skew_adjust.gv \
- $script_dir/../../verilog/lib/ctech_cells.sv \
[glob $script_dir/../../verilog/rtl/marmot/*.v]"
set ::env(CLOCK_PORT) "wb_clk_i"
-set ::env(CLOCK_PERIOD) 40
+set ::env(CLOCK_PERIOD) 35
set ::env(IO_PCT) 0.2
set ::env(IO_PCT_RAM) 0.3
-#set ::env(SYNTH_CAP_LOAD) 70
-
set ::env(BASE_SDC_FILE) $script_dir/base.sdc
#set ::env(SYNTH_STRATEGY) "AREA 0"
-#set ::env(SYNTH_NO_FLAT) 1
set ::env(FP_CORE_UTIL) 30
#set ::env(FP_SIZING) absolute
diff --git a/openlane/marmot/pin_order.cfg b/openlane/marmot/pin_order.cfg
index 605f79f..0a0e4aa 100644
--- a/openlane/marmot/pin_order.cfg
+++ b/openlane/marmot/pin_order.cfg
@@ -7,6 +7,7 @@
irq.*
#N
+ram_clk_delay_sel\[.*\]
tag_array_ext_ram_rdata0\[.*\]
tag_array_ext_ram_addr\[.*\]
tag_array_ext_ram_clk
diff --git a/openlane/user_project_wrapper/config.tcl b/openlane/user_project_wrapper/config.tcl
index c63b19c..7ee8ff8 100644
--- a/openlane/user_project_wrapper/config.tcl
+++ b/openlane/user_project_wrapper/config.tcl
@@ -44,64 +44,69 @@
set ::env(ROUTING_CORES) 4
# Define
-set ::env(SYNTH_DEFINES) "MARMOT_EMPTY"
+set ::env(SYNTH_DEFINES) "MARMOT_EMPTY clk_skew_adjust_EMPTY"
## Source Verilog Files
set ::env(VERILOG_FILES) "\
- $::env(CARAVEL_ROOT)/verilog/rtl/defines.v \
- $script_dir/../../verilog/rtl/user_project_wrapper.v"
+ $::env(CARAVEL_ROOT)/verilog/rtl/defines.v \
+ $script_dir/../../verilog/rtl/user_project_wrapper.v"
## Clock configurations
set ::env(CLOCK_PORT) "wb_clk_i"
-#set ::env(CLOCK_NET) "Marmot.clk"
-set ::env(CLOCK_PERIOD) "40"
+set ::env(CLOCK_PERIOD) 35
set ::env(BASE_SDC_FILE) $script_dir/base.sdc
set ::env(FP_PDN_HPITCH) 105
set ::env(FP_PDN_VPITCH) 100
-#set ::env(FP_PDN_HWIDTH) 2.9
-
## Internal Macros
### Macro PDN Connections
set ::env(FP_PDN_MACRO_HOOKS) "\
- Marmot vccd1 vssd1 \
- data_arrays_0_0_ext_ram0l vccd1 vssd1 \
- data_arrays_0_0_ext_ram0h vccd1 vssd1 \
- data_arrays_0_0_ext_ram1l vccd1 vssd1 \
- data_arrays_0_0_ext_ram1h vccd1 vssd1 \
- data_arrays_0_0_ext_ram2l vccd1 vssd1 \
- data_arrays_0_0_ext_ram2h vccd1 vssd1 \
- data_arrays_0_0_ext_ram3l vccd1 vssd1 \
- data_arrays_0_0_ext_ram3h vccd1 vssd1 \
- tag_array_ext_ram0l vccd1 vssd1 \
- tag_array_ext_ram0h vccd1 vssd1"
+ Marmot vccd1 vssd1 \
+ u_clk_skew_adjust_0 vccd1 vssd1 \
+ u_clk_skew_adjust_1 vccd1 vssd1 \
+ u_clk_skew_adjust_2 vccd1 vssd1 \
+ u_clk_skew_adjust_3 vccd1 vssd1 \
+ u_clk_skew_adjust_4 vccd1 vssd1 \
+ data_arrays_0_0_ext_ram0l vccd1 vssd1 \
+ data_arrays_0_0_ext_ram0h vccd1 vssd1 \
+ data_arrays_0_0_ext_ram1l vccd1 vssd1 \
+ data_arrays_0_0_ext_ram1h vccd1 vssd1 \
+ data_arrays_0_0_ext_ram2l vccd1 vssd1 \
+ data_arrays_0_0_ext_ram2h vccd1 vssd1 \
+ data_arrays_0_0_ext_ram3l vccd1 vssd1 \
+ data_arrays_0_0_ext_ram3h vccd1 vssd1 \
+ tag_array_ext_ram0l vccd1 vssd1 \
+ tag_array_ext_ram0h vccd1 vssd1"
### Macro Placement
set ::env(MACRO_PLACEMENT_CFG) $script_dir/macro.cfg
### Black-box verilog and views
set ::env(VERILOG_FILES_BLACKBOX) "\
- $::env(CARAVEL_ROOT)/verilog/rtl/defines.v \
- $script_dir/../../verilog/rtl/marmot/Marmot.v \
- $::env(PDK_ROOT)/sky130A/libs.ref/sky130_sram_macros/verilog/sky130_sram_2kbyte_1rw1r_32x512_8.v \
- $::env(PDK_ROOT)/sky130A/libs.ref/sky130_sram_macros/verilog/sky130_sram_1kbyte_1rw1r_32x256_8.v"
+ $::env(CARAVEL_ROOT)/verilog/rtl/defines.v \
+ $script_dir/../../verilog/rtl/marmot/Marmot.v \
+ $script_dir/../../verilog/lib/clk_skew_adjust.gv \
+ $::env(PDK_ROOT)/sky130A/libs.ref/sky130_sram_macros/verilog/sky130_sram_2kbyte_1rw1r_32x512_8.v \
+ $::env(PDK_ROOT)/sky130A/libs.ref/sky130_sram_macros/verilog/sky130_sram_1kbyte_1rw1r_32x256_8.v"
set ::env(EXTRA_LEFS) "\
- $script_dir/../../lef/Marmot.lef \
- $::env(PDK_ROOT)/sky130A/libs.ref/sky130_sram_macros/lef/sky130_sram_2kbyte_1rw1r_32x512_8.lef \
- $::env(PDK_ROOT)/sky130A/libs.ref/sky130_sram_macros/lef/sky130_sram_1kbyte_1rw1r_32x256_8.lef"
+ $script_dir/../../lef/Marmot.lef \
+ $script_dir/../../lef/clk_skew_adjust.lef \
+ $::env(PDK_ROOT)/sky130A/libs.ref/sky130_sram_macros/lef/sky130_sram_2kbyte_1rw1r_32x512_8.lef \
+ $::env(PDK_ROOT)/sky130A/libs.ref/sky130_sram_macros/lef/sky130_sram_1kbyte_1rw1r_32x256_8.lef"
set ::env(EXTRA_GDS_FILES) "\
- $script_dir/../../gds/Marmot.gds \
- $::env(PDK_ROOT)/sky130A/libs.ref/sky130_sram_macros/gds/sky130_sram_2kbyte_1rw1r_32x512_8.gds \
- $::env(PDK_ROOT)/sky130A/libs.ref/sky130_sram_macros/gds/sky130_sram_1kbyte_1rw1r_32x256_8.gds"
+ $script_dir/../../gds/Marmot.gds \
+ $script_dir/../../gds/clk_skew_adjust.gds \
+ $::env(PDK_ROOT)/sky130A/libs.ref/sky130_sram_macros/gds/sky130_sram_2kbyte_1rw1r_32x512_8.gds \
+ $::env(PDK_ROOT)/sky130A/libs.ref/sky130_sram_macros/gds/sky130_sram_1kbyte_1rw1r_32x256_8.gds"
set ::env(EXTRA_LIBS) "\
- $::env(PDK_ROOT)/sky130A/libs.ref/sky130_sram_macros/lib/sky130_sram_1kbyte_1rw1r_32x256_8_TT_1p8V_25C.lib \
- $::env(PDK_ROOT)/sky130A/libs.ref/sky130_sram_macros/lib/sky130_sram_2kbyte_1rw1r_32x512_8_TT_1p8V_25C.lib"
+ $::env(PDK_ROOT)/sky130A/libs.ref/sky130_sram_macros/lib/sky130_sram_1kbyte_1rw1r_32x256_8_TT_1p8V_25C.lib \
+ $::env(PDK_ROOT)/sky130A/libs.ref/sky130_sram_macros/lib/sky130_sram_2kbyte_1rw1r_32x512_8_TT_1p8V_25C.lib"
# Obstruction over SRAMs
set ::env(GLB_RT_OBS) " \
@@ -157,6 +162,7 @@
# The following is because there are no std cells in the example wrapper project.
set ::env(SYNTH_TOP_LEVEL) 1
+#set ::env(PL_TIME_DRIVEN) 1
set ::env(PL_RANDOM_GLB_PLACEMENT) 1
set ::env(PL_RESIZER_DESIGN_OPTIMIZATIONS) 0
diff --git a/openlane/user_project_wrapper/macro.cfg b/openlane/user_project_wrapper/macro.cfg
index 70ee044..d451797 100644
--- a/openlane/user_project_wrapper/macro.cfg
+++ b/openlane/user_project_wrapper/macro.cfg
@@ -1,5 +1,5 @@
# Logic
-Marmot 1000 300 N
+Marmot 1000 250 N
# I-Cache / ITIM
data_arrays_0_0_ext_ram0l 150 150 FN
@@ -8,8 +8,15 @@
data_arrays_0_0_ext_ram1h 150 1830 FN
data_arrays_0_0_ext_ram2l 150 2390 FN
data_arrays_0_0_ext_ram2h 150 2950 FN
-data_arrays_0_0_ext_ram3l 1000 2270 FN
-data_arrays_0_0_ext_ram3h 2050 2270 N
-tag_array_ext_ram0l 1200 2890 FN
-tag_array_ext_ram0h 2050 2890 N
+data_arrays_0_0_ext_ram3l 1000 2390 FN
+data_arrays_0_0_ext_ram3h 2050 2390 N
+tag_array_ext_ram0l 1200 2950 FN
+tag_array_ext_ram0h 2050 2950 N
+
+# Clock skew adjust
+u_clk_skew_adjust_1 1000 63 N
+u_clk_skew_adjust_2 1000 2163 N
+u_clk_skew_adjust_3 1000 2898 N
+u_clk_skew_adjust_4 1845 2373 N
+u_clk_skew_adjust_0 1845 3003 N
diff --git a/verilog/gl/Marmot.v b/verilog/gl/Marmot.v
index f8c61ff..2dd22fe 100644
--- a/verilog/gl/Marmot.v
+++ b/verilog/gl/Marmot.v
Binary files differ
diff --git a/verilog/lib/clk_skew_adjust.gv b/verilog/lib/clk_skew_adjust.gv
index ccab011..40333c5 100644
--- a/verilog/lib/clk_skew_adjust.gv
+++ b/verilog/lib/clk_skew_adjust.gv
@@ -89,6 +89,7 @@
output clk_out;
input [4:0] sel;
+`ifndef clk_skew_adjust_EMPTY
wire clk_d1;
wire clk_d2;
wire clk_d3;
@@ -229,4 +230,6 @@
// output clock
ctech_clk_buf u_clk_out_buf (.A(d40), .X(clk_out));
+`endif // clk_skew_adjust_EMPTY
+
endmodule