From 265b5680de2a9beac5bc973aec2d2da1aba02f4f Mon Sep 17 00:00:00 2001 From: Matthias Koefferlein Date: Wed, 20 Mar 2024 23:29:25 +0100 Subject: [PATCH] Added soft-connect test for valid layout --- src/lvs/unit_tests/lvsSimpleTests.cc | 6 + testdata/lvs/soft_connect2.cir | 13 ++ testdata/lvs/soft_connect2.gds | Bin 0 -> 3366 bytes testdata/lvs/soft_connect2.l2n | 213 +++++++++++++++++++++++++++ testdata/lvs/soft_connect2.lvs | 92 ++++++++++++ 5 files changed, 324 insertions(+) create mode 100644 testdata/lvs/soft_connect2.cir create mode 100644 testdata/lvs/soft_connect2.gds create mode 100644 testdata/lvs/soft_connect2.l2n create mode 100644 testdata/lvs/soft_connect2.lvs diff --git a/src/lvs/unit_tests/lvsSimpleTests.cc b/src/lvs/unit_tests/lvsSimpleTests.cc index fe7f97127..f5eb6e9f8 100644 --- a/src/lvs/unit_tests/lvsSimpleTests.cc +++ b/src/lvs/unit_tests/lvsSimpleTests.cc @@ -307,3 +307,9 @@ TEST(50_SoftConnection) run_test (_this, "soft_connect1", "soft_connect1.gds", true, false /*no LVS*/); } +// No errors +TEST(51_SoftConnection) +{ + run_test (_this, "soft_connect2", "soft_connect2.gds", true, false /*no LVS*/); +} + diff --git a/testdata/lvs/soft_connect2.cir b/testdata/lvs/soft_connect2.cir new file mode 100644 index 000000000..61ac75956 --- /dev/null +++ b/testdata/lvs/soft_connect2.cir @@ -0,0 +1,13 @@ +* Extracted by KLayout + +.SUBCKT TOP A Q VDD SUBSTRATE|VSS +X$1 SUBSTRATE|VSS VDD VDD \$1 Q SUBSTRATE|VSS INV +X$2 SUBSTRATE|VSS VDD VDD A \$1 SUBSTRATE|VSS INV +.ENDS TOP + +.SUBCKT INV \$1 \$2 \$3 \$4 \$5 SUBSTRATE +M$1 \$2 \$4 \$5 \$3 PMOS L=0.25U W=0.95U AS=0.73625P AD=0.73625P PS=3.45U ++ PD=3.45U +M$2 \$1 \$4 \$5 SUBSTRATE NMOS L=0.25U W=0.95U AS=0.73625P AD=0.73625P PS=3.45U ++ PD=3.45U +.ENDS INV diff --git a/testdata/lvs/soft_connect2.gds b/testdata/lvs/soft_connect2.gds new file mode 100644 index 0000000000000000000000000000000000000000..a223df0984e5cc8d011b00c35f4f6ec0e5ea2d35 GIT binary patch literal 3366 zcmb7{O-L0{6vxlZd(OM>`7AX*%SB2-i?9}DMj#mmNzs=N5oy_?RkUbnZFCd3Xerdf zO(wJp0wGr+5w2YXMYw3;QlgdEoBrpXInBMJZ?whhC+FVZ+^=)bOcYTVPElVFmbR!s z9n?+7X~6xPOc>o7zedziXc`%Pap~sgx7(M;R?aQHnyyh_Q)90ZMYa2*w^$_jr_<`{f_#>sp>+5+wW-`q_ z#vNimrN(Kxk&nIuaMp$K5?JT)g&J=>K6^aAFc@MFzl0jkj32q{|Feqm=i>O!Dm?6E zd`hWtrZ<1b$JpO(JIEeUIHuHi>X+sG3d#6UKcAvGTEM?M)X~Z$oa81GCwWpvEm3ZM zm?#>*J&Dt;5LMbWSE}+f`yhMv`?prM8?B6Y1T%jiJ5zotJ0sLM)AMy@HZ$W{I1zrc zSR_uEo+&lX^nBx<%+4u1e6{3i-UH)Hrh=KU5$2vLJrT4e^y4Hw)q) zd`D{I*us4)XgrK@c5yaf^(XfHOG=HK-F@bnRN#0R=Uf#(_$|Ir<4n)@DscRosJR9o ztoFfwm{Q}-wS2$4CVpjJe5J?8`G!Cym!PJm0CH z=<`JGDUReQ)$oh(Fb*c`*D3>U#M}W=X-UA&(8YQ#KRd{|F^~u@{{?)xATXu zwDU(iug)MhY@K0pec{|ua-ETOZ~ji5kUiHtIb{Cq@ik90Zo&s_6Hsqswy zWPGgg|MJJHGsrDlCzxCxcx)xt32FECPyD3L@Yr0ZxF6Rk_JtZx>(n9Y%$>XPE;jA* zUbb)I<`um9ugV9O^%Hri};&8zc;>#xc3DA@4)Ge@38E%PpsM psd, "G" => pgate, "W" => nwell, + "tS" => psd, "tD" => psd, "tG" => poly }) + +# NMOS transistor device extraction +extract_devices(mos4("NMOS"), { "SD" => nsd, "G" => ngate, "W" => bulk, + "tS" => nsd, "tD" => nsd, "tG" => poly }) + +# Define connectivity for netlist extraction + +# Inter-layer + +soft_connect(diff_cont, psd) +soft_connect(diff_cont, nsd) +soft_connect(diff_cont, ptie) +soft_connect(diff_cont, ntie) +soft_connect(ntie, nwell) +soft_connect(poly_cont, poly) + +connect(diff_cont, metal1) +connect(poly_cont, metal1) +connect(metal1, via1) +connect(via1, metal2) + +# attach labels +connect(poly, poly_lbl) +connect(metal1, metal1_lbl) +connect(metal2, metal2_lbl) + +# Global +connect_global(bulk, "SUBSTRATE") +soft_connect_global(ptie, "SUBSTRATE") + +# Netlist section (NOTE: we only check log here) +netlist + +netlist.simplify + +