Update openlane configs and Makefile - can run the Makefile outside the container now
diff --git a/openlane/Makefile b/openlane/Makefile index 23fdf62..1b7f4ec 100644 --- a/openlane/Makefile +++ b/openlane/Makefile
@@ -1,7 +1,11 @@ -BLOCKS = chip_io user_project_wrapper digital_pll mgmt_core +BLOCKS = $(shell find * -maxdepth 0 -type d) CONFIG = $(foreach block,$(BLOCKS), ./$(block)/config.tcl) CLEAN = $(foreach block,$(BLOCKS), clean-$(block)) +OPENLANE_IMAGE_NAME ?= openlane:rc4 +OPENLANE_BASIC_COMMAND = "cd /project/openlane && flow.tcl -design ./$* -save_path .. -save -tag $* -overwrite" +OPENLANE_INTERACTIVE_COMMAND = "cd /project/openlane && flow.tcl -it -file ./$*/interactive.tcl" + all: $(BLOCKS) $(CONFIG) : @@ -13,14 +17,30 @@ @echo "Please export OPENLANE_ROOT" @exit 1 endif +ifeq ($(PDK_ROOT),) + @echo "Please export PDK_ROOT" + @exit 1 +endif @echo "###############################################" @sleep 1 - if [[ -f ./$*/interactive.tcl ]]; then\ - ${OPENLANE_ROOT}/flow.tcl -it -file ./$*/interactive.tcl;\ + + @if [[ -f ./$*/interactive.tcl ]]; then\ + docker run -it -v $(OPENLANE_ROOT):/openLANE_flow \ + -v $(PDK_ROOT):$(PDK_ROOT) \ + -v $(PWD)/..:/project \ + -e PDK_ROOT=$(PDK_ROOT) \ + -u $(shell id -u $(USER)):$(shell id -g $(USER)) \ + $(OPENLANE_IMAGE_NAME) sh -c $(OPENLANE_INTERACTIVE_COMMAND);\ else\ - ${OPENLANE_ROOT}/flow.tcl -design ./$* -save_path .. -save -tag $* -overwrite;\ + docker run -it -v $(OPENLANE_ROOT):/openLANE_flow \ + -v $(PDK_ROOT):$(PDK_ROOT) \ + -v $(PWD)/..:/project \ + -e PDK_ROOT=$(PDK_ROOT) \ + -u $(shell id -u $(USER)):$(shell id -g $(USER)) \ + $(OPENLANE_IMAGE_NAME) sh -c $(OPENLANE_BASIC_COMMAND);\ fi + FORCE: clean:
diff --git a/openlane/chip_io/config.tcl b/openlane/chip_io/config.tcl index 7490488..6396c77 100644 --- a/openlane/chip_io/config.tcl +++ b/openlane/chip_io/config.tcl
@@ -3,6 +3,7 @@ set ::env(DESIGN_NAME) chip_io set ::env(VERILOG_FILES) "\ + $script_dir/../../verilog/rtl/defines.v\ $script_dir/../../verilog/rtl/pads.v\ $script_dir/../../verilog/rtl/mprj_io.v\ $script_dir/../../verilog/rtl/chip_io.v" @@ -16,3 +17,5 @@ set ::env(FP_SIZING) absolute set ::env(DIE_AREA) "0 0 3200 5300" + +set ::env(MAGIC_WRITE_FULL_LEF) 1
diff --git a/openlane/chip_io/padframe.cfg b/openlane/chip_io/padframe.cfg index f37aec8..d73bd0b 100644 --- a/openlane/chip_io/padframe.cfg +++ b/openlane/chip_io/padframe.cfg
@@ -5,38 +5,38 @@ 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 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 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\[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 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 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 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 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 ; @@ -52,22 +52,22 @@ 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 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 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 ; +PAD mprj_pads.area2_io_pad\[6\] W sky130_ef_io__gpiov2_pad ;
diff --git a/openlane/gpio_control_block/config.tcl b/openlane/gpio_control_block/config.tcl new file mode 100644 index 0000000..bb4477c --- /dev/null +++ b/openlane/gpio_control_block/config.tcl
@@ -0,0 +1,15 @@ +set script_dir [file dirname [file normalize [info script]]] + +set ::env(DESIGN_NAME) gpio_control_block +set ::env(FP_PIN_ORDER_CFG) $script_dir/pin_order.cfg + +set ::env(VERILOG_FILES) "\ + $script_dir/../../verilog/rtl/defines.v\ + $script_dir/../../verilog/rtl/gpio_control_block.v" +set ::env(SYNTH_READ_BLACKBOX_LIB) 1 + +set ::env(CLOCK_PORT) "serial_clock" +set ::env(CLOCK_PERIOD) "10" + +set ::env(FP_SIZING) absolute +set ::env(DIE_AREA) "0 0 50 125"
diff --git a/openlane/gpio_control_block/pin_order.cfg b/openlane/gpio_control_block/pin_order.cfg new file mode 100644 index 0000000..bb1d52c --- /dev/null +++ b/openlane/gpio_control_block/pin_order.cfg
@@ -0,0 +1,10 @@ +#E +resetn +serial_clock +serial_data_in +mgmt_.* +user_.* + +#W +pad_.* +serial_data_out
diff --git a/openlane/storage/config.tcl b/openlane/storage/config.tcl new file mode 100644 index 0000000..689258e --- /dev/null +++ b/openlane/storage/config.tcl
@@ -0,0 +1,42 @@ +set script_dir [file dirname [file normalize [info script]]] + +set ::env(DESIGN_NAME) storage + +set ::env(CLOCK_PORT) "mgmt_clk" +set ::env(CLOCK_PERIOD) "50" +set ::env(SYNTH_STRATEGY) 2 + +set ::env(PDN_CFG) $script_dir/pdn.tcl + +#set ::env(FP_PIN_ORDER_CFG) $script_dir/pin_order.cfg +# set ::env(FP_CORE_UTIL) 40 +set ::env(FP_SIZING) absolute +set ::env(DIE_AREA) "0 0 950 1900" + +set ::env(FP_HORIZONTAL_HALO) 5 +set ::env(FP_VERTICAL_HALO) 10 +set ::env(FP_PDN_VPITCH) 50 +set ::env(FP_PDN_HPITCH) 50 + + +set ::env(MACRO_PLACEMENT_CFG) $script_dir/macro_placement.cfg +set ::env(PL_TARGET_DENSITY) 0.45 +set ::env(PL_OPENPHYSYN_OPTIMIZATIONS) 0 + +set ::env(GLB_RT_ADJUSTMENT) 0 +set ::env(GLB_RT_TILES) 14 + +set ::env(DIODE_INSERTION_STRATEGY) 0 + +set ::env(VERILOG_FILES) "\ + $script_dir/../../verilog/rtl/defines.v\ + $script_dir/../../verilog/rtl/storage.v" + +set ::env(VERILOG_FILES_BLACKBOX) "\ + $script_dir/../../verilog/rtl/sram_1rw1r_32_256_8_sky130.v" + +set ::env(EXTRA_LEFS) "\ + $script_dir/../../lef/sram_1rw1r_32_256_8_sky130_lp1.lef" + +set ::env(EXTRA_GDS_FILES) "\ + $script_dir/../../gds/sram_1rw1r_32_256_8_sky130_lp1.gds"
diff --git a/openlane/storage/macro_placement.cfg b/openlane/storage/macro_placement.cfg new file mode 100644 index 0000000..a5bd41d --- /dev/null +++ b/openlane/storage/macro_placement.cfg
@@ -0,0 +1,8 @@ +SRAM_0\[1\] 41.430 21.000 N +SRAM_1\[0\] 41.430 491.235 N +SRAM_1\[3\] 41.430 959.845 N +SRAM_1\[5\] 41.430 1429.360 N +SRAM_1\[1\] 523.985 28.885 N +SRAM_0\[0\] 523.985 496.830 N +SRAM_1\[2\] 523.985 969.000 N +SRAM_1\[4\] 523.985 1429.360 N
diff --git a/openlane/storage/pdn.tcl b/openlane/storage/pdn.tcl new file mode 100644 index 0000000..4e918b8 --- /dev/null +++ b/openlane/storage/pdn.tcl
@@ -0,0 +1,34 @@ +# Power nets +set ::power_nets $::env(VDD_PIN) +set ::ground_nets $::env(GND_PIN) + +set ::macro_blockage_layer_list "li1 met1 met2 met3 met4 met5" + +pdngen::specify_grid stdcell { + name grid + rails { + met1 {width 0.48 pitch $::env(PLACE_SITE_HEIGHT) offset 0} + } + straps { + met4 {width 1.6 pitch $::env(FP_PDN_VPITCH) offset $::env(FP_PDN_VOFFSET)} + met5 {width 1.6 pitch $::env(FP_PDN_HPITCH) offset $::env(FP_PDN_HOFFSET)} + } + connect {{met1 met4} {met4 met5}} +} + +pdngen::specify_grid macro { + power_pins "VPWR VDD" + ground_pins "VGND VSS" + blockages "li1 met1 met2 met3 met4" + straps { + } + connect {{met4_PIN_ver met5}} +} + +set ::halo $::env(FP_HORIZONTAL_HALO) + +# POWER or GROUND #Std. cell rails starting with power or ground rails at the bottom of the core area +set ::rails_start_with "POWER" ; + +# POWER or GROUND #Upper metal stripes starting with power or ground rails at the left/bottom of the core area +set ::stripes_start_with "POWER" ;
diff --git a/openlane/user_project_wrapper/config.tcl b/openlane/user_project_wrapper/config.tcl index 91dca3c..7f63031 100644 --- a/openlane/user_project_wrapper/config.tcl +++ b/openlane/user_project_wrapper/config.tcl
@@ -3,7 +3,10 @@ set ::env(DESIGN_NAME) user_project_wrapper set ::env(FP_PIN_ORDER_CFG) $script_dir/pin_order.cfg -set ::env(VERILOG_FILES) "$script_dir/../../verilog/rtl/user_project_wrapper.v $script_dir/../../verilog/rtl/user_proj_example.v" +set ::env(VERILOG_FILES) "\ + $script_dir/../../verilog/rtl/defines.v \ + $script_dir/../../verilog/rtl/user_project_wrapper.v \ + $script_dir/../../verilog/rtl/user_proj_example.v" set ::env(CLOCK_PORT) "user_clock2" set ::env(CLOCK_NET) "mprj.clk"