| // ******************************************************** |
| // 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. |
| //////////////////////////////////////////////////////////////////////////////// |
| |
| // ******************************************************** |
| // Begin control statements |
| // ******************************************************** |
| lvs_spice -allow_unquoted_strings YES |
| layout_allow_duplicate_cell YES |
| exception_severity DUPLICATE_CELL 3 |
| |
| layout_use_database_precision YES |
| lvs_report_units NO |
| |
| unit -length m |
| exception_severity METRIC_RULE_FILE 0 |
| |
| schematic_format SPICE |
| |
| flow_data ui_data; |
| mask_svdb_dir "svdb" -query -xrc -cci -ixf -nxf -slph |
| |
| lvs_report_opt NONE |
| lvs_report_max 50 |
| |
| lvs_recognize_gates -none |
| |
| lvs_abort -softchk NO |
| lvs_abort -supply_error YES |
| lvs_ignore_ports NO |
| lvs_show_seed_promotions NO |
| lvs_show_seed_promotions_max 50 |
| lvs_compare_port_names YES |
| |
| lvs_find_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_device icecap -open -source |
| |
| // ******************************************************** |
| // END filter statements |
| // ******************************************************** |
| |
| // ******************************************************** |
| // Begin layer definitions |
| // ******************************************************** |
| |
| layer_def nwell_i 1000 |
| layer_map 64 -datatype 20 1000 // nwell drawing |
| |
| ////LAYER tunm 1001 |
| //// LAYER MAP 80 DATATYPE 20 1001 // tunm drawing |
| |
| layer_def diff_i 1002 |
| layer_map 65 -datatype 20 1002 // diff drawing |
| |
| layer_def poly_i 1004 |
| layer_map 66 -datatype 20 1004 // poly drawing |
| |
| layer_def lvtn_i 1005 |
| layer_map 125 -datatype 44 1005 // lvtn drawing |
| |
| layer_def hvtp_i 1006 |
| layer_map 78 -datatype 44 1006 // hvtp drawing |
| |
| layer_def npc_i 1007 |
| layer_map 95 -datatype 20 1007 // npc drawing |
| |
| layer_def nsdm_i 1008 |
| layer_map 93 -datatype 44 1008 // nsdm drawing |
| |
| layer_def psdm_i 1009 |
| layer_map 94 -datatype 20 1009 // psdm drawing |
| |
| layer_def mcon_i 1010 |
| layer_map 67 -datatype 44 1010 // mcon drawing |
| |
| layer_def met1_i 1011 |
| layer_map 68 -datatype 20 1011 // met1 drawing |
| |
| layer_def m1res_i 1212 |
| layer_map 68 -datatype 13 1212 // met1 res |
| |
| layer_def via1_i 1012 |
| layer_map 68 -datatype 44 1012 // via1 drawing |
| |
| layer_def met2_i 1013 |
| layer_map 69 -datatype 20 1013 // met2 drawing |
| |
| layer_def m2res_i 1214 |
| layer_map 69 -datatype 13 1214 // met2 res |
| |
| layer_def via2_i 1014 |
| layer_map 69 -datatype 44 1014 // via2 drawing |
| |
| layer_def met3_i 1015 |
| layer_map 70 -datatype 20 1015 // met3 drawing |
| |
| layer_def m3res_i 1216 |
| layer_map 70 -datatype 13 1216 // met3 res |
| |
| layer_def via3i_i 1016 |
| layer_map 70 -datatype 44 1016 // via3 drawing |
| |
| layer_def met4_i 1017 |
| layer_map 71 -datatype 20 1017 // met4 drawing |
| |
| layer_def m4res_i 1218 |
| layer_map 71 -datatype 13 1218 // met4 res |
| |
| layer_def via4i_i 1018 |
| layer_map 71 -datatype 44 1018 // via4 drawing |
| |
| layer_def met5_i 1019 |
| layer_map 72 -datatype 20 1019 // met5 drawing |
| |
| layer_def m5res_i 1220 |
| layer_map 72 -datatype 13 1220 // met5 res |
| |
| layer_def pad_i 1020 |
| layer_map 76 -datatype 20 1020 // pad drawing |
| |
| layer_def licon_i 1021 |
| layer_map 66 -datatype 44 1021 // licon drawing |
| |
| layer_def li_ii 1022 |
| layer_map 67 -datatype 20 1022 // li drawing |
| |
| layer_def lires_i 1223 |
| layer_map 67 -datatype 13 1223 // li res |
| |
| layer_def pnp_i 1023 |
| layer_map 82 -datatype 44 1023 // pnp drawing |
| |
| layer_def npn_i 1024 |
| layer_map 82 -datatype 20 1024 // npn drawing |
| |
| layer_def v5_i 1025 |
| layer_map 75 -datatype 20 1025 // hvi drawing |
| |
| layer_def ldntm_i 1026 |
| layer_map 11 -datatype 44 1026 // ldntm drawing |
| |
| layer_def capacitor_i 1027 |
| layer_map 82 -datatype 64 1027 // capacitor drawing |
| |
| layer_def ncm_i 1028 |
| layer_map 92 -datatype 44 1028 // ncm drawing |
| |
| layer_def rdl_i 1029 |
| layer_map 74 -datatype 20 1029 // rdl drawing |
| |
| layer_def rpm_i 1030 |
| layer_map 86 -datatype 20 1030 // rpm drawing |
| |
| layer_def inductor_i 1031 |
| layer_map 82 -datatype 24 1031 // inductor drawing |
| |
| layer_def pmm_i 1032 |
| layer_map 85 -datatype 44 1032 // pmm drawing |
| |
| layer_def ubm_i 1033 |
| layer_map 127 -datatype 21 1033 // ubm drawing |
| |
| layer_def 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_def dnwell_i 1047 |
| layer_map 64 -datatype 18 1047 // dnwell drawing |
| |
| layer_def DiodeID_i 1048 |
| layer_map 81 -datatype 23 1048 // areaid diode |
| |
| layer_def ESDID_i 1049 |
| layer_map 81 -datatype 19 1049 // areaid esd |
| |
| layer_def ENID_i 1050 |
| layer_map 81 -datatype 57 1050 // areaid extendedDrain |
| |
| layer_def COREID_i 1051 |
| layer_map 81 -datatype 2 1051 // areaid core |
| |
| layer_def SEALID_i 1052 |
| layer_map 81 -datatype 1 1052 // areaid seal |
| |
| layer_def FRAMEID_i 1053 |
| layer_map 81 -datatype 3 1053 // areaid frame |
| |
| layer_def LVID_i 1054 |
| layer_map 81 -datatype 60 1054 // areaid lvNative |
| |
| layer_def STDCID_i 1055 |
| layer_map 81 -datatype 4 1055 // areaid standardc |
| |
| layer_def localSub_i 1056 |
| layer_map 81 -datatype 53 1056 // areaid substrateCut |
| |
| layer_def PHdiodeID_i 1057 |
| layer_map 81 -datatype 81 1057 // areaid photo |
| |
| layer_def diffres_i 1060 |
| layer_map 65 -datatype 13 1060 // diff res |
| |
| layer_def fuse_i 1062 |
| layer_map 71 -datatype 17 1062 // met4 fuse |
| |
| layer_def padCenter_i 1063 |
| layer_map 81 -datatype 20 1063 // padCenter drawing |
| |
| layer_def LVS_exclude 1064 |
| layer_map 84 -datatype 44 1064 // LVS_exclude drawing |
| |
| layer_def polyres_i 1065 |
| layer_map 66 -datatype 13 1065 // poly res |
| |
| layer_def pwres_i 1075 |
| layer_map 64 -datatype 13 1075 // pwell res |
| |
| layer_def padtt 1077 1078 |
| layer_map 76 -texttype 20 1077 // pad drawing |
| layer_map 76 -texttype 5 1078 // pad label |
| |
| layer_def rdltt 1079 1080 |
| layer_map 74 -texttype 20 1079 // rdl drawing |
| layer_map 74 -texttype 5 1080 // rdl label |
| |
| layer_def met5tt 1082 |
| layer_map 72 -texttype 5 1082 // met5 label |
| |
| layer_def met4tt 1085 |
| layer_map 71 -texttype 5 1085 // met4 label |
| |
| layer_def met3tt 1088 |
| layer_map 70 -texttype 5 1088 // met3 label |
| |
| layer_def met2tt 1091 |
| layer_map 69 -texttype 5 1091 // met2 label |
| |
| layer_def met1tt 1094 |
| layer_map 68 -texttype 5 1094 // met1 label |
| |
| layer_def litt 1097 |
| layer_map 67 -texttype 5 1097 // li label |
| |
| layer_def polytt 1100 |
| layer_map 66 -texttype 5 1100 // poly label |
| |
| layer_def difftt 1103 |
| layer_map 65 -texttype 6 1103 // diff label |
| |
| layer_def pwelltt 1105 |
| layer_map 64 -texttype 59 1105 // pwell label |
| |
| layer_def pwellisott 1106 |
| layer_map 44 -texttype 5 1106 // pwelliso label |
| |
| layer_def nwelltt 1108 |
| layer_map 64 -texttype 5 1108 // nwell label |
| |
| //LAYER textdraw 1110 |
| // LAYER MAP 83 TEXTTYPE 44 1110 // text drawing |
| |
| layer_def pwell_pin 1111 |
| layer_map 122 -datatype 16 1111 // pwell pin |
| |
| layer_def pwelliso_pin 1112 |
| layer_map 44 -datatype 16 1112 // pwelliso pin |
| |
| layer_def nwell_pin 1113 |
| layer_map 64 -datatype 16 1113 // nwell pin |
| |
| layer_def diff_pin 1114 |
| layer_map 65 -datatype 16 1114 // diff pin |
| |
| layer_def poly_pin 1115 |
| layer_map 66 -datatype 16 1115 // poly pin |
| |
| layer_def li_pin 1116 |
| layer_map 67 -datatype 16 1116 // li pin |
| |
| layer_def met1_pin 1117 |
| layer_map 68 -datatype 16 1117 // met1 pin |
| |
| layer_def met2_pin 1118 |
| layer_map 69 -datatype 16 1118 // met2 pin |
| |
| layer_def met3_pin 1119 |
| layer_map 70 -datatype 16 1119 // met3 pin |
| |
| layer_def met4_pin 1120 |
| layer_map 71 -datatype 16 1120 // met4 pin |
| |
| layer_def met5_pin 1121 |
| layer_map 72 -datatype 16 1121 // met5 pin |
| |
| layer_def rdl_pin 1122 |
| layer_map 74 -datatype 16 1122 // rdl pin |
| |
| layer_def pad_pin 1123 |
| layer_map 76 -datatype 16 1123 // pad pin |
| |
| layer_def pwellpt_i 1124 |
| layer_map 122 -texttype 16 1124 // pwell pin |
| layer_map 122 -texttype 0 1124 // pwell pin |
| |
| layer_def pwellisopt_i 1125 |
| layer_map 44 -texttype 16 1125 // pwelliso pin |
| layer_map 44 -texttype 0 1125 // pwelliso pin |
| |
| layer_def nwellpt_i 1126 |
| layer_map 64 -texttype 16 1126 // nwell pin |
| layer_map 64 -texttype 0 1126 // nwell pin |
| |
| layer_def diffpt_i 1127 |
| layer_map 65 -texttype 16 1127 // diff pin |
| layer_map 65 -texttype 0 1127 // diff pin |
| |
| layer_def polypt_i 1128 |
| layer_map 66 -texttype 16 1128 // poly pin |
| layer_map 66 -texttype 0 1128 // poly pin |
| |
| layer_def lipt_i 1129 |
| layer_map 67 -texttype 16 1129 // li pin |
| layer_map 67 -texttype 0 1129 // li pin |
| |
| layer_def met1pt_i 1130 |
| layer_map 68 -texttype 16 1130 // met1 pin |
| layer_map 68 -texttype 0 1130 // met1 pin |
| |
| layer_def met2pt_i 1131 |
| layer_map 69 -texttype 16 1131 // met2 pin |
| layer_map 69 -texttype 0 1131 // met2 pin |
| |
| layer_def met3pt_i 1132 |
| layer_map 70 -texttype 16 1132 // met3 pin |
| layer_map 70 -texttype 0 1132 // met3 pin |
| |
| layer_def met4pt_i 1133 |
| layer_map 71 -texttype 16 1133 // met4 pin |
| layer_map 71 -texttype 0 1133 // met4 pin |
| |
| layer_def met5pt_i 1134 |
| layer_map 72 -texttype 16 1134 // met5 pin |
| layer_map 72 -texttype 0 1134 // met5 pin |
| |
| layer_def rdlpt_i 1135 |
| layer_map 74 -texttype 16 1135 // rdl pin |
| layer_map 74 -texttype 0 1135 // rdl pin |
| |
| layer_def 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_def moduleCutAREA_i 1153 |
| layer_map 81 -datatype 10 1153 // areaid moduleCut |
| |
| layer_def indLabel_i 1154 |
| layer_map 82 -texttype 25 1154 // inductor label |
| |
| layer_def indTerm1_i 1155 |
| layer_map 82 -datatype 26 1155 // inductor term1 |
| |
| layer_def indTerm2_i 1156 |
| layer_map 82 -datatype 27 1156 // inductor term2 |
| |
| layer_def indTerm3_i 1157 |
| layer_map 82 -datatype 28 1157 // inductor term3 |
| |
| layer_def capm_i 1158 |
| layer_map 89 -datatype 44 1158 // capm drawing |
| |
| layer_def cap2m_i 1159 |
| layer_map 97 -datatype 44 1159 // cap2m drawing |
| |
| layer_def urpm_i 1160 |
| layer_map 79 -datatype 20 1160 // urpm drawing |
| |
| layer_def EXTDRAIN20_i 1161 |
| layer_map 81 -datatype 58 1161 // extd20v drawing |
| |
| layer_def pwbm_i 1162 |
| layer_map 19 -datatype 44 1162 // pwbm drawing |
| |
| layer_def pwde_i 1163 |
| layer_map 124 -datatype 20 1163 // pwbm drawing |
| |
| layer_def LOWVTID_i 1164 |
| layer_map 81 -datatype 108 1164 // areaid low_vt drawing |
| |
| layer_def v20_i 1165 |
| layer_map 74 -datatype 22 1165 // uhvi drawing |
| |
| layer_def v12_i 1166 |
| layer_map 74 -datatype 21 1166 // uhvi drawing |
| |
| layer_def padLength_i 1167 |
| layer_map 81 -datatype 67 1167 // pad length marker |
| |
| layer_def etest_i 1168 |
| layer_map 81 -datatype 101 1168 // pad e_test marker |
| |
| layer_def thkox_i 1169 |
| layer_map 75 -datatype 21 1169 // thick oxide |
| |
| layer_def poly_fill 1170 |
| layer_map 66 -datatype 99 1170 // poly fill |
| |
| layer_def diff_fill 1171 |
| layer_map 65 -datatype 99 1171 // diff fill |
| |
| layer_def li_fill 1172 |
| layer_map 67 -datatype 99 1172 // li fill |
| |
| layer_def met1_fill 1173 |
| layer_map 68 -datatype 99 1173 // met1 fill |
| |
| layer_def met2_fill 1174 |
| layer_map 69 -datatype 99 1174 // met2 fill |
| |
| layer_def met3_fill 1175 |
| layer_map 70 -datatype 99 1175 // met3 fill |
| |
| layer_def met4_fill 1176 |
| layer_map 71 -datatype 99 1176 // met4 fill |
| |
| layer_def met5_fill 1177 |
| layer_map 72 -datatype 99 1177 // met5 fill |
| |
| layer_def poly_gate 1178 |
| layer_map 66 -datatype 9 1178 // poly_gate |
| |
| extent_drawn -original -outputlayer boundary |
| |
| treat_non_baselayer_as_toplayer yes |
| 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: |
| // ******************************************************** |
| not nwell_i LVS_exclude -outputlayer nwell |
| or ( not diff_i LVS_exclude ) diff_fill -outputlayer diff |
| or ( not poly_i LVS_exclude ) poly_fill -outputlayer poly |
| not lvtn_i LVS_exclude -outputlayer lvtn |
| not hvtp_i LVS_exclude -outputlayer hvtp |
| not npc_i LVS_exclude -outputlayer npc |
| not nsdm_i LVS_exclude -outputlayer nsdm |
| not psdm_i LVS_exclude -outputlayer psdm |
| not mcon_i LVS_exclude -outputlayer mcon |
| not ( not met1_i LVS_exclude ) met1_fill -outputlayer met1 |
| not m1res_i LVS_exclude -outputlayer m1res |
| not via1_i LVS_exclude -outputlayer via1 |
| not ( not met2_i LVS_exclude ) met2_fill -outputlayer met2 |
| not m2res_i LVS_exclude -outputlayer m2res |
| not via2_i LVS_exclude -outputlayer via2 |
| not ( not met3_i LVS_exclude ) met3_fill -outputlayer met3 |
| not m3res_i LVS_exclude -outputlayer m3res |
| not via3i_i LVS_exclude -outputlayer via3i |
| not ( not met4_i LVS_exclude ) met4_fill -outputlayer met4 |
| not m4res_i LVS_exclude -outputlayer m4res |
| not via4i_i LVS_exclude -outputlayer via4i |
| not ( not met5_i LVS_exclude ) met5_fill -outputlayer met5 |
| not m5res_i LVS_exclude -outputlayer m5res |
| not pad_i LVS_exclude -outputlayer pad |
| not licon_i LVS_exclude -outputlayer licon |
| or ( not li_ii LVS_exclude ) li_fill -outputlayer li_i |
| not ( not lires_i LVS_exclude ) li_fill -outputlayer lires |
| not pnp_i LVS_exclude -outputlayer pnp |
| not npn_i LVS_exclude -outputlayer npn |
| not v5_i LVS_exclude -outputlayer v5 |
| not ldntm_i LVS_exclude -outputlayer ldntm |
| not capacitor_i LVS_exclude -outputlayer capacitor |
| not ncm_i LVS_exclude -outputlayer ncm |
| not rdl_i LVS_exclude -outputlayer rdl |
| not rpm_i LVS_exclude -outputlayer rpm |
| not inductor_i LVS_exclude -outputlayer inductor |
| not pmm_i LVS_exclude -outputlayer pmm |
| not ubm_i LVS_exclude -outputlayer ubm |
| not bump_i LVS_exclude -outputlayer bump |
| not dnwell_i LVS_exclude -outputlayer dnwell |
| not DiodeID_i LVS_exclude -outputlayer DiodeID |
| not ESDID_i LVS_exclude -outputlayer ESDID |
| not ENID_i LVS_exclude -outputlayer ENID |
| not COREID_i LVS_exclude -outputlayer COREID |
| not SEALID_i LVS_exclude -outputlayer SEALID |
| not FRAMEID_i LVS_exclude -outputlayer FRAMEID |
| not LVID_i LVS_exclude -outputlayer LVID |
| not STDCID_i LVS_exclude -outputlayer STDCID |
| not localSub_i LVS_exclude -outputlayer localSub |
| not PHdiodeID_i LVS_exclude -outputlayer PHdiodeID |
| not diffres_i LVS_exclude -outputlayer diffres |
| not fuse_i LVS_exclude -outputlayer fuse |
| not padCenter_i LVS_exclude -outputlayer padCenter |
| not polyres_i LVS_exclude -outputlayer polyres |
| not pwres_i LVS_exclude -outputlayer pwres |
| not pwellpt_i LVS_exclude -outputlayer pwellpt |
| not pwellisopt_i LVS_exclude -outputlayer pwellisopt |
| not nwellpt_i LVS_exclude -outputlayer nwellpt |
| not diffpt_i LVS_exclude -outputlayer diffpt |
| not polypt_i LVS_exclude -outputlayer polypt |
| not lipt_i LVS_exclude -outputlayer lipt |
| not met1pt_i LVS_exclude -outputlayer met1pt |
| not met2pt_i LVS_exclude -outputlayer met2pt |
| not met3pt_i LVS_exclude -outputlayer met3pt |
| not met4pt_i LVS_exclude -outputlayer met4pt |
| not met5pt_i LVS_exclude -outputlayer met5pt |
| not rdlpt_i LVS_exclude -outputlayer rdlpt |
| not padpt_i LVS_exclude -outputlayer padpt |
| not moduleCutAREA_i LVS_exclude -outputlayer moduleCutAREA |
| not indLabel_i LVS_exclude -outputlayer indLabel |
| not indTerm1_i LVS_exclude -outputlayer indTerm1 |
| not indTerm2_i LVS_exclude -outputlayer indTerm2 |
| not indTerm3_i LVS_exclude -outputlayer indTerm3 |
| not capm_i LVS_exclude -outputlayer capm |
| not cap2m_i LVS_exclude -outputlayer cap2m |
| not urpm_i LVS_exclude -outputlayer urpm |
| not EXTDRAIN20_i LVS_exclude -outputlayer EXTDRAIN20 |
| not pwbm_i LVS_exclude -outputlayer pwbm |
| not pwde_i LVS_exclude -outputlayer pwde |
| not LOWVTID_i LVS_exclude -outputlayer LOWVTID |
| not v20_i LVS_exclude -outputlayer v20 |
| not v12_i LVS_exclude -outputlayer v12 |
| not padLength_i LVS_exclude -outputlayer padLength |
| not etest_i LVS_exclude -outputlayer etest |
| not thkox_i LVS_exclude -outputlayer thkox |
| |
| // ******************************************************** |
| // Begin layer boolean operations |
| // ******************************************************** |
| |
| // PAD: |
| // BOND PAD: |
| not ( and pad met5 ) etest -outputlayer pad_rec1 |
| size pad_rec1 -by -20 -outputlayer pad_rec2 |
| size pad_rec2 -by 20 -outputlayer pad_rec |
| |
| // MICRO-PROBE PAD: |
| select -label pad -textname "u-test" -outputlayer upad_rec0 |
| and ( and upad_rec0 met5 ) etest -outputlayer upad_rec1 |
| size upad_rec1 -by -3 -outputlayer upad_rec2 |
| size upad_rec2 -by 3 -outputlayer upad_rec |
| |
| // ETEST PROBE PAD: |
| select -label pad -textname "e-test" -outputlayer epad_rec0 |
| and ( and epad_rec0 met5 ) etest -outputlayer epad_rec1 |
| size epad_rec1 -by -15 -outputlayer epad_rec2 |
| size epad_rec2 -by 15 -outputlayer epad_rec |
| |
| // WELLS: |
| size localSub -by 0.005 -outputlayer substrateCutDonut1 |
| size localSub -by -0.005 -outputlayer substrateCutDonut2 |
| not substrateCutDonut1 substrateCutDonut2 -outputlayer substrateCutDonut |
| |
| not ( not boundary ( or localSub nwell ) ) ( or ( and ( holes nwell ) dnwell ) substrateCutDonut ) -outputlayer pwell |
| not ( size ( and ( holes nwell -inner ) dnwell ) -by -0.005 ) ( or pwres pwell pwbm ) -outputlayer ptub_a |
| size ( not ( size ( and ( holes nwell -inner ) dnwell ) -by -0.005 ) pwell ) -by 0.005 -outputlayer ptub_b // for sub diode of pwres |
| not ( size ( not ( size ( and ( holes nwell -inner ) dnwell ) -by -0.005 ) ( or pwres pwell ) ) -by 0.005 ) pwres -outputlayer ptub_c // for sub diode of pwres |
| size ( not ( select -interact ( and ( holes nwell -inner ) dnwell ) pwres ) ( select -interact diff pwres ) ) -by 0.005 -outputlayer ptub_in_pwres |
| copy ptub_a -outputlayer ptub |
| rule "debug.ptub" { |
| copy ptub |
| } |
| rule "debug.nwell.holes" { |
| copy ( holes nwell ) |
| } |
| //pwell_all_a = (boundary NOT (OR ptub substrateCutDonut)) OR ptub |
| not ( size boundary -by 0.005 ) substrateCutDonut -outputlayer pwell_all_a |
| not pwell_all_a ptub -outputlayer pwell_all |
| |
| //pwell_all = ptub OR ((boundary INTERACT substrateCutDonut) NOT substrateCutDonut) |
| // TAPS: |
| and ( and diff psdm ) ( not ptub nwell ) -outputlayer ptubtap_1 |
| not ( not ( not ( not ( and diff psdm ) nwell ) ptub ) ptubtap ) pwbm -outputlayer ptap_1 |
| and ( and diff nsdm ) nwell -outputlayer ntap_1 |
| |
| // MOS: |
| not ( not ( and diff nsdm ) nwell ) gate -outputlayer nsd1 |
| not ( and ( and diff psdm ) nwell ) gate -outputlayer psd1 |
| |
| // for IO libs with chamferred poly over diff: |
| //gate = diff AND poly |
| and diff ( or ( select -interact -not poly poly_gate ) ( and poly poly_gate ) ) -outputlayer gate |
| |
| // nominal (1.8v) ngate: |
| not ( and ( and gate nsdm ) pwell_all ) ( or diff_fill poly_fill v5 v12 v20 lvtn ESDID LVID npn pnp thkox ) -outputlayer ngate_nom_pw |
| |
| not ( and ( and gate nsdm ) ptub ) ( or diff_fill poly_fill v5 v12 v20 lvtn ESDID LVID npn pnp thkox ) -outputlayer ngate_nom_pt |
| |
| // nominal (1.8v) esd ngate: |
| not ( not ( and ( and ( not ( and gate nsdm ) v5 ) ESDID ) ptub ) thkox ) ( or diff_fill poly_fill v12 v20 lvtn LVID pnp npn ) -outputlayer ngate_nom_esd_pt |
| |
| not ( not ( and ( and ( not ( and gate nsdm ) v5 ) ESDID ) pwell_all ) thkox ) ( or diff_fill poly_fill v12 v20 lvtn LVID pnp npn ) -outputlayer ngate_nom_esd_pw |
| |
| // low voltage threshold ngate: |
| not ( and ( and ( and gate nsdm ) lvtn ) pwell_all ) ( or diff_fill poly_fill v5 v12 v20 ESDID LVID npn pnp thkox ) -outputlayer ngate_lvt_pw |
| |
| not ( and ( and ( and gate nsdm ) lvtn ) ptub ) ( or diff_fill poly_fill v5 v12 v20 ESDID LVID pnp npn thkox ) -outputlayer ngate_lvt_pt |
| |
| // 5v ngate: |
| not ( and ( and ( and ( and gate nsdm ) v5 ) thkox ) pwell_all ) ( or diff_fill poly_fill v12 v20 lvtn ESDID LVID pnp npn ) -outputlayer ngate_v5_pw |
| |
| not ( and ( and ( and ( and gate nsdm ) v5 ) thkox ) ptub ) ( or diff_fill poly_fill v12 v20 lvtn ESDID LVID pnp npn ) -outputlayer ngate_v5_pt |
| |
| // 12v ngate: |
| not ( and ( and ( and ( and gate nsdm ) v12 ) pwell_all ) thkox ) ( or diff_fill poly_fill v5 v20 lvtn ESDID LVID pnp npn ENID ) -outputlayer ngate_v12_pw |
| |
| not ( and ( and ( and ( and gate nsdm ) v12 ) ptub ) thkox ) ( or diff_fill poly_fill v5 v20 lvtn ESDID LVID pnp npn ENID ) -outputlayer ngate_v12_pt |
| |
| // 20v ngate: |
| holes pwbm -outputlayer pwbm_holes |
| |
| not ( and ( and ( not ( and ( and gate nsdm ) v20 ) dnwell ) thkox ) lvtn ) ( or diff_fill poly_fill v5 v12 ESDID LVID pnp npn ) -outputlayer ngate_v20a |
| |
| not ( not ( and ( and ( and ( and gate nsdm ) v20 ) dnwell ) thkox ) lvtn ) ( or diff_fill poly_fill ngate_v20a v5 v12 ESDID LVID pnp npn ) -outputlayer ngate_v20_iso_rec |
| and ( select -interact ( holes pwbm ) ngate_v20_iso_rec ) dnwell -outputlayer ngate_v20_iso_sub |
| and ( and psdm diff ) ngate_v20_iso_sub -outputlayer ngate_v20_iso_sub_cont |
| copy ngate_v20_iso_rec -outputlayer ngate_v20_iso_gate |
| |
| or ngate_v20a ngate_v20_iso_rec -outputlayer ngate_v20 |
| |
| not ( and diff nsdm ) ngate_v20 -outputlayer nsd_20v |
| |
| edge_expand ( edge_boolean -coincident_only ( not nsd_20v ngate_v20 ) ENID ) -outside_by 0.05 -outputlayer nsd_20v_src_1 |
| |
| select -touch ( not nsd_20v ngate_v20 ) nsd_20v_src_1 -eq 3 -outputlayer nsd_20v_src |
| |
| not ( and ( select -enclose lvtn nsdm ) ngate_v20 ) pwbm -outputlayer ngate_v20_nat |
| |
| not ( not ( select -interact ENID ngate_v20_nat ) ngate_v20_nat ) nsd_20v_src -outputlayer nsd_20v_nat_drn |
| |
| not ( not ( not ( select -interact ENID ngate_v20 ) ngate_v20 ) nsd_20v_src ) nsd_20v_nat_drn -outputlayer nsd_20v_drn |
| |
| not ( and ( not ( select -cut lvtn nsdm ) ( select -enclose lvtn nsdm ) ) ngate_v20 ) ( or ngate_v20_iso_rec ngate_v20_nat ) -outputlayer ngate_v20_zvt |
| not ngate_v20 ( select -interact poly ( or ngate_v20_nat ngate_v20_zvt ngate_v20_iso_rec ) ) -outputlayer ngate_v20_nom |
| |
| and ngate_v20_iso_rec poly -outputlayer ngate_de_20v_iso_gate_conn |
| and ngate_v20_nom poly -outputlayer ngate_de_20v_nom_gate_conn |
| and ngate_v20_zvt poly -outputlayer ngate_de_20v_zvt_gate_conn |
| and ngate_v20_nat poly -outputlayer ngate_de_20v_nat_gate_conn |
| |
| // 5v esd native ngate: |
| not ( and ( and ( and ( and ( and ( and gate nsdm ) v5 ) lvtn ) ESDID ) pwell_all ) thkox ) ( or diff_fill poly_fill v12 v20 LVID pnp npn ) -outputlayer ngate_esd_nat_5v_pw |
| |
| not ( and ( and ( and ( and ( and ( and gate nsdm ) v5 ) lvtn ) ESDID ) ptub ) thkox ) ( or diff_fill poly_fill v12 v20 LVID pnp npn ) -outputlayer ngate_esd_nat_5v_pt |
| |
| // 5v esd ngate: |
| not ( and ( and ( and ( and ( and gate nsdm ) v5 ) ESDID ) pwell_all ) thkox ) ( or diff_fill poly_fill v12 v20 lvtn LVID pnp npn ) -outputlayer ngate_esd_5v_pw |
| |
| not ( and ( and ( and ( and ( and gate nsdm ) v5 ) ESDID ) ptub ) thkox ) ( or diff_fill poly_fill v12 v20 lvtn LVID pnp npn ) -outputlayer ngate_esd_5v_pt |
| |
| // 3v native ngate: |
| not ( and ( and ( and ( and ( and ( and gate nsdm ) LVID ) lvtn ) v5 ) pwell_all ) thkox ) ( or diff_fill poly_fill v12 v20 ESDID pnp npn ) -outputlayer ngate_nat_3v_pw |
| |
| not ( and ( and ( and ( and ( and gate nsdm ) LVID ) lvtn ) v5 ) ptub ) ( or diff_fill poly_fill v12 v20 ESDID pnp npn ) -outputlayer ngate_nat_3v_pt |
| |
| // 5v native ngate: |
| not ( and ( and ( and ( and ( and gate nsdm ) lvtn ) v5 ) pwell_all ) thkox ) ( or diff_fill poly_fill v12 v20 ESDID LVID pnp npn ) -outputlayer ngate_nat_5v_pw |
| |
| not ( and ( and ( and ( and ( and gate nsdm ) lvtn ) v5 ) ptub ) thkox ) ( or diff_fill poly_fill v12 v20 ESDID LVID pnp npn ) -outputlayer ngate_nat_5v_pt |
| |
| // 12v extended drain ngate: |
| not ( and ( not ( and ( and ( and gate nsdm ) v12 ) ENID ) nwell ) thkox ) ( or diff_fill poly_fill v5 v20 ESDID LVID pnp npn ) -outputlayer ngate_de_12v_pw |
| |
| and ngate_de_12v_pw poly -outputlayer ngate_de_12v_gate_conn |
| |
| select -interact nsd1 ngate_de_12v_pw -outputlayer nsrc_de_12v |
| |
| // 12v ngate: |
| and ( not ( not ( select -interact ( select -enclose ENID ntap_1 ) ngate_de_12v_pw ) ngate_de_12v_pw ) nsrc_de_12v ) nwell -outputlayer ndrn_de_12v |
| |
| // nominal (1.8v) pgate: |
| not ( and gate psdm ) ( or diff_fill poly_fill v5 v12 v20 lvtn ESDID hvtp LVID npn pnp ENID thkox ) -outputlayer pgate_nom |
| |
| // nominal (1.8v) low voltage threshold pgate: |
| not ( and ( and gate psdm ) lvtn ) ( or diff_fill poly_fill v5 v12 v20 ESDID hvtp LVID npn pnp ENID thkox ) -outputlayer pgate_lvt |
| |
| // nominal (1.8v) high voltage threshold pgate: |
| not ( and ( and gate psdm ) hvtp ) ( or diff_fill poly_fill v5 v12 v20 ESDID lvtn LVID npn pnp ENID thkox ) -outputlayer pgate_hvt |
| |
| // 5v pgate: |
| not ( and ( and ( and gate psdm ) v5 ) thkox ) ( or diff_fill poly_fill v12 v20 lvtn ESDID hvtp LVID npn pnp ENID ) -outputlayer pgate_v5 |
| |
| // 12v pgate: |
| not ( and ( and ( and gate psdm ) v12 ) thkox ) ( or v5 v20 lvtn ESDID hvtp LVID npn pnp ENID ) -outputlayer pgate_v12 |
| |
| // 5v esd pgate: |
| not ( and ( and ( and ( and gate psdm ) v5 ) ESDID ) thkox ) ( or diff_fill poly_fill v12 v20 LVID npn pnp ENID ) -outputlayer pgate_esd_v5 |
| |
| // 12v extended drain pgate: |
| not ( and ( and ( and ( and ( and gate psdm ) v12 ) ENID ) nwell ) thkox ) ( or diff_fill poly_fill v5 v20 ESDID LVID pnp npn ) -outputlayer pgate_de_12v_pw |
| |
| select -interact psd1 pgate_de_12v_pw -outputlayer psrc_de_12v |
| |
| not ( not ( not ( select -enclose ( select -enclose ENID ptap_1 ) pgate_de_12v_pw ) pgate_de_12v_pw ) psrc_de_12v ) nwell -outputlayer pdrn_de_12v |
| |
| and pgate_de_12v_pw poly -outputlayer pgate_de_12v_gate_conn |
| |
| // 20v extended drain pgate: |
| not ( and ( and ( and ( and ( not poly poly_fill ) v20 ) thkox ) ( not diff diff_fill ) ) psdm ) lvtn -outputlayer pgate_de_20v |
| copy pgate_de_20v -outputlayer pgate_de_20v_conn |
| |
| not ( and diff psdm ) pgate_de_20v -outputlayer psd_20v |
| |
| edge_expand ( edge_boolean -coincident_only ( not psd_20v pgate_de_20v ) ENID ) -outside_by 0.05 -outputlayer psd_20v_src_1 |
| |
| select -touch ( not psd_20v pgate_de_20v ) psd_20v_src_1 -eq 3 -outputlayer psrc_de_20v |
| |
| not ( select -interact ENID pgate_de_20v ) ( or pgate_de_20v psrc_de_20v ) -outputlayer pdrn_de_20v |
| |
| // TAPS and TUBS: |
| |
| not ntap_1 ( select -interact ntap_1 ( select -interact ENID ( or diff_fill ngate_de_12v_pw ngate_nat_5v_pt pgate_de_12v_pw ) ) ) -outputlayer ntap |
| |
| not ptap_1 ( select -interact ptap_1 ( or diff_fill pgate_de_12v_pw ngate_de_12v_pw pdrn_de_20v ngate_v20_iso_sub ) ) -outputlayer ptap |
| not ( not ptubtap_1 ( select -touch ( size ptubtap_1 -by 0.005 ) ( or pgate_de_12v_pw ngate_de_12v_pw ) ) ) ( or pwbm diff_fill ) -outputlayer ptubtap |
| |
| // RES: |
| |
| // high precision/high sheet: |
| and ( and pwres psdm ) ( and ( holes nwell ) dnwell ) -outputlayer pwres_rec |
| select -touch ( select -enclose ( not psdm pwres ) diff ) pwres_rec -eq 1 -outputlayer pwres_term |
| |
| and ( not poly poly_fill ) polyres -outputlayer hp_poly_1 |
| and hp_poly_1 npc -outputlayer hp_poly_2 |
| and hp_poly_2 psdm -outputlayer hp_poly_3 |
| and hp_poly_3 rpm -outputlayer hp_poly |
| and hp_poly nwell -outputlayer hp_poly_nw |
| not ( and hp_poly pwell_all ) nwell -outputlayer hp_poly_pw |
| and hp_poly ptub -outputlayer hp_poly_pt |
| |
| and ( not poly poly_fill ) polyres -outputlayer hs_poly_1 |
| and hs_poly_1 npc -outputlayer hs_poly_2 |
| and hs_poly_2 psdm -outputlayer hs_poly_3 |
| and hs_poly_3 urpm -outputlayer hs_poly |
| and hs_poly nwell -outputlayer hs_poly_nw |
| not ( and hs_poly pwell_all ) nwell -outputlayer hs_poly_pw |
| and hs_poly ptub -outputlayer hs_poly_pt |
| |
| // std poly: |
| not ( and poly polyres ) ( or poly_fill hp_poly hs_poly ) -outputlayer rpoly_rec |
| |
| // pdiff: |
| and ( and psdm ( not diff diff_fill ) ) diffres -outputlayer rpdiff_res_1 |
| not ( and rpdiff_res_1 nwell ) ( or diff_fill thkox v5 v12 v20 ) -outputlayer rpdiff_nom |
| not ( and ( and ( and rpdiff_res_1 nwell ) V5 ) thkox ) ( or diff_fill v12 v20 ) -outputlayer rpdiff_5v |
| |
| // ndiff: |
| and ( and nsdm ( not diff diff_fill ) ) diffres -outputlayer rndiff_res_1 |
| not ( and rndiff_res_1 pwell_all ) ( or thkox v5 v12 v20 ) -outputlayer rndiff_nom_pw |
| not ( and rndiff_res_1 ptub ) ( or thkox v5 v12 v20 ) -outputlayer rndiff_nom_pt |
| not ( and ( and ( and rndiff_res_1 pwell_all ) v5 ) thkox ) ( or v12 v20 ) -outputlayer rndiff_5v_pw |
| not ( and ( and ( and rndiff_res_1 ptub ) v5 ) thkox ) ( or v12 v20 ) -outputlayer rndiff_5v_pt |
| |
| |
| // DIO: |
| // N+ DIO: |
| and ( not ( and ( not ( and diodeID nsdm ) nwell ) diff ) ( or diff_fill ESDID v5 v12 v20 lvtn hvtp LVID ) ) pwell_all -outputlayer dnsd_pw |
| |
| and ( not ( and ( not ( and diodeID nsdm ) nwell ) diff ) ( or diff_fill ESDID v5 v12 v20 lvtn hvtp LVID ) ) ptub -outputlayer dnsd_pt |
| |
| and ( not ( and ( and ( not ( and diodeID nsdm ) nwell ) diff ) ESDID ) ( or diff_fill v5 v12 v20 lvtn hvtp LVID ) ) pwell_all -outputlayer dnsd_pw_esd |
| |
| and ( not ( and ( and ( not ( and diodeID nsdm ) nwell ) diff ) ESDID ) ( or diff_fill v5 v12 v20 lvtn hvtp LVID ) ) ptub -outputlayer dnsd_pt_esd |
| |
| and ( not ( and ( and ( and ( and ( not ( and diodeID nsdm ) nwell ) diff ) ESDID ) v5 ) thkox ) ( or diff_fill v12 v20 lvtn hvtp LVID ) ) pwell_all -outputlayer dnsd_pw_esd_v5 |
| |
| and ( not ( and ( and ( and ( and ( not ( and diodeID nsdm ) nwell ) diff ) ESDID ) v5 ) thkox ) ( or diff_fill v12 v20 lvtn hvtp LVID ) ) ptub -outputlayer dnsd_pt_esd_v5 |
| |
| |
| and ( not ( and ( and ( not ( and diodeID nsdm ) nwell ) diff ) lvtn ) ( or ESDID v5 v12 v20 hvtp LVID ) ) pwell_all -outputlayer dnsd_pw_lvt |
| |
| and ( not ( and ( and ( not ( and diodeID nsdm ) nwell ) diff ) lvtn ) ( or ESDID v5 v12 v20 hvtp LVID ) ) ptub -outputlayer dnsd_pt_lvt |
| |
| and ( not ( and ( and ( and ( not ( and diodeID nsdm ) nwell ) diff ) LVID ) lvtn ) ( or diff_fill ESDID v5 v12 v20 hvtp ) ) pwell_all -outputlayer dnsd_pw_nat |
| |
| and ( not ( and ( and ( and ( not ( and diodeID nsdm ) nwell ) diff ) LVID ) lvtn ) ( or diff_fill ESDID v5 v12 v20 hvtp ) ) ptub -outputlayer dnsd_pt_nat |
| |
| and ( not ( and ( and ( and ( not ( and diodeID nsdm ) nwell ) diff ) v5 ) thkox ) ( or diff_fill v12 v20 lvtn hvtp ESDID LVID ) ) pwell_all -outputlayer dnsd_pw_v5 |
| |
| and ( not ( and ( and ( and ( not ( and diodeID nsdm ) nwell ) diff ) v5 ) thkox ) ( or diff_fill v12 v20 lvtn hvtp ESDID LVID ) ) ptub -outputlayer dnsd_pt_v5 |
| |
| // P+ DIO: |
| not ( and ( and ( and diodeID psdm ) nwell ) diff ) ( or diff_fill thkox v5 v12 v20 lvtn hvtp ESDID LVID ) -outputlayer dpsd_nw |
| |
| not ( and ( and ( and ( and diodeID psdm ) nwell ) diff ) ESDID ) ( or diff_fill thkox v5 v12 v20 lvtn hvtp LVID ) -outputlayer dpsd_nw_esd |
| |
| not ( and ( and ( and ( and ( and ( and diodeID psdm ) nwell ) diff ) ESDID ) v5 ) thkox ) ( or diff_fill v12 v20 lvtn hvtp LVID ) -outputlayer dpsd_nw_esd_v5 |
| |
| not ( and ( and ( and ( and diodeID psdm ) nwell ) diff ) hvtp ) ( or diff_fill thkox v5 v12 v20 lvtn ESDID LVID ) -outputlayer dpsd_nw_hvt |
| |
| not ( and ( and ( and ( and diodeID psdm ) nwell ) diff ) lvtn ) ( or diff_fill thkox v5 v12 v20 hvtp ESDID LVID ) -outputlayer dpsd_nw_lvt |
| |
| not ( and ( and ( and ( and ( and diodeID psdm ) nwell ) diff ) v5 ) thkox ) ( or diff_fill v12 v20 lvtn hvtp ESDID LVID ) -outputlayer dpsd_nw_v5 |
| |
| // 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) |
| select -interact ( not dnwell ( select -interact dnwell ( or npn pnp ) ) ) v20 -outputlayer dnw_sub_v20 |
| not ( select -interact ( not ( and ( holes nwell ) dnwell ) ( select -interact dnwell ( or npn pnp pwres ) ) ) v20 ) pwbm -outputlayer dpw_dnw_v20 |
| not ( select -interact ( select -interact ( not ( and ( holes nwell ) dnwell ) ( select -interact dnwell ( or npn pnp ) ) ) v20 ) pwres ) pwres -outputlayer dpw_dnw_v20_pwres |
| |
| // 12v: |
| select -interact -not ( select -interact -not ( select -interact ( not dnwell ( select -interact dnwell ( or npn pnp ) ) ) v12 ) dnw_sub_v20 ) ( select -interact dnwell ngate_v20_iso_rec ) -outputlayer dnw_sub_v12 |
| select -interact -not ( select -interact ( not ( and ( holes nwell ) dnwell ) ( select -interact dnwell ( or npn pnp pwres ) ) ) v12 ) dpw_dnw_v20 -outputlayer dpw_dnw_v12 |
| not ( select -interact ( select -interact -not ( select -interact ( not ( and ( holes nwell ) dnwell ) ( select -interact dnwell ( or npn pnp ) ) ) v12 ) dpw_dnw_v20 ) pwres ) pwres -outputlayer dpw_dnw_v12_pwres |
| |
| // 5v: |
| select -interact -not ( select -interact -not ( select -interact ( not dnwell ( select -interact dnwell ( or npn pnp ) ) ) v5 ) ( or dnw_sub_v20 dnw_sub_v12 ) ) ( select -interact dnwell ngate_v20_iso_rec ) -outputlayer dnw_sub_v5 |
| select -interact -not ( select -interact ( not ( and ( holes nwell ) dnwell ) ( select -interact dnwell ( or npn pnp pwres ) ) ) v5 ) ( or dpw_dnw_v20 dpw_dnw_v12 ) -outputlayer dpw_dnw_v5 |
| not ( select -interact ( select -interact -not ( select -interact ( not ( and ( holes nwell ) dnwell ) ( select -interact dnwell ( or npn pnp ) ) ) v5 ) ( or dpw_dnw_v20 dpw_dnw_v12 ) ) pwres ) pwres -outputlayer dpw_dnw_v5_pwres |
| |
| // 1.8v: |
| select -interact -not ( select -interact -not ( not dnwell ( select -interact dnwell ( or npn pnp ) ) ) ( or dnw_sub_v20 dnw_sub_v12 dnw_sub_v5 ) ) ( select -interact dnwell ngate_v20_iso_rec ) -outputlayer dnw_sub_nom |
| not ( select -interact -not ( not ( and ( holes nwell -inner ) dnwell ) ( select -interact dnwell ( or npn pnp pwres ) ) ) ( or dpw_dnw_v20 dpw_dnw_v12 dpw_dnw_v5 ) ) pwbm -outputlayer dpw_dnw_nom |
| not ( select -interact ( select -interact -not ( not ( and ( holes nwell -inner ) dnwell ) ( select -interact dnwell ( or npn pnp ) ) ) ( or dpw_dnw_v20 dpw_dnw_v12 dpw_dnw_v5 ) ) pwres ) pwres -outputlayer dpw_dnw_nom_pwres |
| |
| // CAP: |
| and ( and met3 met4 ) capm -outputlayer cap_34 |
| and ( and met4 met5 ) cap2m -outputlayer cap_45 |
| // remove the vias in the capacitors so as not to short the metals in |
| // the caps |
| not via3i cap_34 -outputlayer via3 |
| not via4i cap_45 -outputlayer via4 |
| |
| // BIPOLAR: |
| holes nwell -outputlayer donut_nw |
| select -enclose dnwell donut_nw -outputlayer dnw_over_nw_hole |
| select -interact ( select -enclose ( or nwell ( holes nwell ) ) dnw_over_nw_hole ) npn -outputlayer npn_1a |
| holes ( and diff npn_1a ) -outputlayer npn_1 |
| select -inside ( and ( and npn ( not diff diff_fill ) ) nsdm ) npn_1 -outputlayer npn_ndiff |
| edge_expand ( angle npn_ndiff -eq 45 ) -outside_by 0.005 -outputlayer npn_ndiff_oct_1 |
| select -interact ( vertex -eq 8 npn_ndiff ) npn_ndiff_oct_1 -eq 4 -outputlayer npn_ndiff_oct |
| not npn_ndiff nwell -outputlayer npn_emit |
| |
| not ( select -enclose npn_1 ( and ( area npn_emit -ge 0 ) ( area npn_emit -lt 2 ) ) ) ( or diff_fill thkox v5 v12 v20 ) -outputlayer npn_1x1_rec |
| not ( select -enclose npn_1 ( area npn_emit -ge 2 ) ) ( or diff_fill thkox v5 v12 v20 ) -outputlayer npn_1x2_rec |
| and ( select -enclose npn_1 npn_ndiff_oct ) ( and thkox v5 ) -outputlayer npn_1x1_rec_v5 |
| |
| not ( select -interact pnp ( rect_chk ( and pnp diff ) -eq 0.68 -aspect -eq 1 ) ) ( or diff_fill thkox v5 v12 v20 ) -outputlayer pnp_rec_1x_a |
| holes ( and diff pnp_rec_1x_a ) -outputlayer pnp_rec_1x |
| not ( select -interact pnp ( rect_chk ( and pnp diff ) -eq 3.4 -aspect -eq 1 ) ) ( or diff_fill thkox v5 v12 v20 ) -outputlayer pnp_rec_5x_a |
| holes ( and diff pnp_rec_5x_a ) -outputlayer pnp_rec_5x |
| |
| // FUSE: |
| |
| and ( not met4 met4_fill ) fuse -outputlayer m4fuse |
| |
| // ******************************************************** |
| // End layer boolean operations |
| // ******************************************************** |
| |
| // ******************************************************** |
| // Begin connect statements |
| // ******************************************************** |
| |
| // break connective layers by resistors: |
| |
| not met1 m1res -outputlayer m1 |
| not met2 m2res -outputlayer m2 |
| not met3 m3res -outputlayer m3 |
| not met4 ( or m4res fuse ) -outputlayer m4 |
| not met5 m5res -outputlayer m5 |
| not li_i lires -outputlayer li |
| not poly polyres -outputlayer ply |
| not nsd1 diffres -outputlayer nsd |
| not psd1 diffres -outputlayer psd |
| |
| 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 -type UPPER |
| lvs_softchk nwell -type LOWER |
| |
| sconnect ptap pwell |
| lvs_softchk pwell -type UPPER |
| lvs_softchk pwell -type LOWER |
| |
| sconnect ptap pwell_all |
| lvs_softchk pwell_all -type UPPER |
| lvs_softchk pwell_all -type LOWER |
| |
| sconnect ptubtap ptub |
| lvs_softchk ptub -type UPPER |
| lvs_softchk ptub -type LOWER |
| |
| sconnect nwell dnwell |
| lvs_softchk dnwell -type UPPER |
| lvs_softchk dnwell -type LOWER |
| |
| // ******************************************************** |
| // End connect statements |
| // ******************************************************** |
| |
| // PINS/LABELS: |
| |
| text_layer met1tt met2tt met3tt met4tt met5tt rdltt difftt litt polytt nwelltt |
| |
| port -text_layer rdltt |
| attach rdltt rdl |
| attach "rdl_pin" rdl |
| |
| port -text_layer met5tt |
| attach met5tt m5 |
| attach "met5_pin" m5 |
| |
| port -text_layer met4tt |
| attach met4tt m4 |
| attach "met4_pin" m4 |
| |
| port -text_layer met3tt |
| attach met3tt m3 |
| attach "met3_pin" m3 |
| |
| port -text_layer met2tt |
| attach met2tt m2 |
| attach "met2_pin" m2 |
| |
| port -text_layer met1tt |
| attach met1tt m1 |
| attach "met1_pin" m1 |
| |
| port -text_layer litt |
| attach litt li |
| attach "li_pin" li |
| |
| port -text_layer polytt |
| attach polytt ply |
| attach "poly_pin" ply |
| |
| port -text_layer 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 -text_layer pwelltt |
| attach pwelltt pwell_all |
| attach "pwell_pin" pwell_all |
| |
| port -text_layer 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_device 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 ) |
| ] |
| lvs_check_property nmos_de_iso_v20 l l -tolerance 0 |
| lvs_check_property nmos_de_iso_v20 w w -tolerance 0 |
| lvs_check_property nmos_de_iso_v20 m m -tolerance 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 |
| ] |
| |
| lvs_check_property MN l l -tolerance 0 |
| lvs_check_property MN w w -tolerance 0 |
| lvs_check_property MN m m -tolerance 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 |
| ] |
| |
| lvs_check_property MP l l -tolerance 0 |
| lvs_check_property MP w w -tolerance 0 |
| lvs_check_property MP m m -tolerance 0 |
| |
| lvs_reduce yes -parallel_mos [ 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 |
| lvs_check_property R ( rli ) l l -tolerance 0 |
| lvs_check_property R ( rli ) w w -tolerance 0 |
| lvs_check_property R ( rli ) m m -tolerance 0 |
| |
| device R ( rm1 ) m1res m1 ( POS ) m1 ( NEG ) ( POS NEG ) |
| CMACRO RES_PARAMS m1res m1 |
| lvs_check_property R ( rm1 ) l l -tolerance 0 |
| lvs_check_property R ( rm1 ) w w -tolerance 0 |
| lvs_check_property R ( rm1 ) m m -tolerance 0 |
| |
| device R ( rm2 ) m2res m2 ( POS ) m2 ( NEG ) ( POS NEG ) |
| CMACRO RES_PARAMS m2res m2 |
| lvs_check_property R ( rm2 ) l l -tolerance 0 |
| lvs_check_property R ( rm2 ) w w -tolerance 0 |
| lvs_check_property R ( rm2 ) m m -tolerance 0 |
| |
| device R ( rm3 ) m3res m3 ( POS ) m3 ( NEG ) ( POS NEG ) |
| CMACRO RES_PARAMS m3res m3 |
| lvs_check_property R ( rm3 ) l l -tolerance 0 |
| lvs_check_property R ( rm3 ) w w -tolerance 0 |
| lvs_check_property R ( rm3 ) m m -tolerance 0 |
| |
| device R ( rm4 ) m4res m4 ( POS ) m4 ( NEG ) ( POS NEG ) |
| CMACRO RES_PARAMS m4res m4 |
| lvs_check_property R ( rm4 ) l l -tolerance 0 |
| lvs_check_property R ( rm4 ) w w -tolerance 0 |
| lvs_check_property R ( rm4 ) m m -tolerance 0 |
| |
| device R ( rm5 ) m5res m5 ( POS ) m5 ( NEG ) ( POS NEG ) |
| CMACRO RES_PARAMS m5res m5 |
| lvs_check_property R ( rm5 ) l l -tolerance 0 |
| lvs_check_property R ( rm5 ) w w -tolerance 0 |
| lvs_check_property R ( rm5 ) m m -tolerance 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 |
| lvs_check_property r ( rpoly ) l l -tolerance 0 |
| lvs_check_property r ( rpoly ) w w -tolerance 0 |
| lvs_check_property r ( rpoly ) m m -tolerance 0 |
| |
| // diff res: |
| device R ( rpdiff ) rpdiff_nom psd ( POS ) psd ( NEG ) nwell ( SUB ) ( POS NEG ) |
| CMACRO RES_PARAMS rpdiff_nom psd |
| lvs_check_property R ( rpdiff ) l l -tolerance 0 |
| lvs_check_property R ( rpdiff ) w w -tolerance 0 |
| lvs_check_property R ( rpdiff ) m m -tolerance 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 |
| |
| lvs_check_property R ( rndiff ) l l -tolerance 0 |
| lvs_check_property R ( rndiff ) w w -tolerance 0 |
| lvs_check_property R ( rndiff ) m m -tolerance 0 |
| |
| device R ( rpdiff_v5 ) rpdiff_5v psd ( POS ) psd ( NEG ) nwell ( SUB ) ( POS NEG ) |
| CMACRO RES_PARAMS rpdiff_5v psd |
| lvs_check_property R ( rpdiff_v5 ) l l -tolerance 0 |
| lvs_check_property R ( rpdiff_v5 ) w w -tolerance 0 |
| lvs_check_property R ( rpdiff_v5 ) m m -tolerance 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 |
| |
| lvs_check_property R ( rndiff_v5 ) l l -tolerance 0 |
| lvs_check_property R ( rndiff_v5 ) w w -tolerance 0 |
| lvs_check_property R ( rndiff_v5 ) m m -tolerance 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 |
| lvs_check_property R ( rpwell ) l l -tolerance 0 |
| lvs_check_property R ( rpwell ) w w -tolerance 0 |
| lvs_check_property R ( rpwell ) m m -tolerance 0 |
| |
| lvs_reduce_device 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: |
| device R ( fuse_m4 ) m4fuse m4 ( POS ) m4 ( NEG ) ( POS NEG ) |
| CMACRO RES_PARAMS m4fuse m4 |
| lvs_check_property R ( fuse_m4 ) l l -tolerance 0 |
| lvs_check_property R ( fuse_m4 ) w w -tolerance 0 |
| |
| lvs_reduce_device 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 |
| lvs_check_property D ( dnsd_pw ) a a -tolerance 0 |
| lvs_check_property D ( dnsd_pw ) p p -tolerance 0 |
| lvs_check_property D ( dnsd_pw ) m m -tolerance 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 |
| lvs_check_property D ( dnsd_pw_esd ) a a -tolerance 0 |
| lvs_check_property D ( dnsd_pw_esd ) p p -tolerance 0 |
| lvs_check_property D ( dnsd_pw_esd ) m m -tolerance 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 |
| lvs_check_property D ( dnsd_pw_esd_v5 ) a a -tolerance 0 |
| lvs_check_property D ( dnsd_pw_esd_v5 ) p p -tolerance 0 |
| lvs_check_property D ( dnsd_pw_esd_v5 ) m m -tolerance 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 |
| lvs_check_property D ( dnsd_pw_lvt ) a a -tolerance 0 |
| lvs_check_property D ( dnsd_pw_lvt ) p p -tolerance 0 |
| lvs_check_property D ( dnsd_pw_lvt ) m m -tolerance 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 |
| lvs_check_property D ( dnsd_pw_nat ) a a -tolerance 0 |
| lvs_check_property D ( dnsd_pw_nat ) p p -tolerance 0 |
| lvs_check_property D ( dnsd_pw_nat ) m m -tolerance 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 |
| lvs_check_property D ( dnsd_pw_v5 ) a a -tolerance 0 |
| lvs_check_property D ( dnsd_pw_v5 ) p p -tolerance 0 |
| lvs_check_property D ( dnsd_pw_v5 ) m m -tolerance 0 |
| |
| device D ( dpsd_nw ) dpsd_nw psd nwell |
| CMACRO DIO_PARAMS dpsd_nw |
| lvs_check_property D ( dpsd_nw ) a a -tolerance 0 |
| lvs_check_property D ( dpsd_nw ) p p -tolerance 0 |
| lvs_check_property D ( dpsd_nw ) m m -tolerance 0 |
| |
| device D ( dpsd_nw_esd ) dpsd_nw_esd psd nwell |
| CMACRO DIO_PARAMS dpsd_nw_esd |
| lvs_check_property D ( dpsd_nw_esd ) a a -tolerance 0 |
| lvs_check_property D ( dpsd_nw_esd ) p p -tolerance 0 |
| lvs_check_property D ( dpsd_nw_esd ) m m -tolerance 0 |
| |
| device D ( dpsd_nw_esd_v5 ) dpsd_nw_esd_v5 psd nwell |
| CMACRO DIO_PARAMS dpsd_nw_esd_v5 |
| lvs_check_property D ( dpsd_nw_esd_v5 ) a a -tolerance 0 |
| lvs_check_property D ( dpsd_nw_esd_v5 ) p p -tolerance 0 |
| lvs_check_property D ( dpsd_nw_esd_v5 ) m m -tolerance 0 |
| |
| device D ( dpsd_nw_hvt ) dpsd_nw_hvt psd nwell |
| CMACRO DIO_PARAMS dpsd_nw_hvt |
| lvs_check_property D ( dpsd_nw_hvt ) a a -tolerance 0 |
| lvs_check_property D ( dpsd_nw_hvt ) p p -tolerance 0 |
| lvs_check_property D ( dpsd_nw_hvt ) m m -tolerance 0 |
| |
| device D ( dpsd_nw_lvt ) dpsd_nw_lvt psd nwell |
| CMACRO DIO_PARAMS dpsd_nw_lvt |
| lvs_check_property D ( dpsd_nw_lvt ) a a -tolerance 0 |
| lvs_check_property D ( dpsd_nw_lvt ) p p -tolerance 0 |
| lvs_check_property D ( dpsd_nw_lvt ) m m -tolerance 0 |
| |
| device D ( dpsd_nw_v5 ) dpsd_nw_v5 psd nwell |
| CMACRO DIO_PARAMS dpsd_nw_v5 |
| lvs_check_property D ( dpsd_nw_v5 ) a a -tolerance 0 |
| lvs_check_property D ( dpsd_nw_v5 ) p p -tolerance 0 |
| lvs_check_property D ( dpsd_nw_v5 ) m m -tolerance 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 |
| lvs_check_property D ( ddnw_sub ) a a -tolerance 0.005 |
| lvs_check_property D ( ddnw_sub ) p p -tolerance 0.005 |
| lvs_check_property D ( dipw_dnw ) a a -tolerance 0.005 |
| lvs_check_property D ( dipw_dnw ) p p -tolerance 0.005 |
| lvs_check_property D ( ddnw_sub_v5 ) a a -tolerance 0.005 |
| lvs_check_property D ( ddnw_sub_v5 ) p p -tolerance 0.005 |
| lvs_check_property D ( dipw_dnw_v5 ) a a -tolerance 0.005 |
| lvs_check_property D ( dipw_dnw_v5 ) p p -tolerance 0.005 |
| lvs_check_property D ( ddnw_sub_v12 ) a a -tolerance 0.005 |
| lvs_check_property D ( ddnw_sub_v12 ) p p -tolerance 0.005 |
| lvs_check_property D ( dipw_dnw_v12 ) a a -tolerance 0.005 |
| lvs_check_property D ( dipw_dnw_v12 ) p p -tolerance 0.005 |
| lvs_check_property D ( ddnw_sub_v20 ) a a -tolerance 0.005 |
| lvs_check_property D ( ddnw_sub_v20 ) p p -tolerance 0.005 |
| lvs_check_property D ( dipw_dnw_v20 ) a a -tolerance 0.005 |
| lvs_check_property D ( dipw_dnw_v20 ) p p -tolerance 0.005 |
| #ENDIF |
| #ENDIF |
| |
| // Note: no tolerance specified - always |
| // combine parallel diodes regardless |
| // of whether they are the same size: |
| lvs_reduce_device D -parallel yes [ |
| effective a , p, m |
| a = SUM( a ) |
| p = SUM( p ) |
| m = SUM( m ) |
| ] |
| |
| lvs_reduce_device 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_device C -parallel yes [ |
| tolerance a 1.0 |
| p 1.0 |
| EFFECTIVE a , p, m |
| a = SUM( a ) |
| p = SUM( p ) |
| m = SUM( m ) |
| ] |
| |
| lvs_check_property C a a -tolerance 0 |
| lvs_check_property C p p -tolerance 0 |
| lvs_check_property C m m -tolerance 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 ) |
| ] |
| |
| lvs_check_property Q m m -tolerance 0 |
| lvs_check_property Q a a -tolerance 0 |
| lvs_check_property Q p p -tolerance 0 |
| |
| lvs_reduce_device 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 { |
| lvs_check_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 { |
| lvs_check_property model_name l l -tolerance 0 |
| lvs_check_property model_name w w -tolerance 0 |
| lvs_check_property model_name m m -tolerance 0 |
| } |
| |
| // combine parallel pads |
| dmacro PAD_PARALLEL type { |
| lvs_reduce_device type -parallel yes [ |
| tolerance w 0 |
| l 0 |
| EFFECTIVE m, l, w |
| m = sum( m ) |
| l = sum( l ) |
| w = sum( w ) |
| |
| ] |
| } |
| |
| // ******************************************************** |
| // End Macro definitions |
| // ******************************************************** |