| ################################################################################################ |
| # Copyright 2022 GlobalFoundries PDK Authors |
| # |
| # Licensed under the Apache License, Version 2.0 (the 'License'); |
| # you may not use this file except in compliance with the License. |
| # You may obtain a copy of the License at |
| # |
| # https://www.apache.org/licenses/LICENSE-2.0 |
| # |
| # Unless required by applicable law or agreed to in writing, software |
| # distributed under the License is distributed on an 'AS IS' BASIS, |
| # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| # See the License for the specific language governing permissions and |
| # limitations under the License. |
| ################################################################################################ |
| |
| #================================================ |
| #-----------------GEOMETRY RULES----------------- |
| #================================================ |
| |
| if OFFGRID |
| logger.info('OFFGRID-ANGLES section') |
| |
| logger.info('Executing rule comp_OFFGRID') |
| comp.ongrid(0.005).output('comp_OFFGRID', 'OFFGRID : OFFGRID vertex on comp') |
| comp.edges.without_angle(0).without_angle(45).without_angle(90).without_angle(-45).output('comp_angle', 'ACUTE : non 45 degree angle comp') |
| |
| logger.info('Executing rule dnwell_OFFGRID') |
| dnwell.ongrid(0.005).output('dnwell_OFFGRID', 'OFFGRID : OFFGRID vertex on dnwell') |
| dnwell.edges.without_angle(0).without_angle(45).without_angle(90).without_angle(-45).output('dnwell_angle', 'ACUTE : non 45 degree angle dnwell') |
| |
| logger.info('Executing rule nwell_OFFGRID') |
| nwell.ongrid(0.005).output('nwell_OFFGRID', 'OFFGRID : OFFGRID vertex on nwell') |
| nwell.edges.without_angle(0).without_angle(45).without_angle(90).without_angle(-45).output('nwell_angle', 'ACUTE : non 45 degree angle nwell') |
| |
| logger.info('Executing rule lvpwell_OFFGRID') |
| lvpwell.ongrid(0.005).output('lvpwell_OFFGRID', 'OFFGRID : OFFGRID vertex on lvpwell') |
| lvpwell.edges.without_angle(0).without_angle(45).without_angle(90).without_angle(-45).output('lvpwell_angle', 'ACUTE : non 45 degree angle lvpwell') |
| |
| logger.info('Executing rule dualgate_OFFGRID') |
| dualgate.ongrid(0.005).output('dualgate_OFFGRID', 'OFFGRID : OFFGRID vertex on dualgate') |
| dualgate.edges.without_angle(0).without_angle(45).without_angle(90).without_angle(-45).output('dualgate_angle', 'ACUTE : non 45 degree angle dualgate') |
| |
| logger.info('Executing rule dualgate_2_OFFGRID') |
| dualgate_2.ongrid(0.005).output('dualgate_2_OFFGRID', 'OFFGRID : OFFGRID vertex on dualgate_2') |
| dualgate_2.edges.without_angle(0).without_angle(45).without_angle(90).without_angle(-45).output('dualgate_2_angle', 'ACUTE : non 45 degree angle dualgate_2') |
| |
| logger.info('Executing rule poly2_OFFGRID') |
| poly2.ongrid(0.005).output('poly2_OFFGRID', 'OFFGRID : OFFGRID vertex on poly2') |
| poly2.edges.without_angle(0).without_angle(45).without_angle(90).without_angle(-45).output('poly2_angle', 'ACUTE : non 45 degree angle poly2') |
| |
| logger.info('Executing rule nplus_OFFGRID') |
| nplus.ongrid(0.005).output('nplus_OFFGRID', 'OFFGRID : OFFGRID vertex on nplus') |
| nplus.edges.without_angle(0).without_angle(45).without_angle(90).without_angle(-45).output('nplus_angle', 'ACUTE : non 45 degree angle nplus') |
| |
| logger.info('Executing rule pplus_OFFGRID') |
| pplus.ongrid(0.005).output('pplus_OFFGRID', 'OFFGRID : OFFGRID vertex on pplus') |
| pplus.edges.without_angle(0).without_angle(45).without_angle(90).without_angle(-45).output('pplus_angle', 'ACUTE : non 45 degree angle pplus') |
| |
| logger.info('Executing rule sab_OFFGRID') |
| sab.ongrid(0.005).output('sab_OFFGRID', 'OFFGRID : OFFGRID vertex on sab') |
| sab.edges.without_angle(0).without_angle(45).without_angle(90).without_angle(-45).output('sab_angle', 'ACUTE : non 45 degree angle sab') |
| |
| logger.info('Executing rule esd_OFFGRID') |
| esd.ongrid(0.005).output('esd_OFFGRID', 'OFFGRID : OFFGRID vertex on esd') |
| esd.edges.without_angle(0).without_angle(45).without_angle(90).without_angle(-45).output('esd_angle', 'ACUTE : non 45 degree angle esd') |
| |
| logger.info('Executing rule contact_OFFGRID') |
| contact.ongrid(0.005).output('contact_OFFGRID', 'OFFGRID : OFFGRID vertex on contact') |
| contact.edges.without_angle(0).without_angle(45).without_angle(90).without_angle(-45).output('contact_angle', 'ACUTE : non 45 degree angle contact') |
| |
| logger.info('Executing rule metal1_OFFGRID') |
| metal1.ongrid(0.005).output('metal1_OFFGRID', 'OFFGRID : OFFGRID vertex on metal1') |
| metal1.edges.without_angle(0).without_angle(45).without_angle(90).without_angle(-45).output('metal1_angle', 'ACUTE : non 45 degree angle metal1') |
| |
| logger.info('Executing rule via1_OFFGRID') |
| via1.ongrid(0.005).output('via1_OFFGRID', 'OFFGRID : OFFGRID vertex on via1') |
| via1.edges.without_angle(0).without_angle(45).without_angle(90).without_angle(-45).output('via1_angle', 'ACUTE : non 45 degree angle via1') |
| |
| logger.info('Executing rule metal2_OFFGRID') |
| metal2.ongrid(0.005).output('metal2_OFFGRID', 'OFFGRID : OFFGRID vertex on metal2') |
| metal2.edges.without_angle(0).without_angle(45).without_angle(90).without_angle(-45).output('metal2_angle', 'ACUTE : non 45 degree angle metal2') |
| |
| if METAL_LEVEL == '3LM' || METAL_LEVEL == '4LM' || METAL_LEVEL == '5LM' || METAL_LEVEL == '6LM' |
| logger.info('Executing rule via2_OFFGRID') |
| via2.ongrid(0.005).output('via2_OFFGRID', 'OFFGRID : OFFGRID vertex on via2') |
| via2.edges.without_angle(0).without_angle(45).without_angle(90).without_angle(-45).output('via2_angle', 'ACUTE : non 45 degree angle via2') |
| |
| logger.info('Executing rule metal3_OFFGRID') |
| metal3.ongrid(0.005).output('metal3_OFFGRID', 'OFFGRID : OFFGRID vertex on metal3') |
| metal3.edges.without_angle(0).without_angle(45).without_angle(90).without_angle(-45).output('metal3_angle', 'ACUTE : non 45 degree angle metal3') |
| |
| if METAL_LEVEL == '4LM' || METAL_LEVEL == '5LM' || METAL_LEVEL == '6LM' |
| logger.info('Executing rule via3_OFFGRID') |
| via3.ongrid(0.005).output('via3_OFFGRID', 'OFFGRID : OFFGRID vertex on via3') |
| via3.edges.without_angle(0).without_angle(45).without_angle(90).without_angle(-45).output('via3_angle', 'ACUTE : non 45 degree angle via3') |
| |
| logger.info('Executing rule metal4_OFFGRID') |
| metal4.ongrid(0.005).output('metal4_OFFGRID', 'OFFGRID : OFFGRID vertex on metal4') |
| metal4.edges.without_angle(0).without_angle(45).without_angle(90).without_angle(-45).output('metal4_angle', 'ACUTE : non 45 degree angle metal4') |
| |
| if METAL_LEVEL == '5LM' || METAL_LEVEL == '6LM' |
| logger.info('Executing rule via4_OFFGRID') |
| via4.ongrid(0.005).output('via4_OFFGRID', 'OFFGRID : OFFGRID vertex on via4') |
| via4.edges.without_angle(0).without_angle(45).without_angle(90).without_angle(-45).output('via4_angle', 'ACUTE : non 45 degree angle via4') |
| |
| logger.info('Executing rule metal5_OFFGRID') |
| metal5.ongrid(0.005).output('metal5_OFFGRID', 'OFFGRID : OFFGRID vertex on metal5') |
| metal5.edges.without_angle(0).without_angle(45).without_angle(90).without_angle(-45).output('metal5_angle', 'ACUTE : non 45 degree angle metal5') |
| |
| if METAL_LEVEL == '6LM' |
| logger.info('Executing rule via5_OFFGRID') |
| via5.ongrid(0.005).output('via5_OFFGRID', 'OFFGRID : OFFGRID vertex on via5') |
| via5.edges.without_angle(0).without_angle(45).without_angle(90).without_angle(-45).output('via5_angle', 'ACUTE : non 45 degree angle via5') |
| |
| logger.info('Executing rule metaltop_OFFGRID') |
| metaltop.ongrid(0.005).output('metaltop_OFFGRID', 'OFFGRID : OFFGRID vertex on metaltop') |
| metaltop.edges.without_angle(0).without_angle(45).without_angle(90).without_angle(-45).output('metaltop_angle', 'ACUTE : non 45 degree angle metaltop') |
| end |
| end |
| end |
| end |
| |
| logger.info('Executing rule probe_mk_OFFGRID') |
| probe_mk.ongrid(0.005).output('probe_mk_OFFGRID', 'OFFGRID : OFFGRID vertex on probe_mk') |
| probe_mk.edges.without_angle(0).without_angle(45).without_angle(90).without_angle(-45).output('probe_mk_angle', 'ACUTE : non 45 degree angle probe_mk') |
| |
| logger.info('Executing rule pad_OFFGRID') |
| pad.ongrid(0.005).output('pad_OFFGRID', 'OFFGRID : OFFGRID vertex on pad') |
| pad.edges.without_angle(0).without_angle(45).without_angle(90).without_angle(-45).output('pad_angle', 'ACUTE : non 45 degree angle pad') |
| |
| logger.info('Executing rule resistor_OFFGRID') |
| resistor.ongrid(0.005).output('resistor_OFFGRID', 'OFFGRID : OFFGRID vertex on resistor') |
| resistor.edges.without_angle(0).without_angle(45).without_angle(90).without_angle(-45).output('resistor_angle', 'ACUTE : non 45 degree angle resistor') |
| |
| logger.info('Executing rule piscap_OFFGRID') |
| piscap.ongrid(0.005).output('piscap_OFFGRID', 'OFFGRID : OFFGRID vertex on piscap') |
| piscap.edges.without_angle(0).without_angle(45).without_angle(90).without_angle(-45).output('piscap_angle', 'ACUTE : non 45 degree angle piscap') |
| |
| logger.info('Executing rule fhres_OFFGRID') |
| fhres.ongrid(0.005).output('fhres_OFFGRID', 'OFFGRID : OFFGRID vertex on fhres') |
| fhres.edges.without_angle(0).without_angle(45).without_angle(90).without_angle(-45).output('fhres_angle', 'ACUTE : non 45 degree angle fhres') |
| |
| logger.info('Executing rule fusetop_OFFGRID') |
| fusetop.ongrid(0.005).output('fusetop_OFFGRID', 'OFFGRID : OFFGRID vertex on fusetop') |
| fusetop.edges.without_angle(0).without_angle(45).without_angle(90).without_angle(-45).output('fusetop_angle', 'ACUTE : non 45 degree angle fusetop') |
| |
| logger.info('Executing rule fusewindow_d_OFFGRID') |
| fusewindow_d.ongrid(0.005).output('fusewindow_d_OFFGRID', 'OFFGRID : OFFGRID vertex on fusewindow_d') |
| fusewindow_d.edges.without_angle(0).without_angle(45).without_angle(90).without_angle(-45).output('fusewindow_d_angle', 'ACUTE : non 45 degree angle fusewindow_d') |
| |
| logger.info('Executing rule polyfuse_OFFGRID') |
| polyfuse.ongrid(0.005).output('polyfuse_OFFGRID', 'OFFGRID : OFFGRID vertex on polyfuse') |
| polyfuse.edges.without_angle(0).without_angle(45).without_angle(90).without_angle(-45).output('polyfuse_angle', 'ACUTE : non 45 degree angle polyfuse') |
| |
| logger.info('Executing rule nat_OFFGRID') |
| nat.ongrid(0.005).output('nat_OFFGRID', 'OFFGRID : OFFGRID vertex on nat') |
| nat.edges.without_angle(0).without_angle(45).without_angle(90).without_angle(-45).output('nat_angle', 'ACUTE : non 45 degree angle nat') |
| |
| logger.info('Executing rule comp_dummy_OFFGRID') |
| comp_dummy.ongrid(0.005).output('comp_dummy_OFFGRID', 'OFFGRID : OFFGRID vertex on comp_dummy') |
| comp_dummy.edges.without_angle(0).without_angle(45).without_angle(90).without_angle(-45).output('comp_dummy_angle', 'ACUTE : non 45 degree angle comp_dummy') |
| |
| logger.info('Executing rule poly2_dummy_OFFGRID') |
| poly2_dummy.ongrid(0.005).output('poly2_dummy_OFFGRID', 'OFFGRID : OFFGRID vertex on poly2_dummy') |
| poly2_dummy.edges.without_angle(0).without_angle(45).without_angle(90).without_angle(-45).output('poly2_dummy_angle', 'ACUTE : non 45 degree angle poly2_dummy') |
| |
| logger.info('Executing rule metal1_dummy_OFFGRID') |
| metal1_dummy.ongrid(0.005).output('metal1_dummy_OFFGRID', 'OFFGRID : OFFGRID vertex on metal1_dummy') |
| metal1_dummy.edges.without_angle(0).without_angle(45).without_angle(90).without_angle(-45).output('metal1_dummy_angle', 'ACUTE : non 45 degree angle metal1_dummy') |
| |
| logger.info('Executing rule metal2_dummy_OFFGRID') |
| metal2_dummy.ongrid(0.005).output('metal2_dummy_OFFGRID', 'OFFGRID : OFFGRID vertex on metal2_dummy') |
| metal2_dummy.edges.without_angle(0).without_angle(45).without_angle(90).without_angle(-45).output('metal2_dummy_angle', 'ACUTE : non 45 degree angle metal2_dummy') |
| |
| if METAL_LEVEL == '3LM' || METAL_LEVEL == '4LM' || METAL_LEVEL == '5LM' || METAL_LEVEL == '6LM' |
| logger.info('Executing rule metal3_dummy_OFFGRID') |
| metal3_dummy.ongrid(0.005).output('metal3_dummy_OFFGRID', 'OFFGRID : OFFGRID vertex on metal3_dummy') |
| metal3_dummy.edges.without_angle(0).without_angle(45).without_angle(90).without_angle(-45).output('metal3_dummy_angle', 'ACUTE : non 45 degree angle metal3_dummy') |
| |
| logger.info('Executing rule metal3_label_OFFGRID') |
| metal3_label.ongrid(0.005).output('metal3_label_OFFGRID', 'OFFGRID : OFFGRID vertex on metal3_label') |
| metal3_label.edges.without_angle(0).without_angle(45).without_angle(90).without_angle(-45).output('metal3_label_angle', 'ACUTE : non 45 degree angle metal3_label') |
| |
| logger.info('Executing rule metal3_blk_OFFGRID') |
| metal3_blk.ongrid(0.005).output('metal3_blk_OFFGRID', 'OFFGRID : OFFGRID vertex on metal3_blk') |
| metal3_blk.edges.without_angle(0).without_angle(45).without_angle(90).without_angle(-45).output('metal3_blk_angle', 'ACUTE : non 45 degree angle metal3_blk') |
| |
| if METAL_LEVEL == '4LM' || METAL_LEVEL == '5LM' || METAL_LEVEL == '6LM' |
| logger.info('Executing rule metal4_dummy_OFFGRID') |
| metal4_dummy.ongrid(0.005).output('metal4_dummy_OFFGRID', 'OFFGRID : OFFGRID vertex on metal4_dummy') |
| metal4_dummy.edges.without_angle(0).without_angle(45).without_angle(90).without_angle(-45).output('metal4_dummy_angle', 'ACUTE : non 45 degree angle metal4_dummy') |
| |
| logger.info('Executing rule metal4_label_OFFGRID') |
| metal4_label.ongrid(0.005).output('metal4_label_OFFGRID', 'OFFGRID : OFFGRID vertex on metal4_label') |
| metal4_label.edges.without_angle(0).without_angle(45).without_angle(90).without_angle(-45).output('metal4_label_angle', 'ACUTE : non 45 degree angle metal4_label') |
| |
| logger.info('Executing rule metal4_blk_OFFGRID') |
| metal4_blk.ongrid(0.005).output('metal4_blk_OFFGRID', 'OFFGRID : OFFGRID vertex on metal4_blk') |
| metal4_blk.edges.without_angle(0).without_angle(45).without_angle(90).without_angle(-45).output('metal4_blk_angle', 'ACUTE : non 45 degree angle metal4_blk') |
| |
| if METAL_LEVEL == '5LM' || METAL_LEVEL == '6LM' |
| logger.info('Executing rule metal5_dummy_OFFGRID') |
| metal5_dummy.ongrid(0.005).output('metal5_dummy_OFFGRID', 'OFFGRID : OFFGRID vertex on metal5_dummy') |
| metal5_dummy.edges.without_angle(0).without_angle(45).without_angle(90).without_angle(-45).output('metal5_dummy_angle', 'ACUTE : non 45 degree angle metal5_dummy') |
| |
| logger.info('Executing rule metal5_label_OFFGRID') |
| metal5_label.ongrid(0.005).output('metal5_label_OFFGRID', 'OFFGRID : OFFGRID vertex on metal5_label') |
| metal5_label.edges.without_angle(0).without_angle(45).without_angle(90).without_angle(-45).output('metal5_label_angle', 'ACUTE : non 45 degree angle metal5_label') |
| |
| logger.info('Executing rule metal5_blk_OFFGRID') |
| metal5_blk.ongrid(0.005).output('metal5_blk_OFFGRID', 'OFFGRID : OFFGRID vertex on metal5_blk') |
| metal5_blk.edges.without_angle(0).without_angle(45).without_angle(90).without_angle(-45).output('metal5_blk_angle', 'ACUTE : non 45 degree angle metal5_blk') |
| |
| |
| if METAL_LEVEL == '6LM' |
| logger.info('Executing rule metaltop_dummy_OFFGRID') |
| metaltop_dummy.ongrid(0.005).output('metaltop_dummy_OFFGRID', 'OFFGRID : OFFGRID vertex on metaltop_dummy') |
| metaltop_dummy.edges.without_angle(0).without_angle(45).without_angle(90).without_angle(-45).output('metaltop_dummy_angle', 'ACUTE : non 45 degree angle metaltop_dummy') |
| |
| logger.info('Executing rule metaltop_label_OFFGRID') |
| metaltop_label.ongrid(0.005).output('metaltop_label_OFFGRID', 'OFFGRID : OFFGRID vertex on metaltop_label') |
| metaltop_label.edges.without_angle(0).without_angle(45).without_angle(90).without_angle(-45).output('metaltop_label_angle', 'ACUTE : non 45 degree angle metaltop_label') |
| |
| logger.info('Executing rule metaltop_blk_OFFGRID') |
| metaltop_blk.ongrid(0.005).output('metaltop_blk_OFFGRID', 'OFFGRID : OFFGRID vertex on metaltop_blk') |
| metaltop_blk.edges.without_angle(0).without_angle(45).without_angle(90).without_angle(-45).output('metaltop_blk_angle', 'ACUTE : non 45 degree angle metalt_blk') |
| end |
| end |
| end |
| end |
| |
| logger.info('Executing rule metal1_label_OFFGRID') |
| metal1_label.ongrid(0.005).output('metal1_label_OFFGRID', 'OFFGRID : OFFGRID vertex on metal1_label') |
| metal1_label.edges.without_angle(0).without_angle(45).without_angle(90).without_angle(-45).output('metal1_label_angle', 'ACUTE : non 45 degree angle metal1_label') |
| |
| logger.info('Executing rule metal2_label_OFFGRID') |
| metal2_label.ongrid(0.005).output('metal2_label_OFFGRID', 'OFFGRID : OFFGRID vertex on metal2_label') |
| metal2_label.edges.without_angle(0).without_angle(45).without_angle(90).without_angle(-45).output('metal2_label_angle', 'ACUTE : non 45 degree angle metal2_label') |
| |
| logger.info('Executing rule ubmpperi_OFFGRID') |
| ubmpperi.ongrid(0.005).output('ubmpperi_OFFGRID', 'OFFGRID : OFFGRID vertex on ubmpperi') |
| ubmpperi.edges.without_angle(0).without_angle(45).without_angle(90).without_angle(-45).output('ubmpperi_angle', 'ACUTE : non 45 degree angle ubmpperi') |
| |
| logger.info('Executing rule ubmparray_OFFGRID') |
| ubmparray.ongrid(0.005).output('ubmparray_OFFGRID', 'OFFGRID : OFFGRID vertex on ubmparray') |
| ubmparray.edges.without_angle(0).without_angle(45).without_angle(90).without_angle(-45).output('ubmparray_angle', 'ACUTE : non 45 degree angle ubmparray') |
| |
| logger.info('Executing rule ubmparray_label_OFFGRID') |
| ubmparray_label.ongrid(0.005).output('ubmparray_label_OFFGRID', 'OFFGRID : OFFGRID vertex on ubmparray_label') |
| ubmparray_label.edges.without_angle(0).without_angle(45).without_angle(90).without_angle(-45).output('ubmparray_label_angle', 'ACUTE : non 45 degree angle ubmparray_label') |
| |
| logger.info('Executing rule ubmeplate_OFFGRID') |
| ubmeplate.ongrid(0.005).output('ubmeplate_OFFGRID', 'OFFGRID : OFFGRID vertex on ubmeplate') |
| ubmeplate.edges.without_angle(0).without_angle(45).without_angle(90).without_angle(-45).output('ubmeplate_angle', 'ACUTE : non 45 degree angle ubmeplate') |
| |
| logger.info('Executing rule res_mk_OFFGRID') |
| res_mk.ongrid(0.005).output('res_mk_OFFGRID', 'OFFGRID : OFFGRID vertex on res_mk') |
| res_mk.edges.without_angle(0).without_angle(45).without_angle(90).without_angle(-45).output('res_mk_angle', 'ACUTE : non 45 degree angle res_mk') |
| |
| logger.info('Executing rule opc_drc_OFFGRID') |
| opc_drc.ongrid(0.005).output('opc_drc_OFFGRID', 'OFFGRID : OFFGRID vertex on opc_drc') |
| opc_drc.edges.without_angle(0).without_angle(45).without_angle(90).without_angle(-45).output('opc_drc_angle', 'ACUTE : non 45 degree angle opc_drc') |
| |
| logger.info('Executing rule ndmy_OFFGRID') |
| ndmy.ongrid(0.005).output('ndmy_OFFGRID', 'OFFGRID : OFFGRID vertex on ndmy') |
| ndmy.edges.without_angle(0).without_angle(45).without_angle(90).without_angle(-45).output('ndmy_angle', 'ACUTE : non 45 degree angle ndmy') |
| |
| logger.info('Executing rule pmndmy_OFFGRID') |
| pmndmy.ongrid(0.005).output('pmndmy_OFFGRID', 'OFFGRID : OFFGRID vertex on pmndmy') |
| pmndmy.edges.without_angle(0).without_angle(45).without_angle(90).without_angle(-45).output('pmndmy_angle', 'ACUTE : non 45 degree angle pmndmy') |
| |
| logger.info('Executing rule v5_xtor_OFFGRID') |
| v5_xtor.ongrid(0.005).output('v5_xtor_OFFGRID', 'OFFGRID : OFFGRID vertex on v5_xtor') |
| v5_xtor.edges.without_angle(0).without_angle(45).without_angle(90).without_angle(-45).output('v5_xtor_angle', 'ACUTE : non 45 degree angle v5_xtor') |
| |
| logger.info('Executing rule cap_mk_OFFGRID') |
| cap_mk.ongrid(0.005).output('cap_mk_OFFGRID', 'OFFGRID : OFFGRID vertex on cap_mk') |
| cap_mk.edges.without_angle(0).without_angle(45).without_angle(90).without_angle(-45).output('cap_mk_angle', 'ACUTE : non 45 degree angle cap_mk') |
| |
| logger.info('Executing rule mos_cap_mk_OFFGRID') |
| mos_cap_mk.ongrid(0.005).output('mos_cap_mk_OFFGRID', 'OFFGRID : OFFGRID vertex on mos_cap_mk') |
| mos_cap_mk.edges.without_angle(0).without_angle(45).without_angle(90).without_angle(-45).output('mos_cap_mk_angle', 'ACUTE : non 45 degree angle mos_cap_mk') |
| |
| logger.info('Executing rule diode_mk_OFFGRID') |
| diode_mk.ongrid(0.005).output('diode_mk_OFFGRID', 'OFFGRID : OFFGRID vertex on diode_mk') |
| diode_mk.edges.without_angle(0).without_angle(45).without_angle(90).without_angle(-45).output('diode_mk_angle', 'ACUTE : non 45 degree angle diode_mk') |
| |
| logger.info('Executing rule drc_bjt_OFFGRID') |
| drc_bjt.ongrid(0.005).output('drc_bjt_OFFGRID', 'OFFGRID : OFFGRID vertex on drc_bjt') |
| drc_bjt.edges.without_angle(0).without_angle(45).without_angle(90).without_angle(-45).output('drc_bjt_angle', 'ACUTE : non 45 degree angle drc_bjt') |
| |
| logger.info('Executing rule lvs_bjt_OFFGRID') |
| lvs_bjt.ongrid(0.005).output('lvs_bjt_OFFGRID', 'OFFGRID : OFFGRID vertex on lvs_bjt') |
| lvs_bjt.edges.without_angle(0).without_angle(45).without_angle(90).without_angle(-45).output('lvs_bjt_angle', 'ACUTE : non 45 degree angle lvs_bjt') |
| |
| logger.info('Executing rule mim_l_mk_OFFGRID') |
| mim_l_mk.ongrid(0.005).output('mim_l_mk_OFFGRID', 'OFFGRID : OFFGRID vertex on mim_l_mk') |
| mim_l_mk.edges.without_angle(0).without_angle(45).without_angle(90).without_angle(-45).output('mim_l_mk_angle', 'ACUTE : non 45 degree angle mim_l_mk') |
| |
| logger.info('Executing rule latchup_mk_OFFGRID') |
| latchup_mk.ongrid(0.005).output('latchup_mk_OFFGRID', 'OFFGRID : OFFGRID vertex on latchup_mk') |
| latchup_mk.edges.without_angle(0).without_angle(45).without_angle(90).without_angle(-45).output('latchup_mk_angle', 'ACUTE : non 45 degree angle latchup_mk') |
| |
| logger.info('Executing rule guard_ring_mk_OFFGRID') |
| guard_ring_mk.ongrid(0.005).output('guard_ring_mk_OFFGRID', 'OFFGRID : OFFGRID vertex on guard_ring_mk') |
| guard_ring_mk.edges.without_angle(0).without_angle(45).without_angle(90).without_angle(-45).output('guard_ring_mk_angle', 'ACUTE : non 45 degree angle guard_ring_mk') |
| |
| logger.info('Executing rule otp_mk_OFFGRID') |
| otp_mk.ongrid(0.005).output('otp_mk_OFFGRID', 'OFFGRID : OFFGRID vertex on otp_mk') |
| otp_mk.edges.without_angle(0).without_angle(45).without_angle(90).without_angle(-45).output('otp_mk_angle', 'ACUTE : non 45 degree angle otp_mk') |
| |
| logger.info('Executing rule mtpmark_OFFGRID') |
| mtpmark.ongrid(0.005).output('mtpmark_OFFGRID', 'OFFGRID : OFFGRID vertex on mtpmark') |
| mtpmark.edges.without_angle(0).without_angle(45).without_angle(90).without_angle(-45).output('mtpmark_angle', 'ACUTE : non 45 degree angle mtpmark') |
| |
| logger.info('Executing rule sramcore_OFFGRID') |
| sramcore.ongrid(0.005).output('sramcore_OFFGRID', 'OFFGRID : OFFGRID vertex on sramcore') |
| sramcore.edges.without_angle(0).without_angle(45).without_angle(90).without_angle(-45).output('sramcore_angle', 'ACUTE : non 45 degree angle sramcore') |
| |
| logger.info('Executing rule lvs_rf_OFFGRID') |
| lvs_rf.ongrid(0.005).output('lvs_rf_OFFGRID', 'OFFGRID : OFFGRID vertex on lvs_rf') |
| lvs_rf.edges.without_angle(0).without_angle(45).without_angle(90).without_angle(-45).output('lvs_rf_angle', 'ACUTE : non 45 degree angle lvs_rf') |
| |
| logger.info('Executing rule lvs_drain_OFFGRID') |
| lvs_drain.ongrid(0.005).output('lvs_drain_OFFGRID', 'OFFGRID : OFFGRID vertex on lvs_drain') |
| lvs_drain.edges.without_angle(0).without_angle(45).without_angle(90).without_angle(-45).output('lvs_drain_angle', 'ACUTE : non 45 degree angle lvs_drain') |
| |
| logger.info('Executing rule ind_mk_OFFGRID') |
| ind_mk.ongrid(0.005).output('ind_mk_OFFGRID', 'OFFGRID : OFFGRID vertex on ind_mk') |
| ind_mk.edges.without_angle(0).without_angle(45).without_angle(90).without_angle(-45).output('ind_mk_angle', 'ACUTE : non 45 degree angle ind_mk') |
| |
| logger.info('Executing rule hvpolyrs_OFFGRID') |
| hvpolyrs.ongrid(0.005).output('hvpolyrs_OFFGRID', 'OFFGRID : OFFGRID vertex on hvpolyrs') |
| hvpolyrs.edges.without_angle(0).without_angle(45).without_angle(90).without_angle(-45).output('hvpolyrs_angle', 'ACUTE : non 45 degree angle hvpolyrs') |
| |
| logger.info('Executing rule lvs_io_OFFGRID') |
| lvs_io.ongrid(0.005).output('lvs_io_OFFGRID', 'OFFGRID : OFFGRID vertex on lvs_io') |
| lvs_io.edges.without_angle(0).without_angle(45).without_angle(90).without_angle(-45).output('lvs_io_angle', 'ACUTE : non 45 degree angle lvs_io') |
| |
| logger.info('Executing rule metal1_blk_OFFGRID') |
| metal1_blk.ongrid(0.005).output('metal1_blk_OFFGRID', 'OFFGRID : OFFGRID vertex on metal1_blk') |
| metal1_blk.edges.without_angle(0).without_angle(45).without_angle(90).without_angle(-45).output('metal1_blk_angle', 'ACUTE : non 45 degree angle metal1_blk') |
| |
| logger.info('Executing rule metal2_blk_OFFGRID') |
| metal2_blk.ongrid(0.005).output('metal2_blk_OFFGRID', 'OFFGRID : OFFGRID vertex on metal2_blk') |
| metal2_blk.edges.without_angle(0).without_angle(45).without_angle(90).without_angle(-45).output('metal2_blk_angle', 'ACUTE : non 45 degree angle metal2_blk') |
| |
| logger.info('Executing rule pr_bndry_OFFGRID') |
| pr_bndry.ongrid(0.005).output('pr_bndry_OFFGRID', 'OFFGRID : OFFGRID vertex on pr_bndry') |
| pr_bndry.edges.without_angle(0).without_angle(45).without_angle(90).without_angle(-45).output('pr_bndry_angle', 'ACUTE : non 45 degree angle pr_bndry') |
| |
| logger.info('Executing rule mdiode_OFFGRID') |
| mdiode.ongrid(0.005).output('mdiode_OFFGRID', 'OFFGRID : OFFGRID vertex on mdiode') |
| mdiode.edges.without_angle(0).without_angle(45).without_angle(90).without_angle(-45).output('mdiode_angle', 'ACUTE : non 45 degree angle mdiode') |
| |
| logger.info('Executing rule border_OFFGRID') |
| border.ongrid(0.005).output('border_OFFGRID', 'OFFGRID : OFFGRID vertex on border') |
| border.edges.without_angle(0).without_angle(45).without_angle(90).without_angle(-45).output('border_angle', 'ACUTE : non 45 degree angle border') |
| |
| end #OFFGRID-ANGLES |