From 11537018d7cb288ff983f8023d97a81154a4e3cb Mon Sep 17 00:00:00 2001 From: Mohamed Gaber Date: Fri, 10 Nov 2023 14:22:31 +0200 Subject: [PATCH] Create issue regression tests for DRC and LVS (#2039) + Create 2x DRC tests and 4x LVS tests ~ Rename older tests to be more descriptive Co-authored-by: kareefardi --- .gitignore | 1 + .../.gitignore | 0 .../config.tcl | 0 .../hooks/post_run.py | 0 tests/{1007 => 1007-buffer_insertion}/in.def | 0 .../interactive.tcl | 0 tests/{1413 => 1413-odb_remover}/.gitignore | 0 tests/{1413 => 1413-odb_remover}/config.tcl | 0 .../hooks/post_run.py | 0 tests/1413-odb_remover/in.def | 1 + tests/1413-odb_remover/interactive.tcl | 24 + tests/1413/in.def | 1 - tests/1413/interactive.tcl | 24 - .../config.json | 2 +- .../hooks/post_run.py | 0 .../interactive.tcl | 0 .../src/inverter.v | 0 tests/2038-drc_bad/config.json | 16 + tests/2038-drc_bad/interactive.tcl | 7 + tests/2038-drc_bad/inverter.gds | Bin 0 -> 43772 bytes tests/2038-drc_bad/issue_regression.py | 21 + tests/2038-drc_good/config.json | 16 + tests/2038-drc_good/interactive.tcl | 7 + tests/2038-drc_good/inverter.gds | Bin 0 -> 44076 bytes tests/2038-drc_good/issue_regression.py | 15 + tests/2038-lvs_bad/config.json | 16 + tests/2038-lvs_bad/interactive.tcl | 11 + tests/2038-lvs_bad/inverter.def | 246 ++++++++ tests/2038-lvs_bad/inverter.gds | Bin 0 -> 37190 bytes tests/2038-lvs_bad/inverter.pnl.v | 121 ++++ tests/2038-lvs_bad/issue_regression.py | 12 + tests/2038-lvs_bad_lefdef/config.json | 1 + tests/2038-lvs_bad_lefdef/interactive.tcl | 10 + tests/2038-lvs_bad_lefdef/inverter.def | 1 + tests/2038-lvs_bad_lefdef/inverter.gds | 1 + tests/2038-lvs_bad_lefdef/inverter.pnl.v | 1 + tests/2038-lvs_bad_lefdef/issue_regression.py | 1 + tests/2038-lvs_good/config.json | 16 + tests/2038-lvs_good/interactive.tcl | 11 + tests/2038-lvs_good/inverter.def | 357 +++++++++++ tests/2038-lvs_good/inverter.gds | Bin 0 -> 54840 bytes tests/2038-lvs_good/inverter.pnl.v | 565 ++++++++++++++++++ tests/2038-lvs_good/issue_regression.py | 25 + tests/2038-lvs_good_lefdef/config.json | 1 + tests/2038-lvs_good_lefdef/interactive.tcl | 10 + tests/2038-lvs_good_lefdef/inverter.def | 1 + tests/2038-lvs_good_lefdef/inverter.gds | 1 + tests/2038-lvs_good_lefdef/inverter.pnl.v | 1 + .../2038-lvs_good_lefdef/issue_regression.py | 1 + tests/{912 => 912-misaligned_pins}/config.tcl | 0 .../{912 => 912-misaligned_pins}/def_test.def | 0 .../issue_regression.py | 0 .../src/def_test.v | 0 tests/__main__.py | 2 +- 54 files changed, 1520 insertions(+), 27 deletions(-) rename tests/{1007 => 1007-buffer_insertion}/.gitignore (100%) rename tests/{1007 => 1007-buffer_insertion}/config.tcl (100%) rename tests/{1007 => 1007-buffer_insertion}/hooks/post_run.py (100%) rename tests/{1007 => 1007-buffer_insertion}/in.def (100%) rename tests/{1007 => 1007-buffer_insertion}/interactive.tcl (100%) rename tests/{1413 => 1413-odb_remover}/.gitignore (100%) rename tests/{1413 => 1413-odb_remover}/config.tcl (100%) rename tests/{1413 => 1413-odb_remover}/hooks/post_run.py (100%) create mode 120000 tests/1413-odb_remover/in.def create mode 100644 tests/1413-odb_remover/interactive.tcl delete mode 120000 tests/1413/in.def delete mode 100644 tests/1413/interactive.tcl rename tests/{1506 => 1506-config_preprocessor}/config.json (91%) rename tests/{1506 => 1506-config_preprocessor}/hooks/post_run.py (100%) rename tests/{1506 => 1506-config_preprocessor}/interactive.tcl (100%) rename tests/{1506 => 1506-config_preprocessor}/src/inverter.v (100%) create mode 100644 tests/2038-drc_bad/config.json create mode 100644 tests/2038-drc_bad/interactive.tcl create mode 100644 tests/2038-drc_bad/inverter.gds create mode 100644 tests/2038-drc_bad/issue_regression.py create mode 100644 tests/2038-drc_good/config.json create mode 100644 tests/2038-drc_good/interactive.tcl create mode 100644 tests/2038-drc_good/inverter.gds create mode 100644 tests/2038-drc_good/issue_regression.py create mode 100644 tests/2038-lvs_bad/config.json create mode 100644 tests/2038-lvs_bad/interactive.tcl create mode 100644 tests/2038-lvs_bad/inverter.def create mode 100644 tests/2038-lvs_bad/inverter.gds create mode 100644 tests/2038-lvs_bad/inverter.pnl.v create mode 100644 tests/2038-lvs_bad/issue_regression.py create mode 120000 tests/2038-lvs_bad_lefdef/config.json create mode 100644 tests/2038-lvs_bad_lefdef/interactive.tcl create mode 120000 tests/2038-lvs_bad_lefdef/inverter.def create mode 120000 tests/2038-lvs_bad_lefdef/inverter.gds create mode 120000 tests/2038-lvs_bad_lefdef/inverter.pnl.v create mode 120000 tests/2038-lvs_bad_lefdef/issue_regression.py create mode 100644 tests/2038-lvs_good/config.json create mode 100644 tests/2038-lvs_good/interactive.tcl create mode 100644 tests/2038-lvs_good/inverter.def create mode 100644 tests/2038-lvs_good/inverter.gds create mode 100644 tests/2038-lvs_good/inverter.pnl.v create mode 100644 tests/2038-lvs_good/issue_regression.py create mode 120000 tests/2038-lvs_good_lefdef/config.json create mode 100644 tests/2038-lvs_good_lefdef/interactive.tcl create mode 120000 tests/2038-lvs_good_lefdef/inverter.def create mode 120000 tests/2038-lvs_good_lefdef/inverter.gds create mode 120000 tests/2038-lvs_good_lefdef/inverter.pnl.v create mode 120000 tests/2038-lvs_good_lefdef/issue_regression.py rename tests/{912 => 912-misaligned_pins}/config.tcl (100%) rename tests/{912 => 912-misaligned_pins}/def_test.def (100%) rename tests/{912 => 912-misaligned_pins}/issue_regression.py (100%) rename tests/{912 => 912-misaligned_pins}/src/def_test.v (100%) diff --git a/.gitignore b/.gitignore index af6c64087..ec3c5d0b8 100644 --- a/.gitignore +++ b/.gitignore @@ -14,6 +14,7 @@ macrocell.list default.cvcrc *.log *.tar.gz +abc.history # Python cache **/__pycache__ diff --git a/tests/1007/.gitignore b/tests/1007-buffer_insertion/.gitignore similarity index 100% rename from tests/1007/.gitignore rename to tests/1007-buffer_insertion/.gitignore diff --git a/tests/1007/config.tcl b/tests/1007-buffer_insertion/config.tcl similarity index 100% rename from tests/1007/config.tcl rename to tests/1007-buffer_insertion/config.tcl diff --git a/tests/1007/hooks/post_run.py b/tests/1007-buffer_insertion/hooks/post_run.py similarity index 100% rename from tests/1007/hooks/post_run.py rename to tests/1007-buffer_insertion/hooks/post_run.py diff --git a/tests/1007/in.def b/tests/1007-buffer_insertion/in.def similarity index 100% rename from tests/1007/in.def rename to tests/1007-buffer_insertion/in.def diff --git a/tests/1007/interactive.tcl b/tests/1007-buffer_insertion/interactive.tcl similarity index 100% rename from tests/1007/interactive.tcl rename to tests/1007-buffer_insertion/interactive.tcl diff --git a/tests/1413/.gitignore b/tests/1413-odb_remover/.gitignore similarity index 100% rename from tests/1413/.gitignore rename to tests/1413-odb_remover/.gitignore diff --git a/tests/1413/config.tcl b/tests/1413-odb_remover/config.tcl similarity index 100% rename from tests/1413/config.tcl rename to tests/1413-odb_remover/config.tcl diff --git a/tests/1413/hooks/post_run.py b/tests/1413-odb_remover/hooks/post_run.py similarity index 100% rename from tests/1413/hooks/post_run.py rename to tests/1413-odb_remover/hooks/post_run.py diff --git a/tests/1413-odb_remover/in.def b/tests/1413-odb_remover/in.def new file mode 120000 index 000000000..72f295b9b --- /dev/null +++ b/tests/1413-odb_remover/in.def @@ -0,0 +1 @@ +../1007-buffer_insertion/in.def \ No newline at end of file diff --git a/tests/1413-odb_remover/interactive.tcl b/tests/1413-odb_remover/interactive.tcl new file mode 100644 index 000000000..7b1d98018 --- /dev/null +++ b/tests/1413-odb_remover/interactive.tcl @@ -0,0 +1,24 @@ +package require openlane; + +prep -design $::env(TEST_DIR) {*}$argv + +try_catch echo { + read_lef $::env(MERGED_LEF) + read_def $::env(DESIGN_DIR)/in.def + write_db $::env(DESIGN_DIR)/in.odb + } | openroad -exit + + set ::env(CURRENT_ODB) $::env(DESIGN_DIR)/in.odb + + set save_odb $::env(DESIGN_DIR)/out.odb + + # Remove pins first: nets cannot be removed if they are associated with a pin + remove_components -input $::env(CURRENT_ODB) -output $save_odb + remove_pins -input $save_odb + remove_nets -rx {^in$} -input $save_odb + + set ::env(CURRENT_ODB) $save_odb + + try_catch $::env(OPENROAD_BIN) -exit -no_init -python $::env(DESIGN_DIR)/hooks/post_run.py + + puts_info "Done." \ No newline at end of file diff --git a/tests/1413/in.def b/tests/1413/in.def deleted file mode 120000 index aee5f17cd..000000000 --- a/tests/1413/in.def +++ /dev/null @@ -1 +0,0 @@ -../1007/in.def \ No newline at end of file diff --git a/tests/1413/interactive.tcl b/tests/1413/interactive.tcl deleted file mode 100644 index 6e14b4a5d..000000000 --- a/tests/1413/interactive.tcl +++ /dev/null @@ -1,24 +0,0 @@ -package require openlane; - -prep -design $::env(TEST_DIR) {*}$argv - -try_catch echo { - read_lef $::env(MERGED_LEF) - read_def $::env(DESIGN_DIR)/../1413/in.def - write_db $::env(DESIGN_DIR)/in.odb -} | openroad -exit - -set ::env(CURRENT_ODB) $::env(DESIGN_DIR)/in.odb - -set save_odb $::env(DESIGN_DIR)/out.odb - -# Remove pins first: nets cannot be removed if they are associated with a pin -remove_components -input $::env(CURRENT_ODB) -output $save_odb -remove_pins -input $save_odb -remove_nets -rx {^in$} -input $save_odb - -set ::env(CURRENT_ODB) $save_odb - -try_catch $::env(OPENROAD_BIN) -exit -no_init -python $::env(DESIGN_DIR)/hooks/post_run.py - -puts_info "Done." \ No newline at end of file diff --git a/tests/1506/config.json b/tests/1506-config_preprocessor/config.json similarity index 91% rename from tests/1506/config.json rename to tests/1506-config_preprocessor/config.json index f205274c1..1c1490124 100644 --- a/tests/1506/config.json +++ b/tests/1506-config_preprocessor/config.json @@ -17,7 +17,7 @@ "TEST_FLOAT_CALC": "expr::2 * $CLOCK_PERIOD", "TEST_MALICIOUS_VAR_0": "\t\\};puts hi;[puts hi];{\"\"\"''''", "TEST_MALICIOUS_VAR_1": "\n\nputs hi;\n\n\u0010potato\n", - "TEST_INTERNAL_GLOB": "dir::../1506/src/*", + "TEST_INTERNAL_GLOB": "dir::../1506-config_preprocessor/src/*", "TEST_EXTERNAL_GLOB": "dir::../*", "TEST_REGEX": "x\\.y" } \ No newline at end of file diff --git a/tests/1506/hooks/post_run.py b/tests/1506-config_preprocessor/hooks/post_run.py similarity index 100% rename from tests/1506/hooks/post_run.py rename to tests/1506-config_preprocessor/hooks/post_run.py diff --git a/tests/1506/interactive.tcl b/tests/1506-config_preprocessor/interactive.tcl similarity index 100% rename from tests/1506/interactive.tcl rename to tests/1506-config_preprocessor/interactive.tcl diff --git a/tests/1506/src/inverter.v b/tests/1506-config_preprocessor/src/inverter.v similarity index 100% rename from tests/1506/src/inverter.v rename to tests/1506-config_preprocessor/src/inverter.v diff --git a/tests/2038-drc_bad/config.json b/tests/2038-drc_bad/config.json new file mode 100644 index 000000000..565a42970 --- /dev/null +++ b/tests/2038-drc_bad/config.json @@ -0,0 +1,16 @@ +{ + "DESIGN_NAME": "inverter", + "VERILOG_FILES": [], + "RUN_CTS": false, + "CLOCK_PORT": null, + "PL_RANDOM_GLB_PLACEMENT": true, + "FP_SIZING": "absolute", + "DIE_AREA": "0 0 34.5 57.12", + "PL_TARGET_DENSITY": 0.75, + "FP_PDN_AUTO_ADJUST": false, + "FP_PDN_VPITCH": 25, + "FP_PDN_HPITCH": 25, + "FP_PDN_VOFFSET": 5, + "FP_PDN_HOFFSET": 5, + "DIODE_INSERTION_STRATEGY": 3 +} \ No newline at end of file diff --git a/tests/2038-drc_bad/interactive.tcl b/tests/2038-drc_bad/interactive.tcl new file mode 100644 index 000000000..7fe180f97 --- /dev/null +++ b/tests/2038-drc_bad/interactive.tcl @@ -0,0 +1,7 @@ +package require openlane; + +prep -design $::env(TEST_DIR) {*}$argv + +set ::env(CURRENT_GDS) $::env(TEST_DIR)/inverter.gds + +run_magic_drc \ No newline at end of file diff --git a/tests/2038-drc_bad/inverter.gds b/tests/2038-drc_bad/inverter.gds new file mode 100644 index 0000000000000000000000000000000000000000..3ae4f3fa232b14dc57f035a2b4ae6d18c72c3406 GIT binary patch literal 43772 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 literal 0 HcmV?d00001 diff --git a/tests/2038-drc_bad/issue_regression.py b/tests/2038-drc_bad/issue_regression.py new file mode 100644 index 000000000..83dce4acb --- /dev/null +++ b/tests/2038-drc_bad/issue_regression.py @@ -0,0 +1,21 @@ +import os +import subprocess +import sys + +args = sys.argv[1:] + +run_folder = args[0] + +log_path = os.path.join(run_folder, "openlane.log") + +assert ( + subprocess.call( + ["grep", "-i", "There are violations in the design after Magic DRC", log_path] + ) + == 0 +), "OpenLane does not accurately report the existence of violations" + +assert ( + subprocess.call(["grep", "-Pi", "Total Number of violations is \\d+", log_path]) + == 0 +), "OpenLane does not accurately print the number of violations" diff --git a/tests/2038-drc_good/config.json b/tests/2038-drc_good/config.json new file mode 100644 index 000000000..565a42970 --- /dev/null +++ b/tests/2038-drc_good/config.json @@ -0,0 +1,16 @@ +{ + "DESIGN_NAME": "inverter", + "VERILOG_FILES": [], + "RUN_CTS": false, + "CLOCK_PORT": null, + "PL_RANDOM_GLB_PLACEMENT": true, + "FP_SIZING": "absolute", + "DIE_AREA": "0 0 34.5 57.12", + "PL_TARGET_DENSITY": 0.75, + "FP_PDN_AUTO_ADJUST": false, + "FP_PDN_VPITCH": 25, + "FP_PDN_HPITCH": 25, + "FP_PDN_VOFFSET": 5, + "FP_PDN_HOFFSET": 5, + "DIODE_INSERTION_STRATEGY": 3 +} \ No newline at end of file diff --git a/tests/2038-drc_good/interactive.tcl b/tests/2038-drc_good/interactive.tcl new file mode 100644 index 000000000..7fe180f97 --- /dev/null +++ b/tests/2038-drc_good/interactive.tcl @@ -0,0 +1,7 @@ +package require openlane; + +prep -design $::env(TEST_DIR) {*}$argv + +set ::env(CURRENT_GDS) $::env(TEST_DIR)/inverter.gds + +run_magic_drc \ No newline at end of file diff --git a/tests/2038-drc_good/inverter.gds b/tests/2038-drc_good/inverter.gds new file mode 100644 index 0000000000000000000000000000000000000000..649e49123f422621b7f2658d194164f97047cfcc GIT binary patch literal 44076 zcmd^|4bY`!dEcM+bH5So60@-5I2Ho?(PqCt0)++n2reR$-B=9rlCbE0b!A~!Kr9d^ zY8JJH%1)DNVbjD|Aycuk9Z8(ljHXN)GofRg*1@!CV>KB}L#Nqk5^e4OcVEx{InQ&> zx$pO!cbPh!90z~9*E#?Dy6^kC?$77E`&P5nWHnW-o|vqzttRxp$%@wl)za$xYI${G zwYXY7IeXy9d+xmZ*qwJ*E2m~Izw*TP-T(GeFYmni^FMm(<8R+nt)9tiSI^GgbLjq! zn>Wn8bKl%Ocg*eIH#fKM&O3hkuDKo6^x~?TT`^gGrU~E=~wH&T7PxYpIhr6)8}_r)x@POo{<8(xx1wQ{`bHCGk zHB|po7IA>HOR8$o(H^HKqJAcyOK~>OM0}P@qWn;Ne`vCrsb*h0!T+Bxb+!D0nO&=X zk=H+|mZ!Y=mi(Qn7O$H9$(!DG^TPBh7yWfNULAT>yY{dATv;uCmHKz$537~VQ}VIS z&(uHjeO~29eCqtI+qY}n_FXkhf9d@FQ@8I%>+A9J)|5Zf3m$)0*7+CX_e1Kmw^Y@N zulKm*v^>jh>iu>;4d|>UFZtIinBH&e6~B}pYJX^FR#nxjURPD-vfILL%HG!B*3*Zdnct22o6BwsyD58H zALG&OAAkPq)2psek2U{w^po$1aX+=F#WPiv>}GfV?bC<48Q2{U%#LAKO-N^XR}YXC|k0d1^+W=!td;pX81*q|N8x` z|3$wUeit8VQQBlT3;q}VX82uv$PB;e@n656^}pn!;dklw7UehD&4T|W9}T}tx0~S? zJ^t(Wv;LRe5`LF!t|ktN@|)~t!T+*b!tZj%vc>^={Gtygd)EJoi^A`U-)m8Rlie)% zUvW|RUGaNn_(hNZ`u(>5tLpjVGS;Q#Uz1<;{ltfRoW4`}_&McnP39FoXX^9C@}|G5 zxPL(Uno}Q(^3Cc%lxOO5gXMXC`ivG?_05F((_C`D+9taxdr?38??Z1cdLZ_z>= z2Saa8ZV0_8dsaX3qWa;q<|F!}Ci^JtrtDe$)V~Ye^sye%VK+}El~jQ*GZ<@CQP zU9y`6J?$j#XunC`VK+PSb4vAF zbW}NE{?phGOx2Vw=H?VO z^b|LzPPrxewH@RTw825DC*#-dLb<|wBO{IUyx zK3$llQ^wiulFxRRKKYK=9WC^faJHwE>ap-Y#w}6jlv6zxyTdVVsfM1?i5stB`6F|C zejR$so!O^$Tow9xPPv^`Eai<>FZz*HEOE#x#wn0hEb&C`r>0l2`W7Pkr@qBX?KzX0 zR=icBTyB?A`G2bNU!_0SWcQ!SG3#5UoIiHg=*_7&M!QUQSLwZ){5ic6BOg+KY8QfE zz2EMC@6yvQfSvgCw^i2*dh~AEWH&wab(K?-)gPTHeYSjb{ilGL�{Lt8O(ZYx4Ri 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 literal 0 HcmV?d00001 diff --git a/tests/2038-drc_good/issue_regression.py b/tests/2038-drc_good/issue_regression.py new file mode 100644 index 000000000..50d742465 --- /dev/null +++ b/tests/2038-drc_good/issue_regression.py @@ -0,0 +1,15 @@ +import os +import subprocess +import sys + +args = sys.argv[1:] + +run_folder = args[0] + +log_path = os.path.join(run_folder, "openlane.log") +assert ( + subprocess.call( + ["grep", "-i", "No DRC violations after GDS streaming out", log_path] + ) + == 0 +), "OpenLane did not report the lack of DRC violations properly" diff --git a/tests/2038-lvs_bad/config.json b/tests/2038-lvs_bad/config.json new file mode 100644 index 000000000..565a42970 --- /dev/null +++ b/tests/2038-lvs_bad/config.json @@ -0,0 +1,16 @@ +{ + "DESIGN_NAME": "inverter", + "VERILOG_FILES": [], + "RUN_CTS": false, + "CLOCK_PORT": null, + "PL_RANDOM_GLB_PLACEMENT": true, + "FP_SIZING": "absolute", + "DIE_AREA": "0 0 34.5 57.12", + "PL_TARGET_DENSITY": 0.75, + "FP_PDN_AUTO_ADJUST": false, + "FP_PDN_VPITCH": 25, + "FP_PDN_HPITCH": 25, + "FP_PDN_VOFFSET": 5, + "FP_PDN_HOFFSET": 5, + "DIODE_INSERTION_STRATEGY": 3 +} \ No newline at end of file diff --git a/tests/2038-lvs_bad/interactive.tcl b/tests/2038-lvs_bad/interactive.tcl new file mode 100644 index 000000000..1835897cf --- /dev/null +++ b/tests/2038-lvs_bad/interactive.tcl @@ -0,0 +1,11 @@ +package require openlane; + +prep -design $::env(TEST_DIR) {*}$argv + +set ::env(CURRENT_DEF) $::env(TEST_DIR)/inverter.def +set ::env(CURRENT_GDS) $::env(TEST_DIR)/inverter.gds +set ::env(CURRENT_POWERED_NETLIST) $::env(TEST_DIR)/inverter.pnl.v + +set ::env(MAGIC_EXT_USE_GDS) 1 +run_magic_spice_export +run_lvs \ No newline at end of file diff --git a/tests/2038-lvs_bad/inverter.def b/tests/2038-lvs_bad/inverter.def new file mode 100644 index 000000000..2096c7962 --- /dev/null +++ b/tests/2038-lvs_bad/inverter.def @@ -0,0 +1,246 @@ +VERSION 5.8 ; +DIVIDERCHAR "/" ; +BUSBITCHARS "[]" ; +DESIGN inverter ; +UNITS DISTANCE MICRONS 1000 ; +DIEAREA ( 0 0 ) ( 50000 50000 ) ; +ROW ROW_0 unithd 5520 10880 N DO 84 BY 1 STEP 460 0 ; +ROW ROW_1 unithd 5520 13600 FS DO 84 BY 1 STEP 460 0 ; +ROW ROW_2 unithd 5520 16320 N DO 84 BY 1 STEP 460 0 ; +ROW ROW_3 unithd 5520 19040 FS DO 84 BY 1 STEP 460 0 ; +ROW ROW_4 unithd 5520 21760 N DO 84 BY 1 STEP 460 0 ; +ROW ROW_5 unithd 5520 24480 FS DO 84 BY 1 STEP 460 0 ; +ROW ROW_6 unithd 5520 27200 N DO 84 BY 1 STEP 460 0 ; +ROW ROW_7 unithd 5520 29920 FS DO 84 BY 1 STEP 460 0 ; +ROW ROW_8 unithd 5520 32640 N DO 84 BY 1 STEP 460 0 ; +ROW ROW_9 unithd 5520 35360 FS DO 84 BY 1 STEP 460 0 ; +TRACKS X 230 DO 109 STEP 460 LAYER li1 ; +TRACKS Y 170 DO 147 STEP 340 LAYER li1 ; +TRACKS X 170 DO 147 STEP 340 LAYER met1 ; +TRACKS Y 170 DO 147 STEP 340 LAYER met1 ; +TRACKS X 230 DO 109 STEP 460 LAYER met2 ; +TRACKS Y 230 DO 109 STEP 460 LAYER met2 ; +TRACKS X 340 DO 73 STEP 680 LAYER met3 ; +TRACKS Y 340 DO 73 STEP 680 LAYER met3 ; +TRACKS X 460 DO 54 STEP 920 LAYER met4 ; +TRACKS Y 460 DO 54 STEP 920 LAYER met4 ; +TRACKS X 1700 DO 14 STEP 3400 LAYER met5 ; +TRACKS Y 1700 DO 14 STEP 3400 LAYER met5 ; +GCELLGRID X 0 DO 7 STEP 6900 ; +GCELLGRID Y 0 DO 7 STEP 6900 ; +VIAS 4 ; + - via2_3_1600_480_1_5_320_320 + VIARULE M1M2_PR + CUTSIZE 150 150 + LAYERS met1 via met2 + CUTSPACING 170 170 + ENCLOSURE 85 165 55 85 + ROWCOL 1 5 ; + - via3_4_1600_480_1_4_400_400 + VIARULE M2M3_PR + CUTSIZE 200 200 + LAYERS met2 via2 met3 + CUTSPACING 200 200 + ENCLOSURE 40 85 65 65 + ROWCOL 1 4 ; + - via4_5_1600_480_1_4_400_400 + VIARULE M3M4_PR + CUTSIZE 200 200 + LAYERS met3 via3 met4 + CUTSPACING 200 200 + ENCLOSURE 90 60 100 65 + ROWCOL 1 4 ; + - via5_6_1600_1600_1_1_1600_1600 + VIARULE M4M5_PR + CUTSIZE 800 800 + LAYERS met4 via4 met5 + CUTSPACING 800 800 + ENCLOSURE 400 190 310 400 ; +END VIAS +COMPONENTS 33 ; + - PHY_EDGE_ROW_0_Left_10 sky130_fd_sc_hd__decap_3 + SOURCE DIST + FIXED ( 5520 10880 ) N ; + - PHY_EDGE_ROW_0_Right_0 sky130_fd_sc_hd__decap_3 + SOURCE DIST + FIXED ( 42780 10880 ) FN ; + - PHY_EDGE_ROW_1_Left_11 sky130_fd_sc_hd__decap_3 + SOURCE DIST + FIXED ( 5520 13600 ) FS ; + - PHY_EDGE_ROW_1_Right_1 sky130_fd_sc_hd__decap_3 + SOURCE DIST + FIXED ( 42780 13600 ) S ; + - PHY_EDGE_ROW_2_Left_12 sky130_fd_sc_hd__decap_3 + SOURCE DIST + FIXED ( 5520 16320 ) N ; + - PHY_EDGE_ROW_2_Right_2 sky130_fd_sc_hd__decap_3 + SOURCE DIST + FIXED ( 42780 16320 ) FN ; + - PHY_EDGE_ROW_3_Left_13 sky130_fd_sc_hd__decap_3 + SOURCE DIST + FIXED ( 5520 19040 ) FS ; + - PHY_EDGE_ROW_3_Right_3 sky130_fd_sc_hd__decap_3 + SOURCE DIST + FIXED ( 42780 19040 ) S ; + - PHY_EDGE_ROW_4_Left_14 sky130_fd_sc_hd__decap_3 + SOURCE DIST + FIXED ( 5520 21760 ) N ; + - PHY_EDGE_ROW_4_Right_4 sky130_fd_sc_hd__decap_3 + SOURCE DIST + FIXED ( 42780 21760 ) FN ; + - PHY_EDGE_ROW_5_Left_15 sky130_fd_sc_hd__decap_3 + SOURCE DIST + FIXED ( 5520 24480 ) FS ; + - PHY_EDGE_ROW_5_Right_5 sky130_fd_sc_hd__decap_3 + SOURCE DIST + FIXED ( 42780 24480 ) S ; + - PHY_EDGE_ROW_6_Left_16 sky130_fd_sc_hd__decap_3 + SOURCE DIST + FIXED ( 5520 27200 ) N ; + - PHY_EDGE_ROW_6_Right_6 sky130_fd_sc_hd__decap_3 + SOURCE DIST + FIXED ( 42780 27200 ) FN ; + - PHY_EDGE_ROW_7_Left_17 sky130_fd_sc_hd__decap_3 + SOURCE DIST + FIXED ( 5520 29920 ) FS ; + - PHY_EDGE_ROW_7_Right_7 sky130_fd_sc_hd__decap_3 + SOURCE DIST + FIXED ( 42780 29920 ) S ; + - PHY_EDGE_ROW_8_Left_18 sky130_fd_sc_hd__decap_3 + SOURCE DIST + FIXED ( 5520 32640 ) N ; + - PHY_EDGE_ROW_8_Right_8 sky130_fd_sc_hd__decap_3 + SOURCE DIST + FIXED ( 42780 32640 ) FN ; + - PHY_EDGE_ROW_9_Left_19 sky130_fd_sc_hd__decap_3 + SOURCE DIST + FIXED ( 5520 35360 ) FS ; + - PHY_EDGE_ROW_9_Right_9 sky130_fd_sc_hd__decap_3 + SOURCE DIST + FIXED ( 42780 35360 ) S ; + - TAP_TAPCELL_ROW_0_20 sky130_fd_sc_hd__tapvpwrvgnd_1 + SOURCE DIST + FIXED ( 18400 10880 ) N ; + - TAP_TAPCELL_ROW_0_21 sky130_fd_sc_hd__tapvpwrvgnd_1 + SOURCE DIST + FIXED ( 31280 10880 ) N ; + - TAP_TAPCELL_ROW_1_22 sky130_fd_sc_hd__tapvpwrvgnd_1 + SOURCE DIST + FIXED ( 31280 13600 ) FS ; + - TAP_TAPCELL_ROW_2_23 sky130_fd_sc_hd__tapvpwrvgnd_1 + SOURCE DIST + FIXED ( 18400 16320 ) N ; + - TAP_TAPCELL_ROW_3_24 sky130_fd_sc_hd__tapvpwrvgnd_1 + SOURCE DIST + FIXED ( 31280 19040 ) FS ; + - TAP_TAPCELL_ROW_4_25 sky130_fd_sc_hd__tapvpwrvgnd_1 + SOURCE DIST + FIXED ( 18400 21760 ) N ; + - TAP_TAPCELL_ROW_5_26 sky130_fd_sc_hd__tapvpwrvgnd_1 + SOURCE DIST + FIXED ( 31280 24480 ) FS ; + - TAP_TAPCELL_ROW_6_27 sky130_fd_sc_hd__tapvpwrvgnd_1 + SOURCE DIST + FIXED ( 18400 27200 ) N ; + - TAP_TAPCELL_ROW_7_28 sky130_fd_sc_hd__tapvpwrvgnd_1 + SOURCE DIST + FIXED ( 31280 29920 ) FS ; + - TAP_TAPCELL_ROW_8_29 sky130_fd_sc_hd__tapvpwrvgnd_1 + SOURCE DIST + FIXED ( 18400 32640 ) N ; + - TAP_TAPCELL_ROW_9_30 sky130_fd_sc_hd__tapvpwrvgnd_1 + SOURCE DIST + FIXED ( 18400 35360 ) FS ; + - TAP_TAPCELL_ROW_9_31 sky130_fd_sc_hd__tapvpwrvgnd_1 + SOURCE DIST + FIXED ( 31280 35360 ) FS ; + - _0_ sky130_fd_sc_hd__inv_2 + PLACED ( 40020 24480 ) S ; +END COMPONENTS +PINS 4 ; + - VGND + NET VGND + SPECIAL + DIRECTION INOUT + USE GROUND + + PORT + + LAYER met5 ( -19560 -800 ) ( 19560 800 ) + + LAYER met4 ( 13180 -8540 ) ( 14780 19140 ) + + LAYER met4 ( -11820 -8540 ) ( -10220 19140 ) + + FIXED ( 24840 19180 ) N ; + - VPWR + NET VPWR + SPECIAL + DIRECTION INOUT + USE POWER + + PORT + + LAYER met5 ( -19560 -800 ) ( 19560 800 ) + + LAYER met4 ( 9880 -5240 ) ( 11480 22440 ) + + LAYER met4 ( -15120 -5240 ) ( -13520 22440 ) + + FIXED ( 24840 15880 ) N ; + - in + NET in + DIRECTION INPUT + USE SIGNAL + + PORT + + LAYER met3 ( -2000 -300 ) ( 2000 300 ) + + PLACED ( 48000 27540 ) N ; + - out + NET out + DIRECTION OUTPUT + USE SIGNAL + + PORT + + LAYER met3 ( -2000 -300 ) ( 2000 300 ) + + PLACED ( 48000 24140 ) N ; +END PINS +SPECIALNETS 2 ; + - VGND ( PIN VGND ) ( * VNB ) ( * VGND ) + USE GROUND + + ROUTED met1 480 + SHAPE FOLLOWPIN ( 5520 38080 ) ( 44160 38080 ) + NEW met1 480 + SHAPE FOLLOWPIN ( 5520 32640 ) ( 44160 32640 ) + NEW met1 480 + SHAPE FOLLOWPIN ( 5520 27200 ) ( 44160 27200 ) + NEW met1 480 + SHAPE FOLLOWPIN ( 5520 21760 ) ( 44160 21760 ) + NEW met1 480 + SHAPE FOLLOWPIN ( 5520 16320 ) ( 44160 16320 ) + NEW met1 480 + SHAPE FOLLOWPIN ( 5520 10880 ) ( 44160 10880 ) + NEW met5 1600 + SHAPE STRIPE ( 5280 19180 ) ( 44400 19180 ) + NEW met4 1600 + SHAPE STRIPE ( 38820 10640 ) ( 38820 38320 ) + NEW met4 1600 + SHAPE STRIPE ( 13820 10640 ) ( 13820 38320 ) + NEW met4 0 + SHAPE STRIPE ( 38820 19180 ) via5_6_1600_1600_1_1_1600_1600 + NEW met4 0 + SHAPE STRIPE ( 13820 19180 ) via5_6_1600_1600_1_1_1600_1600 + NEW met3 330 + SHAPE STRIPE ( 38030 38080 ) ( 39610 38080 ) + NEW met3 0 + SHAPE STRIPE ( 38820 38080 ) via4_5_1600_480_1_4_400_400 + NEW met2 370 + SHAPE STRIPE ( 38050 38080 ) ( 39590 38080 ) + NEW met2 0 + SHAPE STRIPE ( 38820 38080 ) via3_4_1600_480_1_4_400_400 + NEW met1 0 + SHAPE STRIPE ( 38820 38080 ) via2_3_1600_480_1_5_320_320 + NEW met3 330 + SHAPE STRIPE ( 38030 32640 ) ( 39610 32640 ) + NEW met3 0 + SHAPE STRIPE ( 38820 32640 ) via4_5_1600_480_1_4_400_400 + NEW met2 370 + SHAPE STRIPE ( 38050 32640 ) ( 39590 32640 ) + NEW met2 0 + SHAPE STRIPE ( 38820 32640 ) via3_4_1600_480_1_4_400_400 + NEW met1 0 + SHAPE STRIPE ( 38820 32640 ) via2_3_1600_480_1_5_320_320 + NEW met3 330 + SHAPE STRIPE ( 38030 27200 ) ( 39610 27200 ) + NEW met3 0 + SHAPE STRIPE ( 38820 27200 ) via4_5_1600_480_1_4_400_400 + NEW met2 370 + SHAPE STRIPE ( 38050 27200 ) ( 39590 27200 ) + NEW met2 0 + SHAPE STRIPE ( 38820 27200 ) via3_4_1600_480_1_4_400_400 + NEW met1 0 + SHAPE STRIPE ( 38820 27200 ) via2_3_1600_480_1_5_320_320 + NEW met3 330 + SHAPE STRIPE ( 38030 21760 ) ( 39610 21760 ) + NEW met3 0 + SHAPE STRIPE ( 38820 21760 ) via4_5_1600_480_1_4_400_400 + NEW met2 370 + SHAPE STRIPE ( 38050 21760 ) ( 39590 21760 ) + NEW met2 0 + SHAPE STRIPE ( 38820 21760 ) via3_4_1600_480_1_4_400_400 + NEW met1 0 + SHAPE STRIPE ( 38820 21760 ) via2_3_1600_480_1_5_320_320 + NEW met3 330 + SHAPE STRIPE ( 38030 16320 ) ( 39610 16320 ) + NEW met3 0 + SHAPE STRIPE ( 38820 16320 ) via4_5_1600_480_1_4_400_400 + NEW met2 370 + SHAPE STRIPE ( 38050 16320 ) ( 39590 16320 ) + NEW met2 0 + SHAPE STRIPE ( 38820 16320 ) via3_4_1600_480_1_4_400_400 + NEW met1 0 + SHAPE STRIPE ( 38820 16320 ) via2_3_1600_480_1_5_320_320 + NEW met3 330 + SHAPE STRIPE ( 38030 10880 ) ( 39610 10880 ) + NEW met3 0 + SHAPE STRIPE ( 38820 10880 ) via4_5_1600_480_1_4_400_400 + NEW met2 370 + SHAPE STRIPE ( 38050 10880 ) ( 39590 10880 ) + NEW met2 0 + SHAPE STRIPE ( 38820 10880 ) via3_4_1600_480_1_4_400_400 + NEW met1 0 + SHAPE STRIPE ( 38820 10880 ) via2_3_1600_480_1_5_320_320 + NEW met3 330 + SHAPE STRIPE ( 13030 38080 ) ( 14610 38080 ) + NEW met3 0 + SHAPE STRIPE ( 13820 38080 ) via4_5_1600_480_1_4_400_400 + NEW met2 370 + SHAPE STRIPE ( 13050 38080 ) ( 14590 38080 ) + NEW met2 0 + SHAPE STRIPE ( 13820 38080 ) via3_4_1600_480_1_4_400_400 + NEW met1 0 + SHAPE STRIPE ( 13820 38080 ) via2_3_1600_480_1_5_320_320 + NEW met3 330 + SHAPE STRIPE ( 13030 32640 ) ( 14610 32640 ) + NEW met3 0 + SHAPE STRIPE ( 13820 32640 ) via4_5_1600_480_1_4_400_400 + NEW met2 370 + SHAPE STRIPE ( 13050 32640 ) ( 14590 32640 ) + NEW met2 0 + SHAPE STRIPE ( 13820 32640 ) via3_4_1600_480_1_4_400_400 + NEW met1 0 + SHAPE STRIPE ( 13820 32640 ) via2_3_1600_480_1_5_320_320 + NEW met3 330 + SHAPE STRIPE ( 13030 27200 ) ( 14610 27200 ) + NEW met3 0 + SHAPE STRIPE ( 13820 27200 ) via4_5_1600_480_1_4_400_400 + NEW met2 370 + SHAPE STRIPE ( 13050 27200 ) ( 14590 27200 ) + NEW met2 0 + SHAPE STRIPE ( 13820 27200 ) via3_4_1600_480_1_4_400_400 + NEW met1 0 + SHAPE STRIPE ( 13820 27200 ) via2_3_1600_480_1_5_320_320 + NEW met3 330 + SHAPE STRIPE ( 13030 21760 ) ( 14610 21760 ) + NEW met3 0 + SHAPE STRIPE ( 13820 21760 ) via4_5_1600_480_1_4_400_400 + NEW met2 370 + SHAPE STRIPE ( 13050 21760 ) ( 14590 21760 ) + NEW met2 0 + SHAPE STRIPE ( 13820 21760 ) via3_4_1600_480_1_4_400_400 + NEW met1 0 + SHAPE STRIPE ( 13820 21760 ) via2_3_1600_480_1_5_320_320 + NEW met3 330 + SHAPE STRIPE ( 13030 16320 ) ( 14610 16320 ) + NEW met3 0 + SHAPE STRIPE ( 13820 16320 ) via4_5_1600_480_1_4_400_400 + NEW met2 370 + SHAPE STRIPE ( 13050 16320 ) ( 14590 16320 ) + NEW met2 0 + SHAPE STRIPE ( 13820 16320 ) via3_4_1600_480_1_4_400_400 + NEW met1 0 + SHAPE STRIPE ( 13820 16320 ) via2_3_1600_480_1_5_320_320 + NEW met3 330 + SHAPE STRIPE ( 13030 10880 ) ( 14610 10880 ) + NEW met3 0 + SHAPE STRIPE ( 13820 10880 ) via4_5_1600_480_1_4_400_400 + NEW met2 370 + SHAPE STRIPE ( 13050 10880 ) ( 14590 10880 ) + NEW met2 0 + SHAPE STRIPE ( 13820 10880 ) via3_4_1600_480_1_4_400_400 + NEW met1 0 + SHAPE STRIPE ( 13820 10880 ) via2_3_1600_480_1_5_320_320 ; + - VPWR ( PIN VPWR ) ( * VPB ) ( * VPWR ) + USE POWER + + ROUTED met1 480 + SHAPE FOLLOWPIN ( 5520 35360 ) ( 44160 35360 ) + NEW met1 480 + SHAPE FOLLOWPIN ( 5520 29920 ) ( 44160 29920 ) + NEW met1 480 + SHAPE FOLLOWPIN ( 5520 24480 ) ( 44160 24480 ) + NEW met1 480 + SHAPE FOLLOWPIN ( 5520 19040 ) ( 44160 19040 ) + NEW met1 480 + SHAPE FOLLOWPIN ( 5520 13600 ) ( 44160 13600 ) + NEW met5 1600 + SHAPE STRIPE ( 5280 15880 ) ( 44400 15880 ) + NEW met4 1600 + SHAPE STRIPE ( 35520 10640 ) ( 35520 38320 ) + NEW met4 1600 + SHAPE STRIPE ( 10520 10640 ) ( 10520 38320 ) + NEW met4 0 + SHAPE STRIPE ( 35520 15880 ) via5_6_1600_1600_1_1_1600_1600 + NEW met4 0 + SHAPE STRIPE ( 10520 15880 ) via5_6_1600_1600_1_1_1600_1600 + NEW met3 330 + SHAPE STRIPE ( 34730 35360 ) ( 36310 35360 ) + NEW met3 0 + SHAPE STRIPE ( 35520 35360 ) via4_5_1600_480_1_4_400_400 + NEW met2 370 + SHAPE STRIPE ( 34750 35360 ) ( 36290 35360 ) + NEW met2 0 + SHAPE STRIPE ( 35520 35360 ) via3_4_1600_480_1_4_400_400 + NEW met1 0 + SHAPE STRIPE ( 35520 35360 ) via2_3_1600_480_1_5_320_320 + NEW met3 330 + SHAPE STRIPE ( 34730 29920 ) ( 36310 29920 ) + NEW met3 0 + SHAPE STRIPE ( 35520 29920 ) via4_5_1600_480_1_4_400_400 + NEW met2 370 + SHAPE STRIPE ( 34750 29920 ) ( 36290 29920 ) + NEW met2 0 + SHAPE STRIPE ( 35520 29920 ) via3_4_1600_480_1_4_400_400 + NEW met1 0 + SHAPE STRIPE ( 35520 29920 ) via2_3_1600_480_1_5_320_320 + NEW met3 330 + SHAPE STRIPE ( 34730 24480 ) ( 36310 24480 ) + NEW met3 0 + SHAPE STRIPE ( 35520 24480 ) via4_5_1600_480_1_4_400_400 + NEW met2 370 + SHAPE STRIPE ( 34750 24480 ) ( 36290 24480 ) + NEW met2 0 + SHAPE STRIPE ( 35520 24480 ) via3_4_1600_480_1_4_400_400 + NEW met1 0 + SHAPE STRIPE ( 35520 24480 ) via2_3_1600_480_1_5_320_320 + NEW met3 330 + SHAPE STRIPE ( 34730 19040 ) ( 36310 19040 ) + NEW met3 0 + SHAPE STRIPE ( 35520 19040 ) via4_5_1600_480_1_4_400_400 + NEW met2 370 + SHAPE STRIPE ( 34750 19040 ) ( 36290 19040 ) + NEW met2 0 + SHAPE STRIPE ( 35520 19040 ) via3_4_1600_480_1_4_400_400 + NEW met1 0 + SHAPE STRIPE ( 35520 19040 ) via2_3_1600_480_1_5_320_320 + NEW met3 330 + SHAPE STRIPE ( 34730 13600 ) ( 36310 13600 ) + NEW met3 0 + SHAPE STRIPE ( 35520 13600 ) via4_5_1600_480_1_4_400_400 + NEW met2 370 + SHAPE STRIPE ( 34750 13600 ) ( 36290 13600 ) + NEW met2 0 + SHAPE STRIPE ( 35520 13600 ) via3_4_1600_480_1_4_400_400 + NEW met1 0 + SHAPE STRIPE ( 35520 13600 ) via2_3_1600_480_1_5_320_320 + NEW met3 330 + SHAPE STRIPE ( 9730 35360 ) ( 11310 35360 ) + NEW met3 0 + SHAPE STRIPE ( 10520 35360 ) via4_5_1600_480_1_4_400_400 + NEW met2 370 + SHAPE STRIPE ( 9750 35360 ) ( 11290 35360 ) + NEW met2 0 + SHAPE STRIPE ( 10520 35360 ) via3_4_1600_480_1_4_400_400 + NEW met1 0 + SHAPE STRIPE ( 10520 35360 ) via2_3_1600_480_1_5_320_320 + NEW met3 330 + SHAPE STRIPE ( 9730 29920 ) ( 11310 29920 ) + NEW met3 0 + SHAPE STRIPE ( 10520 29920 ) via4_5_1600_480_1_4_400_400 + NEW met2 370 + SHAPE STRIPE ( 9750 29920 ) ( 11290 29920 ) + NEW met2 0 + SHAPE STRIPE ( 10520 29920 ) via3_4_1600_480_1_4_400_400 + NEW met1 0 + SHAPE STRIPE ( 10520 29920 ) via2_3_1600_480_1_5_320_320 + NEW met3 330 + SHAPE STRIPE ( 9730 24480 ) ( 11310 24480 ) + NEW met3 0 + SHAPE STRIPE ( 10520 24480 ) via4_5_1600_480_1_4_400_400 + NEW met2 370 + SHAPE STRIPE ( 9750 24480 ) ( 11290 24480 ) + NEW met2 0 + SHAPE STRIPE ( 10520 24480 ) via3_4_1600_480_1_4_400_400 + NEW met1 0 + SHAPE STRIPE ( 10520 24480 ) via2_3_1600_480_1_5_320_320 + NEW met3 330 + SHAPE STRIPE ( 9730 19040 ) ( 11310 19040 ) + NEW met3 0 + SHAPE STRIPE ( 10520 19040 ) via4_5_1600_480_1_4_400_400 + NEW met2 370 + SHAPE STRIPE ( 9750 19040 ) ( 11290 19040 ) + NEW met2 0 + SHAPE STRIPE ( 10520 19040 ) via3_4_1600_480_1_4_400_400 + NEW met1 0 + SHAPE STRIPE ( 10520 19040 ) via2_3_1600_480_1_5_320_320 + NEW met3 330 + SHAPE STRIPE ( 9730 13600 ) ( 11310 13600 ) + NEW met3 0 + SHAPE STRIPE ( 10520 13600 ) via4_5_1600_480_1_4_400_400 + NEW met2 370 + SHAPE STRIPE ( 9750 13600 ) ( 11290 13600 ) + NEW met2 0 + SHAPE STRIPE ( 10520 13600 ) via3_4_1600_480_1_4_400_400 + NEW met1 0 + SHAPE STRIPE ( 10520 13600 ) via2_3_1600_480_1_5_320_320 ; +END SPECIALNETS +NETS 2 ; + - in ( PIN in ) ( _0_ A ) + USE SIGNAL + + ROUTED met1 ( 41170 26010 ) ( 43930 * ) + NEW met1 ( 43930 26010 ) ( * 26690 ) + NEW met2 ( 43930 26690 ) ( * 27540 ) + NEW met3 ( 43930 27540 ) ( 46460 * 0 ) + NEW li1 ( 41170 26010 ) L1M1_PR_MR + NEW met1 ( 43930 26690 ) M1M2_PR + NEW met2 ( 43930 27540 ) M2M3_PR ; + - out ( PIN out ) ( _0_ Y ) + USE SIGNAL + + ROUTED met1 ( 40710 24990 ) ( 43470 * ) + NEW met2 ( 43470 24140 ) ( * 24990 ) + NEW met3 ( 43470 24140 ) ( 46460 * 0 ) + NEW li1 ( 40710 24990 ) L1M1_PR_MR + NEW met1 ( 43470 24990 ) M1M2_PR + NEW met2 ( 43470 24140 ) M2M3_PR ; +END NETS +END DESIGN diff --git a/tests/2038-lvs_bad/inverter.gds b/tests/2038-lvs_bad/inverter.gds new file mode 100644 index 0000000000000000000000000000000000000000..d0a5a7fe88522aa1c7f1b77923929c0eb052144a GIT binary patch literal 37190 zcmc(od$3()d52fdEeQ#VHmHG2hoN#wLNz(b$wes%m>5GM1Wcr$$qtf85-3thR3r*B zRYMZe;+Sx=rLk2h#Ew{{gVpIURqG$(NXOa^qs}mjmkxG{(=uKw{XO5eerv6L&R*}i zFda_^pX9gqv%a;y^}X+2Yp*mZhKjzTznC|zuXueiP5;+d@N-Kst2n8cSo$uVc^PR<<{=o|_Jh*(rKR@v7$~BL^`uIn$+FZ;VYb!kN z=ca2qyLNOsJ9b`k^^Kh+#lVcB7&^JH_(?JJB1S#$l>Rh!`k%oa`PcBIDyKRcg4&Hu~#ios&&<w4gu4XUp3sqe(@`tBOPZ)+a6f4Z5+?b~X``d;KNlHMgJVXHM}}Z$I^Ujz{N% zAI=wR%p97Tw{Q0Ur?&rMWhHrE>Ko>B@px<--|T-~K0b4>Q@&P`_obi2ydKhgp2*|s z_2%(i)SSP8ojN%`(!QQvv;QONdxw>kEOzVHPilmc{ePkN$}{D+ZXfTY<#~JN;HR~% z=e2Jo*;e2ByiGXx`8=K}Z|wHV{xvX5+rCroBQ^V8qu(nx^?K+J{ZIDI>Gx;fR37>> zzL9-%=FQnRmACr+*XdZbP6ke`IdHdrt=!b>t^Tx2^VrjVQIqvSZfb5?{X*w}`I~lS zP3Dcm-L^G0q)^T+#`H+++MBR4&N<@Ldv(&y)Sy{-)A4PJDWTz>LZLiy{t zL%vANGofZ1U1grx<0^CS)i=KD#&^H-UDw{QqqDf>T5-2(?~^)~U8aWTx>I$Nneyhj z=)TsxLA7$e{C78~&&Gn>JiqH)j`=Jt{!#wpa!U4VZuv2lH^(32&(yU5zUj|kQ+dZ_1v@e(+-|Z~8s2MfwhDJ9D*uMPGxMqpn4AFZ8vL zJ`4L6YJ6SmSNxU+CpQ;%jX%a8`lIZd(_fx_Q+ad$$M`cY$bQ8iXMcuyL6@JewHy0C zZFTm|{x@ddRNfqaj6e8X_RX2wvu`SI`g#5OUV+c@Q{;306Xiau|M*EvdEo0jKa5{< z)}2{5^?K7EbuFXqpJ4w@xm)y~&R=HA17CHvAs>H5%?EzVy`HZX^1UWw>4*9?`xod} z%1!-l?D(EPy>F1Zm2aMOJo~2dc3*Ez`>pw_$o`X?y{;uaKIf15N z^In4U$Grqh`>hR_qwXboUQ4FFA*YwGI353Necb3?|F?FpSdKsW&!U&k9qRrl$;UI! zC(>y>K9Te#N@uwGBzmFWdgM+z^>001=(i5tpM+H0YQAYyJPMO&HjD)b(1S#n7&G`0o z-TG~qF1(uip8Y9&TlCxRursR;|DykwZ{x~u!@91(SijTG(FF48Xa0+RPi~&mRTpFY zzCX*p*}pRTrt)T8jq!)daVwVN4w>VOKmC?GzB%KpJie(s9G|-|j^9jou{wU!cVoTg zkN(8G@oiQ`?RUz}VE=g^^M-FSZ{%h)f4q-*!>?G5%lwtEw;n&QGjI4N^G0q)^OxSI z`NL=aAoE6UM)OyEzPt-o-^8bX;*p!<`OG_BMIARj>o+l&e_m(a@lEEP+>GX*_odGj z`4zvL{qzJOzur3k_?$P!uUPIk=dXM{^f_<%Cg%;$?0Np?6nF5s&s{R#QgN&%pNHHH zn(14tWBK)IqCYRq{_ksi zX^h^-^+UQYDVd(aC^vh4+g@H5vX1-yS7T{ioBa>y*UC-h&GVD*kQ&#O1D9!jbcbE> zS9$*j%*)z+#u@xX9^d4t61l0ob$s5(xa@yLjhk|_*ZBUn@dZ9@;5<$8x;D>Wb%#I2 z>)O)iI2oVgulQU(e(n&<*T>FZ<>&FI`n02bnv&KZJC%CYwrJ;Z@30EE}rRcwoK(se|7n7`FW@G>)3U1H8@vm?aZ3~X35m+O~2 z(enSzTyvx)6N^(^oA=tYuBt>+qwMGD>{oh8+X2aZ)fqM zya(fN^|tc+Vz#>Kv6ihaF1M<0e_x_w8-J^s)Y;zG)~ybgTh*O>xz#g!%s}^7290@G z_f%sZUUA;g<_kA<^xx~&ZroT-#c(|fliqT**FCm8+!-$K5H%B%+VXoBjl0kF98YM= zK7VXE+ULcc;d-9OS!rxj&l5gZTPupbhsNp*n)m>w0k~ zk5JFfI3s9xCpW@yIl`o7$!mOz8e`9TTvD#_dcBOZ-^|RoTU}aib?MYAr`qEl>w9Tu zcw};0X13XDR$;W|C7t1VpC>RAy;fnh{n2Y=NqGh*JlAb&q;-U)

i#2G0xKbkOCArYG71Jr}HzYOi~2d89L3 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 literal 0 HcmV?d00001 diff --git a/tests/2038-lvs_bad/inverter.pnl.v b/tests/2038-lvs_bad/inverter.pnl.v new file mode 100644 index 000000000..37784115d --- /dev/null +++ b/tests/2038-lvs_bad/inverter.pnl.v @@ -0,0 +1,121 @@ +module inverter (in, + out, + VPWR, + VGND); + input in; + output out; + input VPWR; + input VGND; + + + sky130_fd_sc_hd__inv_2 _0_ (.A(in), + .VGND(VGND), + .VNB(VGND), + .VPB(VPWR), + .VPWR(VPWR), + .Y(out)); + sky130_fd_sc_hd__decap_3 PHY_EDGE_ROW_0_Right_0 (.VGND(VGND), + .VNB(VGND), + .VPB(VPWR), + .VPWR(VPWR)); + sky130_fd_sc_hd__decap_3 PHY_EDGE_ROW_1_Right_1 (.VGND(VGND), + .VNB(VGND), + .VPB(VPWR), + .VPWR(VPWR)); + sky130_fd_sc_hd__decap_3 PHY_EDGE_ROW_2_Right_2 (.VGND(VGND), + .VNB(VGND), + .VPB(VPWR), + .VPWR(VPWR)); + sky130_fd_sc_hd__decap_3 PHY_EDGE_ROW_3_Right_3 (.VGND(VGND), + .VNB(VGND), + .VPB(VPWR), + .VPWR(VPWR)); + sky130_fd_sc_hd__decap_3 PHY_EDGE_ROW_4_Right_4 (.VGND(VGND), + .VNB(VGND), + .VPB(VPWR), + .VPWR(VPWR)); + sky130_fd_sc_hd__decap_3 PHY_EDGE_ROW_5_Right_5 (.VGND(VGND), + .VNB(VGND), + .VPB(VPWR), + .VPWR(VPWR)); + sky130_fd_sc_hd__decap_3 PHY_EDGE_ROW_6_Right_6 (.VGND(VGND), + .VNB(VGND), + .VPB(VPWR), + .VPWR(VPWR)); + sky130_fd_sc_hd__decap_3 PHY_EDGE_ROW_7_Right_7 (.VGND(VGND), + .VNB(VGND), + .VPB(VPWR), + .VPWR(VPWR)); + sky130_fd_sc_hd__decap_3 PHY_EDGE_ROW_8_Right_8 (.VGND(VGND), + .VNB(VGND), + .VPB(VPWR), + .VPWR(VPWR)); + sky130_fd_sc_hd__decap_3 PHY_EDGE_ROW_9_Right_9 (.VGND(VGND), + .VNB(VGND), + .VPB(VPWR), + .VPWR(VPWR)); + sky130_fd_sc_hd__decap_3 PHY_EDGE_ROW_0_Left_10 (.VGND(VGND), + .VNB(VGND), + .VPB(VPWR), + .VPWR(VPWR)); + sky130_fd_sc_hd__decap_3 PHY_EDGE_ROW_1_Left_11 (.VGND(VGND), + .VNB(VGND), + .VPB(VPWR), + .VPWR(VPWR)); + sky130_fd_sc_hd__decap_3 PHY_EDGE_ROW_2_Left_12 (.VGND(VGND), + .VNB(VGND), + .VPB(VPWR), + .VPWR(VPWR)); + sky130_fd_sc_hd__decap_3 PHY_EDGE_ROW_3_Left_13 (.VGND(VGND), + .VNB(VGND), + .VPB(VPWR), + .VPWR(VPWR)); + sky130_fd_sc_hd__decap_3 PHY_EDGE_ROW_4_Left_14 (.VGND(VGND), + .VNB(VGND), + .VPB(VPWR), + .VPWR(VPWR)); + sky130_fd_sc_hd__decap_3 PHY_EDGE_ROW_5_Left_15 (.VGND(VGND), + .VNB(VGND), + .VPB(VPWR), + .VPWR(VPWR)); + sky130_fd_sc_hd__decap_3 PHY_EDGE_ROW_6_Left_16 (.VGND(VGND), + .VNB(VGND), + .VPB(VPWR), + .VPWR(VPWR)); + sky130_fd_sc_hd__decap_3 PHY_EDGE_ROW_7_Left_17 (.VGND(VGND), + .VNB(VGND), + .VPB(VPWR), + .VPWR(VPWR)); + sky130_fd_sc_hd__decap_3 PHY_EDGE_ROW_8_Left_18 (.VGND(VGND), + .VNB(VGND), + .VPB(VPWR), + .VPWR(VPWR)); + sky130_fd_sc_hd__decap_3 PHY_EDGE_ROW_9_Left_19 (.VGND(VGND), + .VNB(VGND), + .VPB(VPWR), + .VPWR(VPWR)); + sky130_fd_sc_hd__tapvpwrvgnd_1 TAP_TAPCELL_ROW_0_20 (.VGND(VGND), + .VPWR(VPWR)); + sky130_fd_sc_hd__tapvpwrvgnd_1 TAP_TAPCELL_ROW_0_21 (.VGND(VGND), + .VPWR(VPWR)); + sky130_fd_sc_hd__tapvpwrvgnd_1 TAP_TAPCELL_ROW_1_22 (.VGND(VGND), + .VPWR(VPWR)); + sky130_fd_sc_hd__tapvpwrvgnd_1 TAP_TAPCELL_ROW_2_23 (.VGND(VGND), + .VPWR(VPWR)); + sky130_fd_sc_hd__tapvpwrvgnd_1 TAP_TAPCELL_ROW_3_24 (.VGND(VGND), + .VPWR(VPWR)); + sky130_fd_sc_hd__tapvpwrvgnd_1 TAP_TAPCELL_ROW_4_25 (.VGND(VGND), + .VPWR(VPWR)); + sky130_fd_sc_hd__tapvpwrvgnd_1 TAP_TAPCELL_ROW_5_26 (.VGND(VGND), + .VPWR(VPWR)); + sky130_fd_sc_hd__tapvpwrvgnd_1 TAP_TAPCELL_ROW_6_27 (.VGND(VGND), + .VPWR(VPWR)); + sky130_fd_sc_hd__tapvpwrvgnd_1 TAP_TAPCELL_ROW_7_28 (.VGND(VGND), + .VPWR(VPWR)); + sky130_fd_sc_hd__tapvpwrvgnd_1 TAP_TAPCELL_ROW_8_29 (.VGND(VGND), + .VPWR(VPWR)); + sky130_fd_sc_hd__tapvpwrvgnd_1 TAP_TAPCELL_ROW_9_30 (.VGND(VGND), + .VPWR(VPWR)); + sky130_fd_sc_hd__tapvpwrvgnd_1 TAP_TAPCELL_ROW_9_31 (.VGND(VGND), + .VPWR(VPWR)); +endmodule diff --git a/tests/2038-lvs_bad/issue_regression.py b/tests/2038-lvs_bad/issue_regression.py new file mode 100644 index 000000000..7b2ff0ad2 --- /dev/null +++ b/tests/2038-lvs_bad/issue_regression.py @@ -0,0 +1,12 @@ +import os +import subprocess +import sys + +args = sys.argv[1:] + +run_folder = args[0] + +log_path = os.path.join(run_folder, "openlane.log") +assert ( + subprocess.call(["grep", "-i", "There are LVS errors in the design", log_path]) == 0 +), "OpenLane did not report the existence of LVS errors correctly" diff --git a/tests/2038-lvs_bad_lefdef/config.json b/tests/2038-lvs_bad_lefdef/config.json new file mode 120000 index 000000000..36db892e6 --- /dev/null +++ b/tests/2038-lvs_bad_lefdef/config.json @@ -0,0 +1 @@ +../2038-lvs_bad/config.json \ No newline at end of file diff --git a/tests/2038-lvs_bad_lefdef/interactive.tcl b/tests/2038-lvs_bad_lefdef/interactive.tcl new file mode 100644 index 000000000..12fc6b916 --- /dev/null +++ b/tests/2038-lvs_bad_lefdef/interactive.tcl @@ -0,0 +1,10 @@ +package require openlane; + +prep -design $::env(TEST_DIR) {*}$argv + +set ::env(CURRENT_DEF) $::env(TEST_DIR)/inverter.def +set ::env(CURRENT_GDS) $::env(TEST_DIR)/inverter.gds +set ::env(CURRENT_POWERED_NETLIST) $::env(TEST_DIR)/inverter.pnl.v + +run_magic_spice_export +run_lvs \ No newline at end of file diff --git a/tests/2038-lvs_bad_lefdef/inverter.def b/tests/2038-lvs_bad_lefdef/inverter.def new file mode 120000 index 000000000..2f730db68 --- /dev/null +++ b/tests/2038-lvs_bad_lefdef/inverter.def @@ -0,0 +1 @@ +../2038-lvs_bad/inverter.def \ No newline at end of file diff --git a/tests/2038-lvs_bad_lefdef/inverter.gds b/tests/2038-lvs_bad_lefdef/inverter.gds new file mode 120000 index 000000000..1ad6350da --- /dev/null +++ b/tests/2038-lvs_bad_lefdef/inverter.gds @@ -0,0 +1 @@ +../2038-lvs_bad/inverter.gds \ No newline at end of file diff --git a/tests/2038-lvs_bad_lefdef/inverter.pnl.v b/tests/2038-lvs_bad_lefdef/inverter.pnl.v new file mode 120000 index 000000000..f48e560b6 --- /dev/null +++ b/tests/2038-lvs_bad_lefdef/inverter.pnl.v @@ -0,0 +1 @@ +../2038-lvs_bad/inverter.pnl.v \ No newline at end of file diff --git a/tests/2038-lvs_bad_lefdef/issue_regression.py b/tests/2038-lvs_bad_lefdef/issue_regression.py new file mode 120000 index 000000000..3f1613dcf --- /dev/null +++ b/tests/2038-lvs_bad_lefdef/issue_regression.py @@ -0,0 +1 @@ +../2038-lvs_bad/issue_regression.py \ No newline at end of file diff --git a/tests/2038-lvs_good/config.json b/tests/2038-lvs_good/config.json new file mode 100644 index 000000000..565a42970 --- /dev/null +++ b/tests/2038-lvs_good/config.json @@ -0,0 +1,16 @@ +{ + "DESIGN_NAME": "inverter", + "VERILOG_FILES": [], + "RUN_CTS": false, + "CLOCK_PORT": null, + "PL_RANDOM_GLB_PLACEMENT": true, + "FP_SIZING": "absolute", + "DIE_AREA": "0 0 34.5 57.12", + "PL_TARGET_DENSITY": 0.75, + "FP_PDN_AUTO_ADJUST": false, + "FP_PDN_VPITCH": 25, + "FP_PDN_HPITCH": 25, + "FP_PDN_VOFFSET": 5, + "FP_PDN_HOFFSET": 5, + "DIODE_INSERTION_STRATEGY": 3 +} \ No newline at end of file diff --git a/tests/2038-lvs_good/interactive.tcl b/tests/2038-lvs_good/interactive.tcl new file mode 100644 index 000000000..1835897cf --- /dev/null +++ b/tests/2038-lvs_good/interactive.tcl @@ -0,0 +1,11 @@ +package require openlane; + +prep -design $::env(TEST_DIR) {*}$argv + +set ::env(CURRENT_DEF) $::env(TEST_DIR)/inverter.def +set ::env(CURRENT_GDS) $::env(TEST_DIR)/inverter.gds +set ::env(CURRENT_POWERED_NETLIST) $::env(TEST_DIR)/inverter.pnl.v + +set ::env(MAGIC_EXT_USE_GDS) 1 +run_magic_spice_export +run_lvs \ No newline at end of file diff --git a/tests/2038-lvs_good/inverter.def b/tests/2038-lvs_good/inverter.def new file mode 100644 index 000000000..f3eb48349 --- /dev/null +++ b/tests/2038-lvs_good/inverter.def @@ -0,0 +1,357 @@ +VERSION 5.8 ; +DIVIDERCHAR "/" ; +BUSBITCHARS "[]" ; +DESIGN inverter ; +UNITS DISTANCE MICRONS 1000 ; +DIEAREA ( 0 0 ) ( 50000 50000 ) ; +ROW ROW_0 unithd 5520 10880 N DO 84 BY 1 STEP 460 0 ; +ROW ROW_1 unithd 5520 13600 FS DO 84 BY 1 STEP 460 0 ; +ROW ROW_2 unithd 5520 16320 N DO 84 BY 1 STEP 460 0 ; +ROW ROW_3 unithd 5520 19040 FS DO 84 BY 1 STEP 460 0 ; +ROW ROW_4 unithd 5520 21760 N DO 84 BY 1 STEP 460 0 ; +ROW ROW_5 unithd 5520 24480 FS DO 84 BY 1 STEP 460 0 ; +ROW ROW_6 unithd 5520 27200 N DO 84 BY 1 STEP 460 0 ; +ROW ROW_7 unithd 5520 29920 FS DO 84 BY 1 STEP 460 0 ; +ROW ROW_8 unithd 5520 32640 N DO 84 BY 1 STEP 460 0 ; +ROW ROW_9 unithd 5520 35360 FS DO 84 BY 1 STEP 460 0 ; +TRACKS X 230 DO 109 STEP 460 LAYER li1 ; +TRACKS Y 170 DO 147 STEP 340 LAYER li1 ; +TRACKS X 170 DO 147 STEP 340 LAYER met1 ; +TRACKS Y 170 DO 147 STEP 340 LAYER met1 ; +TRACKS X 230 DO 109 STEP 460 LAYER met2 ; +TRACKS Y 230 DO 109 STEP 460 LAYER met2 ; +TRACKS X 340 DO 73 STEP 680 LAYER met3 ; +TRACKS Y 340 DO 73 STEP 680 LAYER met3 ; +TRACKS X 460 DO 54 STEP 920 LAYER met4 ; +TRACKS Y 460 DO 54 STEP 920 LAYER met4 ; +TRACKS X 1700 DO 14 STEP 3400 LAYER met5 ; +TRACKS Y 1700 DO 14 STEP 3400 LAYER met5 ; +GCELLGRID X 0 DO 7 STEP 6900 ; +GCELLGRID Y 0 DO 7 STEP 6900 ; +VIAS 4 ; + - via2_3_1600_480_1_5_320_320 + VIARULE M1M2_PR + CUTSIZE 150 150 + LAYERS met1 via met2 + CUTSPACING 170 170 + ENCLOSURE 85 165 55 85 + ROWCOL 1 5 ; + - via3_4_1600_480_1_4_400_400 + VIARULE M2M3_PR + CUTSIZE 200 200 + LAYERS met2 via2 met3 + CUTSPACING 200 200 + ENCLOSURE 40 85 65 65 + ROWCOL 1 4 ; + - via4_5_1600_480_1_4_400_400 + VIARULE M3M4_PR + CUTSIZE 200 200 + LAYERS met3 via3 met4 + CUTSPACING 200 200 + ENCLOSURE 90 60 100 65 + ROWCOL 1 4 ; + - via5_6_1600_1600_1_1_1600_1600 + VIARULE M4M5_PR + CUTSIZE 800 800 + LAYERS met4 via4 met5 + CUTSPACING 800 800 + ENCLOSURE 400 190 310 400 ; +END VIAS +COMPONENTS 144 ; + - FILLER_0_0_11 sky130_fd_sc_hd__decap_8 + SOURCE DIST + PLACED ( 10580 10880 ) N ; + - FILLER_0_0_19 sky130_fd_sc_hd__decap_8 + SOURCE DIST + PLACED ( 14260 10880 ) N ; + - FILLER_0_0_27 sky130_fd_sc_hd__fill_1 + SOURCE DIST + PLACED ( 17940 10880 ) N ; + - FILLER_0_0_29 sky130_fd_sc_hd__decap_8 + SOURCE DIST + PLACED ( 18860 10880 ) N ; + - FILLER_0_0_3 sky130_fd_sc_hd__decap_8 + SOURCE DIST + PLACED ( 6900 10880 ) N ; + - FILLER_0_0_37 sky130_fd_sc_hd__decap_8 + SOURCE DIST + PLACED ( 22540 10880 ) N ; + - FILLER_0_0_45 sky130_fd_sc_hd__decap_8 + SOURCE DIST + PLACED ( 26220 10880 ) N ; + - FILLER_0_0_53 sky130_fd_sc_hd__decap_3 + SOURCE DIST + PLACED ( 29900 10880 ) N ; + - FILLER_0_0_57 sky130_fd_sc_hd__decap_8 + SOURCE DIST + PLACED ( 31740 10880 ) N ; + - FILLER_0_0_65 sky130_fd_sc_hd__decap_8 + SOURCE DIST + PLACED ( 35420 10880 ) N ; + - FILLER_0_0_73 sky130_fd_sc_hd__decap_8 + SOURCE DIST + PLACED ( 39100 10880 ) N ; + - FILLER_0_1_11 sky130_fd_sc_hd__decap_8 + SOURCE DIST + PLACED ( 10580 13600 ) FS ; + - FILLER_0_1_19 sky130_fd_sc_hd__decap_8 + SOURCE DIST + PLACED ( 14260 13600 ) FS ; + - FILLER_0_1_27 sky130_fd_sc_hd__decap_8 + SOURCE DIST + PLACED ( 17940 13600 ) FS ; + - FILLER_0_1_3 sky130_fd_sc_hd__decap_8 + SOURCE DIST + PLACED ( 6900 13600 ) FS ; + - FILLER_0_1_35 sky130_fd_sc_hd__decap_8 + SOURCE DIST + PLACED ( 21620 13600 ) FS ; + - FILLER_0_1_43 sky130_fd_sc_hd__decap_8 + SOURCE DIST + PLACED ( 25300 13600 ) FS ; + - FILLER_0_1_51 sky130_fd_sc_hd__decap_4 + SOURCE DIST + PLACED ( 28980 13600 ) FS ; + - FILLER_0_1_55 sky130_fd_sc_hd__fill_1 + SOURCE DIST + PLACED ( 30820 13600 ) FS ; + - FILLER_0_1_57 sky130_fd_sc_hd__decap_8 + SOURCE DIST + PLACED ( 31740 13600 ) FS ; + - FILLER_0_1_65 sky130_fd_sc_hd__decap_8 + SOURCE DIST + PLACED ( 35420 13600 ) FS ; + - FILLER_0_1_73 sky130_fd_sc_hd__decap_8 + SOURCE DIST + PLACED ( 39100 13600 ) FS ; + - FILLER_0_2_11 sky130_fd_sc_hd__decap_8 + SOURCE DIST + PLACED ( 10580 16320 ) N ; + - FILLER_0_2_19 sky130_fd_sc_hd__decap_8 + SOURCE DIST + PLACED ( 14260 16320 ) N ; + - FILLER_0_2_27 sky130_fd_sc_hd__fill_1 + SOURCE DIST + PLACED ( 17940 16320 ) N ; + - FILLER_0_2_29 sky130_fd_sc_hd__decap_8 + SOURCE DIST + PLACED ( 18860 16320 ) N ; + - FILLER_0_2_3 sky130_fd_sc_hd__decap_8 + SOURCE DIST + PLACED ( 6900 16320 ) N ; + - FILLER_0_2_37 sky130_fd_sc_hd__decap_8 + SOURCE DIST + PLACED ( 22540 16320 ) N ; + - FILLER_0_2_45 sky130_fd_sc_hd__decap_8 + SOURCE DIST + PLACED ( 26220 16320 ) N ; + - FILLER_0_2_53 sky130_fd_sc_hd__decap_8 + SOURCE DIST + PLACED ( 29900 16320 ) N ; + - FILLER_0_2_61 sky130_fd_sc_hd__decap_8 + SOURCE DIST + PLACED ( 33580 16320 ) N ; + - FILLER_0_2_69 sky130_fd_sc_hd__decap_8 + SOURCE DIST + PLACED ( 37260 16320 ) N ; + - FILLER_0_2_77 sky130_fd_sc_hd__decap_4 + SOURCE DIST + PLACED ( 40940 16320 ) N ; + - FILLER_0_3_11 sky130_fd_sc_hd__decap_8 + SOURCE DIST + PLACED ( 10580 19040 ) FS ; + - FILLER_0_3_19 sky130_fd_sc_hd__decap_8 + SOURCE DIST + PLACED ( 14260 19040 ) FS ; + - FILLER_0_3_27 sky130_fd_sc_hd__decap_8 + SOURCE DIST + PLACED ( 17940 19040 ) FS ; + - FILLER_0_3_3 sky130_fd_sc_hd__decap_8 + SOURCE DIST + PLACED ( 6900 19040 ) FS ; + - FILLER_0_3_35 sky130_fd_sc_hd__decap_8 + SOURCE DIST + PLACED ( 21620 19040 ) FS ; + - FILLER_0_3_43 sky130_fd_sc_hd__decap_8 + SOURCE DIST + PLACED ( 25300 19040 ) FS ; + - FILLER_0_3_51 sky130_fd_sc_hd__decap_4 + SOURCE DIST + PLACED ( 28980 19040 ) FS ; + - FILLER_0_3_55 sky130_fd_sc_hd__fill_1 + SOURCE DIST + PLACED ( 30820 19040 ) FS ; + - FILLER_0_3_57 sky130_fd_sc_hd__decap_8 + SOURCE DIST + PLACED ( 31740 19040 ) FS ; + - FILLER_0_3_65 sky130_fd_sc_hd__decap_8 + SOURCE DIST + PLACED ( 35420 19040 ) FS ; + - FILLER_0_3_73 sky130_fd_sc_hd__decap_8 + SOURCE DIST + PLACED ( 39100 19040 ) FS ; + - FILLER_0_4_11 sky130_fd_sc_hd__decap_8 + SOURCE DIST + PLACED ( 10580 21760 ) N ; + - FILLER_0_4_19 sky130_fd_sc_hd__decap_8 + SOURCE DIST + PLACED ( 14260 21760 ) N ; + - FILLER_0_4_27 sky130_fd_sc_hd__fill_1 + SOURCE DIST + PLACED ( 17940 21760 ) N ; + - FILLER_0_4_29 sky130_fd_sc_hd__decap_8 + SOURCE DIST + PLACED ( 18860 21760 ) N ; + - FILLER_0_4_3 sky130_fd_sc_hd__decap_8 + SOURCE DIST + PLACED ( 6900 21760 ) N ; + - FILLER_0_4_37 sky130_fd_sc_hd__decap_8 + SOURCE DIST + PLACED ( 22540 21760 ) N ; + - FILLER_0_4_45 sky130_fd_sc_hd__decap_8 + SOURCE DIST + PLACED ( 26220 21760 ) N ; + - FILLER_0_4_53 sky130_fd_sc_hd__decap_8 + SOURCE DIST + PLACED ( 29900 21760 ) N ; + - FILLER_0_4_61 sky130_fd_sc_hd__decap_8 + SOURCE DIST + PLACED ( 33580 21760 ) N ; + - FILLER_0_4_69 sky130_fd_sc_hd__decap_8 + SOURCE DIST + PLACED ( 37260 21760 ) N ; + - FILLER_0_4_77 sky130_fd_sc_hd__decap_4 + SOURCE DIST + PLACED ( 40940 21760 ) N ; + - FILLER_0_5_11 sky130_fd_sc_hd__decap_8 + SOURCE DIST + PLACED ( 10580 24480 ) FS ; + - FILLER_0_5_19 sky130_fd_sc_hd__decap_8 + SOURCE DIST + PLACED ( 14260 24480 ) FS ; + - FILLER_0_5_27 sky130_fd_sc_hd__decap_8 + SOURCE DIST + PLACED ( 17940 24480 ) FS ; + - FILLER_0_5_3 sky130_fd_sc_hd__decap_8 + SOURCE DIST + PLACED ( 6900 24480 ) FS ; + - FILLER_0_5_35 sky130_fd_sc_hd__decap_8 + SOURCE DIST + PLACED ( 21620 24480 ) FS ; + - FILLER_0_5_43 sky130_fd_sc_hd__decap_8 + SOURCE DIST + PLACED ( 25300 24480 ) FS ; + - FILLER_0_5_51 sky130_fd_sc_hd__decap_4 + SOURCE DIST + PLACED ( 28980 24480 ) FS ; + - FILLER_0_5_55 sky130_fd_sc_hd__fill_1 + SOURCE DIST + PLACED ( 30820 24480 ) FS ; + - FILLER_0_5_57 sky130_fd_sc_hd__decap_8 + SOURCE DIST + PLACED ( 31740 24480 ) FS ; + - FILLER_0_5_65 sky130_fd_sc_hd__decap_8 + SOURCE DIST + PLACED ( 35420 24480 ) FS ; + - FILLER_0_5_73 sky130_fd_sc_hd__fill_2 + SOURCE DIST + PLACED ( 39100 24480 ) FS ; + - FILLER_0_5_78 sky130_fd_sc_hd__decap_3 + SOURCE DIST + PLACED ( 41400 24480 ) FS ; + - FILLER_0_6_11 sky130_fd_sc_hd__decap_8 + SOURCE DIST + PLACED ( 10580 27200 ) N ; + - FILLER_0_6_19 sky130_fd_sc_hd__decap_8 + SOURCE DIST + PLACED ( 14260 27200 ) N ; + - FILLER_0_6_27 sky130_fd_sc_hd__fill_1 + SOURCE DIST + PLACED ( 17940 27200 ) N ; + - FILLER_0_6_29 sky130_fd_sc_hd__decap_8 + SOURCE DIST + PLACED ( 18860 27200 ) N ; + - FILLER_0_6_3 sky130_fd_sc_hd__decap_8 + SOURCE DIST + PLACED ( 6900 27200 ) N ; + - FILLER_0_6_37 sky130_fd_sc_hd__decap_8 + SOURCE DIST + PLACED ( 22540 27200 ) N ; + - FILLER_0_6_45 sky130_fd_sc_hd__decap_8 + SOURCE DIST + PLACED ( 26220 27200 ) N ; + - FILLER_0_6_53 sky130_fd_sc_hd__decap_8 + SOURCE DIST + PLACED ( 29900 27200 ) N ; + - FILLER_0_6_61 sky130_fd_sc_hd__decap_8 + SOURCE DIST + PLACED ( 33580 27200 ) N ; + - FILLER_0_6_69 sky130_fd_sc_hd__decap_8 + SOURCE DIST + PLACED ( 37260 27200 ) N ; + - FILLER_0_6_77 sky130_fd_sc_hd__decap_4 + SOURCE DIST + PLACED ( 40940 27200 ) N ; + - FILLER_0_7_11 sky130_fd_sc_hd__decap_8 + SOURCE DIST + PLACED ( 10580 29920 ) FS ; + - FILLER_0_7_19 sky130_fd_sc_hd__decap_8 + SOURCE DIST + PLACED ( 14260 29920 ) FS ; + - FILLER_0_7_27 sky130_fd_sc_hd__decap_8 + SOURCE DIST + PLACED ( 17940 29920 ) FS ; + - FILLER_0_7_3 sky130_fd_sc_hd__decap_8 + SOURCE DIST + PLACED ( 6900 29920 ) FS ; + - FILLER_0_7_35 sky130_fd_sc_hd__decap_8 + SOURCE DIST + PLACED ( 21620 29920 ) FS ; + - FILLER_0_7_43 sky130_fd_sc_hd__decap_8 + SOURCE DIST + PLACED ( 25300 29920 ) FS ; + - FILLER_0_7_51 sky130_fd_sc_hd__decap_4 + SOURCE DIST + PLACED ( 28980 29920 ) FS ; + - FILLER_0_7_55 sky130_fd_sc_hd__fill_1 + SOURCE DIST + PLACED ( 30820 29920 ) FS ; + - FILLER_0_7_57 sky130_fd_sc_hd__decap_8 + SOURCE DIST + PLACED ( 31740 29920 ) FS ; + - FILLER_0_7_65 sky130_fd_sc_hd__decap_8 + SOURCE DIST + PLACED ( 35420 29920 ) FS ; + - FILLER_0_7_73 sky130_fd_sc_hd__decap_8 + SOURCE DIST + PLACED ( 39100 29920 ) FS ; + - FILLER_0_8_11 sky130_fd_sc_hd__decap_8 + SOURCE DIST + PLACED ( 10580 32640 ) N ; + - FILLER_0_8_19 sky130_fd_sc_hd__decap_8 + SOURCE DIST + PLACED ( 14260 32640 ) N ; + - FILLER_0_8_27 sky130_fd_sc_hd__fill_1 + SOURCE DIST + PLACED ( 17940 32640 ) N ; + - FILLER_0_8_29 sky130_fd_sc_hd__decap_8 + SOURCE DIST + PLACED ( 18860 32640 ) N ; + - FILLER_0_8_3 sky130_fd_sc_hd__decap_8 + SOURCE DIST + PLACED ( 6900 32640 ) N ; + - FILLER_0_8_37 sky130_fd_sc_hd__decap_8 + SOURCE DIST + PLACED ( 22540 32640 ) N ; + - FILLER_0_8_45 sky130_fd_sc_hd__decap_8 + SOURCE DIST + PLACED ( 26220 32640 ) N ; + - FILLER_0_8_53 sky130_fd_sc_hd__decap_8 + SOURCE DIST + PLACED ( 29900 32640 ) N ; + - FILLER_0_8_61 sky130_fd_sc_hd__decap_8 + SOURCE DIST + PLACED ( 33580 32640 ) N ; + - FILLER_0_8_69 sky130_fd_sc_hd__decap_8 + SOURCE DIST + PLACED ( 37260 32640 ) N ; + - FILLER_0_8_77 sky130_fd_sc_hd__decap_4 + SOURCE DIST + PLACED ( 40940 32640 ) N ; + - FILLER_0_9_11 sky130_fd_sc_hd__decap_8 + SOURCE DIST + PLACED ( 10580 35360 ) FS ; + - FILLER_0_9_19 sky130_fd_sc_hd__decap_8 + SOURCE DIST + PLACED ( 14260 35360 ) FS ; + - FILLER_0_9_27 sky130_fd_sc_hd__fill_1 + SOURCE DIST + PLACED ( 17940 35360 ) FS ; + - FILLER_0_9_29 sky130_fd_sc_hd__decap_8 + SOURCE DIST + PLACED ( 18860 35360 ) FS ; + - FILLER_0_9_3 sky130_fd_sc_hd__decap_8 + SOURCE DIST + PLACED ( 6900 35360 ) FS ; + - FILLER_0_9_37 sky130_fd_sc_hd__decap_8 + SOURCE DIST + PLACED ( 22540 35360 ) FS ; + - FILLER_0_9_45 sky130_fd_sc_hd__decap_8 + SOURCE DIST + PLACED ( 26220 35360 ) FS ; + - FILLER_0_9_53 sky130_fd_sc_hd__decap_3 + SOURCE DIST + PLACED ( 29900 35360 ) FS ; + - FILLER_0_9_57 sky130_fd_sc_hd__decap_8 + SOURCE DIST + PLACED ( 31740 35360 ) FS ; + - FILLER_0_9_65 sky130_fd_sc_hd__decap_8 + SOURCE DIST + PLACED ( 35420 35360 ) FS ; + - FILLER_0_9_73 sky130_fd_sc_hd__decap_8 + SOURCE DIST + PLACED ( 39100 35360 ) FS ; + - PHY_EDGE_ROW_0_Left_10 sky130_fd_sc_hd__decap_3 + SOURCE DIST + FIXED ( 5520 10880 ) N ; + - PHY_EDGE_ROW_0_Right_0 sky130_fd_sc_hd__decap_3 + SOURCE DIST + FIXED ( 42780 10880 ) FN ; + - PHY_EDGE_ROW_1_Left_11 sky130_fd_sc_hd__decap_3 + SOURCE DIST + FIXED ( 5520 13600 ) FS ; + - PHY_EDGE_ROW_1_Right_1 sky130_fd_sc_hd__decap_3 + SOURCE DIST + FIXED ( 42780 13600 ) S ; + - PHY_EDGE_ROW_2_Left_12 sky130_fd_sc_hd__decap_3 + SOURCE DIST + FIXED ( 5520 16320 ) N ; + - PHY_EDGE_ROW_2_Right_2 sky130_fd_sc_hd__decap_3 + SOURCE DIST + FIXED ( 42780 16320 ) FN ; + - PHY_EDGE_ROW_3_Left_13 sky130_fd_sc_hd__decap_3 + SOURCE DIST + FIXED ( 5520 19040 ) FS ; + - PHY_EDGE_ROW_3_Right_3 sky130_fd_sc_hd__decap_3 + SOURCE DIST + FIXED ( 42780 19040 ) S ; + - PHY_EDGE_ROW_4_Left_14 sky130_fd_sc_hd__decap_3 + SOURCE DIST + FIXED ( 5520 21760 ) N ; + - PHY_EDGE_ROW_4_Right_4 sky130_fd_sc_hd__decap_3 + SOURCE DIST + FIXED ( 42780 21760 ) FN ; + - PHY_EDGE_ROW_5_Left_15 sky130_fd_sc_hd__decap_3 + SOURCE DIST + FIXED ( 5520 24480 ) FS ; + - PHY_EDGE_ROW_5_Right_5 sky130_fd_sc_hd__decap_3 + SOURCE DIST + FIXED ( 42780 24480 ) S ; + - PHY_EDGE_ROW_6_Left_16 sky130_fd_sc_hd__decap_3 + SOURCE DIST + FIXED ( 5520 27200 ) N ; + - PHY_EDGE_ROW_6_Right_6 sky130_fd_sc_hd__decap_3 + SOURCE DIST + FIXED ( 42780 27200 ) FN ; + - PHY_EDGE_ROW_7_Left_17 sky130_fd_sc_hd__decap_3 + SOURCE DIST + FIXED ( 5520 29920 ) FS ; + - PHY_EDGE_ROW_7_Right_7 sky130_fd_sc_hd__decap_3 + SOURCE DIST + FIXED ( 42780 29920 ) S ; + - PHY_EDGE_ROW_8_Left_18 sky130_fd_sc_hd__decap_3 + SOURCE DIST + FIXED ( 5520 32640 ) N ; + - PHY_EDGE_ROW_8_Right_8 sky130_fd_sc_hd__decap_3 + SOURCE DIST + FIXED ( 42780 32640 ) FN ; + - PHY_EDGE_ROW_9_Left_19 sky130_fd_sc_hd__decap_3 + SOURCE DIST + FIXED ( 5520 35360 ) FS ; + - PHY_EDGE_ROW_9_Right_9 sky130_fd_sc_hd__decap_3 + SOURCE DIST + FIXED ( 42780 35360 ) S ; + - TAP_TAPCELL_ROW_0_20 sky130_fd_sc_hd__tapvpwrvgnd_1 + SOURCE DIST + FIXED ( 18400 10880 ) N ; + - TAP_TAPCELL_ROW_0_21 sky130_fd_sc_hd__tapvpwrvgnd_1 + SOURCE DIST + FIXED ( 31280 10880 ) N ; + - TAP_TAPCELL_ROW_1_22 sky130_fd_sc_hd__tapvpwrvgnd_1 + SOURCE DIST + FIXED ( 31280 13600 ) FS ; + - TAP_TAPCELL_ROW_2_23 sky130_fd_sc_hd__tapvpwrvgnd_1 + SOURCE DIST + FIXED ( 18400 16320 ) N ; + - TAP_TAPCELL_ROW_3_24 sky130_fd_sc_hd__tapvpwrvgnd_1 + SOURCE DIST + FIXED ( 31280 19040 ) FS ; + - TAP_TAPCELL_ROW_4_25 sky130_fd_sc_hd__tapvpwrvgnd_1 + SOURCE DIST + FIXED ( 18400 21760 ) N ; + - TAP_TAPCELL_ROW_5_26 sky130_fd_sc_hd__tapvpwrvgnd_1 + SOURCE DIST + FIXED ( 31280 24480 ) FS ; + - TAP_TAPCELL_ROW_6_27 sky130_fd_sc_hd__tapvpwrvgnd_1 + SOURCE DIST + FIXED ( 18400 27200 ) N ; + - TAP_TAPCELL_ROW_7_28 sky130_fd_sc_hd__tapvpwrvgnd_1 + SOURCE DIST + FIXED ( 31280 29920 ) FS ; + - TAP_TAPCELL_ROW_8_29 sky130_fd_sc_hd__tapvpwrvgnd_1 + SOURCE DIST + FIXED ( 18400 32640 ) N ; + - TAP_TAPCELL_ROW_9_30 sky130_fd_sc_hd__tapvpwrvgnd_1 + SOURCE DIST + FIXED ( 18400 35360 ) FS ; + - TAP_TAPCELL_ROW_9_31 sky130_fd_sc_hd__tapvpwrvgnd_1 + SOURCE DIST + FIXED ( 31280 35360 ) FS ; + - _0_ sky130_fd_sc_hd__inv_2 + PLACED ( 40020 24480 ) S ; +END COMPONENTS +PINS 4 ; + - VGND + NET VGND + SPECIAL + DIRECTION INOUT + USE GROUND + + PORT + + LAYER met5 ( -19560 -800 ) ( 19560 800 ) + + LAYER met4 ( 13180 -8540 ) ( 14780 19140 ) + + LAYER met4 ( -11820 -8540 ) ( -10220 19140 ) + + FIXED ( 24840 19180 ) N ; + - VPWR + NET VPWR + SPECIAL + DIRECTION INOUT + USE POWER + + PORT + + LAYER met5 ( -19560 -800 ) ( 19560 800 ) + + LAYER met4 ( 9880 -5240 ) ( 11480 22440 ) + + LAYER met4 ( -15120 -5240 ) ( -13520 22440 ) + + FIXED ( 24840 15880 ) N ; + - in + NET in + DIRECTION INPUT + USE SIGNAL + + PORT + + LAYER met3 ( -2000 -300 ) ( 2000 300 ) + + PLACED ( 48000 27540 ) N ; + - out + NET out + DIRECTION OUTPUT + USE SIGNAL + + PORT + + LAYER met3 ( -2000 -300 ) ( 2000 300 ) + + PLACED ( 48000 24140 ) N ; +END PINS +SPECIALNETS 2 ; + - VGND ( PIN VGND ) ( * VNB ) ( * VGND ) + USE GROUND + + ROUTED met1 480 + SHAPE FOLLOWPIN ( 5520 38080 ) ( 44160 38080 ) + NEW met1 480 + SHAPE FOLLOWPIN ( 5520 32640 ) ( 44160 32640 ) + NEW met1 480 + SHAPE FOLLOWPIN ( 5520 27200 ) ( 44160 27200 ) + NEW met1 480 + SHAPE FOLLOWPIN ( 5520 21760 ) ( 44160 21760 ) + NEW met1 480 + SHAPE FOLLOWPIN ( 5520 16320 ) ( 44160 16320 ) + NEW met1 480 + SHAPE FOLLOWPIN ( 5520 10880 ) ( 44160 10880 ) + NEW met5 1600 + SHAPE STRIPE ( 5280 19180 ) ( 44400 19180 ) + NEW met4 1600 + SHAPE STRIPE ( 38820 10640 ) ( 38820 38320 ) + NEW met4 1600 + SHAPE STRIPE ( 13820 10640 ) ( 13820 38320 ) + NEW met4 0 + SHAPE STRIPE ( 38820 19180 ) via5_6_1600_1600_1_1_1600_1600 + NEW met4 0 + SHAPE STRIPE ( 13820 19180 ) via5_6_1600_1600_1_1_1600_1600 + NEW met3 330 + SHAPE STRIPE ( 38030 38080 ) ( 39610 38080 ) + NEW met3 0 + SHAPE STRIPE ( 38820 38080 ) via4_5_1600_480_1_4_400_400 + NEW met2 370 + SHAPE STRIPE ( 38050 38080 ) ( 39590 38080 ) + NEW met2 0 + SHAPE STRIPE ( 38820 38080 ) via3_4_1600_480_1_4_400_400 + NEW met1 0 + SHAPE STRIPE ( 38820 38080 ) via2_3_1600_480_1_5_320_320 + NEW met3 330 + SHAPE STRIPE ( 38030 32640 ) ( 39610 32640 ) + NEW met3 0 + SHAPE STRIPE ( 38820 32640 ) via4_5_1600_480_1_4_400_400 + NEW met2 370 + SHAPE STRIPE ( 38050 32640 ) ( 39590 32640 ) + NEW met2 0 + SHAPE STRIPE ( 38820 32640 ) via3_4_1600_480_1_4_400_400 + NEW met1 0 + SHAPE STRIPE ( 38820 32640 ) via2_3_1600_480_1_5_320_320 + NEW met3 330 + SHAPE STRIPE ( 38030 27200 ) ( 39610 27200 ) + NEW met3 0 + SHAPE STRIPE ( 38820 27200 ) via4_5_1600_480_1_4_400_400 + NEW met2 370 + SHAPE STRIPE ( 38050 27200 ) ( 39590 27200 ) + NEW met2 0 + SHAPE STRIPE ( 38820 27200 ) via3_4_1600_480_1_4_400_400 + NEW met1 0 + SHAPE STRIPE ( 38820 27200 ) via2_3_1600_480_1_5_320_320 + NEW met3 330 + SHAPE STRIPE ( 38030 21760 ) ( 39610 21760 ) + NEW met3 0 + SHAPE STRIPE ( 38820 21760 ) via4_5_1600_480_1_4_400_400 + NEW met2 370 + SHAPE STRIPE ( 38050 21760 ) ( 39590 21760 ) + NEW met2 0 + SHAPE STRIPE ( 38820 21760 ) via3_4_1600_480_1_4_400_400 + NEW met1 0 + SHAPE STRIPE ( 38820 21760 ) via2_3_1600_480_1_5_320_320 + NEW met3 330 + SHAPE STRIPE ( 38030 16320 ) ( 39610 16320 ) + NEW met3 0 + SHAPE STRIPE ( 38820 16320 ) via4_5_1600_480_1_4_400_400 + NEW met2 370 + SHAPE STRIPE ( 38050 16320 ) ( 39590 16320 ) + NEW met2 0 + SHAPE STRIPE ( 38820 16320 ) via3_4_1600_480_1_4_400_400 + NEW met1 0 + SHAPE STRIPE ( 38820 16320 ) via2_3_1600_480_1_5_320_320 + NEW met3 330 + SHAPE STRIPE ( 38030 10880 ) ( 39610 10880 ) + NEW met3 0 + SHAPE STRIPE ( 38820 10880 ) via4_5_1600_480_1_4_400_400 + NEW met2 370 + SHAPE STRIPE ( 38050 10880 ) ( 39590 10880 ) + NEW met2 0 + SHAPE STRIPE ( 38820 10880 ) via3_4_1600_480_1_4_400_400 + NEW met1 0 + SHAPE STRIPE ( 38820 10880 ) via2_3_1600_480_1_5_320_320 + NEW met3 330 + SHAPE STRIPE ( 13030 38080 ) ( 14610 38080 ) + NEW met3 0 + SHAPE STRIPE ( 13820 38080 ) via4_5_1600_480_1_4_400_400 + NEW met2 370 + SHAPE STRIPE ( 13050 38080 ) ( 14590 38080 ) + NEW met2 0 + SHAPE STRIPE ( 13820 38080 ) via3_4_1600_480_1_4_400_400 + NEW met1 0 + SHAPE STRIPE ( 13820 38080 ) via2_3_1600_480_1_5_320_320 + NEW met3 330 + SHAPE STRIPE ( 13030 32640 ) ( 14610 32640 ) + NEW met3 0 + SHAPE STRIPE ( 13820 32640 ) via4_5_1600_480_1_4_400_400 + NEW met2 370 + SHAPE STRIPE ( 13050 32640 ) ( 14590 32640 ) + NEW met2 0 + SHAPE STRIPE ( 13820 32640 ) via3_4_1600_480_1_4_400_400 + NEW met1 0 + SHAPE STRIPE ( 13820 32640 ) via2_3_1600_480_1_5_320_320 + NEW met3 330 + SHAPE STRIPE ( 13030 27200 ) ( 14610 27200 ) + NEW met3 0 + SHAPE STRIPE ( 13820 27200 ) via4_5_1600_480_1_4_400_400 + NEW met2 370 + SHAPE STRIPE ( 13050 27200 ) ( 14590 27200 ) + NEW met2 0 + SHAPE STRIPE ( 13820 27200 ) via3_4_1600_480_1_4_400_400 + NEW met1 0 + SHAPE STRIPE ( 13820 27200 ) via2_3_1600_480_1_5_320_320 + NEW met3 330 + SHAPE STRIPE ( 13030 21760 ) ( 14610 21760 ) + NEW met3 0 + SHAPE STRIPE ( 13820 21760 ) via4_5_1600_480_1_4_400_400 + NEW met2 370 + SHAPE STRIPE ( 13050 21760 ) ( 14590 21760 ) + NEW met2 0 + SHAPE STRIPE ( 13820 21760 ) via3_4_1600_480_1_4_400_400 + NEW met1 0 + SHAPE STRIPE ( 13820 21760 ) via2_3_1600_480_1_5_320_320 + NEW met3 330 + SHAPE STRIPE ( 13030 16320 ) ( 14610 16320 ) + NEW met3 0 + SHAPE STRIPE ( 13820 16320 ) via4_5_1600_480_1_4_400_400 + NEW met2 370 + SHAPE STRIPE ( 13050 16320 ) ( 14590 16320 ) + NEW met2 0 + SHAPE STRIPE ( 13820 16320 ) via3_4_1600_480_1_4_400_400 + NEW met1 0 + SHAPE STRIPE ( 13820 16320 ) via2_3_1600_480_1_5_320_320 + NEW met3 330 + SHAPE STRIPE ( 13030 10880 ) ( 14610 10880 ) + NEW met3 0 + SHAPE STRIPE ( 13820 10880 ) via4_5_1600_480_1_4_400_400 + NEW met2 370 + SHAPE STRIPE ( 13050 10880 ) ( 14590 10880 ) + NEW met2 0 + SHAPE STRIPE ( 13820 10880 ) via3_4_1600_480_1_4_400_400 + NEW met1 0 + SHAPE STRIPE ( 13820 10880 ) via2_3_1600_480_1_5_320_320 ; + - VPWR ( PIN VPWR ) ( * VPB ) ( * VPWR ) + USE POWER + + ROUTED met1 480 + SHAPE FOLLOWPIN ( 5520 35360 ) ( 44160 35360 ) + NEW met1 480 + SHAPE FOLLOWPIN ( 5520 29920 ) ( 44160 29920 ) + NEW met1 480 + SHAPE FOLLOWPIN ( 5520 24480 ) ( 44160 24480 ) + NEW met1 480 + SHAPE FOLLOWPIN ( 5520 19040 ) ( 44160 19040 ) + NEW met1 480 + SHAPE FOLLOWPIN ( 5520 13600 ) ( 44160 13600 ) + NEW met5 1600 + SHAPE STRIPE ( 5280 15880 ) ( 44400 15880 ) + NEW met4 1600 + SHAPE STRIPE ( 35520 10640 ) ( 35520 38320 ) + NEW met4 1600 + SHAPE STRIPE ( 10520 10640 ) ( 10520 38320 ) + NEW met4 0 + SHAPE STRIPE ( 35520 15880 ) via5_6_1600_1600_1_1_1600_1600 + NEW met4 0 + SHAPE STRIPE ( 10520 15880 ) via5_6_1600_1600_1_1_1600_1600 + NEW met3 330 + SHAPE STRIPE ( 34730 35360 ) ( 36310 35360 ) + NEW met3 0 + SHAPE STRIPE ( 35520 35360 ) via4_5_1600_480_1_4_400_400 + NEW met2 370 + SHAPE STRIPE ( 34750 35360 ) ( 36290 35360 ) + NEW met2 0 + SHAPE STRIPE ( 35520 35360 ) via3_4_1600_480_1_4_400_400 + NEW met1 0 + SHAPE STRIPE ( 35520 35360 ) via2_3_1600_480_1_5_320_320 + NEW met3 330 + SHAPE STRIPE ( 34730 29920 ) ( 36310 29920 ) + NEW met3 0 + SHAPE STRIPE ( 35520 29920 ) via4_5_1600_480_1_4_400_400 + NEW met2 370 + SHAPE STRIPE ( 34750 29920 ) ( 36290 29920 ) + NEW met2 0 + SHAPE STRIPE ( 35520 29920 ) via3_4_1600_480_1_4_400_400 + NEW met1 0 + SHAPE STRIPE ( 35520 29920 ) via2_3_1600_480_1_5_320_320 + NEW met3 330 + SHAPE STRIPE ( 34730 24480 ) ( 36310 24480 ) + NEW met3 0 + SHAPE STRIPE ( 35520 24480 ) via4_5_1600_480_1_4_400_400 + NEW met2 370 + SHAPE STRIPE ( 34750 24480 ) ( 36290 24480 ) + NEW met2 0 + SHAPE STRIPE ( 35520 24480 ) via3_4_1600_480_1_4_400_400 + NEW met1 0 + SHAPE STRIPE ( 35520 24480 ) via2_3_1600_480_1_5_320_320 + NEW met3 330 + SHAPE STRIPE ( 34730 19040 ) ( 36310 19040 ) + NEW met3 0 + SHAPE STRIPE ( 35520 19040 ) via4_5_1600_480_1_4_400_400 + NEW met2 370 + SHAPE STRIPE ( 34750 19040 ) ( 36290 19040 ) + NEW met2 0 + SHAPE STRIPE ( 35520 19040 ) via3_4_1600_480_1_4_400_400 + NEW met1 0 + SHAPE STRIPE ( 35520 19040 ) via2_3_1600_480_1_5_320_320 + NEW met3 330 + SHAPE STRIPE ( 34730 13600 ) ( 36310 13600 ) + NEW met3 0 + SHAPE STRIPE ( 35520 13600 ) via4_5_1600_480_1_4_400_400 + NEW met2 370 + SHAPE STRIPE ( 34750 13600 ) ( 36290 13600 ) + NEW met2 0 + SHAPE STRIPE ( 35520 13600 ) via3_4_1600_480_1_4_400_400 + NEW met1 0 + SHAPE STRIPE ( 35520 13600 ) via2_3_1600_480_1_5_320_320 + NEW met3 330 + SHAPE STRIPE ( 9730 35360 ) ( 11310 35360 ) + NEW met3 0 + SHAPE STRIPE ( 10520 35360 ) via4_5_1600_480_1_4_400_400 + NEW met2 370 + SHAPE STRIPE ( 9750 35360 ) ( 11290 35360 ) + NEW met2 0 + SHAPE STRIPE ( 10520 35360 ) via3_4_1600_480_1_4_400_400 + NEW met1 0 + SHAPE STRIPE ( 10520 35360 ) via2_3_1600_480_1_5_320_320 + NEW met3 330 + SHAPE STRIPE ( 9730 29920 ) ( 11310 29920 ) + NEW met3 0 + SHAPE STRIPE ( 10520 29920 ) via4_5_1600_480_1_4_400_400 + NEW met2 370 + SHAPE STRIPE ( 9750 29920 ) ( 11290 29920 ) + NEW met2 0 + SHAPE STRIPE ( 10520 29920 ) via3_4_1600_480_1_4_400_400 + NEW met1 0 + SHAPE STRIPE ( 10520 29920 ) via2_3_1600_480_1_5_320_320 + NEW met3 330 + SHAPE STRIPE ( 9730 24480 ) ( 11310 24480 ) + NEW met3 0 + SHAPE STRIPE ( 10520 24480 ) via4_5_1600_480_1_4_400_400 + NEW met2 370 + SHAPE STRIPE ( 9750 24480 ) ( 11290 24480 ) + NEW met2 0 + SHAPE STRIPE ( 10520 24480 ) via3_4_1600_480_1_4_400_400 + NEW met1 0 + SHAPE STRIPE ( 10520 24480 ) via2_3_1600_480_1_5_320_320 + NEW met3 330 + SHAPE STRIPE ( 9730 19040 ) ( 11310 19040 ) + NEW met3 0 + SHAPE STRIPE ( 10520 19040 ) via4_5_1600_480_1_4_400_400 + NEW met2 370 + SHAPE STRIPE ( 9750 19040 ) ( 11290 19040 ) + NEW met2 0 + SHAPE STRIPE ( 10520 19040 ) via3_4_1600_480_1_4_400_400 + NEW met1 0 + SHAPE STRIPE ( 10520 19040 ) via2_3_1600_480_1_5_320_320 + NEW met3 330 + SHAPE STRIPE ( 9730 13600 ) ( 11310 13600 ) + NEW met3 0 + SHAPE STRIPE ( 10520 13600 ) via4_5_1600_480_1_4_400_400 + NEW met2 370 + SHAPE STRIPE ( 9750 13600 ) ( 11290 13600 ) + NEW met2 0 + SHAPE STRIPE ( 10520 13600 ) via3_4_1600_480_1_4_400_400 + NEW met1 0 + SHAPE STRIPE ( 10520 13600 ) via2_3_1600_480_1_5_320_320 ; +END SPECIALNETS +NETS 2 ; + - in ( PIN in ) ( _0_ A ) + USE SIGNAL + + ROUTED met1 ( 41170 26010 ) ( 43930 * ) + NEW met1 ( 43930 26010 ) ( * 26690 ) + NEW met2 ( 43930 26690 ) ( * 27540 ) + NEW met3 ( 43930 27540 ) ( 46460 * 0 ) + NEW li1 ( 41170 26010 ) L1M1_PR_MR + NEW met1 ( 43930 26690 ) M1M2_PR + NEW met2 ( 43930 27540 ) M2M3_PR ; + - out ( PIN out ) ( _0_ Y ) + USE SIGNAL + + ROUTED met1 ( 40710 24990 ) ( 43470 * ) + NEW met2 ( 43470 24140 ) ( * 24990 ) + NEW met3 ( 43470 24140 ) ( 46460 * 0 ) + NEW li1 ( 40710 24990 ) L1M1_PR_MR + NEW met1 ( 43470 24990 ) M1M2_PR + NEW met2 ( 43470 24140 ) M2M3_PR ; +END NETS +END DESIGN diff --git a/tests/2038-lvs_good/inverter.gds b/tests/2038-lvs_good/inverter.gds new file mode 100644 index 0000000000000000000000000000000000000000..bf3b3f4bad202772f2262f653093fa40bbd763e3 GIT binary patch literal 54840 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 literal 0 HcmV?d00001 diff --git a/tests/2038-lvs_good/inverter.pnl.v b/tests/2038-lvs_good/inverter.pnl.v new file mode 100644 index 000000000..718b5f421 --- /dev/null +++ b/tests/2038-lvs_good/inverter.pnl.v @@ -0,0 +1,565 @@ +module inverter (in, + out, + VPWR, + VGND); + input in; + output out; + input VPWR; + input VGND; + + + sky130_fd_sc_hd__inv_2 _0_ (.A(in), + .VGND(VGND), + .VNB(VGND), + .VPB(VPWR), + .VPWR(VPWR), + .Y(out)); + sky130_fd_sc_hd__decap_3 PHY_EDGE_ROW_0_Right_0 (.VGND(VGND), + .VNB(VGND), + .VPB(VPWR), + .VPWR(VPWR)); + sky130_fd_sc_hd__decap_3 PHY_EDGE_ROW_1_Right_1 (.VGND(VGND), + .VNB(VGND), + .VPB(VPWR), + .VPWR(VPWR)); + sky130_fd_sc_hd__decap_3 PHY_EDGE_ROW_2_Right_2 (.VGND(VGND), + .VNB(VGND), + .VPB(VPWR), + .VPWR(VPWR)); + sky130_fd_sc_hd__decap_3 PHY_EDGE_ROW_3_Right_3 (.VGND(VGND), + .VNB(VGND), + .VPB(VPWR), + .VPWR(VPWR)); + sky130_fd_sc_hd__decap_3 PHY_EDGE_ROW_4_Right_4 (.VGND(VGND), + .VNB(VGND), + .VPB(VPWR), + .VPWR(VPWR)); + sky130_fd_sc_hd__decap_3 PHY_EDGE_ROW_5_Right_5 (.VGND(VGND), + .VNB(VGND), + .VPB(VPWR), + .VPWR(VPWR)); + sky130_fd_sc_hd__decap_3 PHY_EDGE_ROW_6_Right_6 (.VGND(VGND), + .VNB(VGND), + .VPB(VPWR), + .VPWR(VPWR)); + sky130_fd_sc_hd__decap_3 PHY_EDGE_ROW_7_Right_7 (.VGND(VGND), + .VNB(VGND), + .VPB(VPWR), + .VPWR(VPWR)); + sky130_fd_sc_hd__decap_3 PHY_EDGE_ROW_8_Right_8 (.VGND(VGND), + .VNB(VGND), + .VPB(VPWR), + .VPWR(VPWR)); + sky130_fd_sc_hd__decap_3 PHY_EDGE_ROW_9_Right_9 (.VGND(VGND), + .VNB(VGND), + .VPB(VPWR), + .VPWR(VPWR)); + sky130_fd_sc_hd__decap_3 PHY_EDGE_ROW_0_Left_10 (.VGND(VGND), + .VNB(VGND), + .VPB(VPWR), + .VPWR(VPWR)); + sky130_fd_sc_hd__decap_3 PHY_EDGE_ROW_1_Left_11 (.VGND(VGND), + .VNB(VGND), + .VPB(VPWR), + .VPWR(VPWR)); + sky130_fd_sc_hd__decap_3 PHY_EDGE_ROW_2_Left_12 (.VGND(VGND), + .VNB(VGND), + .VPB(VPWR), + .VPWR(VPWR)); + sky130_fd_sc_hd__decap_3 PHY_EDGE_ROW_3_Left_13 (.VGND(VGND), + .VNB(VGND), + .VPB(VPWR), + .VPWR(VPWR)); + sky130_fd_sc_hd__decap_3 PHY_EDGE_ROW_4_Left_14 (.VGND(VGND), + .VNB(VGND), + .VPB(VPWR), + .VPWR(VPWR)); + sky130_fd_sc_hd__decap_3 PHY_EDGE_ROW_5_Left_15 (.VGND(VGND), + .VNB(VGND), + .VPB(VPWR), + .VPWR(VPWR)); + sky130_fd_sc_hd__decap_3 PHY_EDGE_ROW_6_Left_16 (.VGND(VGND), + .VNB(VGND), + .VPB(VPWR), + .VPWR(VPWR)); + sky130_fd_sc_hd__decap_3 PHY_EDGE_ROW_7_Left_17 (.VGND(VGND), + .VNB(VGND), + .VPB(VPWR), + .VPWR(VPWR)); + sky130_fd_sc_hd__decap_3 PHY_EDGE_ROW_8_Left_18 (.VGND(VGND), + .VNB(VGND), + .VPB(VPWR), + .VPWR(VPWR)); + sky130_fd_sc_hd__decap_3 PHY_EDGE_ROW_9_Left_19 (.VGND(VGND), + .VNB(VGND), + .VPB(VPWR), + .VPWR(VPWR)); + sky130_fd_sc_hd__tapvpwrvgnd_1 TAP_TAPCELL_ROW_0_20 (.VGND(VGND), + .VPWR(VPWR)); + sky130_fd_sc_hd__tapvpwrvgnd_1 TAP_TAPCELL_ROW_0_21 (.VGND(VGND), + .VPWR(VPWR)); + sky130_fd_sc_hd__tapvpwrvgnd_1 TAP_TAPCELL_ROW_1_22 (.VGND(VGND), + .VPWR(VPWR)); + sky130_fd_sc_hd__tapvpwrvgnd_1 TAP_TAPCELL_ROW_2_23 (.VGND(VGND), + .VPWR(VPWR)); + sky130_fd_sc_hd__tapvpwrvgnd_1 TAP_TAPCELL_ROW_3_24 (.VGND(VGND), + .VPWR(VPWR)); + sky130_fd_sc_hd__tapvpwrvgnd_1 TAP_TAPCELL_ROW_4_25 (.VGND(VGND), + .VPWR(VPWR)); + sky130_fd_sc_hd__tapvpwrvgnd_1 TAP_TAPCELL_ROW_5_26 (.VGND(VGND), + .VPWR(VPWR)); + sky130_fd_sc_hd__tapvpwrvgnd_1 TAP_TAPCELL_ROW_6_27 (.VGND(VGND), + .VPWR(VPWR)); + sky130_fd_sc_hd__tapvpwrvgnd_1 TAP_TAPCELL_ROW_7_28 (.VGND(VGND), + .VPWR(VPWR)); + sky130_fd_sc_hd__tapvpwrvgnd_1 TAP_TAPCELL_ROW_8_29 (.VGND(VGND), + .VPWR(VPWR)); + sky130_fd_sc_hd__tapvpwrvgnd_1 TAP_TAPCELL_ROW_9_30 (.VGND(VGND), + .VPWR(VPWR)); + sky130_fd_sc_hd__tapvpwrvgnd_1 TAP_TAPCELL_ROW_9_31 (.VGND(VGND), + .VPWR(VPWR)); + sky130_fd_sc_hd__decap_8 FILLER_0_0_3 (.VGND(VGND), + .VNB(VGND), + .VPB(VPWR), + .VPWR(VPWR)); + sky130_fd_sc_hd__decap_8 FILLER_0_0_11 (.VGND(VGND), + .VNB(VGND), + .VPB(VPWR), + .VPWR(VPWR)); + sky130_fd_sc_hd__decap_8 FILLER_0_0_19 (.VGND(VGND), + .VNB(VGND), + .VPB(VPWR), + .VPWR(VPWR)); + sky130_fd_sc_hd__fill_1 FILLER_0_0_27 (.VGND(VGND), + .VNB(VGND), + .VPB(VPWR), + .VPWR(VPWR)); + sky130_fd_sc_hd__decap_8 FILLER_0_0_29 (.VGND(VGND), + .VNB(VGND), + .VPB(VPWR), + .VPWR(VPWR)); + sky130_fd_sc_hd__decap_8 FILLER_0_0_37 (.VGND(VGND), + .VNB(VGND), + .VPB(VPWR), + .VPWR(VPWR)); + sky130_fd_sc_hd__decap_8 FILLER_0_0_45 (.VGND(VGND), + .VNB(VGND), + .VPB(VPWR), + .VPWR(VPWR)); + sky130_fd_sc_hd__decap_3 FILLER_0_0_53 (.VGND(VGND), + .VNB(VGND), + .VPB(VPWR), + .VPWR(VPWR)); + sky130_fd_sc_hd__decap_8 FILLER_0_0_57 (.VGND(VGND), + .VNB(VGND), + .VPB(VPWR), + .VPWR(VPWR)); + sky130_fd_sc_hd__decap_8 FILLER_0_0_65 (.VGND(VGND), + .VNB(VGND), + .VPB(VPWR), + .VPWR(VPWR)); + sky130_fd_sc_hd__decap_8 FILLER_0_0_73 (.VGND(VGND), + .VNB(VGND), + .VPB(VPWR), + .VPWR(VPWR)); + sky130_fd_sc_hd__decap_8 FILLER_0_1_3 (.VGND(VGND), + .VNB(VGND), + .VPB(VPWR), + .VPWR(VPWR)); + sky130_fd_sc_hd__decap_8 FILLER_0_1_11 (.VGND(VGND), + .VNB(VGND), + .VPB(VPWR), + .VPWR(VPWR)); + sky130_fd_sc_hd__decap_8 FILLER_0_1_19 (.VGND(VGND), + .VNB(VGND), + .VPB(VPWR), + .VPWR(VPWR)); + sky130_fd_sc_hd__decap_8 FILLER_0_1_27 (.VGND(VGND), + .VNB(VGND), + .VPB(VPWR), + .VPWR(VPWR)); + sky130_fd_sc_hd__decap_8 FILLER_0_1_35 (.VGND(VGND), + .VNB(VGND), + .VPB(VPWR), + .VPWR(VPWR)); + sky130_fd_sc_hd__decap_8 FILLER_0_1_43 (.VGND(VGND), + .VNB(VGND), + .VPB(VPWR), + .VPWR(VPWR)); + sky130_fd_sc_hd__decap_4 FILLER_0_1_51 (.VGND(VGND), + .VNB(VGND), + .VPB(VPWR), + .VPWR(VPWR)); + sky130_fd_sc_hd__fill_1 FILLER_0_1_55 (.VGND(VGND), + .VNB(VGND), + .VPB(VPWR), + .VPWR(VPWR)); + sky130_fd_sc_hd__decap_8 FILLER_0_1_57 (.VGND(VGND), + .VNB(VGND), + .VPB(VPWR), + .VPWR(VPWR)); + sky130_fd_sc_hd__decap_8 FILLER_0_1_65 (.VGND(VGND), + .VNB(VGND), + .VPB(VPWR), + .VPWR(VPWR)); + sky130_fd_sc_hd__decap_8 FILLER_0_1_73 (.VGND(VGND), + .VNB(VGND), + .VPB(VPWR), + .VPWR(VPWR)); + sky130_fd_sc_hd__decap_8 FILLER_0_2_3 (.VGND(VGND), + .VNB(VGND), + .VPB(VPWR), + .VPWR(VPWR)); + sky130_fd_sc_hd__decap_8 FILLER_0_2_11 (.VGND(VGND), + .VNB(VGND), + .VPB(VPWR), + .VPWR(VPWR)); + sky130_fd_sc_hd__decap_8 FILLER_0_2_19 (.VGND(VGND), + .VNB(VGND), + .VPB(VPWR), + .VPWR(VPWR)); + sky130_fd_sc_hd__fill_1 FILLER_0_2_27 (.VGND(VGND), + .VNB(VGND), + .VPB(VPWR), + .VPWR(VPWR)); + sky130_fd_sc_hd__decap_8 FILLER_0_2_29 (.VGND(VGND), + .VNB(VGND), + .VPB(VPWR), + .VPWR(VPWR)); + sky130_fd_sc_hd__decap_8 FILLER_0_2_37 (.VGND(VGND), + .VNB(VGND), + .VPB(VPWR), + .VPWR(VPWR)); + sky130_fd_sc_hd__decap_8 FILLER_0_2_45 (.VGND(VGND), + .VNB(VGND), + .VPB(VPWR), + .VPWR(VPWR)); + sky130_fd_sc_hd__decap_8 FILLER_0_2_53 (.VGND(VGND), + .VNB(VGND), + .VPB(VPWR), + .VPWR(VPWR)); + sky130_fd_sc_hd__decap_8 FILLER_0_2_61 (.VGND(VGND), + .VNB(VGND), + .VPB(VPWR), + .VPWR(VPWR)); + sky130_fd_sc_hd__decap_8 FILLER_0_2_69 (.VGND(VGND), + .VNB(VGND), + .VPB(VPWR), + .VPWR(VPWR)); + sky130_fd_sc_hd__decap_4 FILLER_0_2_77 (.VGND(VGND), + .VNB(VGND), + .VPB(VPWR), + .VPWR(VPWR)); + sky130_fd_sc_hd__decap_8 FILLER_0_3_3 (.VGND(VGND), + .VNB(VGND), + .VPB(VPWR), + .VPWR(VPWR)); + sky130_fd_sc_hd__decap_8 FILLER_0_3_11 (.VGND(VGND), + .VNB(VGND), + .VPB(VPWR), + .VPWR(VPWR)); + sky130_fd_sc_hd__decap_8 FILLER_0_3_19 (.VGND(VGND), + .VNB(VGND), + .VPB(VPWR), + .VPWR(VPWR)); + sky130_fd_sc_hd__decap_8 FILLER_0_3_27 (.VGND(VGND), + .VNB(VGND), + .VPB(VPWR), + .VPWR(VPWR)); + sky130_fd_sc_hd__decap_8 FILLER_0_3_35 (.VGND(VGND), + .VNB(VGND), + .VPB(VPWR), + .VPWR(VPWR)); + sky130_fd_sc_hd__decap_8 FILLER_0_3_43 (.VGND(VGND), + .VNB(VGND), + .VPB(VPWR), + .VPWR(VPWR)); + sky130_fd_sc_hd__decap_4 FILLER_0_3_51 (.VGND(VGND), + .VNB(VGND), + .VPB(VPWR), + .VPWR(VPWR)); + sky130_fd_sc_hd__fill_1 FILLER_0_3_55 (.VGND(VGND), + .VNB(VGND), + .VPB(VPWR), + .VPWR(VPWR)); + sky130_fd_sc_hd__decap_8 FILLER_0_3_57 (.VGND(VGND), + .VNB(VGND), + .VPB(VPWR), + .VPWR(VPWR)); + sky130_fd_sc_hd__decap_8 FILLER_0_3_65 (.VGND(VGND), + .VNB(VGND), + .VPB(VPWR), + .VPWR(VPWR)); + sky130_fd_sc_hd__decap_8 FILLER_0_3_73 (.VGND(VGND), + .VNB(VGND), + .VPB(VPWR), + .VPWR(VPWR)); + sky130_fd_sc_hd__decap_8 FILLER_0_4_3 (.VGND(VGND), + .VNB(VGND), + .VPB(VPWR), + .VPWR(VPWR)); + sky130_fd_sc_hd__decap_8 FILLER_0_4_11 (.VGND(VGND), + .VNB(VGND), + .VPB(VPWR), + .VPWR(VPWR)); + sky130_fd_sc_hd__decap_8 FILLER_0_4_19 (.VGND(VGND), + .VNB(VGND), + .VPB(VPWR), + .VPWR(VPWR)); + sky130_fd_sc_hd__fill_1 FILLER_0_4_27 (.VGND(VGND), + .VNB(VGND), + .VPB(VPWR), + .VPWR(VPWR)); + sky130_fd_sc_hd__decap_8 FILLER_0_4_29 (.VGND(VGND), + .VNB(VGND), + .VPB(VPWR), + .VPWR(VPWR)); + sky130_fd_sc_hd__decap_8 FILLER_0_4_37 (.VGND(VGND), + .VNB(VGND), + .VPB(VPWR), + .VPWR(VPWR)); + sky130_fd_sc_hd__decap_8 FILLER_0_4_45 (.VGND(VGND), + .VNB(VGND), + .VPB(VPWR), + .VPWR(VPWR)); + sky130_fd_sc_hd__decap_8 FILLER_0_4_53 (.VGND(VGND), + .VNB(VGND), + .VPB(VPWR), + .VPWR(VPWR)); + sky130_fd_sc_hd__decap_8 FILLER_0_4_61 (.VGND(VGND), + .VNB(VGND), + .VPB(VPWR), + .VPWR(VPWR)); + sky130_fd_sc_hd__decap_8 FILLER_0_4_69 (.VGND(VGND), + .VNB(VGND), + .VPB(VPWR), + .VPWR(VPWR)); + sky130_fd_sc_hd__decap_4 FILLER_0_4_77 (.VGND(VGND), + .VNB(VGND), + .VPB(VPWR), + .VPWR(VPWR)); + sky130_fd_sc_hd__decap_8 FILLER_0_5_3 (.VGND(VGND), + .VNB(VGND), + .VPB(VPWR), + .VPWR(VPWR)); + sky130_fd_sc_hd__decap_8 FILLER_0_5_11 (.VGND(VGND), + .VNB(VGND), + .VPB(VPWR), + .VPWR(VPWR)); + sky130_fd_sc_hd__decap_8 FILLER_0_5_19 (.VGND(VGND), + .VNB(VGND), + .VPB(VPWR), + .VPWR(VPWR)); + sky130_fd_sc_hd__decap_8 FILLER_0_5_27 (.VGND(VGND), + .VNB(VGND), + .VPB(VPWR), + .VPWR(VPWR)); + sky130_fd_sc_hd__decap_8 FILLER_0_5_35 (.VGND(VGND), + .VNB(VGND), + .VPB(VPWR), + .VPWR(VPWR)); + sky130_fd_sc_hd__decap_8 FILLER_0_5_43 (.VGND(VGND), + .VNB(VGND), + .VPB(VPWR), + .VPWR(VPWR)); + sky130_fd_sc_hd__decap_4 FILLER_0_5_51 (.VGND(VGND), + .VNB(VGND), + .VPB(VPWR), + .VPWR(VPWR)); + sky130_fd_sc_hd__fill_1 FILLER_0_5_55 (.VGND(VGND), + .VNB(VGND), + .VPB(VPWR), + .VPWR(VPWR)); + sky130_fd_sc_hd__decap_8 FILLER_0_5_57 (.VGND(VGND), + .VNB(VGND), + .VPB(VPWR), + .VPWR(VPWR)); + sky130_fd_sc_hd__decap_8 FILLER_0_5_65 (.VGND(VGND), + .VNB(VGND), + .VPB(VPWR), + .VPWR(VPWR)); + sky130_fd_sc_hd__fill_2 FILLER_0_5_73 (.VGND(VGND), + .VNB(VGND), + .VPB(VPWR), + .VPWR(VPWR)); + sky130_fd_sc_hd__decap_3 FILLER_0_5_78 (.VGND(VGND), + .VNB(VGND), + .VPB(VPWR), + .VPWR(VPWR)); + sky130_fd_sc_hd__decap_8 FILLER_0_6_3 (.VGND(VGND), + .VNB(VGND), + .VPB(VPWR), + .VPWR(VPWR)); + sky130_fd_sc_hd__decap_8 FILLER_0_6_11 (.VGND(VGND), + .VNB(VGND), + .VPB(VPWR), + .VPWR(VPWR)); + sky130_fd_sc_hd__decap_8 FILLER_0_6_19 (.VGND(VGND), + .VNB(VGND), + .VPB(VPWR), + .VPWR(VPWR)); + sky130_fd_sc_hd__fill_1 FILLER_0_6_27 (.VGND(VGND), + .VNB(VGND), + .VPB(VPWR), + .VPWR(VPWR)); + sky130_fd_sc_hd__decap_8 FILLER_0_6_29 (.VGND(VGND), + .VNB(VGND), + .VPB(VPWR), + .VPWR(VPWR)); + sky130_fd_sc_hd__decap_8 FILLER_0_6_37 (.VGND(VGND), + .VNB(VGND), + .VPB(VPWR), + .VPWR(VPWR)); + sky130_fd_sc_hd__decap_8 FILLER_0_6_45 (.VGND(VGND), + .VNB(VGND), + .VPB(VPWR), + .VPWR(VPWR)); + sky130_fd_sc_hd__decap_8 FILLER_0_6_53 (.VGND(VGND), + .VNB(VGND), + .VPB(VPWR), + .VPWR(VPWR)); + sky130_fd_sc_hd__decap_8 FILLER_0_6_61 (.VGND(VGND), + .VNB(VGND), + .VPB(VPWR), + .VPWR(VPWR)); + sky130_fd_sc_hd__decap_8 FILLER_0_6_69 (.VGND(VGND), + .VNB(VGND), + .VPB(VPWR), + .VPWR(VPWR)); + sky130_fd_sc_hd__decap_4 FILLER_0_6_77 (.VGND(VGND), + .VNB(VGND), + .VPB(VPWR), + .VPWR(VPWR)); + sky130_fd_sc_hd__decap_8 FILLER_0_7_3 (.VGND(VGND), + .VNB(VGND), + .VPB(VPWR), + .VPWR(VPWR)); + sky130_fd_sc_hd__decap_8 FILLER_0_7_11 (.VGND(VGND), + .VNB(VGND), + .VPB(VPWR), + .VPWR(VPWR)); + sky130_fd_sc_hd__decap_8 FILLER_0_7_19 (.VGND(VGND), + .VNB(VGND), + .VPB(VPWR), + .VPWR(VPWR)); + sky130_fd_sc_hd__decap_8 FILLER_0_7_27 (.VGND(VGND), + .VNB(VGND), + .VPB(VPWR), + .VPWR(VPWR)); + sky130_fd_sc_hd__decap_8 FILLER_0_7_35 (.VGND(VGND), + .VNB(VGND), + .VPB(VPWR), + .VPWR(VPWR)); + sky130_fd_sc_hd__decap_8 FILLER_0_7_43 (.VGND(VGND), + .VNB(VGND), + .VPB(VPWR), + .VPWR(VPWR)); + sky130_fd_sc_hd__decap_4 FILLER_0_7_51 (.VGND(VGND), + .VNB(VGND), + .VPB(VPWR), + .VPWR(VPWR)); + sky130_fd_sc_hd__fill_1 FILLER_0_7_55 (.VGND(VGND), + .VNB(VGND), + .VPB(VPWR), + .VPWR(VPWR)); + sky130_fd_sc_hd__decap_8 FILLER_0_7_57 (.VGND(VGND), + .VNB(VGND), + .VPB(VPWR), + .VPWR(VPWR)); + sky130_fd_sc_hd__decap_8 FILLER_0_7_65 (.VGND(VGND), + .VNB(VGND), + .VPB(VPWR), + .VPWR(VPWR)); + sky130_fd_sc_hd__decap_8 FILLER_0_7_73 (.VGND(VGND), + .VNB(VGND), + .VPB(VPWR), + .VPWR(VPWR)); + sky130_fd_sc_hd__decap_8 FILLER_0_8_3 (.VGND(VGND), + .VNB(VGND), + .VPB(VPWR), + .VPWR(VPWR)); + sky130_fd_sc_hd__decap_8 FILLER_0_8_11 (.VGND(VGND), + .VNB(VGND), + .VPB(VPWR), + .VPWR(VPWR)); + sky130_fd_sc_hd__decap_8 FILLER_0_8_19 (.VGND(VGND), + .VNB(VGND), + .VPB(VPWR), + .VPWR(VPWR)); + sky130_fd_sc_hd__fill_1 FILLER_0_8_27 (.VGND(VGND), + .VNB(VGND), + .VPB(VPWR), + .VPWR(VPWR)); + sky130_fd_sc_hd__decap_8 FILLER_0_8_29 (.VGND(VGND), + .VNB(VGND), + .VPB(VPWR), + .VPWR(VPWR)); + sky130_fd_sc_hd__decap_8 FILLER_0_8_37 (.VGND(VGND), + .VNB(VGND), + .VPB(VPWR), + .VPWR(VPWR)); + sky130_fd_sc_hd__decap_8 FILLER_0_8_45 (.VGND(VGND), + .VNB(VGND), + .VPB(VPWR), + .VPWR(VPWR)); + sky130_fd_sc_hd__decap_8 FILLER_0_8_53 (.VGND(VGND), + .VNB(VGND), + .VPB(VPWR), + .VPWR(VPWR)); + sky130_fd_sc_hd__decap_8 FILLER_0_8_61 (.VGND(VGND), + .VNB(VGND), + .VPB(VPWR), + .VPWR(VPWR)); + sky130_fd_sc_hd__decap_8 FILLER_0_8_69 (.VGND(VGND), + .VNB(VGND), + .VPB(VPWR), + .VPWR(VPWR)); + sky130_fd_sc_hd__decap_4 FILLER_0_8_77 (.VGND(VGND), + .VNB(VGND), + .VPB(VPWR), + .VPWR(VPWR)); + sky130_fd_sc_hd__decap_8 FILLER_0_9_3 (.VGND(VGND), + .VNB(VGND), + .VPB(VPWR), + .VPWR(VPWR)); + sky130_fd_sc_hd__decap_8 FILLER_0_9_11 (.VGND(VGND), + .VNB(VGND), + .VPB(VPWR), + .VPWR(VPWR)); + sky130_fd_sc_hd__decap_8 FILLER_0_9_19 (.VGND(VGND), + .VNB(VGND), + .VPB(VPWR), + .VPWR(VPWR)); + sky130_fd_sc_hd__fill_1 FILLER_0_9_27 (.VGND(VGND), + .VNB(VGND), + .VPB(VPWR), + .VPWR(VPWR)); + sky130_fd_sc_hd__decap_8 FILLER_0_9_29 (.VGND(VGND), + .VNB(VGND), + .VPB(VPWR), + .VPWR(VPWR)); + sky130_fd_sc_hd__decap_8 FILLER_0_9_37 (.VGND(VGND), + .VNB(VGND), + .VPB(VPWR), + .VPWR(VPWR)); + sky130_fd_sc_hd__decap_8 FILLER_0_9_45 (.VGND(VGND), + .VNB(VGND), + .VPB(VPWR), + .VPWR(VPWR)); + sky130_fd_sc_hd__decap_3 FILLER_0_9_53 (.VGND(VGND), + .VNB(VGND), + .VPB(VPWR), + .VPWR(VPWR)); + sky130_fd_sc_hd__decap_8 FILLER_0_9_57 (.VGND(VGND), + .VNB(VGND), + .VPB(VPWR), + .VPWR(VPWR)); + sky130_fd_sc_hd__decap_8 FILLER_0_9_65 (.VGND(VGND), + .VNB(VGND), + .VPB(VPWR), + .VPWR(VPWR)); + sky130_fd_sc_hd__decap_8 FILLER_0_9_73 (.VGND(VGND), + .VNB(VGND), + .VPB(VPWR), + .VPWR(VPWR)); +endmodule diff --git a/tests/2038-lvs_good/issue_regression.py b/tests/2038-lvs_good/issue_regression.py new file mode 100644 index 000000000..5df3fcf4d --- /dev/null +++ b/tests/2038-lvs_good/issue_regression.py @@ -0,0 +1,25 @@ +import os +import sys +import glob +import subprocess + +args = sys.argv[1:] + +run_folder = args[0] + +log_path = glob.glob( + os.path.join(run_folder, "reports", "signoff", "*-inverter.lvs.rpt") +) +assert len(log_path) != 0, "LVS report file not found" +assert len(log_path) == 1, "Multiple LVS report files found" +assert ( + subprocess.call( + [ + "grep", + "-i", + "Total errors = 0", + log_path[0], + ] + ) + == 0 +), "Unexpected LVS error count" diff --git a/tests/2038-lvs_good_lefdef/config.json b/tests/2038-lvs_good_lefdef/config.json new file mode 120000 index 000000000..9c36a1a6c --- /dev/null +++ b/tests/2038-lvs_good_lefdef/config.json @@ -0,0 +1 @@ +../2038-lvs_good/config.json \ No newline at end of file diff --git a/tests/2038-lvs_good_lefdef/interactive.tcl b/tests/2038-lvs_good_lefdef/interactive.tcl new file mode 100644 index 000000000..12fc6b916 --- /dev/null +++ b/tests/2038-lvs_good_lefdef/interactive.tcl @@ -0,0 +1,10 @@ +package require openlane; + +prep -design $::env(TEST_DIR) {*}$argv + +set ::env(CURRENT_DEF) $::env(TEST_DIR)/inverter.def +set ::env(CURRENT_GDS) $::env(TEST_DIR)/inverter.gds +set ::env(CURRENT_POWERED_NETLIST) $::env(TEST_DIR)/inverter.pnl.v + +run_magic_spice_export +run_lvs \ No newline at end of file diff --git a/tests/2038-lvs_good_lefdef/inverter.def b/tests/2038-lvs_good_lefdef/inverter.def new file mode 120000 index 000000000..60c234229 --- /dev/null +++ b/tests/2038-lvs_good_lefdef/inverter.def @@ -0,0 +1 @@ +../2038-lvs_good/inverter.def \ No newline at end of file diff --git a/tests/2038-lvs_good_lefdef/inverter.gds b/tests/2038-lvs_good_lefdef/inverter.gds new file mode 120000 index 000000000..93511d962 --- /dev/null +++ b/tests/2038-lvs_good_lefdef/inverter.gds @@ -0,0 +1 @@ +../2038-lvs_good/inverter.gds \ No newline at end of file diff --git a/tests/2038-lvs_good_lefdef/inverter.pnl.v b/tests/2038-lvs_good_lefdef/inverter.pnl.v new file mode 120000 index 000000000..6e91a09eb --- /dev/null +++ b/tests/2038-lvs_good_lefdef/inverter.pnl.v @@ -0,0 +1 @@ +../2038-lvs_good/inverter.pnl.v \ No newline at end of file diff --git a/tests/2038-lvs_good_lefdef/issue_regression.py b/tests/2038-lvs_good_lefdef/issue_regression.py new file mode 120000 index 000000000..a0d4b858a --- /dev/null +++ b/tests/2038-lvs_good_lefdef/issue_regression.py @@ -0,0 +1 @@ +../2038-lvs_good/issue_regression.py \ No newline at end of file diff --git a/tests/912/config.tcl b/tests/912-misaligned_pins/config.tcl similarity index 100% rename from tests/912/config.tcl rename to tests/912-misaligned_pins/config.tcl diff --git a/tests/912/def_test.def b/tests/912-misaligned_pins/def_test.def similarity index 100% rename from tests/912/def_test.def rename to tests/912-misaligned_pins/def_test.def diff --git a/tests/912/issue_regression.py b/tests/912-misaligned_pins/issue_regression.py similarity index 100% rename from tests/912/issue_regression.py rename to tests/912-misaligned_pins/issue_regression.py diff --git a/tests/912/src/def_test.v b/tests/912-misaligned_pins/src/def_test.v similarity index 100% rename from tests/912/src/def_test.v rename to tests/912-misaligned_pins/src/def_test.v diff --git a/tests/__main__.py b/tests/__main__.py index 91e4e6173..02d12beb7 100755 --- a/tests/__main__.py +++ b/tests/__main__.py @@ -40,7 +40,7 @@ def rmrf(path): def get_test_cases(): test_dir = os.path.join(openlane_root, "tests") test_cases = [] - for test in os.listdir(test_dir): + for test in sorted(os.listdir(test_dir)): test_path = os.path.join(test_dir, test) if test == "__pycache__" or not os.path.isdir(test_path): continue