blob: 09f8e96de9106ef76b542d2613ec6f1980b2d253 [file] [log] [blame]
// ********************************************************
// Copyright (c) 2020 by SkyWater Technology
// SkyWater Confidential Information
// ********************************************************
////////////////////////////////////////////////////////////////////////////////
//
// =========================
// Comments / Update Section
// =========================
//
// ========== ======== ========================================================
// Date Modifier Notes
// ========== ======== ========================================================
// 3/09/2020 JAG Totally revamped LVS rules file for S130 process
// 7/21/2020 JAG Added connection from M5 to RDL
// 8/12/2020 JAG Changed LVS RECOGNIZE GATES TO NONE
// 8/19/2020 RY Add PEX commands enclosed in a PEX switch
// 8/26/2020 RY Removed unnecessary commands from the Connect
// definition section
// 8/28/2020 JAG Added 20v drn extended devices and removed copy connects
// 8/31/2020 JAG Finished 20v nmos drn ext iso
// 9/11/2020 JAG Added ptub recognition/devices for rpoly_hp/rpoly_hs
// Added ptub recognition/devices for rndiff/rndiff_5v
// 9/17/2020 JAG Added logic for breaking up pwell by substrateCut
// 9/18/2020 JAG Changed pwell to pwell_all for all devices and removed
// text/drawing and pwelltt from label deck
// to make areaid/substrateCut work for all devices
// 9/22/2020 JAG Removed PORT LAYER POLYGON commands - unneeded and
// causes issues per SS
// JAG Redefined pwell_all as NOT ptub
// 9/23/2020 JAG Re-enabled pwell pins and labels as ports
// 9/24/2020 JAG Added LAYOUT INPUT EXCEPTION SEVERITY METRIC_RULE_FILE
// to prevent warning in transcript window
// 9/28/2020 JAG Added support for diff pins and labels
// 10/12/2020 RY Removed the PRECISION 1000 command and replaced it with
// LAYOUT USE DATABASE PRECISION YES and LVS REPORT UNITS
// NO commands
// 10/21/2020 JAG Changed serp. resistor calculation to increase accuracy
// of L extraction
// 11/10/2020 JAG Added fuse as a resistor
//
// -----
// Q4.02
// -----
// 12/01/2020 JAG Changed via to via1, li1 to li, licon1 to licon
// 12/18/2020 JAG Added device remove in LVS_exclude/dwg shapes
// 01/08/2021 JAG Changed model name of li res to rli (from rl1)
// 01/12/2021 JAG Or'd in _fill layers to diff, poly, li and m1-5
// keeping it connectivity for QRC/PEX
// but remove it from device recognition for LVS
// 02/19/2021 JAG Rewrote pwell_all after finding issues in IO LIB
// 02/21/2021 JAG Added nmos_esd 1.8v device
// JAG Changed definition of gate to use poly/gate layer
// when present.
// 03/02/2021 JAG Increased upad_rec size down/up value from 2 to 3 to ensure
// to remove corner chamfers
//
// 03/16/2021 JAG Updated pnp/npn recognition to handle shared collectors
// 03/21/2021 JAG Added difftt to TEXT LAYER statement
// 03/28/2021 RY Renamed the perimeter parameter name for all bipolar
// devices from 'pj' to 'p'
// 04/04/2021 RY Removed PEX switch and block of code
//
// 06/15/2021 JAG Added "INNER" to several HOLE satements to account
// for ptub formation in dnwell in nwell holes which
// have one or more nwell guard bands surrouding them.
// 07/02/2021 JAG Fuse is no longer suported but left in LVS code
////////////////////////////////////////////////////////////////////////////////
// ********************************************************
// Begin control statements
// ********************************************************
LVS SPICE ALLOW Unquoted Strings YES
LAYOUT ALLOW DUPLICATE CELL YES
LAYOUT INPUT EXCEPTION SEVERITY DUPLICATE_CELL 3
LAYOUT USE DATABASE PRECISION YES
LVS REPORT UNITS NO
UNIT LENGTH m
LAYOUT INPUT EXCEPTION SEVERITY METRIC_RULE_FILE 0
SOURCE SYSTEM SPICE
MASK SVDB DIRECTORY "svdb" QUERY XRC CCI NOPINLOC IXF NXF SLPH
LVS REPORT OPTION NONE
LVS REPORT MAXIMUM 50
LVS RECOGNIZE GATES NONE
LVS ABORT ON SOFTCHK NO
LVS ABORT ON SUPPLY ERROR YES
LVS IGNORE PORTS NO
LVS SHOW SEED PROMOTIONS NO
LVS SHOW SEED PROMOTIONS MAXIMUM 50
LVS CHECK PORT NAMES YES
LVS ISOLATE SHORTS NO
VIRTUAL CONNECT COLON NO
VIRTUAL CONNECT REPORT NO
// ********************************************************
// End control statements
// ********************************************************
// ********************************************************
// Begin filter statements
// ********************************************************
// insert required filter options here (such as Dpar when added)
LVS FILTER icecap OPEN SOURCE
// ********************************************************
// END filter statements
// ********************************************************
// ********************************************************
// Begin layer definitions
// ********************************************************
LAYER nwell_i 1000
LAYER MAP 64 DATATYPE 20 1000 // nwell drawing
////LAYER tunm 1001
//// LAYER MAP 80 DATATYPE 20 1001 // tunm drawing
LAYER diff_i 1002
LAYER MAP 65 DATATYPE 20 1002 // diff drawing
LAYER poly_i 1004
LAYER MAP 66 DATATYPE 20 1004 // poly drawing
LAYER lvtn_i 1005
LAYER MAP 125 DATATYPE 44 1005 // lvtn drawing
LAYER hvtp_i 1006
LAYER MAP 78 DATATYPE 44 1006 // hvtp drawing
LAYER npc_i 1007
LAYER MAP 95 DATATYPE 20 1007 // npc drawing
LAYER nsdm_i 1008
LAYER MAP 93 DATATYPE 44 1008 // nsdm drawing
LAYER psdm_i 1009
LAYER MAP 94 DATATYPE 20 1009 // psdm drawing
LAYER mcon_i 1010
LAYER MAP 67 DATATYPE 44 1010 // mcon drawing
LAYER met1_i 1011
LAYER MAP 68 DATATYPE 20 1011 // met1 drawing
LAYER m1res_i 1212
LAYER MAP 68 DATATYPE 13 1212 // met1 res
LAYER via1_i 1012
LAYER MAP 68 DATATYPE 44 1012 // via1 drawing
LAYER met2_i 1013
LAYER MAP 69 DATATYPE 20 1013 // met2 drawing
LAYER m2res_i 1214
LAYER MAP 69 DATATYPE 13 1214 // met2 res
LAYER via2_i 1014
LAYER MAP 69 DATATYPE 44 1014 // via2 drawing
LAYER met3_i 1015
LAYER MAP 70 DATATYPE 20 1015 // met3 drawing
LAYER m3res_i 1216
LAYER MAP 70 DATATYPE 13 1216 // met3 res
LAYER via3i_i 1016
LAYER MAP 70 DATATYPE 44 1016 // via3 drawing
LAYER met4_i 1017
LAYER MAP 71 DATATYPE 20 1017 // met4 drawing
LAYER m4res_i 1218
LAYER MAP 71 DATATYPE 13 1218 // met4 res
LAYER via4i_i 1018
LAYER MAP 71 DATATYPE 44 1018 // via4 drawing
LAYER met5_i 1019
LAYER MAP 72 DATATYPE 20 1019 // met5 drawing
LAYER m5res_i 1220
LAYER MAP 72 DATATYPE 13 1220 // met5 res
LAYER pad_i 1020
LAYER MAP 76 DATATYPE 20 1020 // pad drawing
LAYER licon_i 1021
LAYER MAP 66 DATATYPE 44 1021 // licon drawing
LAYER li_ii 1022
LAYER MAP 67 DATATYPE 20 1022 // li drawing
LAYER lires_i 1223
LAYER MAP 67 DATATYPE 13 1223 // li res
LAYER pnp_i 1023
LAYER MAP 82 DATATYPE 44 1023 // pnp drawing
LAYER npn_i 1024
LAYER MAP 82 DATATYPE 20 1024 // npn drawing
LAYER v5_i 1025
LAYER MAP 75 DATATYPE 20 1025 // hvi drawing
LAYER ldntm_i 1026
LAYER MAP 11 DATATYPE 44 1026 // ldntm drawing
LAYER capacitor_i 1027
LAYER MAP 82 DATATYPE 64 1027 // capacitor drawing
LAYER ncm_i 1028
LAYER MAP 92 DATATYPE 44 1028 // ncm drawing
LAYER rdl_i 1029
LAYER MAP 74 DATATYPE 20 1029 // rdl drawing
LAYER rpm_i 1030
LAYER MAP 86 DATATYPE 20 1030 // rpm drawing
LAYER inductor_i 1031
LAYER MAP 82 DATATYPE 24 1031 // inductor drawing
LAYER pmm_i 1032
LAYER MAP 85 DATATYPE 44 1032 // pmm drawing
LAYER ubm_i 1033
LAYER MAP 127 DATATYPE 21 1033 // ubm drawing
LAYER bump_i 1034
LAYER MAP 127 DATATYPE 22 1034 // bump drawing
////LAYER cviam 1035
//// LAYER MAP 105 DATATYPE 20 1035 // cviam drawing
////LAYER cmm1 1036
//// LAYER MAP 62 DATATYPE 20 1036 // cmm1 drawing
////LAYER cmm2 1037
//// LAYER MAP 105 DATATYPE 44 1037 // cmm2 drawing
////LAYER cmm3 1038
//// LAYER MAP 107 DATATYPE 20 1038 // cmm3 drawing
////LAYER metop1 1039
//// LAYER MAP 70 DATATYPE 32 1039 // met3 option1
////LAYER metop2 1040
//// LAYER MAP 70 DATATYPE 33 1040 // met3 option2
////LAYER metop3 1041
//// LAYER MAP 70 DATATYPE 34 1041 // met3 option3
////LAYER metop4 1042
//// LAYER MAP 70 DATATYPE 35 1042 // met3 option4
////LAYER metop5 1043
//// LAYER MAP 70 DATATYPE 36 1043 // met3 option5
////LAYER metop6 1044
//// LAYER MAP 70 DATATYPE 37 1044 // met3 option6
////LAYER metop7 1045
//// LAYER MAP 70 DATATYPE 38 1045 // met3 option7
////LAYER metop8 1046
//// LAYER MAP 70 DATATYPE 39 1046 // met3 option8
LAYER dnwell_i 1047
LAYER MAP 64 DATATYPE 18 1047 // dnwell drawing
LAYER DiodeID_i 1048
LAYER MAP 81 DATATYPE 23 1048 // areaid diode
LAYER ESDID_i 1049
LAYER MAP 81 DATATYPE 19 1049 // areaid esd
LAYER ENID_i 1050
LAYER MAP 81 DATATYPE 57 1050 // areaid extendedDrain
LAYER COREID_i 1051
LAYER MAP 81 DATATYPE 2 1051 // areaid core
LAYER SEALID_i 1052
LAYER MAP 81 DATATYPE 1 1052 // areaid seal
LAYER FRAMEID_i 1053
LAYER MAP 81 DATATYPE 3 1053 // areaid frame
LAYER LVID_i 1054
LAYER MAP 81 DATATYPE 60 1054 // areaid lvNative
LAYER STDCID_i 1055
LAYER MAP 81 DATATYPE 4 1055 // areaid standardc
LAYER localSub_i 1056
LAYER MAP 81 DATATYPE 53 1056 // areaid substrateCut
LAYER PHdiodeID_i 1057
LAYER MAP 81 DATATYPE 81 1057 // areaid photo
LAYER diffres_i 1060
LAYER MAP 65 DATATYPE 13 1060 // diff res
LAYER fuse_i 1062
LAYER MAP 71 DATATYPE 17 1062 // met4 fuse
LAYER padCenter_i 1063
LAYER MAP 81 DATATYPE 20 1063 // padCenter drawing
LAYER LVS_exclude 1064
LAYER MAP 84 DATATYPE 44 1064 // LVS_exclude drawing
LAYER polyres_i 1065
LAYER MAP 66 DATATYPE 13 1065 // poly res
LAYER pwres_i 1075
LAYER MAP 64 DATATYPE 13 1075 // pwell res
LAYER padtt 1077 1078
LAYER MAP 76 TEXTTYPE 20 1077 // pad drawing
LAYER MAP 76 TEXTTYPE 5 1078 // pad label
LAYER rdltt 1079 1080
LAYER MAP 74 TEXTTYPE 20 1079 // rdl drawing
LAYER MAP 74 TEXTTYPE 5 1080 // rdl label
LAYER met5tt 1082
LAYER MAP 72 TEXTTYPE 5 1082 // met5 label
LAYER met4tt 1085
LAYER MAP 71 TEXTTYPE 5 1085 // met4 label
LAYER met3tt 1088
LAYER MAP 70 TEXTTYPE 5 1088 // met3 label
LAYER met2tt 1091
LAYER MAP 69 TEXTTYPE 5 1091 // met2 label
LAYER met1tt 1094
LAYER MAP 68 TEXTTYPE 5 1094 // met1 label
LAYER litt 1097
LAYER MAP 67 TEXTTYPE 5 1097 // li label
LAYER polytt 1100
LAYER MAP 66 TEXTTYPE 5 1100 // poly label
LAYER difftt 1103
LAYER MAP 65 TEXTTYPE 6 1103 // diff label
LAYER pwelltt 1105
LAYER MAP 64 TEXTTYPE 59 1105 // pwell label
LAYER pwellisott 1106
LAYER MAP 44 TEXTTYPE 5 1106 // pwelliso label
LAYER nwelltt 1108
LAYER MAP 64 TEXTTYPE 5 1108 // nwell label
//LAYER textdraw 1110
// LAYER MAP 83 TEXTTYPE 44 1110 // text drawing
LAYER pwell_pin 1111
LAYER MAP 122 DATATYPE 16 1111 // pwell pin
LAYER pwelliso_pin 1112
LAYER MAP 44 DATATYPE 16 1112 // pwelliso pin
LAYER nwell_pin 1113
LAYER MAP 64 DATATYPE 16 1113 // nwell pin
LAYER diff_pin 1114
LAYER MAP 65 DATATYPE 16 1114 // diff pin
LAYER poly_pin 1115
LAYER MAP 66 DATATYPE 16 1115 // poly pin
LAYER li_pin 1116
LAYER MAP 67 DATATYPE 16 1116 // li pin
LAYER met1_pin 1117
LAYER MAP 68 DATATYPE 16 1117 // met1 pin
LAYER met2_pin 1118
LAYER MAP 69 DATATYPE 16 1118 // met2 pin
LAYER met3_pin 1119
LAYER MAP 70 DATATYPE 16 1119 // met3 pin
LAYER met4_pin 1120
LAYER MAP 71 DATATYPE 16 1120 // met4 pin
LAYER met5_pin 1121
LAYER MAP 72 DATATYPE 16 1121 // met5 pin
LAYER rdl_pin 1122
LAYER MAP 74 DATATYPE 16 1122 // rdl pin
LAYER pad_pin 1123
LAYER MAP 76 DATATYPE 16 1123 // pad pin
LAYER pwellpt_i 1124
LAYER MAP 122 TEXTTYPE 16 1124 // pwell pin
LAYER MAP 122 TEXTTYPE 0 1124 // pwell pin
LAYER pwellisopt_i 1125
LAYER MAP 44 TEXTTYPE 16 1125 // pwelliso pin
LAYER MAP 44 TEXTTYPE 0 1125 // pwelliso pin
LAYER nwellpt_i 1126
LAYER MAP 64 TEXTTYPE 16 1126 // nwell pin
LAYER MAP 64 TEXTTYPE 0 1126 // nwell pin
LAYER diffpt_i 1127
LAYER MAP 65 TEXTTYPE 16 1127 // diff pin
LAYER MAP 65 TEXTTYPE 0 1127 // diff pin
LAYER polypt_i 1128
LAYER MAP 66 TEXTTYPE 16 1128 // poly pin
LAYER MAP 66 TEXTTYPE 0 1128 // poly pin
LAYER lipt_i 1129
LAYER MAP 67 TEXTTYPE 16 1129 // li pin
LAYER MAP 67 TEXTTYPE 0 1129 // li pin
LAYER met1pt_i 1130
LAYER MAP 68 TEXTTYPE 16 1130 // met1 pin
LAYER MAP 68 TEXTTYPE 0 1130 // met1 pin
LAYER met2pt_i 1131
LAYER MAP 69 TEXTTYPE 16 1131 // met2 pin
LAYER MAP 69 TEXTTYPE 0 1131 // met2 pin
LAYER met3pt_i 1132
LAYER MAP 70 TEXTTYPE 16 1132 // met3 pin
LAYER MAP 70 TEXTTYPE 0 1132 // met3 pin
LAYER met4pt_i 1133
LAYER MAP 71 TEXTTYPE 16 1133 // met4 pin
LAYER MAP 71 TEXTTYPE 0 1133 // met4 pin
LAYER met5pt_i 1134
LAYER MAP 72 TEXTTYPE 16 1134 // met5 pin
LAYER MAP 72 TEXTTYPE 0 1134 // met5 pin
LAYER rdlpt_i 1135
LAYER MAP 74 TEXTTYPE 16 1135 // rdl pin
LAYER MAP 74 TEXTTYPE 0 1135 // rdl pin
LAYER padpt_i 1136
LAYER MAP 76 TEXTTYPE 16 1136 // pad pin
LAYER MAP 76 TEXTTYPE 0 1136 // pad pin
////LAYER met5probe 1137
//// LAYER MAP 72 TEXTTYPE 25 1137 // met5 probe
////LAYER met4probe 1138
//// LAYER MAP 71 TEXTTYPE 25 1138 // met4 probe
////LAYER met3probe 1139
//// LAYER MAP 70 TEXTTYPE 25 1139 // met3 probe
////LAYER met2probe 1140
//// LAYER MAP 69 TEXTTYPE 25 1140 // met2 probe
////LAYER met1probe 1141
//// LAYER MAP 68 TEXTTYPE 25 1141 // met1 probe
////LAYER liprobe 1142
//// LAYER MAP 67 TEXTTYPE 25 1142 // li probe
////LAYER polyprobe 1143
//// LAYER MAP 66 TEXTTYPE 25 1143 // poly probe
////LAYER fomWaffDrop 1152
//// LAYER MAP 22 DATATYPE 24 1152 // cfom waffleDrop
LAYER moduleCutAREA_i 1153
LAYER MAP 81 DATATYPE 10 1153 // areaid moduleCut
LAYER indLabel_i 1154
LAYER MAP 82 TEXTTYPE 25 1154 // inductor label
LAYER indTerm1_i 1155
LAYER MAP 82 DATATYPE 26 1155 // inductor term1
LAYER indTerm2_i 1156
LAYER MAP 82 DATATYPE 27 1156 // inductor term2
LAYER indTerm3_i 1157
LAYER MAP 82 DATATYPE 28 1157 // inductor term3
LAYER capm_i 1158
LAYER MAP 89 DATATYPE 44 1158 // capm drawing
LAYER cap2m_i 1159
LAYER MAP 97 DATATYPE 44 1159 // cap2m drawing
LAYER urpm_i 1160
LAYER MAP 79 DATATYPE 20 1160 // urpm drawing
LAYER EXTDRAIN20_i 1161
LAYER MAP 81 DATATYPE 58 1161 // extd20v drawing
LAYER pwbm_i 1162
LAYER MAP 19 DATATYPE 44 1162 // pwbm drawing
LAYER pwde_i 1163
LAYER MAP 124 DATATYPE 20 1163 // pwbm drawing
LAYER LOWVTID_i 1164
LAYER MAP 81 DATATYPE 108 1164 // areaid low_vt drawing
LAYER v20_i 1165
LAYER MAP 74 DATATYPE 22 1165 // uhvi drawing
LAYER v12_i 1166
LAYER MAP 74 DATATYPE 21 1166 // uhvi drawing
LAYER padLength_i 1167
LAYER MAP 81 DATATYPE 67 1167 // pad length marker
LAYER etest_i 1168
LAYER MAP 81 DATATYPE 101 1168 // pad e_test marker
LAYER thkox_i 1169
LAYER MAP 75 DATATYPE 21 1169 // thick oxide
LAYER poly_fill 1170
LAYER MAP 66 DATATYPE 99 1170 // poly fill
LAYER diff_fill 1171
LAYER MAP 65 DATATYPE 99 1171 // diff fill
LAYER li_fill 1172
LAYER MAP 67 DATATYPE 99 1172 // li fill
LAYER met1_fill 1173
LAYER MAP 68 DATATYPE 99 1173 // met1 fill
LAYER met2_fill 1174
LAYER MAP 69 DATATYPE 99 1174 // met2 fill
LAYER met3_fill 1175
LAYER MAP 70 DATATYPE 99 1175 // met3 fill
LAYER met4_fill 1176
LAYER MAP 71 DATATYPE 99 1176 // met4 fill
LAYER met5_fill 1177
LAYER MAP 72 DATATYPE 99 1177 // met5 fill
LAYER poly_gate 1178
LAYER MAP 66 DATATYPE 9 1178 // poly_gate
boundary = EXTENT DRAWN ORIGINAL
LAYOUT BASE LAYER diff_i poly_i pnp_i npn_i nsdm_i psdm_i thkox_i v5_i v12_i v20_i lvtn_i hvtp_i
// ********************************************************
// End layer definitions
// ********************************************************
// ********************************************************
// Remove "LVS_exclude" from layer definitions:
// ********************************************************
nwell = nwell_i NOT LVS_exclude
diff = (diff_i NOT LVS_exclude) OR diff_fill
poly = (poly_i NOT LVS_exclude) OR poly_fill
lvtn = lvtn_i NOT LVS_exclude
hvtp = hvtp_i NOT LVS_exclude
npc = npc_i NOT LVS_exclude
nsdm = nsdm_i NOT LVS_exclude
psdm = psdm_i NOT LVS_exclude
mcon = mcon_i NOT LVS_exclude
met1 = (met1_i NOT LVS_exclude) NOT met1_fill
m1res = m1res_i NOT LVS_exclude
via1 = via1_i NOT LVS_exclude
met2 = (met2_i NOT LVS_exclude) NOT met2_fill
m2res = m2res_i NOT LVS_exclude
via2 = via2_i NOT LVS_exclude
met3 = (met3_i NOT LVS_exclude) NOT met3_fill
m3res = m3res_i NOT LVS_exclude
via3i = via3i_i NOT LVS_exclude
met4 = (met4_i NOT LVS_exclude) NOT met4_fill
m4res = m4res_i NOT LVS_exclude
via4i = via4i_i NOT LVS_exclude
met5 = (met5_i NOT LVS_exclude) NOT met5_fill
m5res = m5res_i NOT LVS_exclude
pad = pad_i NOT LVS_exclude
licon = licon_i NOT LVS_exclude
li_i = (li_ii NOT LVS_exclude) OR li_fill
lires = (lires_i NOT LVS_exclude) NOT li_fill
pnp = pnp_i NOT LVS_exclude
npn = npn_i NOT LVS_exclude
v5 = v5_i NOT LVS_exclude
ldntm = ldntm_i NOT LVS_exclude
capacitor = capacitor_i NOT LVS_exclude
ncm = ncm_i NOT LVS_exclude
rdl = rdl_i NOT LVS_exclude
rpm = rpm_i NOT LVS_exclude
inductor = inductor_i NOT LVS_exclude
pmm = pmm_i NOT LVS_exclude
ubm = ubm_i NOT LVS_exclude
bump = bump_i NOT LVS_exclude
dnwell = dnwell_i NOT LVS_exclude
DiodeID = DiodeID_i NOT LVS_exclude
ESDID = ESDID_i NOT LVS_exclude
ENID = ENID_i NOT LVS_exclude
COREID = COREID_i NOT LVS_exclude
SEALID = SEALID_i NOT LVS_exclude
FRAMEID = FRAMEID_i NOT LVS_exclude
LVID = LVID_i NOT LVS_exclude
STDCID = STDCID_i NOT LVS_exclude
localSub = localSub_i NOT LVS_exclude
PHdiodeID = PHdiodeID_i NOT LVS_exclude
diffres = diffres_i NOT LVS_exclude
fuse = fuse_i NOT LVS_exclude
padCenter = padCenter_i NOT LVS_exclude
polyres = polyres_i NOT LVS_exclude
pwres = pwres_i NOT LVS_exclude
pwellpt = pwellpt_i NOT LVS_exclude
pwellisopt = pwellisopt_i NOT LVS_exclude
nwellpt = nwellpt_i NOT LVS_exclude
diffpt = diffpt_i NOT LVS_exclude
polypt = polypt_i NOT LVS_exclude
lipt = lipt_i NOT LVS_exclude
met1pt = met1pt_i NOT LVS_exclude
met2pt = met2pt_i NOT LVS_exclude
met3pt = met3pt_i NOT LVS_exclude
met4pt = met4pt_i NOT LVS_exclude
met5pt = met5pt_i NOT LVS_exclude
rdlpt = rdlpt_i NOT LVS_exclude
padpt = padpt_i NOT LVS_exclude
moduleCutAREA = moduleCutAREA_i NOT LVS_exclude
indLabel = indLabel_i NOT LVS_exclude
indTerm1 = indTerm1_i NOT LVS_exclude
indTerm2 = indTerm2_i NOT LVS_exclude
indTerm3 = indTerm3_i NOT LVS_exclude
capm = capm_i NOT LVS_exclude
cap2m = cap2m_i NOT LVS_exclude
urpm = urpm_i NOT LVS_exclude
EXTDRAIN20 = EXTDRAIN20_i NOT LVS_exclude
pwbm = pwbm_i NOT LVS_exclude
pwde = pwde_i NOT LVS_exclude
LOWVTID = LOWVTID_i NOT LVS_exclude
v20 = v20_i NOT LVS_exclude
v12 = v12_i NOT LVS_exclude
padLength = padLength_i NOT LVS_exclude
etest = etest_i NOT LVS_exclude
thkox = thkox_i NOT LVS_exclude
// ********************************************************
// Begin layer boolean operations
// ********************************************************
// PAD:
// BOND PAD:
pad_rec1 = (pad AND met5) NOT etest
pad_rec2 = SIZE pad_rec1 BY -20
pad_rec = SIZE pad_rec2 BY 20
// MICRO-PROBE PAD:
upad_rec0 = pad WITH TEXT "u-test"
upad_rec1 = (upad_rec0 AND met5) AND etest
upad_rec2 = SIZE upad_rec1 BY -3
upad_rec = SIZE upad_rec2 BY 3
// ETEST PROBE PAD:
epad_rec0 = pad WITH TEXT "e-test"
epad_rec1 = (epad_rec0 AND met5) AND etest
epad_rec2 = SIZE epad_rec1 BY -15
epad_rec = SIZE epad_rec2 BY 15
// WELLS:
substrateCutDonut1 = SIZE localSub BY 0.005
substrateCutDonut2 = SIZE localSub BY -0.005
substrateCutDonut = substrateCutDonut1 NOT substrateCutDonut2
pwell = (boundary NOT (localSub OR nwell)) NOT (OR ((HOLES nwell) AND dnwell) substrateCutDonut)
ptub_a = (SIZE ((HOLES nwell INNER) AND dnwell) BY -0.005) NOT (OR pwres pwell pwbm)
ptub_b = SIZE ((SIZE ((HOLES nwell INNER) AND dnwell) BY -0.005) NOT pwell) BY 0.005 // for sub diode of pwres
ptub_c = (SIZE ((SIZE ((HOLES nwell INNER) AND dnwell) BY -0.005) NOT (OR pwres pwell)) BY 0.005) NOT pwres // for sub diode of pwres
ptub_in_pwres = SIZE ((((HOLES nwell INNER) AND dnwell) INTERACT pwres) NOT (diff INTERACT pwres)) BY 0.005
ptub = COPY ptub_a
"debug.ptub" {COPY ptub}
"debug.nwell.holes" {COPY (HOLES nwell) }
//pwell_all_a = (boundary NOT (OR ptub substrateCutDonut)) OR ptub
pwell_all_a = (SIZE boundary BY 0.005) NOT substrateCutDonut
pwell_all = pwell_all_a NOT ptub
//pwell_all = ptub OR ((boundary INTERACT substrateCutDonut) NOT substrateCutDonut)
// TAPS:
ptubtap_1 = (diff and psdm) AND (ptub NOT nwell)
ptap_1 = ((((diff AND psdm) NOT nwell) NOT ptub) NOT ptubtap) NOT pwbm
ntap_1 = (diff AND nsdm) AND nwell
// MOS:
nsd1 = ((diff and nsdm) NOT nwell) NOT gate
psd1 = ((diff and psdm) AND nwell) NOT gate
// for IO libs with chamferred poly over diff:
//gate = diff AND poly
gate = diff AND ((poly NOT INTERACT poly_gate) OR (poly AND poly_gate))
// nominal (1.8v) ngate:
ngate_nom_pw = ((gate AND nsdm) AND pwell_all) NOT (OR diff_fill poly_fill v5 v12 v20 lvtn ESDID LVID npn pnp thkox)
ngate_nom_pt = ((gate AND nsdm) AND ptub) NOT (OR diff_fill poly_fill v5 v12 v20 lvtn ESDID LVID npn pnp thkox)
// nominal (1.8v) esd ngate:
ngate_nom_esd_pt = (((((gate AND nsdm) NOT v5) AND ESDID) AND ptub) NOT thkox) NOT (OR diff_fill poly_fill v12 v20 lvtn LVID pnp npn)
ngate_nom_esd_pw = (((((gate AND nsdm) NOT v5) AND ESDID) AND pwell_all) NOT thkox) NOT (OR diff_fill poly_fill v12 v20 lvtn LVID pnp npn)
// low voltage threshold ngate:
ngate_lvt_pw = (((gate AND nsdm) AND lvtn) AND pwell_all) NOT (OR diff_fill poly_fill v5 v12 v20 ESDID LVID npn pnp thkox)
ngate_lvt_pt = (((gate AND nsdm) AND lvtn) AND ptub) NOT (OR diff_fill poly_fill v5 v12 v20 ESDID LVID pnp npn thkox)
// 5v ngate:
ngate_v5_pw = ((((gate AND nsdm) AND v5) AND thkox) AND pwell_all) NOT (OR diff_fill poly_fill v12 v20 lvtn ESDID LVID pnp npn)
ngate_v5_pt = ((((gate AND nsdm) AND v5) AND thkox) AND ptub) NOT (OR diff_fill poly_fill v12 v20 lvtn ESDID LVID pnp npn)
// 12v ngate:
ngate_v12_pw = ((((gate AND nsdm) AND v12) AND pwell_all) AND thkox) NOT (OR diff_fill poly_fill v5 v20 lvtn ESDID LVID pnp npn ENID)
ngate_v12_pt = ((((gate AND nsdm) AND v12) AND ptub) AND thkox) NOT (OR diff_fill poly_fill v5 v20 lvtn ESDID LVID pnp npn ENID)
// 20v ngate:
pwbm_holes = HOLES pwbm
ngate_v20a = (((((gate AND nsdm) AND v20) NOT dnwell) AND thkox) AND lvtn) NOT (OR diff_fill poly_fill v5 v12 ESDID LVID pnp npn)
ngate_v20_iso_rec = (((((gate AND nsdm) AND v20) AND dnwell) AND thkox) NOT lvtn) NOT (OR diff_fill poly_fill ngate_v20a v5 v12 ESDID LVID pnp npn)
ngate_v20_iso_sub = ((HOLES pwbm) INTERACT ngate_v20_iso_rec) AND dnwell
ngate_v20_iso_sub_cont = (psdm AND diff) AND ngate_v20_iso_sub
ngate_v20_iso_gate = COPY ngate_v20_iso_rec
ngate_v20 = OR ngate_v20a ngate_v20_iso_rec
nsd_20v = (diff AND nsdm) NOT ngate_v20
nsd_20v_src_1 = EXPAND EDGE ((nsd_20v NOT ngate_v20) COINCIDENT EDGE ENID) OUTSIDE BY 0.05
nsd_20v_src = (nsd_20v NOT ngate_v20) TOUCH nsd_20v_src_1 == 3
ngate_v20_nat = ((lvtn ENCLOSE nsdm) AND ngate_v20) NOT pwbm
nsd_20v_nat_drn = ((ENID INTERACT ngate_v20_nat) NOT ngate_v20_nat) NOT nsd_20v_src
nsd_20v_drn = (((ENID INTERACT ngate_v20) NOT ngate_v20) NOT nsd_20v_src) NOT nsd_20v_nat_drn
ngate_v20_zvt = (((lvtn CUT nsdm) NOT (lvtn ENCLOSE nsdm)) AND ngate_v20) NOT (OR ngate_v20_iso_rec ngate_v20_nat)
ngate_v20_nom = ngate_v20 NOT (poly INTERACT (OR ngate_v20_nat ngate_v20_zvt ngate_v20_iso_rec))
ngate_de_20v_iso_gate_conn = ngate_v20_iso_rec AND poly
ngate_de_20v_nom_gate_conn = ngate_v20_nom AND poly
ngate_de_20v_zvt_gate_conn = ngate_v20_zvt AND poly
ngate_de_20v_nat_gate_conn = ngate_v20_nat AND poly
// 5v esd native ngate:
ngate_esd_nat_5v_pw = ((((((gate AND nsdm) AND v5) AND lvtn) AND ESDID) AND pwell_all) AND thkox) NOT (OR diff_fill poly_fill v12 v20 LVID pnp npn)
ngate_esd_nat_5v_pt = ((((((gate AND nsdm) AND v5) AND lvtn) AND ESDID) AND ptub) AND thkox) NOT (OR diff_fill poly_fill v12 v20 LVID pnp npn)
// 5v esd ngate:
ngate_esd_5v_pw = (((((gate AND nsdm) AND v5) AND ESDID) AND pwell_all) AND thkox) NOT (OR diff_fill poly_fill v12 v20 lvtn LVID pnp npn)
ngate_esd_5v_pt = (((((gate AND nsdm) AND v5) AND ESDID) AND ptub) AND thkox) NOT (OR diff_fill poly_fill v12 v20 lvtn LVID pnp npn)
// 3v native ngate:
ngate_nat_3v_pw = ((((((gate and nsdm) AND LVID) AND lvtn) AND v5) AND pwell_all) AND thkox) NOT (OR diff_fill poly_fill v12 v20 ESDID pnp npn)
ngate_nat_3v_pt = (((((gate and nsdm) AND LVID) AND lvtn) AND v5) AND ptub) NOT (OR diff_fill poly_fill v12 v20 ESDID pnp npn)
// 5v native ngate:
ngate_nat_5v_pw = (((((gate and nsdm) AND lvtn) AND v5) AND pwell_all) AND thkox) NOT (OR diff_fill poly_fill v12 v20 ESDID LVID pnp npn)
ngate_nat_5v_pt = (((((gate and nsdm) AND lvtn) AND v5) AND ptub) AND thkox) NOT (OR diff_fill poly_fill v12 v20 ESDID LVID pnp npn)
// 12v extended drain ngate:
ngate_de_12v_pw = (((((gate and nsdm) AND v12) AND ENID) NOT nwell) AND thkox) NOT (OR diff_fill poly_fill v5 v20 ESDID LVID pnp npn)
ngate_de_12v_gate_conn = ngate_de_12v_pw AND poly
nsrc_de_12v = nsd1 INTERACT ngate_de_12v_pw
// 12v ngate:
ndrn_de_12v = ((((ENID ENCLOSE ntap_1) INTERACT ngate_de_12v_pw) NOT ngate_de_12v_pw) NOT nsrc_de_12v) AND nwell
// nominal (1.8v) pgate:
pgate_nom = (gate and psdm) NOT (OR diff_fill poly_fill v5 v12 v20 lvtn ESDID hvtp LVID npn pnp ENID thkox)
// nominal (1.8v) low voltage threshold pgate:
pgate_lvt = ((gate AND psdm) AND lvtn) NOT (OR diff_fill poly_fill v5 v12 v20 ESDID hvtp LVID npn pnp ENID thkox)
// nominal (1.8v) high voltage threshold pgate:
pgate_hvt = ((gate AND psdm) AND hvtp) NOT (OR diff_fill poly_fill v5 v12 v20 ESDID lvtn LVID npn pnp ENID thkox)
// 5v pgate:
pgate_v5 = (((gate AND psdm) AND v5) AND thkox) NOT (OR diff_fill poly_fill v12 v20 lvtn ESDID hvtp LVID npn pnp ENID)
// 12v pgate:
pgate_v12 = (((gate AND psdm) AND v12) AND thkox) NOT (OR v5 v20 lvtn ESDID hvtp LVID npn pnp ENID)
// 5v esd pgate:
pgate_esd_v5 = ((((gate and psdm) AND v5) AND ESDID) AND thkox) NOT (OR diff_fill poly_fill v12 v20 LVID npn pnp ENID)
// 12v extended drain pgate:
pgate_de_12v_pw = (((((gate and psdm) AND v12) AND ENID) AND nwell) AND thkox) NOT (OR diff_fill poly_fill v5 v20 ESDID LVID pnp npn)
psrc_de_12v = psd1 INTERACT pgate_de_12v_pw
pdrn_de_12v = ((((ENID ENCLOSE ptap_1) ENCLOSE pgate_de_12v_pw) NOT pgate_de_12v_pw) NOT psrc_de_12v) NOT nwell
pgate_de_12v_gate_conn = pgate_de_12v_pw AND poly
// 20v extended drain pgate:
pgate_de_20v = (((((poly NOT poly_fill) AND v20) AND thkox) AND (diff NOT diff_fill)) AND psdm) NOT lvtn
pgate_de_20v_conn = COPY pgate_de_20v
psd_20v = (diff AND psdm) NOT pgate_de_20v
psd_20v_src_1 = EXPAND EDGE ((psd_20v NOT pgate_de_20v) COINCIDENT EDGE ENID) OUTSIDE BY 0.05
psrc_de_20v = (psd_20v NOT pgate_de_20v) TOUCH psd_20v_src_1 == 3
pdrn_de_20v = (ENID INTERACT pgate_de_20v) NOT (OR pgate_de_20v psrc_de_20v)
// TAPS and TUBS:
ntap = ntap_1 NOT (ntap_1 INTERACT (ENID INTERACT (OR diff_fill ngate_de_12v_pw ngate_nat_5v_pt pgate_de_12v_pw)))
ptap = ptap_1 NOT (ptap_1 INTERACT (OR diff_fill pgate_de_12v_pw ngate_de_12v_pw pdrn_de_20v ngate_v20_iso_sub))
ptubtap = (ptubtap_1 NOT ((SIZE ptubtap_1 BY 0.005) TOUCH (pgate_de_12v_pw OR ngate_de_12v_pw))) NOT (pwbm OR diff_fill)
// RES:
// high precision/high sheet:
pwres_rec = (pwres AND psdm) AND ((HOLES nwell) AND dnwell)
pwres_term = ((psdm NOT pwres) ENCLOSE diff) TOUCH pwres_rec == 1
hp_poly_1 = (poly NOT poly_fill) AND polyres
hp_poly_2 = hp_poly_1 AND npc
hp_poly_3 = hp_poly_2 AND psdm
hp_poly = hp_poly_3 AND rpm
hp_poly_nw = hp_poly AND nwell
hp_poly_pw = (hp_poly AND pwell_all) NOT nwell
hp_poly_pt = hp_poly AND ptub
hs_poly_1 = (poly NOT poly_fill) AND polyres
hs_poly_2 = hs_poly_1 AND npc
hs_poly_3 = hs_poly_2 AND psdm
hs_poly = hs_poly_3 AND urpm
hs_poly_nw = hs_poly AND nwell
hs_poly_pw = (hs_poly AND pwell_all) NOT nwell
hs_poly_pt = hs_poly AND ptub
// std poly:
rpoly_rec = (poly AND polyres) NOT (OR poly_fill hp_poly hs_poly)
// pdiff:
rpdiff_res_1 = (psdm AND (diff NOT diff_fill)) AND diffres
rpdiff_nom = (rpdiff_res_1 AND nwell) NOT (OR diff_fill thkox v5 v12 v20)
rpdiff_5v = (((rpdiff_res_1 AND nwell) AND V5) AND thkox) NOT (OR diff_fill v12 v20)
// ndiff:
rndiff_res_1 = (nsdm AND (diff NOT diff_fill)) AND diffres
rndiff_nom_pw = (rndiff_res_1 AND pwell_all) NOT (OR thkox v5 v12 v20)
rndiff_nom_pt = (rndiff_res_1 AND ptub) NOT (OR thkox v5 v12 v20)
rndiff_5v_pw = (((rndiff_res_1 AND pwell_all) AND v5) AND thkox) NOT (OR v12 v20)
rndiff_5v_pt = (((rndiff_res_1 AND ptub) AND v5) AND thkox) NOT (OR v12 v20)
// DIO:
// N+ DIO:
dnsd_pw = ((((diodeID AND nsdm) NOT nwell) AND diff) NOT (OR diff_fill ESDID v5 v12 v20 lvtn hvtp LVID)) AND pwell_all
dnsd_pt = ((((diodeID AND nsdm) NOT nwell) AND diff) NOT (OR diff_fill ESDID v5 v12 v20 lvtn hvtp LVID)) AND ptub
dnsd_pw_esd = (((((diodeID AND nsdm) NOT nwell) AND diff) AND ESDID) NOT (OR diff_fill v5 v12 v20 lvtn hvtp LVID)) AND pwell_all
dnsd_pt_esd = (((((diodeID AND nsdm) NOT nwell) AND diff) AND ESDID) NOT (OR diff_fill v5 v12 v20 lvtn hvtp LVID)) AND ptub
dnsd_pw_esd_v5 = (((((((diodeID AND nsdm) NOT nwell) AND diff) AND ESDID) AND v5) AND thkox) NOT (OR diff_fill v12 v20 lvtn hvtp LVID)) AND pwell_all
dnsd_pt_esd_v5 = (((((((diodeID AND nsdm) NOT nwell) AND diff) AND ESDID) AND v5) AND thkox) NOT (OR diff_fill v12 v20 lvtn hvtp LVID)) AND ptub
dnsd_pw_lvt = (((((diodeID AND nsdm) NOT nwell) AND diff) AND lvtn) NOT (OR ESDID v5 v12 v20 hvtp LVID)) AND pwell_all
dnsd_pt_lvt = (((((diodeID AND nsdm) NOT nwell) AND diff) AND lvtn) NOT (OR ESDID v5 v12 v20 hvtp LVID)) AND ptub
dnsd_pw_nat = ((((((diodeID AND nsdm) NOT nwell) AND diff) AND LVID) AND lvtn) NOT (OR diff_fill ESDID v5 v12 v20 hvtp)) AND pwell_all
dnsd_pt_nat = ((((((diodeID AND nsdm) NOT nwell) AND diff) AND LVID) AND lvtn) NOT (OR diff_fill ESDID v5 v12 v20 hvtp)) AND ptub
dnsd_pw_v5 = ((((((diodeID AND nsdm) NOT nwell) AND diff) AND v5) AND thkox) NOT (OR diff_fill v12 v20 lvtn hvtp ESDID LVID)) AND pwell_all
dnsd_pt_v5 = ((((((diodeID AND nsdm) NOT nwell) AND diff) AND v5) AND thkox) NOT (OR diff_fill v12 v20 lvtn hvtp ESDID LVID)) AND ptub
// P+ DIO:
dpsd_nw = (((diodeID AND psdm) AND nwell) AND diff) NOT (OR diff_fill thkox v5 v12 v20 lvtn hvtp ESDID LVID)
dpsd_nw_esd = ((((diodeID AND psdm) AND nwell) AND diff) AND ESDID) NOT (OR diff_fill thkox v5 v12 v20 lvtn hvtp LVID)
dpsd_nw_esd_v5 = ((((((diodeID AND psdm) AND nwell) AND diff) AND ESDID) AND v5) AND thkox) NOT (OR diff_fill v12 v20 lvtn hvtp LVID)
dpsd_nw_hvt = ((((diodeID AND psdm) AND nwell) AND diff) AND hvtp) NOT (OR diff_fill thkox v5 v12 v20 lvtn ESDID LVID)
dpsd_nw_lvt = ((((diodeID AND psdm) AND nwell) AND diff) AND lvtn) NOT (OR diff_fill thkox v5 v12 v20 hvtp ESDID LVID)
dpsd_nw_v5 = (((((diodeID AND psdm) AND nwell) AND diff) AND v5) AND thkox) NOT (OR diff_fill v12 v20 lvtn hvtp ESDID LVID)
// WELL DIODES associated with deep nwell
// uses a fall-thru mechanism to insure highest voltage diode is formed when multiple voltage markers are present:
// 20v:
//dnw_sub_v20 = ((dnwell NOT (dnwell INTERACT (OR npn pnp))) INTERACT v20) NOT INTERACT (dnwell INTERACT ngate_v20_iso_rec)
dnw_sub_v20 = (dnwell NOT (dnwell INTERACT (OR npn pnp))) INTERACT v20
dpw_dnw_v20 = ((((HOLES nwell) AND dnwell) NOT (dnwell INTERACT (OR npn pnp pwres))) INTERACT v20) NOT pwbm
dpw_dnw_v20_pwres = (((((HOLES nwell) AND dnwell) NOT (dnwell INTERACT (OR npn pnp))) INTERACT v20) INTERACT pwres) NOT pwres
// 12v:
dnw_sub_v12 = (((dnwell NOT (dnwell INTERACT (OR npn pnp))) INTERACT v12) NOT INTERACT dnw_sub_v20) NOT INTERACT (dnwell INTERACT ngate_v20_iso_rec)
dpw_dnw_v12 = ((((HOLES nwell) AND dnwell) NOT (dnwell INTERACT (OR npn pnp pwres))) INTERACT v12) NOT INTERACT dpw_dnw_v20
dpw_dnw_v12_pwres = ((((((HOLES nwell) AND dnwell) NOT (dnwell INTERACT (OR npn pnp))) INTERACT v12) NOT INTERACT dpw_dnw_v20) INTERACT pwres) NOT pwres
// 5v:
dnw_sub_v5 = (((dnwell NOT (dnwell INTERACT (OR npn pnp))) INTERACT v5) NOT INTERACT (OR dnw_sub_v20 dnw_sub_v12)) NOT INTERACT (dnwell INTERACT ngate_v20_iso_rec)
dpw_dnw_v5 = ((((HOLES nwell) AND dnwell) NOT (dnwell INTERACT (OR npn pnp pwres))) INTERACT v5) NOT INTERACT (OR dpw_dnw_v20 dpw_dnw_v12)
dpw_dnw_v5_pwres = ((((((HOLES nwell) AND dnwell) NOT (dnwell INTERACT (OR npn pnp))) INTERACT v5) NOT INTERACT (OR dpw_dnw_v20 dpw_dnw_v12)) INTERACT pwres) NOT pwres
// 1.8v:
dnw_sub_nom = ((dnwell NOT (dnwell INTERACT (OR npn pnp))) NOT INTERACT (OR dnw_sub_v20 dnw_sub_v12 dnw_sub_v5)) NOT INTERACT (dnwell INTERACT ngate_v20_iso_rec)
dpw_dnw_nom = ((((HOLES nwell INNER) AND dnwell) NOT (dnwell INTERACT (OR npn pnp pwres))) NOT INTERACT (OR dpw_dnw_v20 dpw_dnw_v12 dpw_dnw_v5)) NOT pwbm
dpw_dnw_nom_pwres = (((((HOLES nwell INNER) AND dnwell) NOT (dnwell INTERACT (OR npn pnp))) NOT INTERACT (OR dpw_dnw_v20 dpw_dnw_v12 dpw_dnw_v5)) INTERACT pwres) NOT pwres
// CAP:
cap_34 = (met3 AND met4) AND capm
cap_45 = (met4 AND met5) AND cap2m
// remove the vias in the capacitors so as not to short the metals in
// the caps
via3 = via3i NOT cap_34
via4 = via4i NOT cap_45
// BIPOLAR:
donut_nw = HOLES nwell
dnw_over_nw_hole = dnwell ENCLOSE donut_nw
npn_1a = ((nwell or (HOLES nwell)) ENCLOSE dnw_over_nw_hole) INTERACT npn
npn_1 = HOLES (diff AND npn_1a)
npn_ndiff = ((npn AND (diff NOT diff_fill)) AND nsdm) INSIDE npn_1
npn_ndiff_oct_1 = EXPAND EDGE (ANGLE npn_ndiff == 45) OUTSIDE BY 0.005
npn_ndiff_oct = (VERTEX == 8 npn_ndiff) INTERACT npn_ndiff_oct_1 == 4
npn_emit = npn_ndiff NOT nwell
npn_1x1_rec = (npn_1 ENCLOSE ((AREA npn_emit >= 0) AND (AREA npn_emit < 2))) NOT (OR diff_fill thkox v5 v12 v20)
npn_1x2_rec = (npn_1 ENCLOSE (AREA npn_emit >= 2)) NOT (OR diff_fill thkox v5 v12 v20)
npn_1x1_rec_v5 = (npn_1 ENCLOSE npn_ndiff_oct) AND (thkox AND v5)
pnp_rec_1x_a = (pnp INTERACT (RECTANGLE (pnp AND diff) == 0.68 ASPECT == 1)) NOT (OR diff_fill thkox v5 v12 v20)
pnp_rec_1x = HOLES (diff AND pnp_rec_1x_a)
pnp_rec_5x_a = (pnp INTERACT (RECTANGLE (pnp AND diff) == 3.4 ASPECT == 1)) NOT (OR diff_fill thkox v5 v12 v20)
pnp_rec_5x = HOLES (diff AND pnp_rec_5x_a)
// FUSE:
// (no longer supported but remains in code for future use)
m4fuse = (met4 NOT met4_fill) AND fuse
// ********************************************************
// End layer boolean operations
// ********************************************************
// ********************************************************
// Begin connect statements
// ********************************************************
// break connective layers by resistors:
m1 = met1 NOT m1res
m2 = met2 NOT m2res
m3 = met3 NOT m3res
m4 = met4 NOT (OR m4res fuse)
m5 = met5 NOT m5res
li = li_i NOT lires
ply = poly NOT polyres
nsd = nsd1 NOT diffres
psd = psd1 NOT diffres
CONNECT rdl pad
CONNECT m5 pad
CONNECT m5 m4 BY via4
CONNECT m4 m3 BY via3
CONNECT m3 m2 BY via2
CONNECT m2 m1 BY via1
CONNECT m1 li BY mcon
CONNECT li ply BY licon
CONNECT li nsd BY licon
CONNECT li psd BY licon
CONNECT li ntap BY licon
CONNECT li ptap BY licon
CONNECT li ptubtap BY licon
CONNECT li pwres_term BY licon
CONNECT li nsrc_de_12v BY licon
CONNECT li nsd_20v_src BY licon
CONNECT li nsd_20v_drn BY licon
CONNECT li nsd_20v_nat_drn BY licon
CONNECT li psrc_de_20v BY licon
CONNECT li pdrn_de_20v BY licon
CONNECT li ndrn_de_12v BY licon
CONNECT li psrc_de_12v BY licon
CONNECT li pdrn_de_12v BY licon
CONNECT ply ngate_de_12v_pw BY ngate_de_12v_gate_conn
CONNECT ply pgate_de_12v_pw BY pgate_de_12v_gate_conn
CONNECT ply ngate_v20_iso_gate BY ngate_de_20v_iso_gate_conn
CONNECT ply ngate_v20_nom BY ngate_de_20v_nom_gate_conn
CONNECT ply ngate_v20_zvt BY ngate_de_20v_zvt_gate_conn
CONNECT ply ngate_v20_nat BY ngate_de_20v_nat_gate_conn
CONNECT ply pgate_de_20v BY pgate_de_20v_conn
CONNECT li ngate_v20_iso_sub BY ngate_v20_iso_sub_cont
SCONNECT ntap nwell
LVS SOFTCHK nwell UPPER
LVS SOFTCHK nwell LOWER
SCONNECT ptap pwell
LVS SOFTCHK pwell UPPER
LVS SOFTCHK pwell LOWER
SCONNECT ptap pwell_all
LVS SOFTCHK pwell_all UPPER
LVS SOFTCHK pwell_all LOWER
SCONNECT ptubtap ptub
LVS SOFTCHK ptub UPPER
LVS SOFTCHK ptub LOWER
SCONNECT nwell dnwell
LVS SOFTCHK dnwell UPPER
LVS SOFTCHK dnwell LOWER
// ********************************************************
// End connect statements
// ********************************************************
// PINS/LABELS:
TEXT LAYER met1tt met2tt met3tt met4tt met5tt rdltt difftt litt polytt nwelltt
PORT LAYER TEXT rdltt
ATTACH rdltt rdl
ATTACH "rdl_pin" rdl
PORT LAYER TEXT met5tt
ATTACH met5tt m5
ATTACH "met5_pin" m5
PORT LAYER TEXT met4tt
ATTACH met4tt m4
ATTACH "met4_pin" m4
PORT LAYER TEXT met3tt
ATTACH met3tt m3
ATTACH "met3_pin" m3
PORT LAYER TEXT met2tt
ATTACH met2tt m2
ATTACH "met2_pin" m2
PORT LAYER TEXT met1tt
ATTACH met1tt m1
ATTACH "met1_pin" m1
PORT LAYER TEXT litt
ATTACH litt li
ATTACH "li_pin" li
PORT LAYER TEXT polytt
ATTACH polytt ply
ATTACH "poly_pin" ply
PORT LAYER TEXT difftt
ATTACH difftt nsd
ATTACH difftt psd
ATTACH difftt ntap
ATTACH difftt ptap
ATTACH "diff_pin" psd
ATTACH "diff_pin" nsd
ATTACH "diff_pin" ptap
ATTACH "diff_pin" ntap
PORT LAYER TEXT pwelltt
ATTACH pwelltt pwell_all
ATTACH "pwell_pin" pwell_all
PORT LAYER TEXT nwelltt
ATTACH nwelltt nwell
ATTACH "nwell_pin" nwell
// ************
// DEVICES:
// ************
// ********************************************************
// Begin device declarations
// ********************************************************
// ************
// PAD
// ************
DEVICE pad_bond pad_rec m5(pin0) <padLength>
CMACRO PAD_PARAMS pad_rec padLength
CMACRO TRACE_PAD_PROPS pad_bond
CMACRO PAD_PARALLEL pad_bond
DEVICE pad_microprobe upad_rec m5(pin0) <padLength>
CMACRO PAD_PARAMS upad_rec padLength
CMACRO TRACE_PAD_PROPS pad_microprobe
CMACRO PAD_PARALLEL pad_microprobe
DEVICE pad_probe epad_rec m5(pin0) <padLength>
CMACRO PAD_PARAMS epad_rec padLength
CMACRO TRACE_PAD_PROPS pad_probe
CMACRO PAD_PARALLEL pad_probe
// ************
// MOS:
// ************
// ************
// NMOS:
// ************
DEVICE MN(nmos) ngate_nom_pw ply nsd nsd pwell_all
DEVICE MN(nmos) ngate_nom_pw ply nsd nsd ptub
CMACRO MOS_PARAMS ngate_nom_pw nsd
DEVICE MN(nmos_esd) ngate_nom_esd_pw ply nsd nsd pwell_all
CMACRO MOS_PARAMS ngate_nom_esd_pw nsd
DEVICE MN(nmos_esd) ngate_nom_esd_pt ply nsd nsd ptub
CMACRO MOS_PARAMS ngate_nom_esd_pt nsd
DEVICE MN(nmos) ngate_nom_pt ply nsd nsd ptub
CMACRO MOS_PARAMS ngate_nom_pt nsd
DEVICE MN(nmos_lvt) ngate_lvt_pw ply nsd nsd pwell_all
CMACRO MOS_PARAMS ngate_lvt_pw nsd
DEVICE MN(nmos_lvt) ngate_lvt_pt ply nsd nsd ptub
CMACRO MOS_PARAMS ngate_lvt_pt nsd
DEVICE MN(nmos_v5) ngate_v5_pw ply nsd nsd pwell_all
CMACRO MOS_PARAMS ngate_v5_pw nsd
DEVICE MN(nmos_v5) ngate_v5_pt ply nsd nsd ptub
CMACRO MOS_PARAMS ngate_v5_pt nsd
DEVICE MN(nmos_v12) ngate_v12_pw ply nsd nsd pwell_all
CMACRO MOS_PARAMS ngate_v12_pw nsd
DEVICE MN(nmos_v12) ngate_v12_pt ply nsd nsd ptub
CMACRO MOS_PARAMS ngate_v12_pt nsd
// Custom device since this is a 5 terminal MOS:
DEVICE nmos_de_iso_v20 ngate_v20_iso_rec nsd_20v_src(src) ngate_v20_iso_gate(gate) nsd_20v_drn(drn) pwell_all(b) ngate_v20_iso_sub(sub)
[
PROPERTY w , l , m
m = 1
a = area( ngate_v20_iso_rec )
w = perimeter_coincide( ngate_v20_iso_rec, nsd_20v_src )
l = a / w
AS = area( nsd_20v_src ) * 0.5
PS = perimeter( nsd_20v_src ) * 0.5
AD = area( nsd_20v_drn ) * 0.5
PD = perimeter( nsd_20v_drn ) * 0.5
nrs = 0
nrd = 0
]
LVS REDUCE nmos_de_iso_v20 PARALLEL YES
[ effective w, l, m
p = sum( w * l ) // Sum of Wi * Li
q = sum( w / l ) // Sum of Wi / Li
w = sqrt( p * q ) // Effective W
l = sqrt( p / q ) // Effective L
m = sum( m )
]
TRACE PROPERTY nmos_de_iso_v20 l l 0
TRACE PROPERTY nmos_de_iso_v20 w w 0
TRACE PROPERTY nmos_de_iso_v20 m m 0
DEVICE MN(nmos_de_nat_v20) ngate_v20_nat ngate_v20_nat nsd_20v_src nsd_20v_nat_drn pwell_all
[
PROPERTY w , l , m
m = 1
a = area( ngate_v20_nat )
w = perimeter_coincide( ngate_v20_nat, nsd_20v_src )
l = a / w
AS = area( nsd_20v_src ) * 0.5
PS = perimeter( nsd_20v_src ) * 0.5
AD = area( nsd_20v_nat_drn ) * 0.5
PD = perimeter( nsd_20v_nat_drn ) * 0.5
nrs = 0
nrd = 0
]
DEVICE MN(nmos_de_zvt_v20) ngate_v20_zvt ngate_v20_zvt nsd_20v_src nsd_20v_drn pwell_all
[
PROPERTY w , l , m
m = 1
a = area( ngate_v20_zvt )
w = perimeter_coincide( ngate_v20_zvt, nsd_20v_src )
l = a / w
AS = area( nsd_20v_src ) * 0.5
PS = perimeter( nsd_20v_src ) * 0.5
AD = area( nsd_20v_drn ) * 0.5
PD = perimeter( nsd_20v_drn ) * 0.5
nrs = 0
nrd = 0
]
DEVICE MN(nmos_de_v20) ngate_v20_nom ngate_v20_nom nsd_20v_src nsd_20v_drn pwell_all
[
PROPERTY w , l , m
m = 1
a = area( ngate_v20_nom )
w = perimeter_coincide( ngate_v20_nom, nsd_20v_src )
l = a / w
AS = area( nsd_20v_src ) * 0.5
PS = perimeter( nsd_20v_src ) * 0.5
AD = area( nsd_20v_drn ) * 0.5
PD = perimeter( nsd_20v_drn ) * 0.5
nrs = 0
nrd = 0
]
DEVICE MN(nmos_esd_nat_v5) ngate_esd_nat_5v_pw ply nsd nsd pwell_all
CMACRO MOS_PARAMS ngate_esd_nat_5v_pw nsd
DEVICE MN(nmos_esd_nat_v5) ngate_esd_nat_5v_pt ply nsd nsd ptub
CMACRO MOS_PARAMS ngate_esd_nat_5v_pt nsd
DEVICE MN(nmos_esd_v5) ngate_esd_5v_pw ply nsd nsd pwell_all
CMACRO MOS_PARAMS ngate_esd_5v_pw nsd
DEVICE MN(nmos_esd_v5) ngate_esd_5v_pt ply nsd nsd ptub
CMACRO MOS_PARAMS ngate_esd_5v_pt nsd
DEVICE MN(nmos_nat_v3) ngate_nat_3v_pw ply nsd nsd pwell_all
CMACRO MOS_PARAMS ngate_nat_3v_pw nsd
DEVICE MN(nmos_nat_v3) ngate_nat_3v_pt ply nsd nsd ptub
CMACRO MOS_PARAMS ngate_nat_3v_pt nsd
DEVICE MN(nmos_nat_v5) ngate_nat_5v_pw ply nsd nsd pwell_all
CMACRO MOS_PARAMS ngate_nat_5v_pw nsd
DEVICE MN(nmos_nat_v5) ngate_nat_5v_pt ply nsd nsd ptub
CMACRO MOS_PARAMS ngate_nat_5v_pt nsd
DEVICE MN(nmos_de_v12) ngate_de_12v_pw ngate_de_12v_pw(G) nsrc_de_12v(S) ndrn_de_12v(D) pwell_all
[
PROPERTY w , l , m
m = 1
a = area( ngate_de_12v_pw )
w = perimeter_coincide( ngate_de_12v_pw, nsrc_de_12v )
l = a / w
AS = area( nsrc_de_12v ) * 0.5
PS = perimeter( nsrc_de_12v ) * 0.5
AD = area( nsrc_de_12v ) * 0.5
PD = perimeter( nsrc_de_12v ) * 0.5
nrs = 0
nrd = 0
]
TRACE PROPERTY MN l l 0
TRACE PROPERTY MN w w 0
TRACE PROPERTY MN m m 0
// ************
// PMOS:
// ************
DEVICE MP(pmos) pgate_nom ply psd psd nwell
CMACRO MOS_PARAMS pgate_nom psd
DEVICE MP(pmos_lvt) pgate_lvt ply psd psd nwell
CMACRO MOS_PARAMS pgate_lvt psd
DEVICE MP(pmos_hvt) pgate_hvt ply psd psd nwell
CMACRO MOS_PARAMS pgate_hvt psd
DEVICE MP(pmos_v5) pgate_v5 ply psd psd nwell
CMACRO MOS_PARAMS pgate_v5 psd
DEVICE MP(pmos_v12) pgate_v12 ply psd psd nwell
CMACRO MOS_PARAMS pgate_v12 psd
DEVICE MP(pmos_de_v20) pgate_de_20v pgate_de_20v psrc_de_20v pdrn_de_20v nwell
// CMACRO MOS_PARAMS pgate_v20 psd
DEVICE MP(pmos_esd_v5) pgate_esd_v5 ply psd psd nwell
CMACRO MOS_PARAMS pgate_esd_v5 psd
DEVICE MP(pmos_de_v12) pgate_de_12v_pw pgate_de_12v_pw(G) psrc_de_12v(S) pdrn_de_12v(D) nwell
[
PROPERTY w , l , m
m = 1
a = area( pgate_de_12v_pw )
w = perimeter_coincide( pgate_de_12v_pw, psrc_de_12v )
l = a / w
AS = area( psrc_de_12v ) * 0.5
PS = perimeter( psrc_de_12v ) * 0.5 - w
AD = area( psrc_de_12v ) * 0.5
PD = perimeter( psrc_de_12v ) * 0.5 - w
nrs = 0
nrd = 0
]
TRACE PROPERTY MP l l 0
TRACE PROPERTY MP w w 0
TRACE PROPERTY MP m m 0
LVS REDUCE PARALLEL MOS YES
[ effective w, l, m
p = sum( w * l ) // Sum of Wi * Li
q = sum( w / l ) // Sum of Wi / Li
w = sqrt( p * q ) // Effective W
l = sqrt( p / q ) // Effective L
m = sum( m )
]
LVS REDUCE SPLIT GATES YES SAME ORDER
[ effective w, l, m
p = sum( w * l ) // Sum of Wi * Li
q = sum( w / l ) // Sum of Wi / Li
w = sqrt( p * q ) // Effective W
l = sqrt( p / q ) // Effective L
m = sum( m )
]
// ************
// RES:
// ************
// metal:
DEVICE R(rli) lires li(POS) li(NEG) ("POS" "NEG")
CMACRO RES_PARAMS lires li
TRACE PROPERTY R(rli) l l 0
TRACE PROPERTY R(rli) w w 0
TRACE PROPERTY R(rli) m m 0
DEVICE R(rm1) m1res m1(POS) m1(NEG) ("POS" "NEG")
CMACRO RES_PARAMS m1res m1
TRACE PROPERTY R(rm1) l l 0
TRACE PROPERTY R(rm1) w w 0
TRACE PROPERTY R(rm1) m m 0
DEVICE R(rm2) m2res m2(POS) m2(NEG) ("POS" "NEG")
CMACRO RES_PARAMS m2res m2
TRACE PROPERTY R(rm2) l l 0
TRACE PROPERTY R(rm2) w w 0
TRACE PROPERTY R(rm2) m m 0
DEVICE R(rm3) m3res m3(POS) m3(NEG) ("POS" "NEG")
CMACRO RES_PARAMS m3res m3
TRACE PROPERTY R(rm3) l l 0
TRACE PROPERTY R(rm3) w w 0
TRACE PROPERTY R(rm3) m m 0
DEVICE R(rm4) m4res m4(POS) m4(NEG) ("POS" "NEG")
CMACRO RES_PARAMS m4res m4
TRACE PROPERTY R(rm4) l l 0
TRACE PROPERTY R(rm4) w w 0
TRACE PROPERTY R(rm4) m m 0
DEVICE R(rm5) m5res m5(POS) m5(NEG) ("POS" "NEG")
CMACRO RES_PARAMS m5res m5
TRACE PROPERTY R(rm5) l l 0
TRACE PROPERTY R(rm5) w w 0
TRACE PROPERTY R(rm5) m m 0
// high precision:
DEVICE R(rpoly_hp_pw) hp_poly_pw ply(POS) ply(NEG) pwell_all(SUB) ("POS" "NEG")
CMACRO CALC_RES_BENT_PARAMS hp_poly_pw ply
CMACRO TRACE_SERP_RES_PROPS rpoly_hp_pw l w m segments
DEVICE R(rpoly_hp_pw) hp_poly_pt ply(POS) ply(NEG) ptub(SUB) ("POS" "NEG")
CMACRO CALC_RES_BENT_PARAMS hp_poly_pt ply
CMACRO TRACE_SERP_RES_PROPS rpoly_hp_pt l w m segments
DEVICE R(rpoly_hp_nw) hp_poly_nw ply(POS) ply(NEG) nwell(SUB) ("POS" "NEG")
CMACRO CALC_RES_BENT_PARAMS hp_poly_nw ply
CMACRO TRACE_SERP_RES_PROPS rpoly_hp_nw l w m segments
// high sheet rho:
DEVICE R(rpoly_hp2K_pw) hs_poly_pw ply(POS) ply(NEG) pwell_all(SUB) ("POS" "NEG")
CMACRO CALC_RES_BENT_PARAMS hs_poly_pw ply
CMACRO TRACE_SERP_RES_PROPS hs_poly_pw l w m segments
DEVICE R(rpoly_hp2K_pw) hs_poly_pt ply(POS) ply(NEG) ptub(SUB) ("POS" "NEG")
CMACRO CALC_RES_BENT_PARAMS hs_poly_pt ply
CMACRO TRACE_SERP_RES_PROPS rpoly_hp2K_pw l w m segments
DEVICE R(rpoly_hp2K_nw) hs_poly_nw ply(POS) ply(NEG) nwell(SUB) ("POS" "NEG")
CMACRO CALC_RES_BENT_PARAMS hs_poly_nw ply
CMACRO TRACE_SERP_RES_PROPS rpoly_hp2K_nw l w m segments
// std poly:
DEVICE R(rpoly) rpoly_rec ply(POS) ply(NEG) ("POS" "NEG")
CMACRO RES_PARAMS rpoly_rec ply
TRACE PROPERTY r(rpoly) l l 0
TRACE PROPERTY r(rpoly) w w 0
TRACE PROPERTY r(rpoly) m m 0
// diff res:
DEVICE R(rpdiff) rpdiff_nom psd(POS) psd(NEG) nwell(SUB) ("POS" "NEG")
CMACRO RES_PARAMS rpdiff_nom psd
TRACE PROPERTY R(rpdiff) l l 0
TRACE PROPERTY R(rpdiff) w w 0
TRACE PROPERTY R(rpdiff) m m 0
DEVICE R(rndiff) rndiff_nom_pw nsd(POS) nsd(NEG) pwell_all(SUB) ("POS" "NEG")
CMACRO RES_PARAMS rndiff_nom_pw nsd
DEVICE R(rndiff) rndiff_nom_pt nsd(POS) nsd(NEG) ptub(SUB) ("POS" "NEG")
CMACRO RES_PARAMS rndiff_nom_pt nsd
TRACE PROPERTY R(rndiff) l l 0
TRACE PROPERTY R(rndiff) w w 0
TRACE PROPERTY R(rndiff) m m 0
DEVICE R(rpdiff_v5) rpdiff_5v psd(POS) psd(NEG) nwell(SUB) ("POS" "NEG")
CMACRO RES_PARAMS rpdiff_5v psd
TRACE PROPERTY R(rpdiff_v5) l l 0
TRACE PROPERTY R(rpdiff_v5) w w 0
TRACE PROPERTY R(rpdiff_v5) m m 0
DEVICE R(rndiff_v5) rndiff_5v_pw nsd(POS) nsd(NEG) pwell_all(SUB) ("POS" "NEG")
CMACRO RES_PARAMS rndiff_5v_pw nsd
DEVICE R(rndiff_v5) rndiff_5v_pt nsd(POS) nsd(NEG) ptub(SUB) ("POS" "NEG")
CMACRO RES_PARAMS rndiff_5v_pt nsd
TRACE PROPERTY R(rndiff_v5) l l 0
TRACE PROPERTY R(rndiff_v5) w w 0
TRACE PROPERTY R(rndiff_v5) m m 0
// pwell res:
DEVICE R(rpwell) pwres_rec pwres_term(POS) pwres_term(NEG) dnwell(SUB) ("POS" "NEG")
CMACRO RES_PARAMS pwres_rec pwres_term
TRACE PROPERTY R(rpwell) l l 0
TRACE PROPERTY R(rpwell) w w 0
TRACE PROPERTY R(rpwell) m m 0
LVS REDUCE R PARALLEL YES [
TOLERANCE w 1.0
l 1.0
EFFECTIVE m , w , l, segments
m = SUM( m )
w = SUM( (w * m) )
l = SUM( (l * m) ) / m
segments = 1
]
// fuse as a res:
// (no longer supported but remains in code for future use)
DEVICE R(fuse_m4) m4fuse m4(POS) m4(NEG) ("POS" "NEG")
CMACRO RES_PARAMS m4fuse m4
TRACE PROPERTY R(fuse_m4) l l 0
TRACE PROPERTY R(fuse_m4) w w 0
LVS REDUCE R SERIES POS NEG NO
// ************
// DIO:
// ************
DEVICE D(dnsd_pw) dnsd_pw pwell_all nsd
CMACRO DIO_PARAMS dnsd_pw
DEVICE D(dnsd_pw) dnsd_pt ptub nsd
CMACRO DIO_PARAMS dnsd_pt
TRACE PROPERTY D(dnsd_pw) a a 0
TRACE PROPERTY D(dnsd_pw) p p 0
TRACE PROPERTY D(dnsd_pw) m m 0
DEVICE D(dnsd_pw_esd) dnsd_pw_esd pwell_all nsd
CMACRO DIO_PARAMS dnsd_pw_esd
DEVICE D(dnsd_pw_esd) dnsd_pt_esd ptub nsd
CMACRO DIO_PARAMS dnsd_pt_esd
TRACE PROPERTY D(dnsd_pw_esd) a a 0
TRACE PROPERTY D(dnsd_pw_esd) p p 0
TRACE PROPERTY D(dnsd_pw_esd) m m 0
DEVICE D(dnsd_pw_esd_v5) dnsd_pw_esd_v5 pwell_all nsd
CMACRO DIO_PARAMS dnsd_pw_esd_v5
DEVICE D(dnsd_pw_esd_v5) dnsd_pt_esd_v5 ptub nsd
CMACRO DIO_PARAMS dnsd_pt_esd_v5
TRACE PROPERTY D(dnsd_pw_esd_v5) a a 0
TRACE PROPERTY D(dnsd_pw_esd_v5) p p 0
TRACE PROPERTY D(dnsd_pw_esd_v5) m m 0
DEVICE D(dnsd_pw_lvt) dnsd_pw_lvt pwell_all nsd
CMACRO DIO_PARAMS dnsd_pw_lvt
DEVICE D(dnsd_pw_lvt) dnsd_pt_lvt ptub nsd
CMACRO DIO_PARAMS dnsd_pt_lvt
TRACE PROPERTY D(dnsd_pw_lvt) a a 0
TRACE PROPERTY D(dnsd_pw_lvt) p p 0
TRACE PROPERTY D(dnsd_pw_lvt) m m 0
DEVICE D(dnsd_pw_nat) dnsd_pw_nat pwell_all nsd
CMACRO DIO_PARAMS dnsd_pw_nat
DEVICE D(dnsd_pw_nat) dnsd_pt_nat ptub nsd
CMACRO DIO_PARAMS dnsd_pt_nat
TRACE PROPERTY D(dnsd_pw_nat) a a 0
TRACE PROPERTY D(dnsd_pw_nat) p p 0
TRACE PROPERTY D(dnsd_pw_nat) m m 0
DEVICE D(dnsd_pw_v5) dnsd_pw_v5 pwell_all nsd
CMACRO DIO_PARAMS dnsd_pw_v5
DEVICE D(dnsd_pw_v5) dnsd_pt_v5 ptub nsd
CMACRO DIO_PARAMS dnsd_pt_v5
TRACE PROPERTY D(dnsd_pw_v5) a a 0
TRACE PROPERTY D(dnsd_pw_v5) p p 0
TRACE PROPERTY D(dnsd_pw_v5) m m 0
DEVICE D(dpsd_nw) dpsd_nw psd nwell
CMACRO DIO_PARAMS dpsd_nw
TRACE PROPERTY D(dpsd_nw) a a 0
TRACE PROPERTY D(dpsd_nw) p p 0
TRACE PROPERTY D(dpsd_nw) m m 0
DEVICE D(dpsd_nw_esd) dpsd_nw_esd psd nwell
CMACRO DIO_PARAMS dpsd_nw_esd
TRACE PROPERTY D(dpsd_nw_esd) a a 0
TRACE PROPERTY D(dpsd_nw_esd) p p 0
TRACE PROPERTY D(dpsd_nw_esd) m m 0
DEVICE D(dpsd_nw_esd_v5) dpsd_nw_esd_v5 psd nwell
CMACRO DIO_PARAMS dpsd_nw_esd_v5
TRACE PROPERTY D(dpsd_nw_esd_v5) a a 0
TRACE PROPERTY D(dpsd_nw_esd_v5) p p 0
TRACE PROPERTY D(dpsd_nw_esd_v5) m m 0
DEVICE D(dpsd_nw_hvt) dpsd_nw_hvt psd nwell
CMACRO DIO_PARAMS dpsd_nw_hvt
TRACE PROPERTY D(dpsd_nw_hvt) a a 0
TRACE PROPERTY D(dpsd_nw_hvt) p p 0
TRACE PROPERTY D(dpsd_nw_hvt) m m 0
DEVICE D(dpsd_nw_lvt) dpsd_nw_lvt psd nwell
CMACRO DIO_PARAMS dpsd_nw_lvt
TRACE PROPERTY D(dpsd_nw_lvt) a a 0
TRACE PROPERTY D(dpsd_nw_lvt) p p 0
TRACE PROPERTY D(dpsd_nw_lvt) m m 0
DEVICE D(dpsd_nw_v5) dpsd_nw_v5 psd nwell
CMACRO DIO_PARAMS dpsd_nw_v5
TRACE PROPERTY D(dpsd_nw_v5) a a 0
TRACE PROPERTY D(dpsd_nw_v5) p p 0
TRACE PROPERTY D(dpsd_nw_v5) m m 0
// well diodes associated with deep nwell
#IFNDEF SKIP_EXTRACTING_DNWELL_DIODES
DEVICE D(ddnw_sub) dnw_sub_nom pwell_all dnwell
CMACRO DIO_PARAMS dnw_sub_nom
DEVICE D(dipw_dnw) dpw_dnw_nom ptub dnwell
CMACRO DIO_PARAMS dpw_dnw_nom
DEVICE D(dipw_dnw) dpw_dnw_nom_pwres ptub dnwell <ptub_b> <ptub_c> <pwres>
CMACRO PWRES_DIO_PARAMS dpw_dnw_nom_pwres ptub_b ptub_c pwres
DEVICE D(ddnw_sub_v5) dnw_sub_v5 pwell_all dnwell
CMACRO DIO_PARAMS dnw_sub_v5
DEVICE D(dipw_dnw_v5) dpw_dnw_v5 ptub dnwell
CMACRO DIO_PARAMS dpw_dnw_v5
DEVICE D(dipw_dnw_v5) dpw_dnw_v5_pwres ptub dnwell <ptub_b> <ptub_c> <pwres>
CMACRO PWRES_DIO_PARAMS dpw_dnw_v5_pwres ptub_b ptub_c pwres
DEVICE D(ddnw_sub_v12) dnw_sub_v12 pwell_all dnwell
CMACRO DIO_PARAMS dnw_sub_v12
DEVICE D(dipw_dnw_v12) dpw_dnw_v12 ptub dnwell
CMACRO DIO_PARAMS dpw_dnw_v12
DEVICE D(dipw_dnw_v12) dpw_dnw_v12_pwres ptub dnwell <ptub_b> <ptub_c> <pwres>
CMACRO PWRES_DIO_PARAMS dpw_dnw_v12_pwres ptub_b ptub_c pwres
DEVICE D(ddnw_sub_v20) dnw_sub_v20 pwell_all dnwell
CMACRO DIO_PARAMS dnw_sub_v20
DEVICE D(dipw_dnw_v20) dpw_dnw_v20 ptub dnwell
CMACRO DIO_PARAMS dpw_dnw_v20
DEVICE D(dipw_dnw_v20) dpw_dnw_v20_pwres ptub dnwell <ptub_b> <ptub_c> <pwres>
CMACRO PWRES_DIO_PARAMS dpw_dnw_v20_pwres ptub_b ptub_c pwres
#IFNDEF SKIP_CHECKING_DNWELL_DIODE_PARAMETERS
TRACE PROPERTY D(ddnw_sub) a a 0.005
TRACE PROPERTY D(ddnw_sub) p p 0.005
TRACE PROPERTY D(dipw_dnw) a a 0.005
TRACE PROPERTY D(dipw_dnw) p p 0.005
TRACE PROPERTY D(ddnw_sub_v5) a a 0.005
TRACE PROPERTY D(ddnw_sub_v5) p p 0.005
TRACE PROPERTY D(dipw_dnw_v5) a a 0.005
TRACE PROPERTY D(dipw_dnw_v5) p p 0.005
TRACE PROPERTY D(ddnw_sub_v12) a a 0.005
TRACE PROPERTY D(ddnw_sub_v12) p p 0.005
TRACE PROPERTY D(dipw_dnw_v12) a a 0.005
TRACE PROPERTY D(dipw_dnw_v12) p p 0.005
TRACE PROPERTY D(ddnw_sub_v20) a a 0.005
TRACE PROPERTY D(ddnw_sub_v20) p p 0.005
TRACE PROPERTY D(dipw_dnw_v20) a a 0.005
TRACE PROPERTY D(dipw_dnw_v20) p p 0.005
#ENDIF
#ENDIF
// Note: no tolerance specified - always
// combine parallel diodes regardless
// of whether they are the same size:
LVS REDUCE D PARALLEL YES [
EFFECTIVE a , p, m
a = SUM( a )
p = SUM( p )
m = SUM( m )
]
LVS REDUCE D SERIES POS NEG NO
// ************
// CAP:
// ************
DEVICE C(cm3m4) cap_34 m4(POS) m3(NEG) [
PROPERTY a, p
a = area(cap_34)
p = perimeter(cap_34)
]
DEVICE C(cm4m5) cap_45 m5(POS) m4(NEG) [
PROPERTY a, p
a = area(cap_45)
p = perimeter(cap_45)
]
LVS REDUCE C PARALLEL YES [
TOLERANCE a 1.0
p 1.0
EFFECTIVE a , p, m
a = SUM( a )
p = SUM( p )
m = SUM( m )
]
TRACE PROPERTY C a a 0
TRACE PROPERTY C p p 0
TRACE PROPERTY C m m 0
// ************
// BIPOLAR:
// ************
DEVICE Q(npn_1x1) npn_1x1_rec nwell(C) ptubtap(B) nsd(E) pwell_all(S) [
PROPERTY a, p
a = area( E )
p = perimeter( E )
]
DEVICE Q(npn_1x1_v5) npn_1x1_rec_v5 nwell(C) ptubtap(B) nsd(E) pwell_all(S) [
PROPERTY a, p
a = area( E )
p = perimeter( E )
]
DEVICE Q(npn_1x2) npn_1x2_rec nwell(C) ptubtap(B) nsd(E) pwell_all(S) [
PROPERTY a, p
a = area( E )
p = perimeter( E )
]
DEVICE Q(pnp) pnp_rec_1x ptap(C) ntap(B) psd(E) pwell_all(S) [
PROPERTY a, p
a = area( E )
p = perimeter( E )
]
DEVICE Q(pnp_5x) pnp_rec_5x ptap(C) ntap(B) psd(E) pwell_all(S) [
PROPERTY a, p
a = area( E )
p = perimeter( E )
]
TRACE PROPERTY Q m m 0
TRACE PROPERTY Q a a 0
TRACE PROPERTY Q p p 0
LVS REDUCE Q PARALLEL YES [
TOLERANCE a 1
p 1
EFFECTIVE a , p , m
m = SUM( m )
a = SUM( a )
p = SUM( (p * m) ) / m
]
// ********************************************************
// End device declarations
// ********************************************************
// ********************************************************
// Begin Macro definitions
// ********************************************************
DMACRO MOS_PARAMS rec_layer src_drn {
[
PROPERTY w, l, m, AS, AD, PS, PD, nrd, nrs
m = 1
a = area( rec_layer )
w = perimeter_coincide( rec_layer, src_drn ) * 0.5
l = a / w
AS = area( src_drn ) * 0.5
PS = perimeter( src_drn ) * 0.5 - w
AD = area( src_drn ) * 0.5
PD = perimeter( src_drn ) * 0.5 - w
nrs = 0
nrd = 0
]
}
DMACRO RES_PARAMS rec_layer term_layer {
[
PROPERTY l, w, m, segments
a = area( rec_layer )
w = perimeter_coincide( rec_layer, term_layer ) * 0.5
l = a / w
m = 1
segments = 1
]
}
DMACRO DIO_PARAMS rec_layer {
[
PROPERTY a, p, m
p = perimeter( rec_layer )
a = area( rec_layer )
m = 1
]
}
DMACRO PWRES_DIO_PARAMS rec_layer pt_b pt_c pw_r {
[
PROPERTY w, l, a, p
w = perimeter_coincide( pw_r, pt_c )
l = (area(pt_b) / w) / 2
a = l * w
p = 2 * l + w
]
}
DMACRO CALC_RES_BENT_PARAMS rec_layer term_layer {
[
PROPERTY l, w, m, segments
dev_perim = perimeter( rec_layer ) * 0.5
w = perimeter_coincide( rec_layer , term_layer ) * 0.5
nbend = bends(rec_layer)
segments = 1 + bends( rec_layer ) / 2
l = dev_perim - (w * (1 + (nbend * 0.5))) - (w * nbend * 0.5) + (w * 1.414 * nbend * 0.5)
m = 1
]
}
DMACRO TRACE_SERP_RES_PROPS rec_layer l w m segments {
TRACE PROPERTY R(rec_layer) [
PROPERTY l, w, m, segments
tolerance_l = 5
tolerance_w = 1
tolerance_m = 0
tolerance_s = 0
lay_l = layout_numeric_value(l)
src_l = source_numeric_value(l)
lay_w = layout_numeric_value(w)
src_w = source_numeric_value(w)
lay_m = layout_numeric_value(m)
src_m = source_numeric_value(m)
lay_s = layout_numeric_value(segments)
src_s = source_numeric_value(segments)
//L property
if (src_l != 0) {
diff = ABS (lay_l - src_l )
discrepency = 100 * diff / src_l
} else if (lay_l != 0 ) {
diff = ABS (lay_l - src_l )
discrepency = 100 * diff / lay_l
}
// if the resistor is serpentine (segments > 1) change
// tolerance to 5%:
if (lay_s > 1) {
tolerance_l = 5
} else { tolerance_l = 1}
if ( discrepency > tolerance_l ) {
report_numeric_discrepancy(l, discrepency)
}
//W property
if (src_w != 0) {
diff = ABS (lay_w - src_w )
discrepency = 100 * diff / src_w
} else if (lay_w != 0 ) {
diff = ABS (lay_w - src_w )
discrepency = 100 * diff / lay_w
}
if ( discrepency > tolerance_w ) {
report_numeric_discrepancy(w, discrepency)
}
//M property
if (src_m != 0) {
diff = ABS (lay_m - src_m )
discrepency = 100 * diff / src_m
} else if (lay_m != 0 ) {
diff = ABS (lay_m - src_m )
discrepency = 100 * diff / lay_m
}
if ( discrepency > tolerance_m ) {
report_numeric_discrepancy(m, discrepency)
}
//Segments property
if (src_s != 0) {
diff = ABS (lay_s - src_s )
discrepency = 100 * diff / src_s
} else if (lay_s != 0 ) {
diff = ABS (lay_s - src_s )
discrepency = 100 * diff / lay_s
}
if ( discrepency > tolerance_s ) {
report_numeric_discrepancy(segments, discrepency)
}
]
}
// calulate pad params
DMACRO PAD_PARAMS rec_lay pad_len {
[
PROPERTY w , l , m
m = 1
a = area( rec_lay )
l = ( perimeter_inside( pad_len, rec_lay)) / 2
w = a / l
]
}
// pad trace props
DMACRO TRACE_PAD_PROPS model_name {
TRACE PROPERTY model_name l l 0
TRACE PROPERTY model_name w w 0
TRACE PROPERTY model_name m m 0
}
// combine parallel pads
DMACRO PAD_PARALLEL type {
LVS REDUCE type PARALLEL YES [
TOLERANCE w 0
l 0
EFFECTIVE m, l, w
m = sum( m )
l = sum( l )
w = sum( w )
]
}
// ********************************************************
// End Macro definitions
// ********************************************************