Corrected the GDS read of the SRAM cell so that the weird parasitic device formed between DIFF and TAP under a grounded gate is interpreted as type npd, which is the type that has a model that supposedly is for this device. I attempted to add extraction methods specifically for the parasitic MOScap-type devices in the SRAM cell. Both now generate error messages when extracting. The DIFF/TAP-under-gate device now extracts with the correct length and width. The pFET MOScap has the correct width but not length (probably counting the sides).
diff --git a/sky130/magic/sky130.tech b/sky130/magic/sky130.tech index 415a40e..6a1f4ec 100644 --- a/sky130/magic/sky130.tech +++ b/sky130/magic/sky130.tech
@@ -2286,7 +2286,7 @@ and DNWELL labels PWRES - templayer ndiffarea DIFF,DIFFTXT,DIFFPIN + templayer ndiffarea DIFF,DIFFTXT,DIFFPIN,barediff and-not POLY and-not NWELL and-not PSDM @@ -2311,7 +2311,7 @@ templayer xndifcheck ndifcheck copyup ndifcheck - templayer mvndiffarea DIFF,DIFFTXT,DIFFPIN + templayer mvndiffarea DIFF,DIFFTXT,DIFFPIN,barediff and-not POLY and-not NWELL and-not PSDM @@ -2335,7 +2335,7 @@ templayer mvxndifcheck mvndifcheck copyup mvndifcheck - layer ndiode DIFF + layer ndiode DIFF,barediff and NSDM and DIODE and-not NWELL @@ -2345,7 +2345,7 @@ and-not LVTN labels DIFF - layer ndiodelvt DIFF + layer ndiodelvt DIFF,barediff and NSDM and DIODE and-not NWELL @@ -2366,7 +2366,7 @@ and-not HVI labels DIFF - templayer pdiffarea DIFF,DIFFTXT,DIFFPIN + templayer pdiffarea DIFF,DIFFTXT,DIFFPIN,barediff and-not POLY and NWELL and-not NSDM @@ -2384,7 +2384,7 @@ layer pdiff pdiffarea - layer mvndiode DIFF + layer mvndiode DIFF,barediff and NSDM and DIODE and HVI @@ -2393,7 +2393,7 @@ and-not LVTN labels DIFF - layer nndiode DIFF + layer nndiode DIFF,barediff and NSDM and DIODE and HVI @@ -2413,7 +2413,7 @@ and HVI labels DIFF - templayer mvpdiffarea DIFF,DIFFTXT,DIFFPIN + templayer mvpdiffarea DIFF,DIFFTXT,DIFFPIN,barediff and-not POLY and NWELL and-not NSDM @@ -2436,7 +2436,7 @@ templayer xpdifcheck pdifcheck copyup pdifcheck - layer pdiode DIFF + layer pdiode DIFF,barediff and PSDM and-not POLY and-not NSDM @@ -2446,7 +2446,7 @@ and DIODE labels DIFF - layer pdiodelvt DIFF + layer pdiodelvt DIFF,barediff and PSDM and-not POLY and-not NSDM @@ -2456,7 +2456,7 @@ and DIODE labels DIFF - layer pdiodehvt DIFF + layer pdiodehvt DIFF,barediff and PSDM and-not POLY and-not NSDM @@ -2473,10 +2473,11 @@ # Define pfet areas as known pdiff, regardless of the presence of a well. - templayer pfetarea DIFF + templayer pfetarea DIFF,barediff + and POLY + or baretrans and-not NSDM and-not HVI - and POLY layer pfet pfetarea and-not LVTN @@ -2529,7 +2530,7 @@ templayer mvxpdifcheck mvpdifcheck copyup mvpdifcheck - layer mvpdiode DIFF + layer mvpdiode DIFF,barediff and PSDM and-not POLY and-not NSDM @@ -2546,10 +2547,11 @@ # regardless of the presence of a # well. - templayer mvpfetarea DIFF + templayer mvpfetarea DIFF,barediff + and POLY + or baretrans and-not NSDM and HVI - and POLY layer mvpfet mvpfetarea and-not ESDID @@ -2559,7 +2561,7 @@ and ESDID labels DIFF - layer pdiff DIFF,DIFFTXT,DIFFPIN + layer pdiff DIFF,DIFFTXT,DIFFPIN,barediff and-not NSDM and-not POLY and-not HVI @@ -2579,8 +2581,9 @@ and-not HVI labels DIFF - layer nfet DIFF + layer nfet DIFF,barediff and POLY + or baretrans and-not PSDM and NSDM and-not HVI @@ -2590,8 +2593,9 @@ and-not COREID labels DIFF - layer scnfet DIFF + layer scnfet DIFF,barediff and POLY + or baretrans and-not PSDM and NSDM and-not NWELL @@ -2601,16 +2605,18 @@ and STDCELL labels DIFF - layer npass DIFF + layer npass DIFF,barediff and POLY + or baretrans and-not PSDM and NSDM and-not NWELL and COREID labels DIFF - layer npd DIFF + layer npd DIFF,barediff and POLY + or baretrans and-not PSDM and NSDM and-not NWELL @@ -2620,17 +2626,30 @@ grow 70 labels DIFF - layer nfetlvt DIFF + # Devices abutting tap under gate are officially npd, not npass + layer npd TAP + grow 100 + and DIFF and POLY and-not PSDM and NSDM + and-not NWELL + and COREID + labels DIFF + + layer nfetlvt DIFF,barediff + and POLY + or baretrans + and-not PSDM + and NSDM and-not HVI and LVTN and-not SONOS labels DIFF - layer nsonos DIFF + layer nsonos DIFF,barediff and POLY + or baretrans and-not PSDM and NSDM and-not HVI @@ -2698,7 +2717,7 @@ templayer psdexpand psdarea grow 500 - layer mvpdiff DIFF,DIFFTXT,DIFFPIN + layer mvpdiff DIFF,DIFFTXT,DIFFPIN,barediff and-not NSDM and-not POLY and HVI @@ -2718,24 +2737,27 @@ and-not mvrdpioedge labels DIFF - templayer mvnfetarea DIFF + templayer mvnfetarea DIFF,barediff and POLY + or baretrans and-not PSDM and NSDM and-not LVTN and HVI grow 350 - templayer mvnnfetarea DIFF,TAP + templayer mvnnfetarea DIFF,TAP,barediff and POLY + or baretrans and-not PSDM and NSDM and LVTN and HVI and-not mvnfetarea - layer mvnfetesd DIFF + layer mvnfetesd DIFF,barediff and POLY + or baretrans and-not PSDM and NSDM and HVI @@ -2743,8 +2765,9 @@ and-not mvnnfetarea labels DIFF - layer mvnfet DIFF + layer mvnfet DIFF,barediff and POLY + or baretrans and-not PSDM and NSDM and HVI @@ -2779,7 +2802,7 @@ templayer mvxnsubcheck mvnsubcheck copyup mvnsubcheck - templayer mvpsdarea DIFF + templayer mvpsdarea DIFF,barediff and PSDM and-not NWELL and-not POLY @@ -2934,10 +2957,12 @@ labels POLY templayer ndcbase CONT + or barecont + and LI + or licont and DIFF and NSDM and-not NWELL - and LI and-not HVI layer ndc ndcbase @@ -2949,10 +2974,12 @@ labels CONT templayer nscbase CONT + or barecont + and LI + or licont and DIFF,TAP and NSDM and NWELL - and LI and-not HVI layer nsc nscbase @@ -2964,10 +2991,12 @@ labels CONT templayer pdcbase CONT + or barecont + and LI + or licont and DIFF and PSDM and NWELL - and LI and-not HVI layer pdc pdcbase @@ -2979,10 +3008,12 @@ labels CONT templayer pdcnowell CONT + or barecont + and LI + or licont and DIFF and PSDM and pfetexpand - and LI and-not HVI layer pdc pdcnowell @@ -2994,11 +3025,13 @@ labels CONT templayer pscbase CONT + or barecont + and LI + or licont and DIFF,TAP and PSDM and-not NWELL and-not pfetexpand - and LI and-not HVI layer psc pscbase @@ -3010,10 +3043,12 @@ labels CONT templayer pcbase CONT + or barecont + and LI + or licont and POLY and-not DIFF and-not RPM,URPM - and LI layer pc pcbase grow 85 @@ -3024,6 +3059,9 @@ labels CONT templayer ndicbase CONT + or barecont + and LI + or licont and DIFF and NSDM and DIODE @@ -3041,6 +3079,9 @@ labels CONT templayer ndilvtcbase CONT + or barecont + and LI + or licont and DIFF and NSDM and DIODE @@ -3058,6 +3099,9 @@ labels CONT templayer pdicbase CONT + or barecont + and LI + or licont and DIFF and PSDM and DIODE @@ -3076,6 +3120,9 @@ labels CONT templayer pdilvtcbase CONT + or barecont + and LI + or licont and DIFF and PSDM and DIODE @@ -3094,6 +3141,9 @@ labels CONT templayer pdihvtcbase CONT + or barecont + and LI + or licont and DIFF and PSDM and DIODE @@ -3112,10 +3162,12 @@ labels CONT templayer mvndcbase CONT + or barecont + and LI + or licont and DIFF and NSDM and-not NWELL - and LI and HVI layer mvndc mvndcbase @@ -3127,10 +3179,12 @@ labels CONT templayer mvnscbase CONT + or barecont + and LI + or licont and DIFF,TAP and NSDM and NWELL - and LI and HVI layer mvnsc mvnscbase @@ -3142,10 +3196,12 @@ labels CONT templayer mvpdcbase CONT + or barecont + and LI + or licont and DIFF and PSDM and NWELL - and LI and HVI layer mvpdc mvpdcbase @@ -3157,6 +3213,9 @@ labels CONT templayer mvpdcnowell CONT + or barecont + and LI + or licont and DIFF and PSDM and mvpfetexpand @@ -3172,11 +3231,13 @@ labels CONT templayer mvpscbase CONT + or barecont + and LI + or licont and DIFF,TAP and PSDM and-not NWELL and-not mvpfetexpand - and LI and HVI layer mvpsc mvpscbase @@ -3188,6 +3249,9 @@ labels CONT templayer mvndicbase CONT + or barecont + and LI + or licont and DIFF and NSDM and DIODE @@ -3205,6 +3269,9 @@ labels CONT templayer nndicbase CONT + or barecont + and LI + or licont and DIFF and NSDM and DIODE @@ -3222,6 +3289,9 @@ labels CONT templayer mvpdicbase CONT + or barecont + and LI + or licont and DIFF and PSDM and DIODE @@ -3458,14 +3528,14 @@ and-not PSDM and-not NSDM and POLY - copyup DIFF,POLY + copyup baretrans templayer gendiff DIFF,TAP and-not PSDM and-not NSDM and-not POLY and-not COREID - copyup DIFF + copyup barediff # Handle contacts found by copyup @@ -3638,7 +3708,7 @@ and-not mvnsubcheck and-not mvpsubcheck and-not CORELI - copyup CONT,LI + copyup barelicont templayer barecont CONT and-not LI @@ -3647,7 +3717,7 @@ and-not mvnsubcheck and-not mvpsubcheck and-not CORELI - copyup CONT + copyup barecont layer glass GLASS,PADTXT,PADPIN labels GLASS @@ -5091,6 +5161,9 @@ device msubcircuit sky130_fd_pr__special_pfet_pass ppu \ *pdiff,pdiffres *pdiff,pdiffres nwell error l=l w=w \ a1=as p1=ps a2=ad p2=pd + device msubcircuit sky130_fd_pr__special_pfet_pass ppu 1 \ + *pdiff,pdiffres nwell error l=l w=w \ + a1=as p1=ps a2=ad p2=pd device msubcircuit sky130_fd_pr__pfet_01v8_lvt pfetlvt \ *pdiff,pdiffres *pdiff,pdiffres nwell error l=l w=w \ a1=as p1=ps a2=ad p2=pd @@ -5107,6 +5180,9 @@ device msubcircuit sky130_fd_pr__special_nfet_latch npd \ *ndiff,ndiffres *ndiff,ndiffres pwell,space/w error l=l w=w \ a1=as p1=ps a2=ad p2=pd + device msubcircuit sky130_fd_pr__special_nfet_latch npd \ + *ndiff,ndiffres *srampvar pwell,space/w error l=l w=w \ + a1=as p1=ps a2=ad p2=pd device msubcircuit sky130_fd_pr__special_nfet_pass npass \ *ndiff,ndiffres *ndiff,ndiffres pwell,space/w error l=l w=w \ a1=as p1=ps a2=ad p2=pd