Added what can be pushed of chip_io
- Pad frame fully labelled on both sides
- This more like just the padframe, chip_io contains pad-to-pad
connections that is not done in this push
- Added its openlane config
diff --git a/openlane/Makefile b/openlane/Makefile
new file mode 100644
index 0000000..23fdf62
--- /dev/null
+++ b/openlane/Makefile
@@ -0,0 +1,35 @@
+BLOCKS = chip_io user_project_wrapper digital_pll mgmt_core
+CONFIG = $(foreach block,$(BLOCKS), ./$(block)/config.tcl)
+CLEAN = $(foreach block,$(BLOCKS), clean-$(block))
+
+all: $(BLOCKS)
+
+$(CONFIG) :
+ @echo "Missing $@. Please create a configuration for that design"
+ @exit 1
+
+$(BLOCKS) : % : ./%/config.tcl FORCE
+ifeq ($(OPENLANE_ROOT),)
+ @echo "Please export OPENLANE_ROOT"
+ @exit 1
+endif
+ @echo "###############################################"
+ @sleep 1
+ if [[ -f ./$*/interactive.tcl ]]; then\
+ ${OPENLANE_ROOT}/flow.tcl -it -file ./$*/interactive.tcl;\
+ else\
+ ${OPENLANE_ROOT}/flow.tcl -design ./$* -save_path .. -save -tag $* -overwrite;\
+ fi
+
+FORCE:
+
+clean:
+ @echo "Use clean_all to clean everything :)"
+
+clean_all: $(CLEAN)
+
+$(CLEAN): clean-% :
+ rm -rf runs/$*
+ rm -rf ../gds/$**
+ rm -rf ../mag/$**
+ rm -rf ../lef/$**
diff --git a/openlane/chip_io/config.tcl b/openlane/chip_io/config.tcl
new file mode 100644
index 0000000..7490488
--- /dev/null
+++ b/openlane/chip_io/config.tcl
@@ -0,0 +1,18 @@
+set script_dir [file dirname [file normalize [info script]]]
+
+set ::env(DESIGN_NAME) chip_io
+
+set ::env(VERILOG_FILES) "\
+ $script_dir/../../verilog/rtl/pads.v\
+ $script_dir/../../verilog/rtl/mprj_io.v\
+ $script_dir/../../verilog/rtl/chip_io.v"
+
+# The removal of this line is pending the IO verilog files being parsable by yosys...
+set ::env(VERILOG_FILES_BLACKBOX) "$script_dir/../../verilog/stubs/sky130_fd_io__top_xres4v2.v"
+
+set ::env(DESIGN_IS_PADFRAME) 1
+set ::env(SYNTH_FLAT_TOP) 1
+set ::env(USE_GPIO_PADS) 1
+
+set ::env(FP_SIZING) absolute
+set ::env(DIE_AREA) "0 0 3200 5300"
diff --git a/openlane/chip_io/interactive.tcl b/openlane/chip_io/interactive.tcl
new file mode 100644
index 0000000..05ae7a1
--- /dev/null
+++ b/openlane/chip_io/interactive.tcl
@@ -0,0 +1,55 @@
+package require openlane
+set script_dir [file dirname [file normalize [info script]]]
+
+prep -design $script_dir -tag chip_io -overwrite
+set save_path $script_dir/../..
+
+verilog_elaborate
+
+init_floorplan
+
+exec -ignorestderr python3 $::env(SCRIPTS_DIR)/padringer.py\
+ --def-netlist $::env(CURRENT_DEF)\
+ --design $::env(DESIGN_NAME)\
+ --lefs $::env(TECH_LEF) {*}$::env(GPIO_PADS_LEF)\
+ -cfg $script_dir/padframe.cfg\
+ --working-dir $::env(TMP_DIR)\
+ -o $::env(RESULTS_DIR)/floorplan/padframe.def
+
+set_def $::env(RESULTS_DIR)/floorplan/padframe.def
+
+
+label_macro_pins\
+ -lef $::env(MERGED_LEF_UNPADDED)\
+ -netlist_def $::env(CURRENT_DEF)\
+ -pad_pin_name "PAD"\
+ -extra_args {-v\
+ --map mgmt_vdda_hvclamp_pad VDDA vdda INOUT\
+ --map user1_vdda_hvclamp_pad\\\[0\\] VDDA vdda1 INOUT\
+ --map user2_vdda_hvclamp_pad VDDA vdda2 INOUT\
+ --map mgmt_vssa_hvclamp_pad VSSA vssa INOUT\
+ --map user1_vssa_hvclamp_pad\\\[0\\] VSSA vssa1 INOUT\
+ --map user2_vssa_hvclamp_pad VSSA vssa2 INOUT\
+ --map mgmt_vccd_lvclamp_pad VCCD vccd INOUT\
+ --map user1_vccd_lvclamp_pad VCCD vccd1 INOUT\
+ --map user2_vccd_lvclamp_pad VCCD vccd2 INOUT\
+ --map mgmt_vssd_lvclmap_pad VSSD vssd INOUT\
+ --map user1_vssd_lvclmap_pad VSSD vssd1 INOUT\
+ --map user2_vssd_lvclmap_pad VSSD vssd2 INOUT\
+ --map mgmt_vddio_hvclamp_pad\\\[0\\] VDDIO vddio INOUT\
+ --map mgmt_vssio_hvclamp_pad\\\[0\\] VSSIO vssio INOUT}
+
+run_magic
+
+run_magic_drc
+
+save_views -lef_path $::env(magic_result_file_tag).lef \
+ -def_path $::env(CURRENT_DEF) \
+ -gds_path $::env(magic_result_file_tag).gds \
+ -mag_path $::env(magic_result_file_tag).mag \
+ -save_path $save_path \
+ -tag $::env(RUN_TAG)
+
+
+run_magic_spice_export
+run_lvs
diff --git a/openlane/chip_io/padframe.cfg b/openlane/chip_io/padframe.cfg
new file mode 100644
index 0000000..f37aec8
--- /dev/null
+++ b/openlane/chip_io/padframe.cfg
@@ -0,0 +1,73 @@
+AREA 3200 5300 ;
+
+CORNER mgmt_corner\[0\] SW sky130_ef_io__corner_pad ;
+CORNER mgmt_corner\[1\] NW sky130_ef_io__corner_pad ;
+CORNER user1_corner NE sky130_ef_io__corner_pad ;
+CORNER user2_corner SE sky130_ef_io__corner_pad ;
+
+PAD mprj_pads/area2_io_pad\[5\] N sky130_ef_io__gpiov2_pad ;
+PAD mprj_pads/area2_io_pad\[4\] N sky130_ef_io__gpiov2_pad ;
+PAD mprj_pads/area2_io_pad\[3\] N sky130_ef_io__gpiov2_pad ;
+PAD mprj_pads/area2_io_pad\[2\] N sky130_ef_io__gpiov2_pad ;
+PAD mprj_pads/area2_io_pad\[1\] N sky130_ef_io__gpiov2_pad ;
+PAD mgmt_vssio_hvclamp_pad\[0\] N sky130_ef_io__vssio_hvc_pad ;
+PAD mprj_pads/area2_io_pad\[0\] N sky130_ef_io__gpiov2_pad ;
+PAD mprj_pads/area1_io_pad\[17\] N sky130_ef_io__gpiov2_pad ;
+PAD mprj_pads/area1_io_pad\[16\] N sky130_ef_io__gpiov2_pad ;
+PAD user1_vssa_hvclamp_pad\[0\] N sky130_ef_io__vssa_hvc_pad ;
+PAD mprj_pads/area1_io_pad\[15\] N sky130_ef_io__gpiov2_pad ;
+
+PAD mprj_pads/area1_io_pad\[0\] E sky130_ef_io__gpiov2_pad ;
+PAD mprj_pads/area1_io_pad\[1\] E sky130_ef_io__gpiov2_pad ;
+PAD mprj_pads/area1_io_pad\[2\] E sky130_ef_io__gpiov2_pad ;
+PAD mprj_pads/area1_io_pad\[3\] E sky130_ef_io__gpiov2_pad ;
+PAD mprj_pads/area1_io_pad\[4\] E sky130_ef_io__gpiov2_pad ;
+PAD mprj_pads/area1_io_pad\[5\] E sky130_ef_io__gpiov2_pad ;
+PAD mprj_pads/area1_io_pad\[6\] E sky130_ef_io__gpiov2_pad ;
+PAD user1_vssa_hvclamp_pad\[1\] E sky130_ef_io__vssa_hvc_pad ;
+PAD user1_vssd_lvclmap_pad E sky130_ef_io__vssd_lvc_pad ;
+PAD user1_vdda_hvclamp_pad\[1\] E sky130_ef_io__vdda_hvc_pad ;
+PAD mprj_pads/area1_io_pad\[7\] E sky130_ef_io__gpiov2_pad ;
+PAD mprj_pads/area1_io_pad\[8\] E sky130_ef_io__gpiov2_pad ;
+PAD mprj_pads/area1_io_pad\[9\] E sky130_ef_io__gpiov2_pad ;
+PAD mprj_pads/area1_io_pad\[10\] E sky130_ef_io__gpiov2_pad ;
+PAD mprj_pads/area1_io_pad\[11\] E sky130_ef_io__gpiov2_pad ;
+PAD mprj_pads/area1_io_pad\[12\] E sky130_ef_io__gpiov2_pad ;
+PAD user1_vdda_hvclamp_pad\[0\] E sky130_ef_io__vdda_hvc_pad ;
+PAD mprj_pads/area1_io_pad\[13\] E sky130_ef_io__gpiov2_pad ;
+PAD user1_vccd_lvclamp_pad E sky130_ef_io__vccd_lvc_pad ;
+PAD mprj_pads/area1_io_pad\[14\] E sky130_ef_io__gpiov2_pad ;
+
+PAD mgmt_vssa_hvclamp_pad S sky130_ef_io__vssa_hvc_pad ;
+PAD resetb_pad S sky130_fd_io__top_xres4v2 ;
+PAD clock_pad S sky130_ef_io__gpiov2_pad ;
+PAD mgmt_vssd_lvclmap_pad S sky130_ef_io__vssd_lvc_pad ;
+PAD flash_csb_pad S sky130_ef_io__gpiov2_pad ;
+PAD flash_clk_pad S sky130_ef_io__gpiov2_pad ;
+PAD flash_io0_pad S sky130_ef_io__gpiov2_pad ;
+PAD flash_io1_pad S sky130_ef_io__gpiov2_pad ;
+PAD gpio_pad S sky130_ef_io__gpiov2_pad ;
+PAD mgmt_vssio_hvclamp_pad\[1\] S sky130_ef_io__vssio_hvc_pad ;
+PAD mgmt_vdda_hvclamp_pad S sky130_ef_io__vdda_hvc_pad ;
+
+PAD mgmt_vccd_lvclamp_pad W sky130_ef_io__vccd_lvc_pad ;
+PAD mgmt_vddio_hvclamp_pad\[0\] W sky130_ef_io__vddio_hvc_pad ;
+PAD mprj_pads/area2_io_pad\[19\] W sky130_ef_io__gpiov2_pad ;
+PAD mprj_pads/area2_io_pad\[18\] W sky130_ef_io__gpiov2_pad ;
+PAD mprj_pads/area2_io_pad\[17\] W sky130_ef_io__gpiov2_pad ;
+PAD mprj_pads/area2_io_pad\[16\] W sky130_ef_io__gpiov2_pad ;
+PAD mprj_pads/area2_io_pad\[15\] W sky130_ef_io__gpiov2_pad ;
+PAD mprj_pads/area2_io_pad\[14\] W sky130_ef_io__gpiov2_pad ;
+PAD user2_vssd_lvclmap_pad W sky130_ef_io__vssd_lvc_pad ;
+PAD user2_vdda_hvclamp_pad W sky130_ef_io__vdda_hvc_pad ;
+PAD mprj_pads/area2_io_pad\[13\] W sky130_ef_io__gpiov2_pad ;
+PAD mprj_pads/area2_io_pad\[12\] W sky130_ef_io__gpiov2_pad ;
+PAD mprj_pads/area2_io_pad\[11\] W sky130_ef_io__gpiov2_pad ;
+PAD mprj_pads/area2_io_pad\[10\] W sky130_ef_io__gpiov2_pad ;
+PAD mprj_pads/area2_io_pad\[9\] W sky130_ef_io__gpiov2_pad ;
+PAD mprj_pads/area2_io_pad\[8\] W sky130_ef_io__gpiov2_pad ;
+PAD mprj_pads/area2_io_pad\[7\] W sky130_ef_io__gpiov2_pad ;
+PAD user2_vssa_hvclamp_pad W sky130_ef_io__vssa_hvc_pad ;
+PAD mgmt_vddio_hvclamp_pad\[1\] W sky130_ef_io__vddio_hvc_pad ;
+PAD user2_vccd_lvclamp_pad W sky130_ef_io__vccd_lvc_pad ;
+PAD mprj_pads/area2_io_pad\[6\] W sky130_ef_io__gpiov2_pad ;