# -*- Mode:Python; explicit-buffer-name: "technology.conf" -*- # # Those settings are common to all the symbolic technologies. from Hurricane import BasicLayer from helpers.Technology import TypeRegular from helpers.Technology import TypeDiffusion from helpers.Technology import TypeTransistor from helpers.Technology import TypeContact from helpers.Technology import TypeVia viewerConfig = { 'precision':2, 'gridstep':1.0 } # The informations here are extracted from the Alliance ".rds" file, # and must be coherent with it. # # Format of : # The third parameter must be present only for blockage material. # ('layer_name' , MATERIAL , ASSOCIATED ROUTING) # # Note: concerning the LayerMask, real layers are implementeds as BasicLayer, # and are associated to exactly one bit of the mask. Symbolic layers # then combine BasicLayer to create composite objects, an thus can have # a mask which have multiple bits set. Getting the mask from a layer # is straigthforward, but the reverse is not true. One mask may match # multiple symbolic layers. To overcome this ambiguity we introduce the # concept of "working layer", which, for one given mask tells the layer # that will be returned (generally the symbolic one). realLayersTable = \ ( ('nWell' , BasicLayer.Material.nWell ) # Non-Routing Layers. , ('pWell' , BasicLayer.Material.pWell ) , ('nImplant' , BasicLayer.Material.nImplant) , ('pImplant' , BasicLayer.Material.pImplant) , ('active' , BasicLayer.Material.active ) , ('poly' , BasicLayer.Material.poly ) , ('poly2' , BasicLayer.Material.poly ) , ('cut0' , BasicLayer.Material.cut ) # Routing Layers & VIA Cuts. , ('metal1' , BasicLayer.Material.metal ) # WARNING: order *is* meaningful. , ('cut1' , BasicLayer.Material.cut ) , ('metal2' , BasicLayer.Material.metal ) , ('metcap' , BasicLayer.Material.other ) , ('cut2' , BasicLayer.Material.cut ) , ('metal3' , BasicLayer.Material.metal ) , ('cut3' , BasicLayer.Material.cut ) , ('metal4' , BasicLayer.Material.metal ) , ('cut4' , BasicLayer.Material.cut ) , ('metal5' , BasicLayer.Material.metal ) , ('cut5' , BasicLayer.Material.cut ) , ('metal6' , BasicLayer.Material.metal ) , ('cut6' , BasicLayer.Material.cut ) , ('metal7' , BasicLayer.Material.metal ) , ('cut7' , BasicLayer.Material.cut ) , ('metal8' , BasicLayer.Material.metal ) , ('cut8' , BasicLayer.Material.cut ) , ('metal9' , BasicLayer.Material.metal ) , ('cut9' , BasicLayer.Material.cut ) , ('metal10' , BasicLayer.Material.metal ) #, ('topmim6' , BasicLayer.Material.other ) # For Capacitances & Pads. , ('metbot_r' , BasicLayer.Material.other ) #, ('padopen' , BasicLayer.Material.other ) #, ('alucap' , BasicLayer.Material.other ) , ('text.cell' , BasicLayer.Material.other ) # Misc. non-physical layers. , ('text.instance', BasicLayer.Material.other ) # Used by the software for visualization , ('SPL1' , BasicLayer.Material.other ) # purposes only. , ('AutoLayer' , BasicLayer.Material.other ) , ('blockage1' , BasicLayer.Material.blockage, 'metal1') # Blockages , ('blockage2' , BasicLayer.Material.blockage, 'metal2') , ('blockage3' , BasicLayer.Material.blockage, 'metal3') , ('blockage4' , BasicLayer.Material.blockage, 'metal4') , ('blockage5' , BasicLayer.Material.blockage, 'metal5') , ('blockage6' , BasicLayer.Material.blockage, 'metal6') , ('blockage7' , BasicLayer.Material.blockage, 'metal7') , ('blockage8' , BasicLayer.Material.blockage, 'metal8') , ('blockage9' , BasicLayer.Material.blockage, 'metal9') , ('blockage10' , BasicLayer.Material.blockage, 'metal10') , ('gmetalh' , BasicLayer.Material.metal ) # Special BasicLayers for Knik & Kite Routers. , ('gcut' , BasicLayer.Material.cut ) # *Must be after all others* , ('gmetalv' , BasicLayer.Material.metal ) ) # Format of : # The length of the list of real layers depends on the type. # In some case, the last of the list may be optional, it must be # sets to None and not left empty. # # ('SYMB_LAYER' , Type , (LIST_OF_REAL_LAYERS) ) compositeLayersTable = \ ( ('NWELL' , TypeRegular , ('nWell' ,)) , ('PWELL' , TypeRegular , ('pWell' ,)) , ('NTIE' , TypeDiffusion , ('nImplant' , 'active', 'nWell')) , ('PTIE' , TypeDiffusion , ('pImplant' , 'active', 'pWell')) , ('NDIF' , TypeDiffusion , ('nImplant' , 'active', None )) , ('PDIF' , TypeDiffusion , ('pImplant' , 'active', None )) , ('GATE' , TypeDiffusion , ('poly' , 'active', None )) , ('NTRANS' , TypeTransistor, ('nImplant' , 'active', 'poly', None )) , ('PTRANS' , TypeTransistor, ('pImplant' , 'active', 'poly', 'nWell')) , ('POLY' , TypeRegular , ('poly' ,)) , ('POLY2' , TypeRegular , ('poly2' ,)) , ('METAL1' , TypeRegular , ('metal1' ,)) , ('METAL2' , TypeRegular , ('metal2' ,)) , ('metcapdum' , TypeRegular , ('metcap' ,)) , ('metbot' , TypeRegular , ('metal2' ,)) , ('METAL3' , TypeRegular , ('metal3' ,)) , ('METAL4' , TypeRegular , ('metal4' ,)) , ('METAL5' , TypeRegular , ('metal5' ,)) , ('METAL6' , TypeRegular , ('metal6' ,)) , ('METAL7' , TypeRegular , ('metal7' ,)) , ('METAL8' , TypeRegular , ('metal8' ,)) , ('METAL9' , TypeRegular , ('metal9' ,)) , ('METAL10' , TypeRegular , ('metal10' ,)) , ('CONT_BODY_N', TypeContact , ('nImplant' , 'active', 'cut0', 'metal1', 'nWell')) , ('CONT_BODY_P', TypeContact , ('pImplant' , 'active', 'cut0', 'metal1', 'pWell')) , ('CONT_DIF_N' , TypeContact , ('nImplant' , 'active', 'cut0', 'metal1', None )) , ('CONT_DIF_P' , TypeContact , ('pImplant' , 'active', 'cut0', 'metal1', None )) , ('CONT_POLY' , TypeVia , ( 'poly' , 'cut0', 'metal1' )) # VIAs for real technologies. , ('via12' , TypeVia , ( 'metal1', 'cut1', 'metal2' )) , ('via23' , TypeVia , ( 'metal2', 'cut2', 'metal3' )) , ('via34' , TypeVia , ( 'metal3', 'cut3', 'metal4' )) , ('via45' , TypeVia , ( 'metal4', 'cut4', 'metal5' )) , ('via56' , TypeVia , ( 'metal5', 'cut5', 'metal6' )) , ('via67' , TypeVia , ( 'metal6', 'cut6', 'metal7' )) , ('via78' , TypeVia , ( 'metal7', 'cut7', 'metal8' )) , ('via89' , TypeVia , ( 'metal8', 'cut8', 'metal9' )) , ('via910' , TypeVia , ( 'metal9', 'cut9', 'metal10')) # VIAs for symbolic technologies. , ('VIA12' , TypeVia , ( 'metal1', 'cut1', 'metal2' )) , ('VIA23' , TypeVia , ( 'metal2', 'cut2', 'metal3' )) , ('VIA23cap' , TypeVia , ( 'metcap', 'cut2', 'metal3' )) , ('VIA34' , TypeVia , ( 'metal3', 'cut3', 'metal4' )) , ('VIA45' , TypeVia , ( 'metal4', 'cut4', 'metal5' )) , ('VIA56' , TypeVia , ( 'metal5', 'cut5', 'metal6' )) , ('VIA67' , TypeVia , ( 'metal6', 'cut6', 'metal7' )) , ('VIA78' , TypeVia , ( 'metal7', 'cut7', 'metal8' )) , ('VIA89' , TypeVia , ( 'metal8', 'cut8', 'metal9' )) , ('VIA910' , TypeVia , ( 'metal9', 'cut9', 'metal10')) , ('BLOCKAGE1' , TypeRegular , ('blockage1' , )) , ('BLOCKAGE2' , TypeRegular , ('blockage2' , )) , ('BLOCKAGE3' , TypeRegular , ('blockage3' , )) , ('BLOCKAGE4' , TypeRegular , ('blockage4' , )) , ('BLOCKAGE5' , TypeRegular , ('blockage5' , )) , ('BLOCKAGE6' , TypeRegular , ('blockage6' , )) , ('BLOCKAGE7' , TypeRegular , ('blockage7' , )) , ('BLOCKAGE8' , TypeRegular , ('blockage8' , )) , ('BLOCKAGE9' , TypeRegular , ('blockage9' , )) , ('BLOCKAGE10' , TypeRegular , ('blockage10', )) , ('gcontact' , TypeVia , ('gmetalh' , 'gcut', 'gmetalv')) ) # Format of : # This is a simple list of Symbolic layers. symbolicLayersTable = \ [ 'POLY', 'POLY2' , 'METAL1' , 'METAL2' , 'METAL3' , 'METAL4' , 'METAL5' , 'METAL6' , 'METAL7' , 'METAL8' , 'METAL9' , 'METAL10' , 'BLOCKAGE1', 'BLOCKAGE2', 'BLOCKAGE3', 'BLOCKAGE4', 'BLOCKAGE5', 'BLOCKAGE6', 'BLOCKAGE7', 'BLOCKAGE8', 'BLOCKAGE9', 'BLOCKAGE10' , 'VIA12' , 'VIA23' , 'VIA34' , 'VIA45' , 'VIA56' , 'VIA67' , 'VIA78' , 'VIA89' , 'VIA910' , 'gcut' , 'gmetalh' , 'gmetalv' , 'gcontact' ]