diff --git a/crlcore/etc/CMakeLists.txt b/crlcore/etc/CMakeLists.txt index 138453a3..3ac9e987 100644 --- a/crlcore/etc/CMakeLists.txt +++ b/crlcore/etc/CMakeLists.txt @@ -1,22 +1,15 @@ - install ( FILES technology_symbolic.conf DESTINATION ${SYS_CONF_DIR}/coriolis2 ) - install ( FILES technology_cmos130_s2r.conf DESTINATION ${SYS_CONF_DIR}/coriolis2 ) - install ( FILES misc.conf DESTINATION ${SYS_CONF_DIR}/coriolis2 ) - install ( FILES hMetis.conf DESTINATION ${SYS_CONF_DIR}/coriolis2 ) - install ( FILES nimbus.conf DESTINATION ${SYS_CONF_DIR}/coriolis2 ) - install ( FILES mauka.conf DESTINATION ${SYS_CONF_DIR}/coriolis2 ) - install ( FILES kite.conf DESTINATION ${SYS_CONF_DIR}/coriolis2 ) - install ( FILES alliance.conf DESTINATION ${SYS_CONF_DIR}/coriolis2 ) - install ( FILES patterns.conf DESTINATION ${SYS_CONF_DIR}/coriolis2 ) - install ( FILES display.conf DESTINATION ${SYS_CONF_DIR}/coriolis2 ) - install ( FILES stratus1.conf DESTINATION ${SYS_CONF_DIR}/coriolis2 ) + install ( FILES coriolis2_techno.conf DESTINATION ${SYS_CONF_DIR}/coriolis2 ) + install ( DIRECTORY cmos DESTINATION ${SYS_CONF_DIR}/coriolis2 ) + install ( DIRECTORY vsc200 DESTINATION ${SYS_CONF_DIR}/coriolis2 ) + install ( DIRECTORY hcmos9 DESTINATION ${SYS_CONF_DIR}/coriolis2 ) - install ( FILES environment.alliance.xml DESTINATION ${SYS_CONF_DIR}/coriolis2 ) - install ( FILES technology.symbolic.xml DESTINATION ${SYS_CONF_DIR}/coriolis2 ) - install ( FILES technology.cmos130.s2r.xml DESTINATION ${SYS_CONF_DIR}/coriolis2 ) - install ( FILES technology.cmos65.s2r.xml DESTINATION ${SYS_CONF_DIR}/coriolis2 ) - install ( FILES technology.ams035.s2r.xml DESTINATION ${SYS_CONF_DIR}/coriolis2 ) - install ( FILES technology.freePDK45.s2r.xml DESTINATION ${SYS_CONF_DIR}/coriolis2 ) - install ( FILES technology.fake.s2r.xml DESTINATION ${SYS_CONF_DIR}/coriolis2 ) - install ( FILES display.xml DESTINATION ${SYS_CONF_DIR}/coriolis2 ) - install ( FILES tools.configuration.xml DESTINATION ${SYS_CONF_DIR}/coriolis2 ) + install ( FILES environment.alliance.xml DESTINATION ${SYS_CONF_DIR}/coriolis2 ) + install ( FILES technology.symbolic.xml DESTINATION ${SYS_CONF_DIR}/coriolis2 ) + install ( FILES technology.cmos130.s2r.xml DESTINATION ${SYS_CONF_DIR}/coriolis2 ) + install ( FILES technology.cmos65.s2r.xml DESTINATION ${SYS_CONF_DIR}/coriolis2 ) + install ( FILES technology.ams035.s2r.xml DESTINATION ${SYS_CONF_DIR}/coriolis2 ) + install ( FILES technology.freePDK45.s2r.xml DESTINATION ${SYS_CONF_DIR}/coriolis2 ) + install ( FILES technology.fake.s2r.xml DESTINATION ${SYS_CONF_DIR}/coriolis2 ) + install ( FILES display.xml DESTINATION ${SYS_CONF_DIR}/coriolis2 ) + install ( FILES tools.configuration.xml DESTINATION ${SYS_CONF_DIR}/coriolis2 ) diff --git a/crlcore/etc/alliance.conf b/crlcore/etc/cmos/alliance.conf similarity index 84% rename from crlcore/etc/alliance.conf rename to crlcore/etc/cmos/alliance.conf index 2516aaab..5b52048c 100644 --- a/crlcore/etc/alliance.conf +++ b/crlcore/etc/cmos/alliance.conf @@ -1,14 +1,15 @@ - # -*- Mode:Python -*- -cellsTop = '/soc/alliance/cells/' +cellsTop = '/soc/alliance/cells/' allianceConfig = \ - ( ( 'SYMBOLIC_TECHNOLOGY', helpers.sysConfDir+'/technology.symbolic.xml' ) - , ( 'REAL_TECHNOLOGY' , helpers.sysConfDir+'/technology.cmos130.s2r.xml') - , ( 'DISPLAY' , helpers.sysConfDir+'/display.xml' ) + ( ( 'SYMB_TECHNO_NAME' , helpers.symbolicTechno ) + , ( 'REAL_TECHNO_NAME' , helpers.realTechno ) + , ( 'SYMBOLIC_TECHNOLOGY', helpers.symbolicDir+'/technology.conf' ) + , ( 'REAL_TECHNOLOGY' , helpers.realDir +'/technology.conf' ) + , ( 'DISPLAY' , helpers.sysConfDir +'/display.xml' ) , ( 'CATALOG' , 'CATAL') , ( 'WORKING_LIBRARY' , '.') , ( 'SYSTEM_LIBRARY' , ( (cellsTop+'sxlib' , Environment.Append) diff --git a/crlcore/etc/display.conf b/crlcore/etc/cmos/display.conf similarity index 96% rename from crlcore/etc/display.conf rename to crlcore/etc/cmos/display.conf index 989f2266..e607605a 100644 --- a/crlcore/etc/display.conf +++ b/crlcore/etc/cmos/display.conf @@ -132,6 +132,7 @@ stylesTable = \ , (Drawing, 'pImplant', { 'color':'Yellow' , 'pattern':'antihash0.8' , 'border':1, 'threshold':1.50 }) , (Drawing, 'active' , { 'color':'White' , 'pattern':'antihash1.8' , 'border':1, 'threshold':1.50 }) , (Drawing, 'poly' , { 'color':'Red' , 'pattern':'poids2.8' , 'border':1, 'threshold':1.50 }) + , (Drawing, 'poly2' , { 'color':'Orange' , 'pattern':'poids2.8' , 'border':1, 'threshold':1.50 }) # Routing Layers. , (Group , 'Routing Layers') @@ -142,6 +143,8 @@ stylesTable = \ , (Drawing, 'metal4', { 'color':'Green' , 'pattern':'poids4.8' , 'border':1, 'threshold':0.02 }) , (Drawing, 'metal5', { 'color':'Yellow' , 'pattern':'poids4.8' , 'border':1, 'threshold':0.02 }) , (Drawing, 'metal6', { 'color':'Violet' , 'pattern':'poids4.8' , 'border':1, 'threshold':0.02 }) + , (Drawing, 'metal7', { 'color':'Red' , 'pattern':'poids4.8' , 'border':1, 'threshold':0.02 }) + , (Drawing, 'metal8', { 'color':'Blue' , 'pattern':'poids4.8' , 'border':1, 'threshold':0.02 }) # Cuts (VIA holes). , (Group , 'Cuts (VIA holes)') @@ -151,6 +154,8 @@ stylesTable = \ , (Drawing, 'cut3', { 'color':'Green' , 'threshold':0.80 }) , (Drawing, 'cut4', { 'color':'Yellow' , 'threshold':0.80 }) , (Drawing, 'cut5', { 'color':'Violet' , 'threshold':0.80 }) + , (Drawing, 'cut6', { 'color':'Red' , 'threshold':0.80 }) + , (Drawing, 'cut7', { 'color':'Blue' , 'threshold':0.80 }) # MIM6. , (Group , 'MIM6') @@ -167,6 +172,8 @@ stylesTable = \ , (Drawing, 'blockage4', { 'color':'Green' , 'pattern':'poids4.8' , 'threshold':0.80, 'border':2 }) , (Drawing, 'blockage5', { 'color':'Yellow' , 'pattern':'poids4.8' , 'threshold':0.80, 'border':2 }) , (Drawing, 'blockage6', { 'color':'Violet' , 'pattern':'poids4.8' , 'threshold':0.80, 'border':2 }) + , (Drawing, 'blockage7', { 'color':'Red' , 'pattern':'poids4.8' , 'threshold':0.80, 'border':2 }) + , (Drawing, 'blockage8', { 'color':'Blue' , 'pattern':'poids4.8' , 'threshold':0.80, 'border':2 }) # Knick & Kite. , (Group , 'Knick & Kite') @@ -303,6 +310,7 @@ stylesTable = \ , (Drawing, 'pImplant', { 'color':'Yellow' , 'pattern':'diffusion.32' , 'border':0, 'threshold':1.50 }) , (Drawing, 'active' , { 'color':'White' , 'pattern':'active.32' , 'border':0, 'threshold':1.50 }) , (Drawing, 'poly' , { 'color':'Red' , 'pattern':'antipoids2.32', 'border':1, 'threshold':1.50 }) + , (Drawing, 'poly2' , { 'color':'Orange' , 'pattern':'antipoids2.32', 'border':1, 'threshold':1.50 }) # Group: Routing Layers. , (Group , 'Routing Layers') diff --git a/crlcore/etc/hMetis.conf b/crlcore/etc/cmos/hMetis.conf similarity index 100% rename from crlcore/etc/hMetis.conf rename to crlcore/etc/cmos/hMetis.conf diff --git a/crlcore/etc/kite.conf b/crlcore/etc/cmos/kite.conf similarity index 100% rename from crlcore/etc/kite.conf rename to crlcore/etc/cmos/kite.conf diff --git a/crlcore/etc/mauka.conf b/crlcore/etc/cmos/mauka.conf similarity index 100% rename from crlcore/etc/mauka.conf rename to crlcore/etc/cmos/mauka.conf diff --git a/crlcore/etc/misc.conf b/crlcore/etc/cmos/misc.conf similarity index 100% rename from crlcore/etc/misc.conf rename to crlcore/etc/cmos/misc.conf diff --git a/crlcore/etc/nimbus.conf b/crlcore/etc/cmos/nimbus.conf similarity index 100% rename from crlcore/etc/nimbus.conf rename to crlcore/etc/cmos/nimbus.conf diff --git a/crlcore/etc/patterns.conf b/crlcore/etc/cmos/patterns.conf similarity index 100% rename from crlcore/etc/patterns.conf rename to crlcore/etc/cmos/patterns.conf diff --git a/crlcore/etc/stratus1.conf b/crlcore/etc/cmos/stratus1.conf similarity index 100% rename from crlcore/etc/stratus1.conf rename to crlcore/etc/cmos/stratus1.conf diff --git a/crlcore/etc/technology_symbolic.conf b/crlcore/etc/cmos/technology.conf similarity index 85% rename from crlcore/etc/technology_symbolic.conf rename to crlcore/etc/cmos/technology.conf index 37748fa6..b9529806 100644 --- a/crlcore/etc/technology_symbolic.conf +++ b/crlcore/etc/cmos/technology.conf @@ -1,4 +1,3 @@ - # -*- Mode:Python -*- viewerConfig = { 'precision':2, 'gridstep':1.0 } @@ -24,6 +23,7 @@ realLayersTable = \ , ('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 ) @@ -36,6 +36,10 @@ realLayersTable = \ , ('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 ) , ('topmim6' , BasicLayer.Material.other ) # For Capacitances & Pads. , ('botmim6' , BasicLayer.Material.other ) , ('padopen' , BasicLayer.Material.other ) @@ -51,6 +55,8 @@ realLayersTable = \ , ('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') , ('gmetalh' , BasicLayer.Material.metal ) # Special BasicLayers for Knik & Kite Routers. , ('gcut' , BasicLayer.Material.cut ) # *Must be after all others* , ('gmetalv' , BasicLayer.Material.metal ) @@ -75,12 +81,15 @@ symbolicLayersTable = \ , ('NTRANS' , TypeTransistor, ('nImplant' , 'active', 'poly', None )) , ('PTRANS' , TypeTransistor, ('pImplant' , 'active', 'poly', 'nWell')) , ('POLY' , TypeRegular , ('poly' ,)) + , ('POLY2' , TypeRegular , ('poly2' ,)) , ('METAL1' , TypeRegular , ('metal1' ,)) , ('METAL2' , TypeRegular , ('metal2' ,)) , ('METAL3' , TypeRegular , ('metal3' ,)) , ('METAL4' , TypeRegular , ('metal4' ,)) , ('METAL5' , TypeRegular , ('metal5' ,)) , ('METAL6' , TypeRegular , ('metal6' ,)) + , ('METAL7' , TypeRegular , ('metal7' ,)) + , ('METAL8' , TypeRegular , ('metal8' ,)) , ('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 )) @@ -91,12 +100,16 @@ symbolicLayersTable = \ , ('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')) , ('BLOCKAGE1' , TypeRegular , ('blockage1', )) , ('BLOCKAGE2' , TypeRegular , ('blockage2', )) , ('BLOCKAGE3' , TypeRegular , ('blockage3', )) , ('BLOCKAGE4' , TypeRegular , ('blockage4', )) , ('BLOCKAGE5' , TypeRegular , ('blockage5', )) , ('BLOCKAGE6' , TypeRegular , ('blockage6', )) + , ('BLOCKAGE7' , TypeRegular , ('blockage7', )) + , ('BLOCKAGE8' , TypeRegular , ('blockage8', )) , ('gcontact' , TypeVia , ('gmetalh' , 'gcut', 'gmetalv')) ) @@ -107,7 +120,6 @@ symbolicLayersTable = \ # it applies, an optional real layer in case where there is # more than one, and the dimension name. # * value : the rule (dimension) value expressed in lambda. - symbolicRulesTable = \ ( ('NWELL.nWell.extention.cap' , 0.0) , ('PWELL.pWell.extention.cap' , 0.0) @@ -159,6 +171,8 @@ symbolicRulesTable = \ , ('POLY.minimum.width' , 1.0) , ('POLY.poly.extention.cap' , 0.5) + , ('POLY2.minimum.width' , 1.0) + , ('POLY2.poly.extention.cap' , 0.5) # Routing Layers. , ('METAL1.minimum.width' , 1.0) @@ -173,6 +187,10 @@ symbolicRulesTable = \ , ('METAL5.metal5.extention.cap' , 1.0) , ('METAL6.minimum.width' , 2.0) , ('METAL6.metal6.extention.cap' , 1.0) + , ('METAL7.minimum.width' , 2.0) + , ('METAL7.metal6.extention.cap' , 1.0) + , ('METAL8.minimum.width' , 2.0) + , ('METAL8.metal6.extention.cap' , 1.0) # Contacts (i.e. Active <--> Metal). , ('CONT_BODY_N.minimum.side' , 1.0) @@ -217,6 +235,12 @@ symbolicRulesTable = \ , ('VIA56.minimum.side' , 1.0) , ('VIA56.metal5.enclosure' , 0.5) , ('VIA56.metal6.enclosure' , 0.5) + , ('VIA67.minimum.side' , 1.0) + , ('VIA67.metal6.enclosure' , 0.5) + , ('VIA67.metal7.enclosure' , 0.5) + , ('VIA78.minimum.side' , 1.0) + , ('VIA78.metal7.enclosure' , 0.5) + , ('VIA78.metal8.enclosure' , 0.5) # Blockages. , ('BLOCKAGE1.minimum.width' , 1.0) @@ -231,6 +255,10 @@ symbolicRulesTable = \ , ('BLOCKAGE5.blockage5.extention.cap' , 1.0) , ('BLOCKAGE6.minimum.width' , 2.0) , ('BLOCKAGE6.blockage6.extention.cap' , 1.0) + , ('BLOCKAGE7.minimum.width' , 2.0) + , ('BLOCKAGE7.blockage6.extention.cap' , 1.0) + , ('BLOCKAGE8.minimum.width' , 2.0) + , ('BLOCKAGE8.blockage6.extention.cap' , 1.0) ) @@ -239,8 +267,9 @@ symbolicRulesTable = \ workingLayersTable = \ [ 'cut0', 'cut1' , 'cut2' , 'cut3' , 'cut4' , 'cut5' - , 'POLY', 'METAL1' , 'METAL2' , 'METAL3' , 'METAL4' , 'METAL5' , 'METAL6' - , 'BLOCKAGE1', 'BLOCKAGE2', 'BLOCKAGE3', 'BLOCKAGE4', 'BLOCKAGE5', 'BLOCKAGE6' - , 'VIA12' , 'VIA23' , 'VIA34' , 'VIA45' , 'VIA56' - , 'gcut', 'gmetalh' , 'gmetalv' , 'gcontact' + , 'POLY', 'POLY2' + , 'METAL1' , 'METAL2' , 'METAL3' , 'METAL4' , 'METAL5' , 'METAL6' , 'METAL7' , 'METAL8' + , 'BLOCKAGE1', 'BLOCKAGE2', 'BLOCKAGE3', 'BLOCKAGE4', 'BLOCKAGE5', 'BLOCKAGE6', 'BLOCKAGE7', 'BLOCKAGE8' + , 'VIA12' , 'VIA23' , 'VIA34' , 'VIA45' , 'VIA56' + , 'gcut', 'gmetalh', 'gmetalv', 'gcontact' ] diff --git a/crlcore/etc/coriolis2_techno.conf b/crlcore/etc/coriolis2_techno.conf new file mode 100644 index 00000000..04b409a5 --- /dev/null +++ b/crlcore/etc/coriolis2_techno.conf @@ -0,0 +1,4 @@ +# -*- Mode:Python -*- + +symbolicTechno = 'cmos' +realTechno = 'hcmos9' diff --git a/crlcore/etc/technology_cmos130_s2r.conf b/crlcore/etc/hcmos9/technology.conf similarity index 100% rename from crlcore/etc/technology_cmos130_s2r.conf rename to crlcore/etc/hcmos9/technology.conf diff --git a/crlcore/etc/vsc200/alliance.conf b/crlcore/etc/vsc200/alliance.conf new file mode 100644 index 00000000..15341df7 --- /dev/null +++ b/crlcore/etc/vsc200/alliance.conf @@ -0,0 +1,52 @@ +# -*- Mode:Python -*- + + +cellsTop = '/usr/share/pharosc/alliance/cells/' + + +allianceConfig = \ + ( ( 'SYMB_TECHNO_NAME' , helpers.symbolicTechno ) + , ( 'REAL_TECHNO_NAME' , helpers.realTechno ) + , ( 'SYMBOLIC_TECHNOLOGY', helpers.symbolicDir+'/technology.conf' ) + , ( 'REAL_TECHNOLOGY' , helpers.realDir +'/technology.conf' ) + , ( 'DISPLAY' , helpers.sysConfDir +'/display.xml' ) + , ( 'CATALOG' , 'CATAL') + , ( 'WORKING_LIBRARY' , '.') + , ( 'SYSTEM_LIBRARY' , ( (cellsTop+'vsclib' , Environment.Append) + , ) ) + , ( 'SCALE_X' , 100) + , ( 'IN_LO' , 'vst') + , ( 'IN_PH' , 'ap') + , ( 'OUT_LO' , 'vst') + , ( 'OUT_PH' , 'ap') + , ( 'POWER' , 'vdd') + , ( 'GROUND' , 'vss') + , ( 'CLOCK' , '^ck.*') + , ( 'BLOCKAGE' , '^blockage[Nn]et*') + ) + + +# Format of routingGaugesTable (dictionary): +# A list of entry of the form: +# ( METAL_NAME, (Direction, Type, depth, density, offset, pitch, wire_width, via_width) ) + +routingGaugesTable = {} + +routingGaugesTable['sxlib'] = \ + ( ( 'METAL1', ( RoutingLayerGauge.Vertical , RoutingLayerGauge.PinOnly, 0, 0.0, 0, 5, 2, 2 ) ) + , ( 'METAL2', ( RoutingLayerGauge.Horizontal, RoutingLayerGauge.Default, 1, 7.0, 0, 5, 2, 2 ) ) + , ( 'METAL3', ( RoutingLayerGauge.Vertical , RoutingLayerGauge.Default, 2, 0.0, 0, 5, 2, 2 ) ) + , ( 'METAL4', ( RoutingLayerGauge.Horizontal, RoutingLayerGauge.Default, 3, 0.0, 0, 5, 2, 2 ) ) + , ( 'METAL5', ( RoutingLayerGauge.Vertical , RoutingLayerGauge.Default, 4, 0.0, 0, 5, 2, 2 ) ) + #, ( 'METAL6', ( RoutingLayerGauge.Horizontal, RoutingLayerGauge.Default, 5, 0.0, 0, 5, 2, 2 ) ) + #, ( 'METAL7', ( RoutingLayerGauge.Vertical , RoutingLayerGauge.Default, 6, 0.0, 0, 5, 2, 2 ) ) + ) + + +# Format of cellGaugesTable (dictionary): +# A list of entry of the form: +# ( METAL_PIN, xy_common_pitch, slice_height, slice_step ) + +cellGaugesTable = {} +cellGaugesTable['sxlib'] = ('metal2', 5.0, 50.0, 5.0) + diff --git a/crlcore/etc/vsc200/display.conf b/crlcore/etc/vsc200/display.conf new file mode 100644 index 00000000..25c29976 --- /dev/null +++ b/crlcore/etc/vsc200/display.conf @@ -0,0 +1,357 @@ + +# -*- Mode:Python -*- + + +defaultStyle = 'Printer.Coriolis' + +stylesTable = \ + ( ( (Style , 'Alliance.Coriolis [black]', 'Alliance Coriolis Look - black background') + , (Darkening, 1.0, 3.0, 2.5) + + # Group: Viewer. + , (Group , 'Viewer') + , (Drawing, 'fallback' , { 'color':'Gray238' , 'border':1, 'pattern':'55AA55AA55AA55AA' }) + , (Drawing, 'background' , { 'color':'Gray50' , 'border':1 }) + , (Drawing, 'foreground' , { 'color':'White' , 'border':1 }) + , (Drawing, 'rubber' , { 'color':'192,0,192' , 'border':2, 'threshold':0.02 }) + , (Drawing, 'phantom' , { 'color':'Seashell4' , 'border':1 }) + , (Drawing, 'boundaries' , { 'color':'208,199,192', 'border':1, 'pattern':'0000000000000000', 'threshold':0 }) + , (Drawing, 'marker' , { 'color':'80,250,80' , 'border':1 }) + , (Drawing, 'selectionDraw' , { 'color':'White' , 'border':1 }) + , (Drawing, 'selectionFill' , { 'color':'White' , 'border':1 }) + , (Drawing, 'grid' , { 'color':'White' , 'border':1, 'threshold':2.0 }) + , (Drawing, 'spot' , { 'color':'White' , 'border':2, 'threshold':6.0 }) + , (Drawing, 'ghost' , { 'color':'White' , 'border':1 }) + , (Drawing, 'text.ruler' , { 'color':'White' , 'border':1, 'threshold':0.0 }) + , (Drawing, 'text.instance' , { 'color':'Black' , 'border':1, 'threshold':4.0 }) + , (Drawing, 'text.reference' , { 'color':'White' , 'border':1, 'threshold':20.0 }) + , (Drawing, 'undef' , { 'color':'Violet' , 'border':0, 'pattern':'2244118822441188' }) + , (Drawing, 'mauka.container', { 'color':'Magenta4' , 'border':4, 'pattern':'0000000000000000', 'goMatched':False }) + + # Group: Active Layer. + , (Group , 'Active Layer') + , (Drawing, 'nWell' , { 'color':'Tan' , 'pattern':'55AA55AA55AA55AA', 'threshold':1.5 }) + , (Drawing, 'pWell' , { 'color':'LightYellow', 'pattern':'55AA55AA55AA55AA', 'threshold':1.50 }) + , (Drawing, 'nImplant', { 'color':'LawnGreen' , 'pattern':'55AA55AA55AA55AA', 'threshold':1.50 }) + , (Drawing, 'pImplant', { 'color':'Yellow' , 'pattern':'55AA55AA55AA55AA', 'threshold':1.50 }) + , (Drawing, 'active' , { 'color':'White' , 'pattern':'antihash1.8' , 'threshold':1.50 }) + , (Drawing, 'poly' , { 'color':'Red' , 'pattern':'55AA55AA55AA55AA', 'threshold':1.50 }) + + # Group: Routing Layer. + , (Group , 'Routing Layer') + , (Drawing, 'metal1' , { 'color':'Blue' , 'pattern':'poids2.8' , 'threshold':0.80 }) + , (Drawing, 'metal2' , { 'color':'Aqua' , 'pattern':'light_antihash0.8' , 'threshold':0.02 }) + , (Drawing, 'metal3' , { 'color':'LightPink', 'pattern':'light_antihash1.8' , 'threshold':0.02 }) + , (Drawing, 'metal4' , { 'color':'Green' , 'pattern':'light_antihash2.8' , 'threshold':0.02 }) + , (Drawing, 'metal5' , { 'color':'Yellow' , 'pattern':'1144114411441144' , 'threshold':0.02 }) + , (Drawing, 'metal6' , { 'color':'Violet' , 'pattern':'light_antihash0.8' , 'threshold':0.02 }) + + # Group: Cuts (VIA holes). + , (Group , 'Cuts (VIA Holes)') + , (Drawing, 'cut0', { 'color':'0,150,150', 'threshold':1.50 }) + , (Drawing, 'cut1', { 'color':'Aqua' , 'threshold':0.80 }) + , (Drawing, 'cut2', { 'color':'LightPink', 'threshold':0.80 }) + , (Drawing, 'cut3', { 'color':'Green' , 'threshold':0.80 }) + , (Drawing, 'cut4', { 'color':'Yellow' , 'threshold':0.80 }) + , (Drawing, 'cut5', { 'color':'Violet' , 'threshold':0.80 }) + + # Group: MIM6. + , (Group , 'MIM6') + , (Drawing, 'topmim6', { 'color':'Blue' , 'pattern':'poids2.8' , 'threshold':0.80 }) + , (Drawing, 'botmim6', { 'color':'Aqua' , 'pattern':'light_antihash0.8', 'threshold':0.80 }) + , (Drawing, 'padopen', { 'color':'LightPink', 'pattern':'light_antihash1.8', 'threshold':0.80 }) + , (Drawing, 'alucap' , { 'color':'Green' , 'pattern':'light_antihash2.8', 'threshold':0.80 }) + + # Group: Blockages. + , (Group , 'Blockages') + , (Drawing, 'blockage1', { 'color':'Blue' , 'pattern':'006070381c0e0703' , 'threshold':0.80, 'border':2 }) + , (Drawing, 'blockage2', { 'color':'Aqua' , 'pattern':'8103060c183060c0' , 'threshold':0.80, 'border':2 }) + , (Drawing, 'blockage3', { 'color':'LightPink', 'pattern':'poids4.8' , 'threshold':0.80, 'border':2 }) + , (Drawing, 'blockage4', { 'color':'Green' , 'pattern':'light_antihash2.8', 'threshold':0.80, 'border':2 }) + , (Drawing, 'blockage5', { 'color':'Yellow' , 'pattern':'1144114411441144' , 'threshold':0.80, 'border':2 }) + , (Drawing, 'blockage6', { 'color':'Violet' , 'pattern':'light_antihash0.8', 'threshold':0.80, 'border':2 }) + + # Group: Knik & Kite. + , (Group , 'Knik & Kite') + , (Drawing, 'SPL1' , { 'color':'Red' }) + , (Drawing, 'AutoLayer', { 'color':'Magenta' }) + , (Drawing, 'gmetalh' , { 'color':'128,255,200', 'pattern':'light_antihash0.8', 'border':1 }) + , (Drawing, 'gmetalv' , { 'color':'200,200,255', 'pattern':'light_antihash1.8', 'border':1 }) + , (Drawing, 'gcut' , { 'color':'255,255,190', 'border':1 }) + ) + + # ---------------------------------------------------------------------- + # Style: Alliance.Coriolis [white]. + , ( (Style , 'Alliance.Coriolis [white]', 'Alliance Coriolis Look - white background') + , (Inherit , 'Alliance.Coriolis [black]') + , (Darkening, 1.0, 3.0, 2.5) + + , (Group , 'Viewer') + , (Drawing, 'fallback' , { 'color':'Black', 'border':1, 'pattern':'55AA55AA55AA55AA' }) + , (Drawing, 'background' , { 'color':'White', 'border':1 }) + , (Drawing, 'foreground' , { 'color':'Black', 'border':1 }) + , (Drawing, 'selectionDraw', { 'color':'Black', 'border':1 }) + , (Drawing, 'selectionFill', { 'color':'Black', 'border':1 }) + , (Drawing, 'grid' , { 'color':'Black', 'border':1, 'threshold':6.0 }) + , (Drawing, 'spot' , { 'color':'Black', 'border':1, 'threshold':6.0 }) + , (Drawing, 'ghost' , { 'color':'Black', 'border':1 }) + , (Drawing, 'text.ruler' , { 'color':'Black', 'border':1, 'threshold':0.0 }) + , (Drawing, 'text.instance', { 'color':'Black', 'border':1, 'threshold':4.0 }) + , (Drawing, 'undef' , { 'color':'Black', 'border':0, 'pattern':'2244118822441188' }) + ) + + # ---------------------------------------------------------------------- + # Style: Alliance.Classic [black] + , ( (Style, 'Alliance.Classic [black]', 'Alliance Classic Look - black background') + , (Darkening, 1.0, 3.0, 2.5) + + # Viewer. + , (Group , 'Viewer') + , (Drawing, 'fallback' , { 'color':'Gray238' , 'border':1, 'pattern':'55AA55AA55AA55AA' }) + , (Drawing, 'background' , { 'color':'Gray50' , 'border':1 }) + , (Drawing, 'foreground' , { 'color':'White' , 'border':1 }) + , (Drawing, 'rubber' , { 'color':'192,0,192' , 'border':4, 'threshold':0.02 }) + , (Drawing, 'phantom' , { 'color':'Seashell4' , 'border':1 }) + , (Drawing, 'boundaries' , { 'color':'208,199,192', 'border':1, 'pattern':'0000000000000000', 'threshold':0 }) + , (Drawing, 'marker' , { 'color':'80,250,80' , 'border':1 }) + , (Drawing, 'selectionDraw' , { 'color':'White' , 'border':1 }) + , (Drawing, 'selectionFill' , { 'color':'White' , 'border':1 }) + , (Drawing, 'grid' , { 'color':'White' , 'border':1, 'threshold':2.0 }) + , (Drawing, 'spot' , { 'color':'White' , 'border':2, 'threshold':6.0 }) + , (Drawing, 'ghost' , { 'color':'White' , 'border':1 }) + , (Drawing, 'text.ruler' , { 'color':'White' , 'border':1, 'threshold':0.0 }) + , (Drawing, 'text.instance' , { 'color':'White' , 'border':1, 'threshold':4.0 }) + , (Drawing, 'text.reference', { 'color':'White' , 'border':1, 'threshold':20.0 }) + , (Drawing, 'undef' , { 'color':'Violet' , 'border':0, 'pattern':'2244118822441188' }) + + # Active Layers. + , (Group , 'Active Layers') + , (Drawing, 'nWell' , { 'color':'Tan' , 'pattern':'urgo.8' , 'border':1, 'threshold':1.50 }) + , (Drawing, 'pWell' , { 'color':'LightYellow', 'pattern':'urgo.8' , 'border':1, 'threshold':1.50 }) + , (Drawing, 'nImplant', { 'color':'LawnGreen' , 'pattern':'antihash0.8' , 'border':1, 'threshold':1.50 }) + , (Drawing, 'pImplant', { 'color':'Yellow' , 'pattern':'antihash0.8' , 'border':1, 'threshold':1.50 }) + , (Drawing, 'active' , { 'color':'White' , 'pattern':'antihash1.8' , 'border':1, 'threshold':1.50 }) + , (Drawing, 'poly' , { 'color':'Red' , 'pattern':'poids2.8' , 'border':1, 'threshold':1.50 }) + , (Drawing, 'poly2' , { 'color':'Magenta4' , 'pattern':'poids2.8' , 'border':1, 'threshold':1.50 }) + + # Routing Layers. + , (Group , 'Routing Layers') + #, (Drawing, 'metal1', { 'color':'Blue' , 'pattern':'light_antislash0.8', 'border':1, 'threshold':0.80 }) + , (Drawing, 'metal1', { 'color':'Blue' , 'pattern':'slash.8' , 'border':1, 'threshold':0.80 }) + , (Drawing, 'metal2', { 'color':'Aqua' , 'pattern':'poids4.8' , 'border':1, 'threshold':0.02 }) + , (Drawing, 'metal3', { 'color':'LightPink', 'pattern':'poids4.8' , 'border':1, 'threshold':0.02 }) + , (Drawing, 'metal4', { 'color':'Green' , 'pattern':'poids4.8' , 'border':1, 'threshold':0.02 }) + , (Drawing, 'metal5', { 'color':'Yellow' , 'pattern':'poids4.8' , 'border':1, 'threshold':0.02 }) + , (Drawing, 'metal6', { 'color':'Violet' , 'pattern':'poids4.8' , 'border':1, 'threshold':0.02 }) + , (Drawing, 'metal7', { 'color':'Red' , 'pattern':'poids4.8' , 'border':1, 'threshold':0.02 }) + , (Drawing, 'metal8', { 'color':'Blue' , 'pattern':'poids4.8' , 'border':1, 'threshold':0.02 }) + + # Cuts (VIA holes). + , (Group , 'Cuts (VIA holes)') + , (Drawing, 'cut0', { 'color':'0,150,150', 'threshold':1.50 }) + , (Drawing, 'cut1', { 'color':'Aqua' , 'threshold':0.80 }) + , (Drawing, 'cut2', { 'color':'LightPink', 'threshold':0.80 }) + , (Drawing, 'cut3', { 'color':'Green' , 'threshold':0.80 }) + , (Drawing, 'cut4', { 'color':'Yellow' , 'threshold':0.80 }) + , (Drawing, 'cut5', { 'color':'Violet' , 'threshold':0.80 }) + , (Drawing, 'cut6', { 'color':'Red' , 'threshold':0.80 }) + , (Drawing, 'cut7', { 'color':'Blue' , 'threshold':0.80 }) + + # MIM6. + , (Group , 'MIM6') + , (Drawing, 'topmim6', { 'color':'Blue' , 'pattern':'poids2.32' , 'threshold':0.80 }) + , (Drawing, 'botmim6', { 'color':'Aqua' , 'pattern':'light_antihash0.8' , 'threshold':0.80 }) + , (Drawing, 'padopen', { 'color':'LightPink', 'pattern':'light_antihash1.8' , 'threshold':0.80 }) + , (Drawing, 'alucap' , { 'color':'Green' , 'pattern':'light_antihash2.8' , 'threshold':0.80 }) + + # Blockages. + , (Group , 'Blockages') + , (Drawing, 'blockage1', { 'color':'Blue' , 'pattern':'light_antislash0.8', 'threshold':0.80, 'border':2 }) + , (Drawing, 'blockage2', { 'color':'Aqua' , 'pattern':'poids4.8' , 'threshold':0.80, 'border':2 }) + , (Drawing, 'blockage3', { 'color':'LightPink', 'pattern':'poids4.8' , 'threshold':0.80, 'border':2 }) + , (Drawing, 'blockage4', { 'color':'Green' , 'pattern':'poids4.8' , 'threshold':0.80, 'border':2 }) + , (Drawing, 'blockage5', { 'color':'Yellow' , 'pattern':'poids4.8' , 'threshold':0.80, 'border':2 }) + , (Drawing, 'blockage6', { 'color':'Violet' , 'pattern':'poids4.8' , 'threshold':0.80, 'border':2 }) + , (Drawing, 'blockage7', { 'color':'Red' , 'pattern':'poids4.8' , 'threshold':0.80, 'border':2 }) + , (Drawing, 'blockage8', { 'color':'Blue' , 'pattern':'poids4.8' , 'threshold':0.80, 'border':2 }) + + # Knick & Kite. + , (Group , 'Knick & Kite') + , (Drawing, 'SPL1' , { 'color':'Red' }) + , (Drawing, 'AutoLayer', { 'color':'Magenta' }) + , (Drawing, 'gmetalh' , { 'color':'128,255,200', 'pattern':'antislash2.32' , 'border':1 }) + , (Drawing, 'gmetalv' , { 'color':'200,200,255', 'pattern':'light_antihash1.8', 'border':1 }) + , (Drawing, 'gcut' , { 'color':'255,255,190', 'border':1 }) + ) + + # ---------------------------------------------------------------------- + # Style: Alliance.Classic [white] + , ( (Style, 'Alliance.Classic [white]', 'Alliance Classic Look - white background') + , (Inherit , 'Alliance.Classic [black]') + , (Darkening, 1.0, 3.0, 2.5) + + # Group: Viewer. + , (Group , 'Viewer') + , (Drawing, 'fallback' , { 'color':'Black', 'border':1, 'pattern':'55AA55AA55AA55AA' }) + , (Drawing, 'background' , { 'color':'White', 'border':1 }) + , (Drawing, 'foreground' , { 'color':'Black', 'border':1 }) + , (Drawing, 'selectionDraw' , { 'color':'Black', 'border':1 }) + , (Drawing, 'selectionFill' , { 'color':'Black', 'border':1 }) + , (Drawing, 'grid' , { 'color':'Black', 'border':1, 'threshold':6.0 }) + , (Drawing, 'spot' , { 'color':'Black', 'border':1, 'threshold':6.0 }) + , (Drawing, 'ghost' , { 'color':'Black', 'border':1 }) + , (Drawing, 'text.ruler' , { 'color':'Black', 'border':1, 'threshold':0.0 }) + , (Drawing, 'text.instance' , { 'color':'Black', 'border':1, 'threshold':4.0 }) + , (Drawing, 'text.reference', { 'color':'Black', 'border':1, 'threshold':20.0 }) + , (Drawing, 'undef' , { 'color':'Black', 'border':0, 'pattern':'2244118822441188' }) + ) + + # ---------------------------------------------------------------------- + # Style: Ispd Global Route [black] + , ( (Style, 'Ispd Global Route', 'ISPD Global Route Look - black background') + , (Inherit , 'Alliance.Classic [black]') + , (Darkening, 1.0, 3.0, 2.5) + + # Group: Viewer. + , (Group , 'Viewer') + , (Drawing, 'background', { 'color':'Black' , 'border':1 }) + , (Drawing, 'rubber' , { 'color':'192,0,192', 'border':1, 'threshold':0 }) + + # Group: Knik & Kite. + , (Group , 'Knik & Kite') + , (Drawing, 'gmetalh' , { 'color':'128,255,200', 'pattern':'light_antihash0.8' , 'border':1, 'threshold':0 }) + , (Drawing, 'gmetalv' , { 'color':'200,200,255', 'pattern':'light_antihash1.8' , 'border':1, 'threshold':0 }) + , (Drawing, 'gcontact', { 'color':'255,255,190', 'border':1, 'threshold':0 }) + ) + + # ---------------------------------------------------------------------- + # Style: Layout Design [black]. + , ( (Style, 'Layout Design', 'Useful for debugging layout - black background') + , (Inherit , 'Alliance.Classic [black]') + , (Darkening, 1.0, 3.0, 2.5) + + # Active Layers. + , (Group , 'Active Layers') + , (Drawing, 'nWell' , { 'color':'Tan' , 'pattern':'0000000000000000', 'threshold':1.50, 'border':2 }) + , (Drawing, 'pWell' , { 'color':'LightYellow', 'pattern':'0000000000000000', 'threshold':1.50, 'border':2 }) + , (Drawing, 'nImplant', { 'color':'LawnGreen' , 'pattern':'0000000000000000', 'threshold':1.50, 'border':2 }) + , (Drawing, 'pImplant', { 'color':'Yellow' , 'pattern':'0000000000000000', 'threshold':1.50, 'border':2 }) + , (Drawing, 'active' , { 'color':'White' , 'pattern':'0000000000000000', 'threshold':1.50, 'border':2 }) + , (Drawing, 'poly' , { 'color':'Red' , 'pattern':'0000000000000000', 'threshold':1.50, 'border':2 }) + + # Routing Layers. + , (Group , 'Routing Layers') + , (Drawing, 'metal1' , { 'color':'Blue' , 'pattern':'0000000000000000', 'threshold':0.80, 'border':2 }) + , (Drawing, 'metal2' , { 'color':'Aqua' , 'pattern':'0000000000000000', 'threshold':0.40, 'border':2 }) + , (Drawing, 'metal3' , { 'color':'LightPink', 'pattern':'0000000000000000', 'threshold':0.02, 'border':2 }) + , (Drawing, 'metal4' , { 'color':'Green' , 'pattern':'0000000000000000', 'threshold':0.02, 'border':2 }) + , (Drawing, 'metal5' , { 'color':'Yellow' , 'pattern':'0000000000000000', 'threshold':0.02, 'border':2 }) + , (Drawing, 'metal6' , { 'color':'Violet' , 'pattern':'0000000000000000', 'threshold':0.02, 'border':2 }) + + # Cuts (VIA holes). + , (Group , 'Cuts (VIA holes)') + , (Drawing, 'cut0' , { 'color':'0,150,150', 'pattern':'poids4.8' , 'threshold':1.50, 'border':1 }) + , (Drawing, 'cut1' , { 'color':'Aqua' , 'pattern':'0000000000000000', 'threshold':0.80, 'border':1 }) + , (Drawing, 'cut2' , { 'color':'LightPink', 'pattern':'0000000000000000', 'threshold':0.80, 'border':1 }) + , (Drawing, 'cut3' , { 'color':'Green' , 'pattern':'0000000000000000', 'threshold':0.80, 'border':1 }) + , (Drawing, 'cut4' , { 'color':'Yellow' , 'pattern':'0000000000000000', 'threshold':0.80, 'border':1 }) + , (Drawing, 'cut5' , { 'color':'Violet' , 'pattern':'0000000000000000', 'threshold':0.80, 'border':1 }) + ) + + # ---------------------------------------------------------------------- + # Style: Layout Design [white]. + , ( (Style, 'Layout Design White', 'Useful for debugging layout - white background') + , (Inherit , 'Layout Design') + , (Darkening, 1.0, 3.0, 2.5) + + # Group: Viewer. + , (Group , 'Viewer') + , (Drawing, 'background' , { 'color':'White', 'border':1 }) + , (Drawing, 'grid' , { 'color':'Black', 'border':1, 'threshold':2.0 }) + , (Drawing, 'spot' , { 'color':'Black', 'border':1, 'threshold':2.0 }) + , (Drawing, 'text.ruler' , { 'color':'Black', 'border':1, 'threshold':0.0 }) + , (Drawing, 'text.reference', { 'color':'Black', 'border':1, 'threshold':20.0 }) + + # Group: Active Layers. + , (Group , 'Active Layers') + , (Drawing, 'active', { 'color':'175,175,175', 'pattern':'0000000000000000', 'threshold':1.50, 'border':2 }) + ) + + # ---------------------------------------------------------------------- + # Style: Look for Printers [white]. + , ( (Style, 'Printer.Coriolis', 'Coriolis Look for Printers') + , (Darkening, 1.0, 3.0, 2.5) + + # Group: Viewer. + , (Group , 'Viewer') + , (Drawing, 'fallback' , { 'color':'Gray238' , 'border':1, 'pattern':'55AA55AA55AA55AA' }) + , (Drawing, 'background' , { 'color':'White' , 'border':1 }) + , (Drawing, 'foreground' , { 'color':'Black' , 'border':1 }) + , (Drawing, 'rubber' , { 'color':'192,0,192', 'border':4, 'threshold':0.02 }) + , (Drawing, 'phantom' , { 'color':'Seashell4', 'border':1 }) + , (Drawing, 'boundaries' , { 'color':'Black' , 'border':1, 'pattern':'0000000000000000', 'threshold':0 }) + , (Drawing, 'marker' , { 'color':'80,250,80', 'border':1 }) + , (Drawing, 'selectionDraw' , { 'color':'Black' , 'border':1 }) + , (Drawing, 'selectionFill' , { 'color':'Black' , 'border':1 }) + , (Drawing, 'grid' , { 'color':'Black' , 'border':1, 'threshold':2.0 }) + , (Drawing, 'spot' , { 'color':'Black' , 'border':2, 'threshold':6.0 }) + , (Drawing, 'ghost' , { 'color':'Black' , 'border':1 }) + , (Drawing, 'text.ruler' , { 'color':'Black' , 'border':1, 'threshold':0.0 }) + , (Drawing, 'text.instance' , { 'color':'Black' , 'border':1, 'threshold':4.0 }) + , (Drawing, 'text.reference' , { 'color':'Black' , 'border':1, 'threshold':20.0 }) + , (Drawing, 'undef' , { 'color':'Violet' , 'border':0, 'pattern':'2244118822441188' }) + , (Drawing, 'mauka.container', { 'color':'Magenta4' , 'border':4, 'pattern':'0000000000000000', 'goMatched':False }) + + # Group: Active Layers. + , (Group , 'Active Layers') + , (Drawing, 'nWell' , { 'color':'Tan' , 'pattern':'antipoids2.32', 'border':1, 'threshold':1.50 }) + , (Drawing, 'pWell' , { 'color':'LightYellow', 'pattern':'antipoids2.32', 'border':1, 'threshold':1.50 }) + , (Drawing, 'nImplant', { 'color':'LawnGreen' , 'pattern':'diffusion.32' , 'border':0, 'threshold':1.50 }) + , (Drawing, 'pImplant', { 'color':'Yellow' , 'pattern':'diffusion.32' , 'border':0, 'threshold':1.50 }) + , (Drawing, 'active' , { 'color':'White' , 'pattern':'active.32' , 'border':0, 'threshold':1.50 }) + , (Drawing, 'poly' , { 'color':'Red' , 'pattern':'antipoids2.32', 'border':1, 'threshold':1.50 }) + , (Drawing, 'poly2' , { 'color':'Magenta4' , 'pattern':'antipoids2.8' , 'border':1, 'threshold':1.50 }) + + # Group: Routing Layers. + , (Group , 'Routing Layers') + , (Drawing, 'metal1', { 'color':'Blue' , 'pattern':'slash.32' , 'border':1, 'threshold':0.02 }) + , (Drawing, 'metal2', { 'color':'Aqua' , 'pattern':'antislash2.32', 'border':1, 'threshold':0.02 }) + , (Drawing, 'metal3', { 'color':'LightPink', 'pattern':'antislash3.32', 'border':1, 'threshold':0.02 }) + , (Drawing, 'metal4', { 'color':'Green' , 'pattern':'antislash4.32', 'border':1, 'threshold':0.02 }) + , (Drawing, 'metal5', { 'color':'Yellow' , 'pattern':'antislash5.32', 'border':1, 'threshold':0.02 }) + , (Drawing, 'metal6', { 'color':'Violet' , 'pattern':'antislash2.32', 'border':1, 'threshold':0.02 }) + + # Group: Cuts (VIA holes) + , (Group , 'Cuts (VIA holes)') + , (Drawing, 'cut0', { 'color':'Blue' , 'pattern':'poids2.8' , 'border':2, 'threshold':1.50 }) + , (Drawing, 'cut1', { 'color':'Aqua' , 'pattern':'antipoids2.8', 'border':2, 'threshold':0.80 }) + , (Drawing, 'cut2', { 'color':'LightPink', 'pattern':'poids2.8' , 'border':2, 'threshold':0.80 }) + , (Drawing, 'cut3', { 'color':'Green' , 'pattern':'antipoids2.8', 'border':2, 'threshold':0.80 }) + , (Drawing, 'cut4', { 'color':'Yellow' , 'pattern':'poids2.8' , 'border':2, 'threshold':0.80 }) + , (Drawing, 'cut5', { 'color':'Violet' , 'pattern':'antipoids2.8', 'border':2, 'threshold':0.80 }) + + # Group: MIM6. + , (Group , 'MIM6') + , (Drawing, 'topmim6', { 'color':'Blue' , 'pattern':'poids2.8' , 'threshold':0.80 }) + , (Drawing, 'botmim6', { 'color':'Aqua' , 'pattern':'light_antihash0.8', 'threshold':0.80 }) + , (Drawing, 'padopen', { 'color':'LightPink', 'pattern':'light_antihash1.8', 'threshold':0.80 }) + , (Drawing, 'alucap' , { 'color':'Green' , 'pattern':'light_antihash2.8', 'threshold':0.80 }) + + # Group: Blockages. + , (Group , 'Blockages') + , (Drawing, 'blockage1', { 'color':'Blue' , 'pattern':'006070381c0e0703' , 'threshold':0.80, 'border':2 }) + , (Drawing, 'blockage2', { 'color':'Aqua' , 'pattern':'8103060c183060c0' , 'threshold':0.80, 'border':2 }) + , (Drawing, 'blockage3', { 'color':'LightPink', 'pattern':'poids4.8' , 'threshold':0.80, 'border':2 }) + , (Drawing, 'blockage4', { 'color':'Green' , 'pattern':'light_antihash2.8', 'threshold':0.80, 'border':2 }) + , (Drawing, 'blockage5', { 'color':'Yellow' , 'pattern':'1144114411441144' , 'threshold':0.80, 'border':2 }) + , (Drawing, 'blockage6', { 'color':'Violet' , 'pattern':'light_antihash0.8', 'threshold':0.80, 'border':2 }) + + # Group: Knik & Kite. + , (Group , 'Knik & Kite') + , (Drawing, 'SPL1' , { 'color':'Red' }) + , (Drawing, 'AutoLayer', { 'color':'Magenta' }) + , (Drawing, 'gmetalh' , { 'color':'128,255,200', 'pattern':'light_antihash0.8' , 'border':1 }) + , (Drawing, 'gmetalv' , { 'color':'200,200,255', 'pattern':'light_antihash1.8' , 'border':1 }) + , (Drawing, 'gcut' , { 'color':'255,255,190', 'border':1 }) + ) + ) diff --git a/crlcore/etc/vsc200/hMetis.conf b/crlcore/etc/vsc200/hMetis.conf new file mode 100644 index 00000000..c9b97b09 --- /dev/null +++ b/crlcore/etc/vsc200/hMetis.conf @@ -0,0 +1,61 @@ + +# -*- Mode:Python -*- + +# hMETIS parameters. +parametersTable = \ + ( ("metis.globalConnectionsWeightRatio" , TypeInt ,1 ) + , ("metis.numberOfInstancesStopCriterion", TypeInt ,45 ) + , ("metis.numberOfTriedBisections" , TypeInt ,10 ) + , ("metis.partOrKWayHMetis" , TypeBool ,True ) + , ("metis.tuneHMetisParameters" , TypeBool ,False) + , ("metis.ubFactor" , TypeInt ,0 ) + + , ("metis.CType", TypeEnumerate ,1 + , { 'values':( ("Hybrid First Choice", 1) + , ("First Choice" , 2) + , ("Greedy First" , 3) + , ("Hyper Edge" , 4) + , ("Edge" , 5) ) } + ) + + , ("metis.RType", TypeEnumerate ,1 + , { 'values':( ("Fiduccia-Mattheyses" , 1) + , ("One Way Fidducia-Mattheyses" , 2) + , ("Early Exit Fidducia-Mattheyses", 3) ) } + ) + + , ("metis.VCycle", TypeEnumerate ,0 + , { 'values':( ("No V-Cycle Refinement" , 0) + , ("On Each Final Bisections" , 1) + , ("On Best Intermediate Solutions", 2) + , ("On All Intermediate Solutions" , 3) ) } + ) + + , ("metis.Reconst", TypeEnumerate ,0 + , { 'values':( ("Ignore cuts Hyper Edges" , 0) + , ("Keep parts of cuts Hyper Edges", 1) ) } + ) + + , ("metis.debug", TypeEnumerate ,0 + , { 'values':( ("Disabled" , 0) + , ("Coarsening Stage" , 1) + , ("Initial Partitioning", 2) + , ("Refinement" , 4) + , ("Multiple Runs" , 8) + , ("More Multiples Runs" , 16) ) } + ) + + , ("metis.tuneHMetisParameters", TypeBool, True + , { 'slaves':( "metis.CType" + , "metis.numberOfTriedBisections" + , "metis.CType" + , "metis.RType" + , "metis.VCycle" + , "metis.Reconst" + , "metis.debug" + ) } + ) + ) + +# The layout of hMetis is integrated in Mauka. +layoutTable = () diff --git a/crlcore/etc/vsc200/kite.conf b/crlcore/etc/vsc200/kite.conf new file mode 100644 index 00000000..1709b9b4 --- /dev/null +++ b/crlcore/etc/vsc200/kite.conf @@ -0,0 +1,37 @@ + +# -*- Mode:Python -*- + +parametersTable = \ + ( ("katabatic.globalLengthThreshold",TypeInt ,1450 ) # Katabatic parameters. + , ("katabatic.saturateRatio" ,TypePercentage,80 ) + , ("katabatic.saturateRp" ,TypeInt ,8 ) + # Kite parameters. + , ("kite.hEdgeCapacity" ,TypePercentage,85 , { 'min':0, 'max':110 } ) + , ("kite.vEdgeCapacity" ,TypePercentage,85 , { 'min':0, 'max':110 } ) + , ("kite.eventsLimit" ,TypeInt ,4000002) + , ("kite.ripupCost" ,TypeInt ,3 , { 'min':0 } ) + , ("kite.strapRipupLimit" ,TypeInt ,16 , { 'min':1 } ) + , ("kite.localRipupLimit" ,TypeInt ,9 , { 'min':1 } ) + , ("kite.globalRipupLimit" ,TypeInt ,5 , { 'min':1 } ) + , ("kite.longGlobalRipupLimit" ,TypeInt ,5 , { 'min':1 } ) + ) + +# Kite Layout. +layoutTable = \ + ( (TypeTab , "Kite", "kite" ) + , (TypeTitle , "Katabatic - Routing Database" ) + , (TypeOption , "katabatic.saturateRatio" , "Saturate Ratio (%)" , 0 ) + , (TypeOption , "katabatic.saturateRp" , "Saturate RoutingPad" , 0 ) + , (TypeOption , "katabatic.globalLengthThreshold", "Global Length Threshold", 0 ) + , (TypeRule ,) + , (TypeTitle , "Kite - Detailed Router" ) + , (TypeOption , "kite.edgeCapacity" , "Edge Capacity (%)" , 0 ) + , (TypeOption , "kite.eventsLimit" , "Events Limit" , 0 ) + , (TypeOption , "kite.ripupCost" , "Ripup Cost" , 1, 1, Cfg.ParameterWidgetFlags.UseSpinBox ) + , (TypeSection, "Ripup Limits", 1 ) + , (TypeOption , "kite.strapRipupLimit" , "Straps" , 1, 1, Cfg.ParameterWidgetFlags.UseSpinBox ) + , (TypeOption , "kite.localRipupLimit" , "Locals" , 1, 1, Cfg.ParameterWidgetFlags.UseSpinBox ) + , (TypeOption , "kite.globalRipupLimit" , "Globals" , 1, 1, Cfg.ParameterWidgetFlags.UseSpinBox ) + , (TypeOption , "kite.longGlobalRipupLimit", "Long Globals", 1, 1, Cfg.ParameterWidgetFlags.UseSpinBox ) + , (TypeRule ,) + ) diff --git a/crlcore/etc/vsc200/mauka.conf b/crlcore/etc/vsc200/mauka.conf new file mode 100644 index 00000000..d05bf650 --- /dev/null +++ b/crlcore/etc/vsc200/mauka.conf @@ -0,0 +1,48 @@ + +# -*- Mode:Python -*- + +# Mauka parameters. +parametersTable = \ + ( ('mauka.partOrKWayHMetis' , TypeBool , False ) + , ('mauka.annealingBinMult' , TypePercentage, 5 ) + , ('mauka.annealingNetMult' , TypePercentage, 90 ) + , ('mauka.annealingRowMult' , TypePercentage, 5 ) + , ('mauka.ignorePins' , TypeBool , False ) + , ('mauka.insertFeeds' , TypeBool , True ) + , ('mauka.plotBins' , TypeBool , True ) + , ('mauka.searchRatio' , TypePercentage, 50 ) + , ('mauka.standardAnnealing', TypeBool , True ) + ) + + +layoutTable = \ + ( (TypeTab , 'Mauka', 'mauka') + # hMETIS part. + , (TypeTitle , 'hMetis - Partitionner') + , (TypeOption, "metis.partOrKWayHMetis" , "Recursive 2-Parts (vs. K-Way)", 0 ) + , (TypeOption, "metis.numberOfInstancesStopCriterion", "Partition Size Stop" , 0 ) + , (TypeOption, "metis.globalConnectionsWeightRatio" , "Global Connections Weight" , 0 ) + , (TypeOption, "metis.ubFactor" , "UB Factor" , 0 ) + , (TypeOption, "metis.tuneHMetisParameters" , "Tune hMETIS Parameters" , 1 ) + , (TypeOption, "metis.numberOfTriedBisections" , "# of tried bisections" , 1 ) + , (TypeOption, "metis.CType" , "CType" , 1 ) + , (TypeOption, "metis.RType" , "RType" , 1 ) + , (TypeOption, "metis.VCycle" , "V-Cycle" , 1 ) + , (TypeOption, "metis.Reconst" , "Reconst" , 1 ) + # Nimbus part. + , (TypeTitle , "Mauka - Placer") + , (TypeOption, "nimbus.pinsPlacement", "Pins Placement" , 0 ) + , (TypeOption, "nimbus.aspectRatio" , "Aspect Ratio, X/Y (%)", 1 ) + , (TypeOption, "nimbus.spaceMargin" , "Space Margin" , 1 ) + , (TypeRule ,) + # Mauka part. + , (TypeOption, "mauka.standardAnnealing", "Standart Annealing" , 0 ) + , (TypeOption, "mauka.ignorePins" , "Ignore Pins" , 0 ) + , (TypeOption, "mauka.plotBins" , "Plot Bins" , 0 ) + , (TypeOption, "mauka.insertFeeds" , "Insert Feeds" , 0 ) + , (TypeOption, "mauka.searchRatio" , "Search Ratio (%)" , 1 ) + , (TypeOption, "mauka.annealingNetMult" , "Annealing Net Mult (%)", 1 ) + , (TypeOption, "mauka.annealingBinMult" , "Annealing Bin Mult (%)", 1 ) + , (TypeOption, "mauka.annealingRowMult" , "Annealing Row Mult (%)", 1 ) + , (TypeRule ,) + ) diff --git a/crlcore/etc/vsc200/misc.conf b/crlcore/etc/vsc200/misc.conf new file mode 100644 index 00000000..20e212ef --- /dev/null +++ b/crlcore/etc/vsc200/misc.conf @@ -0,0 +1,66 @@ + +# -*- Mode:Python -*- + +parametersTable = \ + ( ('misc.catchCore' , TypeBool, False) + , ('misc.info' , TypeBool, False) + , ('misc.bug' , TypeBool, False) + , ('misc.logMode' , TypeBool, False) + , ('misc.verboseLevel1', TypeBool, True ) + , ('misc.verboseLevel2', TypeBool, False) + , ('misc.traceLevel' , TypeInt , 1000, {'min':0} ) + + , ("viewer.printer.mode", TypeEnumerate ,1 + , { 'values':( ("Cell Mode" , 1) + , ("Design Mode", 2) ) } + ) + + # Those enumerated values *must* match QPrinter::PaperSize. + , ("viewer.printer.paper", TypeEnumerate ,0 + , { 'values':( ("A4" , 0) + , ("B5" , 1) + , ("Letter" , 2) + , ("Legal" , 3) + , ("Executive", 4) + , ("A0" , 5) + , ("A1" , 6) + , ("A2" , 7) + , ("A3" , 8) + , ("A5" , 9) + , ("A6" , 10) + , ("A7" , 11) + , ("A8" , 12) + , ("A9" , 13) + , ("B0" , 14) + , ("B1" , 15) + , ("B10" , 16) + , ("B2" , 17) + , ("B3" , 18) + , ("B4" , 19) + , ("B6" , 20) + , ("B7" , 21) + , ("B8" , 22) + , ("B9" , 23) + , ("C5E" , 24) + , ("Comm10E" , 25) + , ("DLE" , 26) + , ("Folio" , 27) + , ("Ledger" , 28) + , ("Tabloid" , 29) + , ("Custom" , 30) ) } + ) + ) + +layoutTable = \ + ( (TypeTab , 'Misc.', 'misc') + , (TypeTitle , 'Miscellaneous') + , (TypeOption, 'misc.catchCore' , 'Catch Core Dumps' , 1) + , (TypeOption, 'misc.verboseLevel1' , 'Verbose' , 0) + , (TypeOption, 'misc.verboseLevel2' , 'Very Verbose' , 0) + , (TypeOption, 'misc.info' , 'Show Info' , 0) + , (TypeOption, 'misc.logMode' , 'Output is a TTY' , 0) + , (TypeOption, 'misc.traceLevel' , 'Trace Level' , 1) + , (TypeTitle , 'Print/Snapshot Parameters') + , (TypeOption, 'viewer.printer.mode' , 'Printer/Snapshot Mode', 1) + , (TypeOption, 'viewer.printer.paper', 'Paper Size' , 0) + ) diff --git a/crlcore/etc/vsc200/nimbus.conf b/crlcore/etc/vsc200/nimbus.conf new file mode 100644 index 00000000..c452a5cc --- /dev/null +++ b/crlcore/etc/vsc200/nimbus.conf @@ -0,0 +1,15 @@ + +# -*- Mode:Python -*- + +# Nimbus parameters. +parametersTable = \ + ( ('nimbus.aspectRatio' , TypePercentage, 100 , { 'min':10, 'max':1000 } ) + , ("nimbus.pinsPlacement", TypeBool , False ) + , ("nimbus.spaceMargin" , TypePercentage, 40 ) + , ("nimbus.cellGauge" , TypeString , "sxlib", { 'flags':Cfg.Parameter.Flags.AllRequirements} ) + , ("nimbus.routingGauge" , TypeString , "sxlib", { 'flags':Cfg.Parameter.Flags.AllRequirements} ) + ) + + +# layoutTable is defined inside Mauka. +layoutTable = () diff --git a/crlcore/etc/vsc200/patterns.conf b/crlcore/etc/vsc200/patterns.conf new file mode 100644 index 00000000..a2c437bd --- /dev/null +++ b/crlcore/etc/vsc200/patterns.conf @@ -0,0 +1,575 @@ + +# -*- mode:Python -*- + + +patternsTable = ( { 'name':'slash.8' , 'bits':[ ' X X' + , ' X X ' + , ' X X ' + , 'X X ' + , ' X X' + , ' X X ' + , ' X X ' + , 'X X ' ] } + + , { 'name':'hash.8' , 'bits':[ 'XXX XXX ' + , 'XX XXX X' + , 'X XXX XX' + , ' XXX XXX' + , 'XXX XXX ' + , 'XX XXX X' + , 'X XXX XX' + , ' XXX XXX' ] } + + , { 'name':'urgo.8' , 'bits':[ 'XXX XXXX' # feffffffefffffff + , 'XXXXXXXX' + , 'XXXXXXXX' + , 'XXXXXXXX' + , 'XXXXXXX ' + , 'XXXXXXXX' + , 'XXXXXXXX' + , 'XXXXXXXX' ] } + + , { 'name':'antihash0.8' , 'bits':[ ' XXX XXX' # 77bbddee77bbddee + , 'X XXX XX' + , 'XX XXX X' + , 'XXX XXX ' + , ' XXX XXX' + , 'X XXX XX' + , 'XX XXX X' + , 'XXX XXX ' ] } + + , { 'name':'antihash1.8' , 'bits':[ 'X XXX XX' # bbddee77bbddee77 + , 'XX XXX X' + , 'XXX XXX ' + , ' XXX XXX' + , 'X XXX XX' + , 'XX XXX X' + , 'XXX XXX ' + , ' XXX XXX' ] } + + , { 'name':'poids2.8' , 'bits':[ 'X X X X ' # aa55aa55aa55aa55 + , ' X X X X' + , 'X X X X ' + , ' X X X X' + , 'X X X X ' + , ' X X X X' + , 'X X X X ' + , ' X X X X' ] } + + , { 'name':'poids4.8' , 'bits':[ 'X X ' # 8800220088002200 + , ' ' + , ' X X ' + , ' ' + , 'X X ' + , ' ' + , ' X X ' + , ' ' ] } + + , { 'name':'antipoids2.8' , 'bits':[ ' # # # #' # 55aa55aa55aa55aa + , '# # # # ' + , ' # # # #' + , '# # # # ' + , ' # # # #' + , '# # # # ' + , ' # # # #' + , '# # # # ' ] } + + , { 'name':'light_antihash0.8' , 'bits':[ 'X X ' # 8822882288228822 + , ' X X ' + , 'X X ' + , ' X X ' + , 'X X ' + , ' X X ' + , 'X X ' + , ' X X ' ] } + + , { 'name':'light_antihash1.8' , 'bits':[ ' X X ' # 4411441144114411 + , ' X X' + , ' X X ' + , ' X X' + , ' X X ' + , ' X X' + , ' X X ' + , ' X X' ] } + + , { 'name':'light_antihash2.8' , 'bits':[ ' X X ' # 2288228822882288 + , 'X X ' + , ' X X ' + , 'X X ' + , ' X X ' + , 'X X ' + , ' X X ' + , 'X X ' ] } + + , { 'name':'light_antislash0.8' , 'bits':[ 'X X ' # 8844221188442211 + , ' X X ' + , ' X X ' + , ' X X' + , 'X X ' + , ' X X ' + , ' X X ' + , ' X X' ] } + + , { 'name':'urgo.32' , 'bits':[ 'XXXXXXXXXXXXX XXXXXXXXXXXXXXXXX' + , 'XXXXXXXXXXX XXXXXXXXXXXXXXX' + , 'XXXXXXXXXXX XXXXXXXXXXXXXXX' + , 'XXXXXXXXXXXXX XXXXXXXXXXXXXXXXX' + , 'XXXXXXXXXXXXX XXXXXXXXXXXXXXXXX' + , 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' + , 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' + , 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' + , 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' + , 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' + , 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' + , 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' + , 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' + , 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' + , 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' + , 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXX X' + , 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXX X' + , ' XXXXXXXXXXXXXXXXXXXXXXXXXX ' + , ' XXXXXXXXXXXXXXXXXXXXXXXXXX ' + , 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXX X' + , 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXX X' + , 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' + , 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' + , 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' + , 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' + , 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' + , 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' + , 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' + , 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' + , 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' + , 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' + , 'XXXXXXXXXXXXX XXXXXXXXXXXXXXXXX' ] } + + , { 'name':'slash.32' , 'bits':[ ' X X' + , ' X X ' + , ' X X ' + , ' X X ' + , ' X X ' + , ' X X ' + , ' X X ' + , ' X X ' + , ' X X ' + , ' X X ' + , ' X X ' + , ' X X ' + , ' X X ' + , ' X X ' + , ' X X ' + , 'X X ' + , ' X X' + , ' X X ' + , ' X X ' + , ' X X ' + , ' X X ' + , ' X X ' + , ' X X ' + , ' X X ' + , ' X X ' + , ' X X ' + , ' X X ' + , ' X X ' + , ' X X ' + , ' X X ' + , ' X X ' + , 'X X ' ] } + + , { 'name':'antihash0.32' , 'bits':[ ' XXXXXXXXXXXXXXX XXXXXXXXXXXXXXX' + , 'X XXXXXXXXXXXXXXX XXXXXXXXXXXXXX' + , 'XX XXXXXXXXXXXXXXX XXXXXXXXXXXXX' + , 'XXX XXXXXXXXXXXXXXX XXXXXXXXXXXX' + , 'XXXX XXXXXXXXXXXXXXX XXXXXXXXXXX' + , 'XXXXX XXXXXXXXXXXXXXX XXXXXXXXXX' + , 'XXXXXX XXXXXXXXXXXXXXX XXXXXXXXX' + , 'XXXXXXX XXXXXXXXXXXXXXX XXXXXXXX' + , 'XXXXXXXX XXXXXXXXXXXXXXX XXXXXXX' + , 'XXXXXXXXX XXXXXXXXXXXXXXX XXXXXX' + , 'XXXXXXXXXX XXXXXXXXXXXXXXX XXXXX' + , 'XXXXXXXXXXX XXXXXXXXXXXXXXX XXXX' + , 'XXXXXXXXXXXX XXXXXXXXXXXXXXX XXX' + , 'XXXXXXXXXXXXX XXXXXXXXXXXXXXX XX' + , 'XXXXXXXXXXXXXX XXXXXXXXXXXXXXX X' + , 'XXXXXXXXXXXXXXX XXXXXXXXXXXXXXX ' + , ' XXXXXXXXXXXXXXX XXXXXXXXXXXXXXX' + , 'X XXXXXXXXXXXXXXX XXXXXXXXXXXXXX' + , 'XX XXXXXXXXXXXXXXX XXXXXXXXXXXXX' + , 'XXX XXXXXXXXXXXXXXX XXXXXXXXXXXX' + , 'XXXX XXXXXXXXXXXXXXX XXXXXXXXXXX' + , 'XXXXX XXXXXXXXXXXXXXX XXXXXXXXXX' + , 'XXXXXX XXXXXXXXXXXXXXX XXXXXXXXX' + , 'XXXXXXX XXXXXXXXXXXXXXX XXXXXXXX' + , 'XXXXXXXX XXXXXXXXXXXXXXX XXXXXXX' + , 'XXXXXXXXX XXXXXXXXXXXXXXX XXXXXX' + , 'XXXXXXXXXX XXXXXXXXXXXXXXX XXXXX' + , 'XXXXXXXXXXX XXXXXXXXXXXXXXX XXXX' + , 'XXXXXXXXXXXX XXXXXXXXXXXXXXX XXX' + , 'XXXXXXXXXXXXX XXXXXXXXXXXXXXX XX' + , 'XXXXXXXXXXXXXX XXXXXXXXXXXXXXX X' + , 'XXXXXXXXXXXXXXX XXXXXXXXXXXXXXX ' ] } + + , { 'name':'antihash1.32' , 'bits':[ 'XXXX XXXXXXXXXXXXXXX XXXXXXXXXXX' + , 'XXXXX XXXXXXXXXXXXXXX XXXXXXXXXX' + , 'XXXXXX XXXXXXXXXXXXXXX XXXXXXXXX' + , 'XXXXXXX XXXXXXXXXXXXXXX XXXXXXXX' + , 'XXXXXXXX XXXXXXXXXXXXXXX XXXXXXX' + , 'XXXXXXXXX XXXXXXXXXXXXXXX XXXXXX' + , 'XXXXXXXXXX XXXXXXXXXXXXXXX XXXXX' + , 'XXXXXXXXXXX XXXXXXXXXXXXXXX XXXX' + , 'XXXXXXXXXXXX XXXXXXXXXXXXXXX XXX' + , 'XXXXXXXXXXXXX XXXXXXXXXXXXXXX XX' + , 'XXXXXXXXXXXXXX XXXXXXXXXXXXXXX X' + , 'XXXXXXXXXXXXXXX XXXXXXXXXXXXXXX ' + , ' XXXXXXXXXXXXXXX XXXXXXXXXXXXXXX' + , 'X XXXXXXXXXXXXXXX XXXXXXXXXXXXXX' + , 'XX XXXXXXXXXXXXXXX XXXXXXXXXXXXX' + , 'XXX XXXXXXXXXXXXXXX XXXXXXXXXXXX' + , 'XXXX XXXXXXXXXXXXXXX XXXXXXXXXXX' + , 'XXXXX XXXXXXXXXXXXXXX XXXXXXXXXX' + , 'XXXXXX XXXXXXXXXXXXXXX XXXXXXXXX' + , 'XXXXXXX XXXXXXXXXXXXXXX XXXXXXXX' + , 'XXXXXXXX XXXXXXXXXXXXXXX XXXXXXX' + , 'XXXXXXXXX XXXXXXXXXXXXXXX XXXXXX' + , 'XXXXXXXXXX XXXXXXXXXXXXXXX XXXXX' + , 'XXXXXXXXXXX XXXXXXXXXXXXXXX XXXX' + , 'XXXXXXXXXXXX XXXXXXXXXXXXXXX XXX' + , 'XXXXXXXXXXXXX XXXXXXXXXXXXXXX XX' + , 'XXXXXXXXXXXXXX XXXXXXXXXXXXXXX X' + , 'XXXXXXXXXXXXXXX XXXXXXXXXXXXXXX ' + , ' XXXXXXXXXXXXXXX XXXXXXXXXXXXXXX' + , 'X XXXXXXXXXXXXXXX XXXXXXXXXXXXXX' + , 'XX XXXXXXXXXXXXXXX XXXXXXXXXXXXX' + , 'XXX XXXXXXXXXXXXXXX XXXXXXXXXXXX' ] } + + , { 'name':'poids2.32' , 'bits':[ ' ' + , ' XX XX XX XX ' + , ' XX XX XX XX ' + , ' ' + , ' ' + , ' XX XX XX XX ' + , ' XX XX XX XX ' + , ' ' + , ' ' + , ' XX XX XX XX ' + , ' XX XX XX XX ' + , ' ' + , ' ' + , ' XX XX XX XX ' + , ' XX XX XX XX ' + , ' ' + , ' ' + , ' XX XX XX XX ' + , ' XX XX XX XX ' + , ' ' + , ' ' + , ' XX XX XX XX ' + , ' XX XX XX XX ' + , ' ' + , ' ' + , ' XX XX XX XX ' + , ' XX XX XX XX ' + , ' ' + , ' ' + , ' XX XX XX XX ' + , ' XX XX XX XX ' + , ' ' ] } + + , { 'name':'poids4.32' , 'bits':[ ' ' + , ' XX XX ' + , ' XX XX ' + , ' ' + , ' ' + , ' XX XX ' + , ' XX XX ' + , ' ' + , ' ' + , ' XX XX ' + , ' XX XX ' + , ' ' + , ' ' + , ' XX XX ' + , ' XX XX ' + , ' ' + , ' ' + , ' XX XX ' + , ' XX XX ' + , ' ' + , ' ' + , ' XX XX ' + , ' XX XX ' + , ' ' + , ' ' + , ' XX XX ' + , ' XX XX ' + , ' ' + , ' ' + , ' XX XX ' + , ' XX XX ' + , ' ' ] } + + , { 'name':'antipoids2.32' , 'bits':[ ' ' + , ' XX XX XX XX ' + , ' XX XX XX XX ' + , ' ' + , ' ' + , ' XX XX XX XX ' + , ' XX XX XX XX ' + , ' ' + , ' ' + , ' XX XX XX XX ' + , ' XX XX XX XX ' + , ' ' + , ' ' + , ' XX XX XX XX ' + , ' XX XX XX XX ' + , ' ' + , ' ' + , ' XX XX XX XX ' + , ' XX XX XX XX ' + , ' ' + , ' ' + , ' XX XX XX XX ' + , ' XX XX XX XX ' + , ' ' + , ' ' + , ' XX XX XX XX ' + , ' XX XX XX XX ' + , ' ' + , ' ' + , ' XX XX XX XX ' + , ' XX XX XX XX ' + , ' ' ] } + + , { 'name':'antislash.32' , 'bits':[ 'X X ' + , ' X X ' + , ' X X ' + , ' X X ' + , ' X X ' + , ' X X ' + , ' X X ' + , ' X X ' + , ' X X ' + , ' X X ' + , ' X X ' + , ' X X ' + , ' X X ' + , ' X X ' + , ' X X ' + , ' X X' + , 'X X ' + , ' X X ' + , ' X X ' + , ' X X ' + , ' X X ' + , ' X X ' + , ' X X ' + , ' X X ' + , ' X X ' + , ' X X ' + , ' X X ' + , ' X X ' + , ' X X ' + , ' X X ' + , ' X X ' + , ' X X' ] } + + , { 'name':'antislash2.32' , 'bits':[ 'X X ' + , ' X X ' + , ' X X ' + , ' X X ' + , ' X X ' + , ' X X ' + , ' X X ' + , ' X X ' + , 'X X ' + , ' X X ' + , ' X X ' + , ' X X ' + , ' X X ' + , ' X X ' + , ' X X ' + , ' X X ' + , 'X X ' + , ' X X ' + , ' X X ' + , ' X X ' + , ' X X ' + , ' X X ' + , ' X X ' + , ' X X ' + , 'X X ' + , ' X X ' + , ' X X ' + , ' X X ' + , ' X X ' + , ' X X ' + , ' X X ' + , ' X X ' ] } + + , { 'name':'antislash3.32' , 'bits':[ ' X X ' + , ' X X ' + , ' X X ' + , ' X X ' + , ' X X ' + , ' X X ' + , 'X X ' + , ' X X ' + , ' X X ' + , ' X X ' + , ' X X ' + , ' X X ' + , ' X X ' + , ' X X ' + , 'X X ' + , ' X X ' + , ' X X ' + , ' X X ' + , ' X X ' + , ' X X ' + , ' X X ' + , ' X X ' + , 'X X ' + , ' X X ' + , ' X X ' + , ' X X ' + , ' X X ' + , ' X X ' + , ' X X ' + , ' X X ' + , 'X X ' + , ' X X ' ] } + + , { 'name':'antislash4.32' , 'bits':[ ' X X ' + , ' X X ' + , ' X X ' + , 'X X ' + , ' X X ' + , ' X X ' + , ' X X ' + , ' X X ' + , ' X X ' + , ' X X ' + , ' X X ' + , 'X X ' + , ' X X ' + , ' X X ' + , ' X X ' + , ' X X ' + , ' X X ' + , ' X X ' + , ' X X ' + , 'X X ' + , ' X X ' + , ' X X ' + , ' X X ' + , ' X X ' + , ' X X ' + , ' X X ' + , ' X X ' + , 'X X ' + , ' X X ' + , ' X X ' + , ' X X ' + , ' X X ' ] } + + , { 'name':'antislash5.32' , 'bits':[ ' X X ' + , ' X X ' + , ' X X ' + , ' X X ' + , ' X X ' + , ' X X ' + , ' X X ' + , 'X X ' + , ' X X ' + , ' X X ' + , ' X X ' + , ' X X ' + , ' X X ' + , ' X X ' + , ' X X ' + , 'X X ' + , ' X X ' + , ' X X ' + , ' X X ' + , ' X X ' + , ' X X ' + , ' X X ' + , ' X X ' + , 'X X ' + , ' X X ' + , ' X X ' + , ' X X ' + , ' X X ' + , ' X X ' + , ' X X ' + , ' X X ' + , 'X X ' ] } + + , { 'name':'diffusion.32' , 'bits':[ 'XXXXXXXXXX XXXXXXXXXX ' + , ' XXXXXXXXXX XXXXXXXXXX ' + , ' XXXXXXXXXX XXXXXXXXXX ' + , ' XXXXXXXXXX XXXXXXXXXX ' + , ' XXXXXXXXXX XXXXXXXXXX ' + , ' XXXXXXXXXX XXXXXXXXXX ' + , ' XXXXXXXXXX XXXXXXXXXX' + , 'X XXXXXXXXXX XXXXXXXXX' + , 'XX XXXXXXXXXX XXXXXXXX' + , 'XXX XXXXXXXXXX XXXXXXX' + , 'XXXX XXXXXXXXXX XXXXXX' + , 'XXXXX XXXXXXXXXX XXXXX' + , 'XXXXXX XXXXXXXXXX XXXX' + , 'XXXXXXX XXXXXXXXXX XXX' + , 'XXXXXXXX XXXXXXXXXX XX' + , 'XXXXXXXXX XXXXXXXXXX X' + , 'XXXXXXXXXX XXXXXXXXXX ' + , ' XXXXXXXXXX XXXXXXXXXX ' + , ' XXXXXXXXXX XXXXXXXXXX ' + , ' XXXXXXXXXX XXXXXXXXXX ' + , ' XXXXXXXXXX XXXXXXXXXX ' + , ' XXXXXXXXXX XXXXXXXXXX ' + , ' XXXXXXXXXX XXXXXXXXXX' + , 'X XXXXXXXXXX XXXXXXXXX' + , 'XX XXXXXXXXXX XXXXXXXX' + , 'XXX XXXXXXXXXX XXXXXXX' + , 'XXXX XXXXXXXXXX XXXXXX' + , 'XXXXX XXXXXXXXXX XXXXX' + , 'XXXXXX XXXXXXXXXX XXXX' + , 'XXXXXXX XXXXXXXXXX XXX' + , 'XXXXXXXX XXXXXXXXXX XX' + , 'XXXXXXXXX XXXXXXXXXX X' ] } + + , { 'name':'active.32' , 'bits':[ ' XXXXXXXXXXXXX XXXXXXXXXXXXX' + , 'X XXXXXXXXXXXXX XXXXXXXXXXXX' + , 'XX XXXXXXXXXXXXX XXXXXXXXXXX' + , 'XXX XXXXXXXXXXXXX XXXXXXXXXX' + , 'XXXX XXXXXXXXXXXXX XXXXXXXXX' + , 'XXXXX XXXXXXXXXXXXX XXXXXXXX' + , 'XXXXXX XXXXXXXXXXXXX XXXXXXX' + , 'XXXXXXX XXXXXXXXXXXXX XXXXXX' + , 'XXXXXXXX XXXXXXXXXXXXX XXXXX' + , 'XXXXXXXXX XXXXXXXXXXXXX XXXX' + , 'XXXXXXXXXX XXXXXXXXXXXXX XXX' + , 'XXXXXXXXXXX XXXXXXXXXXXXX XX' + , 'XXXXXXXXXXXX XXXXXXXXXXXXX X' + , 'XXXXXXXXXXXXX XXXXXXXXXXXXX ' + , ' XXXXXXXXXXXXX XXXXXXXXXXXXX ' + , ' XXXXXXXXXXXXX XXXXXXXXXXXXX ' + , ' XXXXXXXXXXXXX XXXXXXXXXXXXX' + , 'X XXXXXXXXXXXXX XXXXXXXXXXXX' + , 'XX XXXXXXXXXXXXX XXXXXXXXXXX' + , 'XXX XXXXXXXXXXXXX XXXXXXXXXX' + , 'XXXX XXXXXXXXXXXXX XXXXXXXXX' + , 'XXXXX XXXXXXXXXXXXX XXXXXXXX' + , 'XXXXXX XXXXXXXXXXXXX XXXXXXX' + , 'XXXXXXX XXXXXXXXXXXXX XXXXXX' + , 'XXXXXXXX XXXXXXXXXXXXX XXXXX' + , 'XXXXXXXXX XXXXXXXXXXXXX XXXX' + , 'XXXXXXXXXX XXXXXXXXXXXXX XXX' + , 'XXXXXXXXXXX XXXXXXXXXXXXX XX' + , 'XXXXXXXXXXXX XXXXXXXXXXXXX X' + , 'XXXXXXXXXXXXX XXXXXXXXXXXXX ' + , ' XXXXXXXXXXXXX XXXXXXXXXXXXX ' + , ' XXXXXXXXXXXXX XXXXXXXXXXXXX ' ] } + + ) diff --git a/crlcore/etc/vsc200/stratus1.conf b/crlcore/etc/vsc200/stratus1.conf new file mode 100644 index 00000000..13ff6803 --- /dev/null +++ b/crlcore/etc/vsc200/stratus1.conf @@ -0,0 +1,20 @@ + +# -*- Mode:Python -*- + +# Status1 parameters. +parametersTable = \ + ( ("stratus1.mappingName", TypeString, helpers.sysConfDir+"/stratus2sxlib.xml", + { 'flags':Cfg.Parameter.Flags.NeedRestart|Cfg.Parameter.Flags.MustExist } ) + , ("stratus1.format" , TypeString, "vst") + , ("stratus1.simulator" , TypeString, "asimut") + ,) + + +# Stratus1 tab layout. +layoutTable = \ + ( (TypeTab ,"Stratus1", "stratus1" ) + , (TypeTitle , "Stratus1 - Netlist & Layout Capture" ) + , (TypeOption, "stratus1.mappingName", "Virtual Library Translation", 0, 2 ) + , (TypeOption, "stratus1.format" , "Netlist Format (vst, vhd)" , 0, 2 ) + , (TypeOption, "stratus1.simulator" , "Simulator" , 0, 2 ) + ) diff --git a/crlcore/etc/vsc200/technology.conf b/crlcore/etc/vsc200/technology.conf new file mode 100644 index 00000000..9703e7f0 --- /dev/null +++ b/crlcore/etc/vsc200/technology.conf @@ -0,0 +1,280 @@ +# -*- Mode:Python -*- + +viewerConfig = { 'precision':2, 'gridstep':1.0 } + + +# 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 ) + , ('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 ) + , ('topmim6' , BasicLayer.Material.other ) # For Capacitances & Pads. + , ('botmim6' , 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') + , ('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) ) + +symbolicLayersTable = \ + ( ('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' ,)) + , ('METAL3' , TypeRegular , ('metal3' ,)) + , ('METAL4' , TypeRegular , ('metal4' ,)) + , ('METAL5' , TypeRegular , ('metal5' ,)) + , ('METAL6' , TypeRegular , ('metal6' ,)) + , ('METAL7' , TypeRegular , ('metal7' ,)) + , ('METAL8' , TypeRegular , ('metal8' ,)) + , ('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')) + , ('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')) + , ('BLOCKAGE1' , TypeRegular , ('blockage1', )) + , ('BLOCKAGE2' , TypeRegular , ('blockage2', )) + , ('BLOCKAGE3' , TypeRegular , ('blockage3', )) + , ('BLOCKAGE4' , TypeRegular , ('blockage4', )) + , ('BLOCKAGE5' , TypeRegular , ('blockage5', )) + , ('BLOCKAGE6' , TypeRegular , ('blockage6', )) + , ('BLOCKAGE7' , TypeRegular , ('blockage7', )) + , ('BLOCKAGE8' , TypeRegular , ('blockage8', )) + , ('gcontact' , TypeVia , ('gmetalh' , 'gcut', 'gmetalv')) + ) + + +# Format of : +# Each entry is a pair of (string, value). +# * string: a synthetic way to designate the symbolic layer on which +# it applies, an optional real layer in case where there is +# more than one, and the dimension name. +# * value : the rule (dimension) value expressed in lambda. + +symbolicRulesTable = \ + ( ('NWELL.nWell.extention.cap' , 4.0) + , ('PWELL.pWell.extention.cap' , 4.0) + + , ('NTIE.minimum.width' , 3.0) + , ('NTIE.nWell.extention.cap' , 3.0) + , ('NTIE.nWell.extention.width' , 1.0) + , ('NTIE.nImplant.extention.cap' , 3.0) + , ('NTIE.nImplant.extention.width' , 1.0) + , ('NTIE.active.extention.cap' , 2.0) + , ('NTIE.active.extention.width' , 0.0) + + , ('PTIE.minimum.width' , 3.0) + , ('PTIE.pWell.extention.cap' , 3.0) + , ('PTIE.pWell.extention.width' , 1.0) + , ('PTIE.pImplant.extention.cap' , 1.0) + , ('PTIE.pImplant.extention.width' , 1.0) + , ('PTIE.active.extention.cap' , 2.0) + , ('PTIE.active.extention.width' , 0.0) + + , ('NDIF.minimum.width' , 3.0) + , ('NDIF.nImplant.extention.cap' , 5.0) + , ('NDIF.nImplant.extention.width' , 3.0) + , ('NDIF.active.extention.cap' , 2.0) + , ('NDIF.active.extention.width' , 0.0) + + , ('PDIF.minimum.width' , 3.0) + , ('PDIF.pImplant.extention.cap' , 5.0) + , ('PDIF.pImplant.extention.width' , 3.0) + , ('PDIF.active.extention.cap' , 2.0) + , ('PDIF.active.extention.width' , 0.0) + + , ('GATE.minimum.width' , 1.0) + , ('GATE.poly.extention.cap' , 1.5) + + , ('NTRANS.minimum.width' , 2.0) + , ('NTRANS.nImplant.extention.cap' , 3.0) + , ('NTRANS.nImplant.extention.width' , 8.0) + , ('NTRANS.active.extention.cap' , 0.0) + , ('NTRANS.active.extention.width' , 5.0) + , ('NTRANS.poly.extention.cap' , 4.0) + , ('NTRANS.poly.extention.width' , 0.0) + + , ('PTRANS.minimum.width' , 1.0) + , ('PTRANS.nWell.extention.cap' , 3.0) + , ('PTRANS.nWell.extention.width' , 8.0) + , ('PTRANS.pImplant.extention.cap' , 3.0) + , ('PTRANS.pImplant.extention.width' , 8.0) + , ('PTRANS.active.extention.cap' , 0.0) + , ('PTRANS.active.extention.width' , 5.0) + , ('PTRANS.poly.extention.cap' , 4.0) + , ('PTRANS.poly.extention.width' , 0.0) + + , ('POLY.minimum.width' , 2.0) + , ('POLY.poly.extention.cap' , 1.0) + , ('POLY2.minimum.width' , 2.0) + , ('POLY2.poly2.extention.cap' , 2.0) + + # Routing Layers. + , ('METAL1.minimum.width' , 1.0) + , ('METAL1.metal1.extention.cap' , 2.0) + , ('METAL2.minimum.width' , 1.0) + , ('METAL2.metal2.extention.cap' , 2.0) + , ('METAL3.minimum.width' , 1.0) + , ('METAL3.metal3.extention.cap' , 2.0) + , ('METAL4.minimum.width' , 1.0) + , ('METAL4.metal4.extention.cap' , 2.0) + , ('METAL5.minimum.width' , 2.0) + , ('METAL5.metal5.extention.cap' , 2.0) + , ('METAL6.minimum.width' , 2.0) + , ('METAL6.metal6.extention.cap' , 4.0) + , ('METAL7.minimum.width' , 2.0) + , ('METAL7.metal6.extention.cap' , 4.0) + , ('METAL8.minimum.width' , 2.0) + , ('METAL8.metal6.extention.cap' , 4.0) + + # Contacts (i.e. Active <--> Metal). + , ('CONT_BODY_N.minimum.side' , 2.0) + , ('CONT_BODY_N.nWell.enclosure' , 3.0) + , ('CONT_BODY_N.nImplant.enclosure' , 3.0) + , ('CONT_BODY_N.active.enclosure' , 2.0) + , ('CONT_BODY_N.metal1.enclosure' , 1.0) + + , ('CONT_BODY_P.minimum.side' , 2.0) + , ('CONT_BODY_P.pWell.enclosure' , 3.0) + , ('CONT_BODY_P.pImplant.enclosure' , 3.0) + , ('CONT_BODY_P.active.enclosure' , 2.0) + , ('CONT_BODY_P.metal1.enclosure' , 1.0) + + , ('CONT_DIF_N.minimum.side' , 2.0) + , ('CONT_DIF_N.nImplant.enclosure' , 2.0) + , ('CONT_DIF_N.active.enclosure' , 2.0) + , ('CONT_DIF_N.metal1.enclosure' , 1.0) + + , ('CONT_DIF_P.minimum.side' , 2.0) + , ('CONT_DIF_P.pImplant.enclosure' , 2.0) + , ('CONT_DIF_P.active.enclosure' , 2.0) + , ('CONT_DIF_P.metal1.enclosure' , 1.0) + + , ('CONT_POLY.minimum.width' , 2.0) + , ('CONT_POLY.poly.enclosure' , 2.0) + , ('CONT_POLY.metal1.enclosure' , 1.0) + + # VIAs (i.e. Metal <--> Metal). + , ('VIA12.minimum.side' , 2.0) + , ('VIA12.metal1.enclosure' , 1.0) + , ('VIA12.metal2.enclosure' , 1.0) + , ('VIA23.minimum.side' , 2.0) + , ('VIA23.metal2.enclosure' , 1.0) + , ('VIA23.metal3.enclosure' , 1.0) + , ('VIA34.minimum.side' , 2.0) + , ('VIA34.metal3.enclosure' , 1.0) + , ('VIA34.metal4.enclosure' , 1.0) + , ('VIA45.minimum.side' , 2.0) + , ('VIA45.metal4.enclosure' , 1.0) + , ('VIA45.metal5.enclosure' , 1.0) + , ('VIA56.minimum.side' , 2.0) + , ('VIA56.metal5.enclosure' , 3.0) + , ('VIA56.metal6.enclosure' , 3.0) + , ('VIA67.minimum.side' , 2.0) + , ('VIA67.metal6.enclosure' , 3.0) + , ('VIA67.metal7.enclosure' , 3.0) + , ('VIA78.minimum.side' , 2.0) + , ('VIA78.metal7.enclosure' , 3.0) + , ('VIA78.metal8.enclosure' , 3.0) + + # Blockages. + , ('BLOCKAGE1.minimum.width' , 1.0) + , ('BLOCKAGE1.blockage1.extention.cap' , 2.0) + , ('BLOCKAGE2.minimum.width' , 2.0) + , ('BLOCKAGE2.blockage2.extention.cap' , 2.0) + , ('BLOCKAGE3.minimum.width' , 2.0) + , ('BLOCKAGE3.blockage3.extention.cap' , 2.0) + , ('BLOCKAGE4.minimum.width' , 2.0) + , ('BLOCKAGE4.blockage4.extention.cap' , 2.0) + , ('BLOCKAGE5.minimum.width' , 2.0) + , ('BLOCKAGE5.blockage5.extention.cap' , 2.0) + , ('BLOCKAGE6.minimum.width' , 2.0) + , ('BLOCKAGE6.blockage6.extention.cap' , 4.0) + , ('BLOCKAGE7.minimum.width' , 2.0) + , ('BLOCKAGE7.blockage6.extention.cap' , 4.0) + , ('BLOCKAGE8.minimum.width' , 2.0) + , ('BLOCKAGE8.blockage6.extention.cap' , 4.0) + ) + + +# Format of : +# This is a simple list of Real & Symbolic layers. + +workingLayersTable = \ + [ 'cut0', 'cut1' , 'cut2' , 'cut3' , 'cut4' , 'cut5' + , 'POLY', 'POLY2' + , 'METAL1' , 'METAL2' , 'METAL3' , 'METAL4' , 'METAL5' , 'METAL6' , 'METAL7' , 'METAL8' + , 'BLOCKAGE1', 'BLOCKAGE2', 'BLOCKAGE3', 'BLOCKAGE4', 'BLOCKAGE5', 'BLOCKAGE6', 'BLOCKAGE7', 'BLOCKAGE8' + , 'VIA12' , 'VIA23' , 'VIA34' , 'VIA45' , 'VIA56' + , 'gcut', 'gmetalh', 'gmetalv', 'gcontact' + ] diff --git a/crlcore/src/ccore/Environment.cpp b/crlcore/src/ccore/Environment.cpp index cf1fa55d..049176c5 100644 --- a/crlcore/src/ccore/Environment.cpp +++ b/crlcore/src/ccore/Environment.cpp @@ -1,8 +1,7 @@ - // -*- C++ -*- // // This file is part of the Coriolis Software. -// Copyright (c) UPMC 2008-2013, All Rights Reserved +// Copyright (c) UPMC 2008-2014, All Rights Reserved // // +-----------------------------------------------------------------+ // | C O R I O L I S | @@ -507,6 +506,8 @@ namespace CRL { Environment::Environment () : _CORIOLIS_TOP (CORIOLIS_TOP) + , _SYMB_TECHNO_NAME ("") + , _REAL_TECHNO_NAME ("") , _displayStyle () , _SCALE_X (10) , _SYMBOLIC_TECHNOLOGY("") diff --git a/crlcore/src/ccore/Utilities.cpp b/crlcore/src/ccore/Utilities.cpp index 0fbc4607..100f08a2 100644 --- a/crlcore/src/ccore/Utilities.cpp +++ b/crlcore/src/ccore/Utilities.cpp @@ -1,8 +1,7 @@ - // -*- C++ -*- // // This file is part of the Coriolis Software. -// Copyright (c) UPMC 2008-2013, All Rights Reserved +// Copyright (c) UPMC 2008-2014, All Rights Reserved // // +-----------------------------------------------------------------+ // | C O R I O L I S | diff --git a/crlcore/src/ccore/alliance/ap/ApDriver.cpp b/crlcore/src/ccore/alliance/ap/ApDriver.cpp index e0529333..7f1648c3 100644 --- a/crlcore/src/ccore/alliance/ap/ApDriver.cpp +++ b/crlcore/src/ccore/alliance/ap/ApDriver.cpp @@ -1,8 +1,7 @@ - // -*- C++ -*- // // This file is part of the Coriolis Software. -// Copyright (c) UPMC/LIP6 2008-2012, All Rights Reserved +// Copyright (c) UPMC/LIP6 2008-2014, All Rights Reserved // // +-----------------------------------------------------------------+ // | C O R I O L I S | @@ -11,7 +10,7 @@ // | Author : Christophe Alexandre | // | E-mail : Christophe.Alexandre@asim.lip6.fr | // | =============================================================== | -// | C++ Header : "./ParsersDrivers.h" | +// | C++ Header : "./ApDriver.h" | // +-----------------------------------------------------------------+ @@ -81,6 +80,7 @@ bool toMBKLayer ( const char*& mbkLayer tableLayer [ "NTRANS" ] = "NTRANS"; tableLayer [ "PTRANS" ] = "PTRANS"; tableLayer [ "POLY" ] = "POLY"; + tableLayer [ "POLY2" ] = "POLY2"; tableLayer [ "METAL1" ] = "ALU1"; tableLayer [ "METAL2" ] = "ALU2"; @@ -88,6 +88,8 @@ bool toMBKLayer ( const char*& mbkLayer tableLayer [ "METAL4" ] = "ALU4"; tableLayer [ "METAL5" ] = "ALU5"; tableLayer [ "METAL6" ] = "ALU6"; + tableLayer [ "METAL7" ] = "ALU7"; + tableLayer [ "METAL8" ] = "ALU8"; tableLayer [ "BLOCKAGE1" ] = "TALU1"; tableLayer [ "BLOCKAGE2" ] = "TALU2"; @@ -95,6 +97,8 @@ bool toMBKLayer ( const char*& mbkLayer tableLayer [ "BLOCKAGE4" ] = "TALU4"; tableLayer [ "BLOCKAGE5" ] = "TALU5"; tableLayer [ "BLOCKAGE6" ] = "TALU6"; + tableLayer [ "BLOCKAGE7" ] = "TALU7"; + tableLayer [ "BLOCKAGE8" ] = "TALU8"; tableConnector [ "METAL1" ] = "CALU1"; tableConnector [ "METAL2" ] = "CALU2"; @@ -102,23 +106,30 @@ bool toMBKLayer ( const char*& mbkLayer tableConnector [ "METAL4" ] = "CALU4"; tableConnector [ "METAL5" ] = "CALU5"; tableConnector [ "METAL6" ] = "CALU6"; + tableConnector [ "METAL7" ] = "CALU7"; + tableConnector [ "METAL8" ] = "CALU8"; tableContact [ "CONT_BODY_N" ] = "CONT_BODY_N"; tableContact [ "CONT_BODY_P" ] = "CONT_BODY_P"; tableContact [ "CONT_DIF_N" ] = "CONT_DIF_N"; tableContact [ "CONT_DIF_P" ] = "CONT_DIF_P"; tableContact [ "CONT_POLY" ] = "CONT_POLY"; + tableContact [ "CONT_POLY2" ] = "CONT_POLY2"; tableContact [ "VIA12" ] = "CONT_VIA"; tableContact [ "VIA23" ] = "CONT_VIA2"; tableContact [ "VIA34" ] = "CONT_VIA3"; tableContact [ "VIA45" ] = "CONT_VIA4"; tableContact [ "VIA56" ] = "CONT_VIA5"; + tableContact [ "VIA67" ] = "CONT_VIA6"; + tableContact [ "VIA78" ] = "CONT_VIA7"; tableContact [ "METAL1" ] = "CONT_TURN1"; tableContact [ "METAL2" ] = "CONT_TURN2"; tableContact [ "METAL3" ] = "CONT_TURN3"; tableContact [ "METAL4" ] = "CONT_TURN4"; tableContact [ "METAL5" ] = "CONT_TURN5"; tableContact [ "METAL6" ] = "CONT_TURN6"; + tableContact [ "METAL7" ] = "CONT_TURN7"; + tableContact [ "METAL8" ] = "CONT_TURN8"; } map::iterator it; diff --git a/crlcore/src/ccore/alliance/ap/ApParser.cpp b/crlcore/src/ccore/alliance/ap/ApParser.cpp index f48b2bab..9053f9c7 100644 --- a/crlcore/src/ccore/alliance/ap/ApParser.cpp +++ b/crlcore/src/ccore/alliance/ap/ApParser.cpp @@ -1,8 +1,7 @@ - // -*- C++ -*- // // This file is part of the Coriolis Software. -// Copyright (c) UPMC/LIP6 2008-2012, All Rights Reserved +// Copyright (c) UPMC/LIP6 2008-2014, All Rights Reserved // // +-----------------------------------------------------------------+ // | C O R I O L I S | @@ -214,6 +213,7 @@ namespace { _layerInformations.add ( "NTRANS" , "NTRANS" , false, false ); _layerInformations.add ( "PTRANS" , "PTRANS" , false, false ); _layerInformations.add ( "POLY" , "POLY" , false, false ); + _layerInformations.add ( "POLY2" , "POLY2" , false, false ); _layerInformations.add ( "ALU1" , "METAL1" , false, false ); _layerInformations.add ( "ALU2" , "METAL2" , false, false ); @@ -221,6 +221,8 @@ namespace { _layerInformations.add ( "ALU4" , "METAL4" , false, false ); _layerInformations.add ( "ALU5" , "METAL5" , false, false ); _layerInformations.add ( "ALU6" , "METAL6" , false, false ); + _layerInformations.add ( "ALU7" , "METAL7" , false, false ); + _layerInformations.add ( "ALU8" , "METAL8" , false, false ); _layerInformations.add ( "CALU1" , "METAL1" , true, false ); _layerInformations.add ( "CALU2" , "METAL2" , true, false ); @@ -228,6 +230,8 @@ namespace { _layerInformations.add ( "CALU4" , "METAL4" , true, false ); _layerInformations.add ( "CALU5" , "METAL5" , true, false ); _layerInformations.add ( "CALU6" , "METAL6" , true, false ); + _layerInformations.add ( "CALU7" , "METAL7" , true, false ); + _layerInformations.add ( "CALU8" , "METAL8" , true, false ); _layerInformations.add ( "TALU1" , "BLOCKAGE1" , false, true ); _layerInformations.add ( "TALU2" , "BLOCKAGE2" , false, true ); @@ -235,23 +239,30 @@ namespace { _layerInformations.add ( "TALU4" , "BLOCKAGE4" , false, true ); _layerInformations.add ( "TALU5" , "BLOCKAGE5" , false, true ); _layerInformations.add ( "TALU6" , "BLOCKAGE6" , false, true ); + _layerInformations.add ( "TALU7" , "BLOCKAGE7" , false, true ); + _layerInformations.add ( "TALU8" , "BLOCKAGE8" , false, true ); _layerInformations.add ( "CONT_BODY_N", "CONT_BODY_N", false, false ); _layerInformations.add ( "CONT_BODY_P", "CONT_BODY_P", false, false ); _layerInformations.add ( "CONT_DIF_N" , "CONT_DIF_N" , false, false ); _layerInformations.add ( "CONT_DIF_P" , "CONT_DIF_P" , false, false ); _layerInformations.add ( "CONT_POLY" , "CONT_POLY" , false, false ); + _layerInformations.add ( "CONT_POLY2" , "CONT_POLY2" , false, false ); _layerInformations.add ( "CONT_VIA" , "VIA12" , false, false ); _layerInformations.add ( "CONT_VIA2" , "VIA23" , false, false ); _layerInformations.add ( "CONT_VIA3" , "VIA34" , false, false ); _layerInformations.add ( "CONT_VIA4" , "VIA45" , false, false ); _layerInformations.add ( "CONT_VIA5" , "VIA56" , false, false ); + _layerInformations.add ( "CONT_VIA6" , "VIA67" , false, false ); + _layerInformations.add ( "CONT_VIA7" , "VIA78" , false, false ); _layerInformations.add ( "CONT_TURN1" , "METAL1" , false, false ); _layerInformations.add ( "CONT_TURN2" , "METAL2" , false, false ); _layerInformations.add ( "CONT_TURN3" , "METAL3" , false, false ); _layerInformations.add ( "CONT_TURN4" , "METAL4" , false, false ); _layerInformations.add ( "CONT_TURN5" , "METAL5" , false, false ); _layerInformations.add ( "CONT_TURN6" , "METAL6" , false, false ); + _layerInformations.add ( "CONT_TURN7" , "METAL7" , false, false ); + _layerInformations.add ( "CONT_TURN8" , "METAL8" , false, false ); } } @@ -515,7 +526,7 @@ namespace { void ApParser::_parseVia () { - static DbU::Unit XVIA, YVIA; + static DbU::Unit XVIA, YVIA; static Net* net; static LayerInformation* layerInfo; diff --git a/crlcore/src/ccore/crlcore/Environment.h b/crlcore/src/ccore/crlcore/Environment.h index 3af3149d..8adf6e6f 100644 --- a/crlcore/src/ccore/crlcore/Environment.h +++ b/crlcore/src/ccore/crlcore/Environment.h @@ -1,8 +1,7 @@ - // -*- C++ -*- // // This file is part of the Coriolis Software. -// Copyright (c) UPMC 2008-2013, All Rights Reserved +// Copyright (c) UPMC 2008-2014, All Rights Reserved // // +-----------------------------------------------------------------+ // | C O R I O L I S | @@ -37,6 +36,8 @@ namespace CRL { ~Environment (); // Accessors. inline const std::string& getCORIOLIS_TOP () const; + inline const std::string& getSYMB_TECHNO_NAME () const; + inline const std::string& getREAL_TECHNO_NAME () const; inline const std::string& getDisplayStyle () const; inline long getSCALE_X () const; inline const std::string& getSYMBOLIC_TECHNOLOGY () const; @@ -64,6 +65,8 @@ namespace CRL { void validate () const; void loadFromXml ( const std::string& path="", bool warnNotFound=true ); void loadFromShell (); + inline void setSYMB_TECHNO_NAME ( const char* value ); + inline void setREAL_TECHNO_NAME ( const char* value ); inline void setDisplayStyle ( const char* ); inline void setSCALE_X ( long value ); inline void setSYMBOLIC_TECHNOLOGY ( const char* value ); @@ -89,6 +92,8 @@ namespace CRL { protected: // Internal: Attributes. std::string _CORIOLIS_TOP; + std::string _SYMB_TECHNO_NAME; + std::string _REAL_TECHNO_NAME; std::string _displayStyle; long _SCALE_X; std::string _SYMBOLIC_TECHNOLOGY; @@ -118,6 +123,8 @@ namespace CRL { // Inline Member Functions. inline const std::string& Environment::getCORIOLIS_TOP () const { return _CORIOLIS_TOP; } + inline const std::string& Environment::getSYMB_TECHNO_NAME () const { return _SYMB_TECHNO_NAME; } + inline const std::string& Environment::getREAL_TECHNO_NAME () const { return _REAL_TECHNO_NAME; } inline const std::string& Environment::getDisplayStyle () const { return _displayStyle; } inline long Environment::getSCALE_X () const { return _SCALE_X; } inline const std::string& Environment::getSYMBOLIC_TECHNOLOGY () const { return _SYMBOLIC_TECHNOLOGY; } @@ -135,6 +142,8 @@ namespace CRL { inline const std::string& Environment::getCATALOG () const { return _CATALOG; } inline SearchPath& Environment::getLIBRARIES () { return _LIBRARIES; } + inline void Environment::setSYMB_TECHNO_NAME ( const char* value ) { _SYMB_TECHNO_NAME = value; } + inline void Environment::setREAL_TECHNO_NAME ( const char* value ) { _REAL_TECHNO_NAME = value; } inline void Environment::setDisplayStyle ( const char* value ) { _displayStyle = value; } inline void Environment::setSCALE_X ( long value ) { _SCALE_X = value; } inline void Environment::setSYMBOLIC_TECHNOLOGY ( const char* value ) { _SYMBOLIC_TECHNOLOGY = value; } diff --git a/crlcore/src/crlcore/coriolisInit.py b/crlcore/src/crlcore/coriolisInit.py index 739ecf8e..0942b165 100644 --- a/crlcore/src/crlcore/coriolisInit.py +++ b/crlcore/src/crlcore/coriolisInit.py @@ -60,6 +60,8 @@ DisabledByXml = 0x0200 def coriolisConfigure(): + global symbolicTechno + confHelpers = ( ('allianceConfig' , Alliance.loadAllianceConfig , SystemMandatory|DisabledByXml|AllianceHelper) , ('routingGaugesTable', Alliance.loadRoutingGaugesTable, SystemMandatory|DisabledByXml|AllianceHelper) , ('cellGaugesTable' , Alliance.loadCellGaugesTable , SystemMandatory|DisabledByXml|AllianceHelper) @@ -77,23 +79,48 @@ def coriolisConfigure(): Cfg.Configuration.pushDefaultPriority ( Cfg.Parameter.Priority.ConfigurationFile ) - confFiles = [ (helpers.sysConfDir+'/alliance.conf', SystemFile|AllianceHelper) - , (helpers.sysConfDir+'/patterns.conf', SystemFile|PatternsHelper) - , (helpers.sysConfDir+'/display.conf' , SystemFile|DisplayHelper) - , (helpers.sysConfDir+'/misc.conf' , SystemFile|ConfigurationHelper) - , (helpers.sysConfDir+'/hMetis.conf' , SystemFile|ConfigurationHelper) - , (helpers.sysConfDir+'/nimbus.conf' , SystemFile|ConfigurationHelper) - , (helpers.sysConfDir+'/mauka.conf' , SystemFile|ConfigurationHelper) - , (helpers.sysConfDir+'/kite.conf' , SystemFile|ConfigurationHelper) - , (helpers.sysConfDir+'/stratus1.conf', SystemFile|ConfigurationHelper) + technoFiles = [ helpers.sysConfDir+'/coriolis2_techno.conf' ] + if os.getenv('HOME'): + technoFiles += [ os.getenv('HOME')+'/.coriolis2_techno.conf' ] + technoFiles += [ os.getcwd()+'/.coriolis2_techno.conf' ] + + technoFiles.reverse() + for technoFile in technoFiles: + if os.path.isfile(technoFile): + print ' - Loading \"%s\".' % helpers.truncPath(technoFile) + execfile(technoFile,moduleGlobals) + break + if moduleGlobals.has_key('symbolicTechno'): + helpers.symbolicTechno = symbolicTechno + helpers.symbolicDir = os.path.join( helpers.sysConfDir, symbolicTechno ) + else: + print '[ERROR] The symbolic technology name is not set. Using .' + if moduleGlobals.has_key('realTechno'): + helpers.realTechno = realTechno + helpers.realDir = os.path.join( helpers.sysConfDir, realTechno ) + else: + print '[ERROR] The real technology name is not set. Using .' + + + confFiles = [ (helpers.sysConfDir+'/'+symbolicTechno+'/alliance.conf', SystemFile|AllianceHelper) + , (helpers.sysConfDir+'/'+symbolicTechno+'/patterns.conf', SystemFile|PatternsHelper) + , (helpers.sysConfDir+'/'+symbolicTechno+'/display.conf' , SystemFile|DisplayHelper) + , (helpers.sysConfDir+'/'+symbolicTechno+'/misc.conf' , SystemFile|ConfigurationHelper) + , (helpers.sysConfDir+'/'+symbolicTechno+'/hMetis.conf' , SystemFile|ConfigurationHelper) + , (helpers.sysConfDir+'/'+symbolicTechno+'/nimbus.conf' , SystemFile|ConfigurationHelper) + , (helpers.sysConfDir+'/'+symbolicTechno+'/mauka.conf' , SystemFile|ConfigurationHelper) + , (helpers.sysConfDir+'/'+symbolicTechno+'/kite.conf' , SystemFile|ConfigurationHelper) + , (helpers.sysConfDir+'/'+symbolicTechno+'/stratus1.conf', SystemFile|ConfigurationHelper) ] - if os.getenv('HOME'): confFiles += [ (os.getenv('HOME')+'/.coriolis2.conf', 0) ] + if os.getenv('HOME'): + confFiles += [ (os.getenv('HOME')+'/.coriolis2.conf', 0) ] else: w = WarningMessage(['The environment variable is not defined, this is most unusual.' ,'It prevents the loading of ${HOME}/.coriolis2.conf']) print w - confFiles += [ (os.getcwd()+'/.coriolis2.conf', 0) ] + confFiles += [ (os.getcwd()+'/.coriolis2.conf', 0) ] + if helpers.xmlCompatMode: Alliance.loadCompatXml() diff --git a/crlcore/src/crlcore/helpers/Alliance.py b/crlcore/src/crlcore/helpers/Alliance.py index 7a508fdb..bac3a2d6 100644 --- a/crlcore/src/crlcore/helpers/Alliance.py +++ b/crlcore/src/crlcore/helpers/Alliance.py @@ -27,6 +27,9 @@ def xmlToConf ( xmlPath ): if filename.endswith('.xml'): hasExtention = True filename = filename[:-4] + if filename.endswith('.conf'): + hasExtention = True + filename = filename[:-5] filename = filename.replace('.','_') confPath = os.sep.join(components[:-1] + [filename]) if hasExtention: @@ -49,6 +52,8 @@ def _loadAllianceConfig ( af, allianceConfig ): ]) key, value = entry + if key == 'SYMB_TECHNO_NAME': env.setSYMB_TECHNO_NAME(value) + if key == 'REAL_TECHNO_NAME': env.setREAL_TECHNO_NAME(value) if key == 'SYMBOLIC_TECHNOLOGY': env.setSYMBOLIC_TECHNOLOGY(value) if key == 'REAL_TECHNOLOGY': env.setREAL_TECHNOLOGY(value) if key == 'DISPLAY': env.setDISPLAY(value) diff --git a/crlcore/src/crlcore/helpers/Display.py b/crlcore/src/crlcore/helpers/Display.py index 2e413e82..2941f3db 100644 --- a/crlcore/src/crlcore/helpers/Display.py +++ b/crlcore/src/crlcore/helpers/Display.py @@ -18,16 +18,21 @@ displayFile = '' stdColors = \ { 'Black' : '0,0,0' - , 'Gray50' : '50,50,50' + , 'Gray50' : '050,050,050' , 'Gray238' : '238,238,238' , 'White' : '255,255,255' , 'Seashell4' : '139,134,130' , 'Red' : '255,0,0' # Shade of Reds. + , 'OrangeRed' : "255,69,0" + , 'DarkOrange' : "255,140,0" + , 'Orange' : "255,165,0" + , 'Wheat' : "245,222,179" , 'LightPink' : '255,182,193' , 'Green' : '0,255,0' # Shade of Green. , 'LawnGreen' : '124,252,0' , 'Blue' : '0,0,255' # Shade of Blue. , 'Aqua' : '0,255,255' + , 'BlueViolet' : '138,43,226' , 'Violet' : '238;130;238' # Shade of Violets. , 'Magenta' : '255,0,255' , 'Magenta4' : '139,0,139' diff --git a/crlcore/src/crlcore/helpers/SymbolicTechnology.py b/crlcore/src/crlcore/helpers/SymbolicTechnology.py index 3e777978..d3642192 100644 --- a/crlcore/src/crlcore/helpers/SymbolicTechnology.py +++ b/crlcore/src/crlcore/helpers/SymbolicTechnology.py @@ -14,10 +14,12 @@ from Hurricane import TransistorLayer from Hurricane import RegularLayer from Hurricane import ContactLayer from Hurricane import ViaLayer +from CRL import AllianceFramework from helpers import ErrorMessage -symbolicFile = '' +symbolicTechno = None +symbolicFile = '' class SymbolicLayerType ( object ): @@ -272,8 +274,10 @@ def load ( symbolicPath ): , ('workingLayersTable' , loadWorkingLayers ) ) + global symbolicTechno global symbolicFile - symbolicFile = os.path.basename(symbolicPath) + symbolicFile = os.path.basename(symbolicPath) + symbolicTechno = AllianceFramework.get().getEnvironment().getSYMB_TECHNO_NAME() confGlobals = globals() execfile(symbolicPath,confGlobals) diff --git a/crlcore/src/crlcore/helpers/__init__.py b/crlcore/src/crlcore/helpers/__init__.py index 95e0d6f1..eeac0b08 100644 --- a/crlcore/src/crlcore/helpers/__init__.py +++ b/crlcore/src/crlcore/helpers/__init__.py @@ -1,8 +1,7 @@ - # -*- mode:Python -*- # # This file is part of the Coriolis Software. -# Copyright (c) UPMC/LIP6 2012-2012, All Rights Reserved +# Copyright (c) UPMC 2012-2014, All Rights Reserved # # +-----------------------------------------------------------------+ # | C O R I O L I S | @@ -26,8 +25,12 @@ import re import traceback import Hurricane -sysConfDir = None -xmlCompatMode = False +sysConfDir = None +xmlCompatMode = False +symbolicTechno = 'cmos' +symbolicDir = None +realTechno = 'hcmos9' +realDir = None def stype ( o ): return str(type(o)).split("'")[1] @@ -155,4 +158,7 @@ for (modulePath,moduleLine,contextType,lineContent) in traceback.extract_stack() else: raise ErrorMessage( 1, [ 'Cannot locate the directoty holding the configuration files.' , 'The path is something ending by <.../etc/coriolis2>.'] ) + + symbolicDir = os.path.join( sysConfDir, symbolicTechno ) + realDir = os.path.join( sysConfDir, realTechno ) break diff --git a/crlcore/src/crlcore/helpers/display.py b/crlcore/src/crlcore/helpers/display.py deleted file mode 100644 index 42b934c9..00000000 --- a/crlcore/src/crlcore/helpers/display.py +++ /dev/null @@ -1,423 +0,0 @@ - -import Viewer - -# Black & White. -Black = "0,0,0" -Gray50 = "50,50,50" -Gray238 = "238,238,238" -White = "255,255,255" -Seashell4 = "139,134,130" - -# Shade of Reds. -Red = "255,0,0" -LightPink = "255,182,193" - -# Shade of Green. -Green = "0,255,0" -LawnGreen = "124,252,0" - -# Shade of Blue. -Blue = "0,0,255" -Aqua = "0,255,255" - -# Shade of Violets. -Violet = "238;130;238" -Magenta = "255,0,255" -Magenta4 = "139,0,139" - -# Shade of Browns -Tan = "210,180,140" - -# Shade of Yellows. -Yellow = "255,255,0" -LightYellow = "255,255,224" - -# Patterns. -Urgo = "feffffffefffffff" - - -# ============================================================================= -# Aliance.Coriolis [black] - -def loadAllianceCoriolisBlackStyle (): - style = Viewer.DisplayStyle("Alliance.Coriolis [black]") - style.setDescription("Alliance Coriolis Look - black background") - style.setDarkening(Viewer.DisplayStyle.HSVr( 1.0, 3.0, 2.5 )) - - # Viewer group. - style.addDrawingStyle(group="Viewer", name="fallback" , color=Gray238 , border=1, pattern="55AA55AA55AA55AA") - style.addDrawingStyle(group="Viewer", name="background" , color=Gray50 , border=1) - style.addDrawingStyle(group="Viewer", name="foreground" , color=White , border=1) - style.addDrawingStyle(group="Viewer", name="rubber" , color="192,0,192" , border=2, threshold=0.02) - style.addDrawingStyle(group="Viewer", name="phantom" , color=Seashell4 , border=1) - style.addDrawingStyle(group="Viewer", name="boundaries" , color="208,199,192", border=1, pattern="0000000000000000", threshold=0) - style.addDrawingStyle(group="Viewer", name="marker" , color="80,250,80" , border=1) - style.addDrawingStyle(group="Viewer", name="selectionDraw" , color=White , border=1) - style.addDrawingStyle(group="Viewer", name="selectionFill" , color=White , border=1) - style.addDrawingStyle(group="Viewer", name="grid" , color=White , border=1, threshold=2.0) - style.addDrawingStyle(group="Viewer", name="spot" , color=White , border=2, threshold=6.0) - style.addDrawingStyle(group="Viewer", name="ghost" , color=White , border=1) - style.addDrawingStyle(group="Viewer", name="text.ruler" , color=White , border=1, threshold=0.0) - style.addDrawingStyle(group="Viewer", name="text.instance" , color=Black , border=1, threshold=4.0) - style.addDrawingStyle(group="Viewer", name="text.reference" , color=White , border=1, threshold=20.0) - style.addDrawingStyle(group="Viewer", name="undef" , color=Violet , border=0, pattern="2244118822441188") - style.addDrawingStyle(group="Viewer", name="mauka.container", color=Magenta4 , border=4, pattern="0000000000000000", goMatched="false") - - # Active Layer group. - style.addDrawingStyle(group="Active Layer", name="nWell" , color=Tan , pattern="55AA55AA55AA55AA", threshold=1.5) - style.addDrawingStyle(group="Active Layer", name="pWell" , color=LightYellow, pattern="55AA55AA55AA55AA", threshold=1.50) - style.addDrawingStyle(group="Active Layer", name="nImplant", color=LawnGreen , pattern="55AA55AA55AA55AA", threshold=1.50) - style.addDrawingStyle(group="Active Layer", name="pImplant", color=Yellow , pattern="55AA55AA55AA55AA", threshold=1.50) - style.addDrawingStyle(group="Active Layer", name="active" , color=White , pattern="bbddee77bbddee77", threshold=1.50) - style.addDrawingStyle(group="Active Layer", name="poly" , color=Red , pattern="55AA55AA55AA55AA", threshold=1.50) - - # Routing Layer group. - style.addDrawingStyle(group="Routing Layer", name="metal1" , color=Blue , pattern="AA55AA55AA55AA55", threshold=0.80) - style.addDrawingStyle(group="Routing Layer", name="metal2" , color=Aqua , pattern="8822882288228822", threshold=0.40) - style.addDrawingStyle(group="Routing Layer", name="metal3" , color=LightPink, pattern="4411441144114411", threshold=0.02) - style.addDrawingStyle(group="Routing Layer", name="metal4" , color=Green , pattern="2288228822882288", threshold=0.02) - style.addDrawingStyle(group="Routing Layer", name="metal5" , color=Yellow , pattern="1144114411441144", threshold=0.02) - style.addDrawingStyle(group="Routing Layer", name="metal6" , color=Violet , pattern="8822882288228822", threshold=0.02) - - # Cuts (VIA holes) group. - style.addDrawingStyle(group="Cuts (VIA holes)", name="cut0", color="0,150,150", threshold=1.50) - style.addDrawingStyle(group="Cuts (VIA holes)", name="cut1", color=Aqua , threshold=0.80) - style.addDrawingStyle(group="Cuts (VIA holes)", name="cut2", color=LightPink , threshold=0.80) - style.addDrawingStyle(group="Cuts (VIA holes)", name="cut3", color=Green , threshold=0.80) - style.addDrawingStyle(group="Cuts (VIA holes)", name="cut4", color=Yellow , threshold=0.80) - style.addDrawingStyle(group="Cuts (VIA holes)", name="cut5", color=Violet , threshold=0.80) - - # MIM6 group. - style.addDrawingStyle(group="MIM6", name="topmim6", color=Blue , pattern="AA55AA55AA55AA55", threshold=0.80) - style.addDrawingStyle(group="MIM6", name="botmim6", color=Aqua , pattern="8822882288228822", threshold=0.80) - style.addDrawingStyle(group="MIM6", name="padopen", color=LightPink, pattern="4411441144114411", threshold=0.80) - style.addDrawingStyle(group="MIM6", name="alucap" , color=Green , pattern="2288228822882288", threshold=0.80) - - # Blockages group. - style.addDrawingStyle(group="Blockages", name="blockage1", color=Blue , pattern="006070381c0e0703", threshold=0.80, border=2) - style.addDrawingStyle(group="Blockages", name="blockage2", color=Aqua , pattern="8103060c183060c0", threshold=0.80, border=2) - style.addDrawingStyle(group="Blockages", name="blockage3", color=LightPink, pattern="8800220088002200", threshold=0.80, border=2) - style.addDrawingStyle(group="Blockages", name="blockage4", color=Green , pattern="2288228822882288", threshold=0.80, border=2) - style.addDrawingStyle(group="Blockages", name="blockage5", color=Yellow , pattern="1144114411441144", threshold=0.80, border=2) - style.addDrawingStyle(group="Blockages", name="blockage6", color=Violet , pattern="8822882288228822", threshold=0.80, border=2) - - # Knik & Kite group. - style.addDrawingStyle(group="Knik & Kite", name="SPL1" , color=Red) - style.addDrawingStyle(group="Knik & Kite", name="AutoLayer", color=Magenta) - style.addDrawingStyle(group="Knik & Kite", name="gmetalh" , color="128,255,200", pattern="8822882288228822", border=1) - style.addDrawingStyle(group="Knik & Kite", name="gmetalv" , color="200,200,255", pattern="4411441144114411", border=1) - style.addDrawingStyle(group="Knik & Kite", name="gcut" , color="255,255,190", border=1) - - Viewer.Graphics.addStyle ( style ) - return - - -# ============================================================================= -# Aliance.Coriolis [white] - -def loadAllianceCoriolisWhiteStyle (): - style = Viewer.DisplayStyle("Alliance.Coriolis [white]") - style.setDescription("Alliance Coriolis Look - white background") - style.inheritFrom("Alliance.Coriolis [black]") - style.setDarkening(Viewer.DisplayStyle.HSVr( 1.0, 3.0, 2.5 )) - - style.addDrawingStyle(group="Viewer", name="fallback" , color=Black, border=1, pattern="55AA55AA55AA55AA") - style.addDrawingStyle(group="Viewer", name="background" , color=White, border=1) - style.addDrawingStyle(group="Viewer", name="foreground" , color=Black, border=1) - style.addDrawingStyle(group="Viewer", name="selectionDraw", color=Black, border=1) - style.addDrawingStyle(group="Viewer", name="selectionFill", color=Black, border=1) - style.addDrawingStyle(group="Viewer", name="grid" , color=Black, border=1, threshold=6.0) - style.addDrawingStyle(group="Viewer", name="spot" , color=Black, border=1, threshold=6.0) - style.addDrawingStyle(group="Viewer", name="ghost" , color=Black, border=1) - style.addDrawingStyle(group="Viewer", name="text.ruler" , color=Black, border=1, threshold=0.0) - style.addDrawingStyle(group="Viewer", name="text.instance", color=Black, border=1, threshold=4.0) - style.addDrawingStyle(group="Viewer", name="undef" , color=Black, border=0, pattern="2244118822441188") - - Viewer.Graphics.addStyle ( style ) - return - - -# ============================================================================= -# Aliance.Classic [black] - -def loadAllianceClassicBlackStyle (): - style = Viewer.DisplayStyle("Alliance.Classic [black]") - style.setDescription("Alliance Standard Look - black background") - style.setDarkening(Viewer.DisplayStyle.HSVr( 1.0, 3.0, 2.5 )) - - # Viewer. - style.addDrawingStyle(group="Viewer", name="fallback" , color=Gray238 , border=1, pattern="55AA55AA55AA55AA") - style.addDrawingStyle(group="Viewer", name="background" , color=Gray50 , border=1) - style.addDrawingStyle(group="Viewer", name="foreground" , color=White , border=1) - style.addDrawingStyle(group="Viewer", name="rubber" , color="192,0,192" , border=4, threshold=0.02) - style.addDrawingStyle(group="Viewer", name="phantom" , color=Seashell4 , border=1) - style.addDrawingStyle(group="Viewer", name="boundaries" , color="208,199,192", border=1, pattern="0000000000000000", threshold=0) - style.addDrawingStyle(group="Viewer", name="marker" , color="80,250,80" , border=1) - style.addDrawingStyle(group="Viewer", name="selectionDraw" , color=White , border=1) - style.addDrawingStyle(group="Viewer", name="selectionFill" , color=White , border=1) - style.addDrawingStyle(group="Viewer", name="grid" , color=White , border=1, threshold=2.0) - style.addDrawingStyle(group="Viewer", name="spot" , color=White , border=2, threshold=6.0) - style.addDrawingStyle(group="Viewer", name="ghost" , color=White , border=1) - style.addDrawingStyle(group="Viewer", name="text.ruler" , color=White , border=1, threshold=0.0) - style.addDrawingStyle(group="Viewer", name="text.instance" , color=White , border=1, threshold=4.0) - style.addDrawingStyle(group="Viewer", name="text.reference", color=White , border=1, threshold=20.0) - style.addDrawingStyle(group="Viewer", name="undef" , color=Violet , border=0, pattern="2244118822441188") - - # Active Layers. - style.addDrawingStyle(group="Active Layers", name="nWell" , color=Tan , pattern=Urgo, border=1, threshold=1.50) - style.addDrawingStyle(group="Active Layers", name="pWell" , color=LightYellow, pattern=Urgo, border=1, threshold=1.50) - style.addDrawingStyle(group="Active Layers", name="nImplant", color=LawnGreen , pattern="77bbddee77bbddee", border=1, threshold=1.50) - style.addDrawingStyle(group="Active Layers", name="pImplant", color=Yellow , pattern="77bbddee77bbddee", border=1, threshold=1.50) - style.addDrawingStyle(group="Active Layers", name="active" , color=White , pattern="bbddee77bbddee77", border=1, threshold=1.50) - style.addDrawingStyle(group="Active Layers", name="poly" , color=Red , pattern="aa55aa55aa55aa55", border=1, threshold=1.50) - - # Routing Layers. - style.addDrawingStyle(group="Routing Layers", name="metal1", color=Blue , pattern="8844221188442211", border=1, threshold=0.80) - style.addDrawingStyle(group="Routing Layers", name="metal2", color=Aqua , pattern="8800220088002200", border=1, threshold=0.40) - style.addDrawingStyle(group="Routing Layers", name="metal3", color=LightPink, pattern="8800220088002200", border=1, threshold=0.02) - style.addDrawingStyle(group="Routing Layers", name="metal4", color=Green , pattern="8800220088002200", border=1, threshold=0.02) - style.addDrawingStyle(group="Routing Layers", name="metal5", color=Yellow , pattern="8800220088002200", border=1, threshold=0.02) - style.addDrawingStyle(group="Routing Layers", name="metal6", color=Violet , pattern="8800220088002200", border=1, threshold=0.02) - - # Cuts (VIA holes). - style.addDrawingStyle(group="Cuts (VIA holes)", name="cut0", color="0,150,150", threshold=1.50) - style.addDrawingStyle(group="Cuts (VIA holes)", name="cut1", color=Aqua , threshold=0.80) - style.addDrawingStyle(group="Cuts (VIA holes)", name="cut2", color=LightPink , threshold=0.80) - style.addDrawingStyle(group="Cuts (VIA holes)", name="cut3", color=Green , threshold=0.80) - style.addDrawingStyle(group="Cuts (VIA holes)", name="cut4", color=Yellow , threshold=0.80) - style.addDrawingStyle(group="Cuts (VIA holes)", name="cut5", color=Violet , threshold=0.80) - - # MIM6. - style.addDrawingStyle(group="MIM6", name="topmim6", color=Blue , pattern="AA55AA55AA55AA55", threshold=0.80) - style.addDrawingStyle(group="MIM6", name="botmim6", color=Aqua , pattern="8822882288228822", threshold=0.80) - style.addDrawingStyle(group="MIM6", name="padopen", color=LightPink, pattern="4411441144114411", threshold=0.80) - style.addDrawingStyle(group="MIM6", name="alucap" , color=Green , pattern="2288228822882288", threshold=0.80) - - # Blockages. - style.addDrawingStyle(group="Blockages", name="blockage1", color=Blue , pattern="8844221188442211", threshold=0.80, border=2) - style.addDrawingStyle(group="Blockages", name="blockage2", color=Aqua , pattern="8800220088002200", threshold=0.80, border=2) - style.addDrawingStyle(group="Blockages", name="blockage3", color=LightPink, pattern="8800220088002200", threshold=0.80, border=2) - style.addDrawingStyle(group="Blockages", name="blockage4", color=Green , pattern="8800220088002200", threshold=0.80, border=2) - style.addDrawingStyle(group="Blockages", name="blockage5", color=Yellow , pattern="8800220088002200", threshold=0.80, border=2) - style.addDrawingStyle(group="Blockages", name="blockage6", color=Violet , pattern="8800220088002200", threshold=0.80, border=2) - - # Knik & Kite. - style.addDrawingStyle(group="Knik & Kite", name="SPL1" , color=Red) - style.addDrawingStyle(group="Knik & Kite", name="AutoLayer", color=Magenta) - style.addDrawingStyle(group="Knik & Kite", name="gmetalh" , color="128,255,200", pattern="8822882288228822", border=1) - style.addDrawingStyle(group="Knik & Kite", name="gmetalv" , color="200,200,255", pattern="4411441144114411", border=1) - style.addDrawingStyle(group="Knik & Kite", name="gcut" , color="255,255,190", border=1) - - Viewer.Graphics.addStyle ( style ) - return - - -# ============================================================================= -# Aliance.Classic [white] - -def loadAllianceClassicWhiteStyle (): - style = Viewer.DisplayStyle("Alliance.Classic [white]") - style.inheritFrom("Alliance.Classic [black]") - style.setDescription("Alliance Standard Look - white background") - style.setDarkening(Viewer.DisplayStyle.HSVr( 1.0, 3.0, 2.5 )) - - # Viewer. - style.addDrawingStyle(group="Viewer", name="fallback" , color=Black, border=1, pattern="55AA55AA55AA55AA") - style.addDrawingStyle(group="Viewer", name="background" , color=White, border=1) - style.addDrawingStyle(group="Viewer", name="foreground" , color=Black, border=1) - style.addDrawingStyle(group="Viewer", name="selectionDraw" , color=Black, border=1) - style.addDrawingStyle(group="Viewer", name="selectionFill" , color=Black, border=1) - style.addDrawingStyle(group="Viewer", name="grid" , color=Black, border=1, threshold=6.0) - style.addDrawingStyle(group="Viewer", name="spot" , color=Black, border=1, threshold=6.0) - style.addDrawingStyle(group="Viewer", name="ghost" , color=Black, border=1) - style.addDrawingStyle(group="Viewer", name="text.ruler" , color=Black, border=1, threshold=0.0) - style.addDrawingStyle(group="Viewer", name="text.instance" , color=Black, border=1, threshold=4.0) - style.addDrawingStyle(group="Viewer", name="text.reference", color=Black, border=1, threshold=20.0) - style.addDrawingStyle(group="Viewer", name="undef" , color=Black, border=0, pattern="2244118822441188") - - Viewer.Graphics.addStyle ( style ) - return - - -# ============================================================================= -# ISPD Global Route. - -def loadIspdGlobalRouteBlackStyle (): - style = Viewer.DisplayStyle("Ispd Global Route") - style.inheritFrom("Alliance.Classic [black]") - style.setDescription("ISPD Global Route Look -black background") - style.setDarkening(Viewer.DisplayStyle.HSVr( 1.0, 3.0, 2.5 )) - - # Viewer. - style.addDrawingStyle(group="Viewer", name="background", color=Black , border=1) - style.addDrawingStyle(group="Viewer", name="rubber" , color="192,0,192", border=1, threshold=0) - - # Knik & Kite. - style.addDrawingStyle(group="Knik & Kite", name="gmetalh" , color="128,255,200", pattern="8822882288228822", border=1, threshold=0) - style.addDrawingStyle(group="Knik & Kite", name="gmetalv" , color="200,200,255", pattern="4411441144114411", border=1, threshold=0) - style.addDrawingStyle(group="Knik & Kite", name="gcontact", color="255,255,190", border=1, threshold=0) - - Viewer.Graphics.addStyle ( style ) - return - - -# ============================================================================= -# Layout Design [black]. - -def loadLayoutDesignBlackStyle (): - style = Viewer.DisplayStyle("Layout Design") - style.inheritFrom("Alliance.Classic [black]") - style.setDescription("Useful for debugging layout - black background") - style.setDarkening(Viewer.DisplayStyle.HSVr( 1.0, 3.0, 2.5 )) - - # Active Layers. - style.addDrawingStyle(group="Active Layers", name="nWell" , color=Tan , pattern="0000000000000000", threshold=1.50, border=2) - style.addDrawingStyle(group="Active Layers", name="pWell" , color=LightYellow, pattern="0000000000000000", threshold=1.50, border=2) - style.addDrawingStyle(group="Active Layers", name="nImplant", color=LawnGreen , pattern="0000000000000000", threshold=1.50, border=2) - style.addDrawingStyle(group="Active Layers", name="pImplant", color=Yellow , pattern="0000000000000000", threshold=1.50, border=2) - style.addDrawingStyle(group="Active Layers", name="active" , color=White , pattern="0000000000000000", threshold=1.50, border=2) - style.addDrawingStyle(group="Active Layers", name="poly" , color=Red , pattern="0000000000000000", threshold=1.50, border=2) - - # Routing Layers. - style.addDrawingStyle(group="Routing Layers", name="metal1", color=Blue , pattern="0000000000000000", threshold=0.80, border=2) - style.addDrawingStyle(group="Routing Layers", name="metal2", color=Aqua , pattern="0000000000000000", threshold=0.40, border=2) - style.addDrawingStyle(group="Routing Layers", name="metal3", color=LightPink, pattern="0000000000000000", threshold=0.02, border=2) - style.addDrawingStyle(group="Routing Layers", name="metal4", color=Green , pattern="0000000000000000", threshold=0.02, border=2) - style.addDrawingStyle(group="Routing Layers", name="metal5", color=Yellow , pattern="0000000000000000", threshold=0.02, border=2) - style.addDrawingStyle(group="Routing Layers", name="metal6", color=Violet , pattern="0000000000000000", threshold=0.02, border=2) - - # Cuts (VIA holes) - style.addDrawingStyle(group="Cuts (VIA holes)", name="cut0", color="0,150,150", pattern="8800220088002200", threshold=1.50, border=1) - style.addDrawingStyle(group="Cuts (VIA holes)", name="cut1", color=Aqua , pattern="0000000000000000", threshold=0.80, border=1) - style.addDrawingStyle(group="Cuts (VIA holes)", name="cut2", color=LightPink , pattern="0000000000000000", threshold=0.80, border=1) - style.addDrawingStyle(group="Cuts (VIA holes)", name="cut3", color=Green , pattern="0000000000000000", threshold=0.80, border=1) - style.addDrawingStyle(group="Cuts (VIA holes)", name="cut4", color=Yellow , pattern="0000000000000000", threshold=0.80, border=1) - style.addDrawingStyle(group="Cuts (VIA holes)", name="cut5", color=Violet , pattern="0000000000000000", threshold=0.80, border=1) - - Viewer.Graphics.addStyle ( style ) - return - - -# ============================================================================= -# Layout Design [white]. - -def loadLayoutDesignWhiteStyle (): - style = Viewer.DisplayStyle("Layout Design White") - style.inheritFrom("Layout Design") - style.setDescription("Useful for debugging layout - white background") - style.setDarkening(Viewer.DisplayStyle.HSVr( 1.0, 3.0, 2.5 )) - - # Viewer. - style.addDrawingStyle(group="Viewer", name="background" , color=White, border=1) - style.addDrawingStyle(group="Viewer", name="grid" , color=Black, border=1, threshold=2.0) - style.addDrawingStyle(group="Viewer", name="spot" , color=Black, border=1, threshold=2.0) - style.addDrawingStyle(group="Viewer", name="text.ruler" , color=Black, border=1, threshold=0.0) - style.addDrawingStyle(group="Viewer", name="text.reference", color=Black, border=1, threshold=20.0) - - # Active Layers. - style.addDrawingStyle(group="Active Layers", name="active", color="175,175,175", pattern="0000000000000000", threshold=1.50, border=2) - - Viewer.Graphics.addStyle ( style ) - return - - -# ============================================================================= -# Layout Design [white]. - -def loadPrinterCoriolisStyle (): - style = Viewer.DisplayStyle("Printer.Coriolis") - style.setDescription("Coriolis Look for Printers") - style.setDarkening(Viewer.DisplayStyle.HSVr( 1.0, 3.0, 2.5 )) - - # Viewer. - style.addDrawingStyle(group="Viewer", name="fallback" , color=Gray238 , border=1, pattern="55AA55AA55AA55AA") - style.addDrawingStyle(group="Viewer", name="background" , color=White , border=1) - style.addDrawingStyle(group="Viewer", name="foreground" , color=Black , border=1) - style.addDrawingStyle(group="Viewer", name="rubber" , color="192,0,192", border=4, threshold=0.02) - style.addDrawingStyle(group="Viewer", name="phantom" , color=Seashell4 , border=1) - style.addDrawingStyle(group="Viewer", name="boundaries" , color=Black , border=1, pattern="0000000000000000", threshold=0) - style.addDrawingStyle(group="Viewer", name="marker" , color="80,250,80", border=1) - style.addDrawingStyle(group="Viewer", name="selectionDraw" , color=Black , border=1) - style.addDrawingStyle(group="Viewer", name="selectionFill" , color=Black , border=1) - style.addDrawingStyle(group="Viewer", name="grid" , color=Black , border=1, threshold=2.0) - style.addDrawingStyle(group="Viewer", name="spot" , color=Black , border=2, threshold=6.0) - style.addDrawingStyle(group="Viewer", name="ghost" , color=Black , border=1) - style.addDrawingStyle(group="Viewer", name="text.ruler" , color=Black , border=1, threshold=0.0) - style.addDrawingStyle(group="Viewer", name="text.instance" , color=Black , border=1, threshold=4.0) - style.addDrawingStyle(group="Viewer", name="text.reference" , color=Black , border=1, threshold=20.0) - style.addDrawingStyle(group="Viewer", name="undef" , color=Violet , border=0, pattern="2244118822441188") - style.addDrawingStyle(group="Viewer", name="mauka.container", color=Magenta4 , border=4, pattern="0000000000000000", goMatched="false") - - # Active Layers. - style.addDrawingStyle(group="Active Layers", name="nWell" , color=Tan , pattern="55AA55AA55AA55AA", threshold=1.50) - style.addDrawingStyle(group="Active Layers", name="pWell" , color=LightYellow, pattern="55AA55AA55AA55AA", threshold=1.50) - style.addDrawingStyle(group="Active Layers", name="nImplant", color=LawnGreen , pattern="55AA55AA55AA55AA", threshold=1.50) - style.addDrawingStyle(group="Active Layers", name="pImplant", color=Yellow , pattern="55AA55AA55AA55AA", threshold=1.50) - style.addDrawingStyle(group="Active Layers", name="active" , color=White , pattern="bbddee77bbddee77", threshold=1.50) - style.addDrawingStyle(group="Active Layers", name="poly" , color=Red , pattern="55AA55AA55AA55AA", threshold=1.50) - - # Routing Layers. - style.addDrawingStyle(group="Routing Layers", name="metal1", color=Black , pattern="AA55AA55AA55AA55", threshold=0.80) - style.addDrawingStyle(group="Routing Layers", name="metal2", color=Black , pattern="8822882288228822", threshold=0.02) - style.addDrawingStyle(group="Routing Layers", name="metal3", color=Black , pattern="4411441144114411", threshold=0.02) - style.addDrawingStyle(group="Routing Layers", name="metal4", color="127,127,127", pattern="2288228822882288", threshold=0.02) - style.addDrawingStyle(group="Routing Layers", name="metal5", color="127,127,127", pattern="1144114411441144", threshold=0.02) - style.addDrawingStyle(group="Routing Layers", name="metal6", color=Black , pattern="8822882288228822", threshold=0.02) - - # Cuts (VIA holes) - style.addDrawingStyle(group="Cuts (VIA holes)", name="cut0", color=Black , threshold=1.50) - style.addDrawingStyle(group="Cuts (VIA holes)", name="cut1", color=Black , threshold=0.80) - style.addDrawingStyle(group="Cuts (VIA holes)", name="cut2", color=Black , threshold=0.80) - style.addDrawingStyle(group="Cuts (VIA holes)", name="cut3", color="127,127,12 7", threshold=0.80) - style.addDrawingStyle(group="Cuts (VIA holes)", name="cut4", color="127,127,12 7", threshold=0.80) - style.addDrawingStyle(group="Cuts (VIA holes)", name="cut5", color=Black , threshold=0.80) - - # MIM6. - style.addDrawingStyle(group="MIM6", name="topmim6", color=Blue , pattern="AA55AA55AA55AA55", threshold=0.80) - style.addDrawingStyle(group="MIM6", name="botmim6", color=Aqua , pattern="8822882288228822", threshold=0.80) - style.addDrawingStyle(group="MIM6", name="padopen", color=LightPink, pattern="4411441144114411", threshold=0.80) - style.addDrawingStyle(group="MIM6", name="alucap" , color=Green , pattern="2288228822882288", threshold=0.80) - - # Blockages. - style.addDrawingStyle(group="Blockages", name="blockage1", color=Blue , pattern="006070381c0e0703", threshold=0.80, border=2) - style.addDrawingStyle(group="Blockages", name="blockage2", color=Aqua , pattern="8103060c183060c0", threshold=0.80, border=2) - style.addDrawingStyle(group="Blockages", name="blockage3", color=LightPink, pattern="8800220088002200", threshold=0.80, border=2) - style.addDrawingStyle(group="Blockages", name="blockage4", color=Green , pattern="2288228822882288", threshold=0.80, border=2) - style.addDrawingStyle(group="Blockages", name="blockage5", color=Yellow , pattern="1144114411441144", threshold=0.80, border=2) - style.addDrawingStyle(group="Blockages", name="blockage6", color=Violet , pattern="8822882288228822", threshold=0.80, border=2) - - # Knik & Kite. - style.addDrawingStyle(group="Knik & Kite", name="SPL1" , color=Red) - style.addDrawingStyle(group="Knik & Kite", name="AutoLayer", color=Magenta) - style.addDrawingStyle(group="Knik & Kite", name="gmetalh" , color="128,255,200", pattern="8822882288228822", border=1) - style.addDrawingStyle(group="Knik & Kite", name="gmetalv" , color="200,200,255", pattern="4411441144114411", border=1) - style.addDrawingStyle(group="Knik & Kite", name="gcut" , color="255,255,190", border=1) - - Viewer.Graphics.addStyle ( style ) - return - - -print " - Loading Display configuration." - -#loadAllianceCoriolisBlackStyle() -#loadAllianceCoriolisWhiteStyle() -#loadAllianceClassicBlackStyle() -#loadAllianceClassicWhiteStyle() -#loadIspdGlobalRouteBlackStyle () -#loadLayoutDesignBlackStyle() -#loadLayoutDesignWhiteStyle() -loadPrinterCoriolisStyle() - -# Select the default style. -Viewer.Graphics.setStyle ( "Alliance.Classic [black]" ) - -#print 'AVAILABLE STYLES:' -#for style in Viewer.Graphics.getStyles(): -# print ' ', style.getName() -# -#style = Viewer.Graphics.getStyle("Alliance.Classic [white]") -#print style -#for dg in style.getDrawingGroups(): -# print dg.getName() -# for ds in dg.getDrawingStyles(): -# print ' ', ds.getName(), ds.getPattern() diff --git a/crlcore/src/pyCRL/PyEnvironment.cpp b/crlcore/src/pyCRL/PyEnvironment.cpp index 7f49f641..30d847f6 100644 --- a/crlcore/src/pyCRL/PyEnvironment.cpp +++ b/crlcore/src/pyCRL/PyEnvironment.cpp @@ -1,8 +1,7 @@ - // -*- C++ -*- // // This file is part of the Coriolis Software. -// Copyright (c) UPMC/LIP6 2012-2012, All Rights Reserved +// Copyright (c) UPMC/LIP6 2012-2014, All Rights Reserved // // +-----------------------------------------------------------------+ // | C O R I O L I S | @@ -187,6 +186,8 @@ extern "C" { // Standart Accessors (Attributes). DirectGetStringAttribute(PyEnvironment_getCORIOLIS_TOP ,getCORIOLIS_TOP ,PyEnvironment,Environment) + DirectGetStringAttribute(PyEnvironment_getSYMB_TECHNO_NAME ,getSYMB_TECHNO_NAME ,PyEnvironment,Environment) + DirectGetStringAttribute(PyEnvironment_getREAL_TECHNO_NAME ,getREAL_TECHNO_NAME ,PyEnvironment,Environment) DirectGetStringAttribute(PyEnvironment_getDisplayStyle ,getDisplayStyle ,PyEnvironment,Environment) DirectGetLongAttribute (PyEnvironment_getSCALE_X ,getSCALE_X ,PyEnvironment,Environment) DirectGetStringAttribute(PyEnvironment_getSYMBOLIC_TECHNOLOGY,getSYMBOLIC_TECHNOLOGY,PyEnvironment,Environment) @@ -211,6 +212,8 @@ extern "C" { DirectIsAFromCStringAttribute(PyEnvironment_isPad ,isPad ,PyEnvironment,Environment) // Standart Mutators (Attributes). + DirectSetCStringAttribute(PyEnvironment_setSYMB_TECHNO_NAME ,setSYMB_TECHNO_NAME ,"Environment.setSYMB_TECHNO_NAME" ,PyEnvironment,Environment) + DirectSetCStringAttribute(PyEnvironment_setREAL_TECHNO_NAME ,setREAL_TECHNO_NAME ,"Environment.setSYMB_TECHNO_NAME" ,PyEnvironment,Environment) DirectSetCStringAttribute(PyEnvironment_setDisplayStyle ,setDisplayStyle ,"Environment.setDisplayStyle" ,PyEnvironment,Environment) DirectSetLongAttribute (PyEnvironment_setSCALE_X ,setSCALE_X ,"Environment.setSCALE_X" ,PyEnvironment,Environment) DirectSetCStringAttribute(PyEnvironment_setSYMBOLIC_TECHNOLOGY,setSYMBOLIC_TECHNOLOGY,"Environment.setSYMBOLIC_TECHNOLOGY",PyEnvironment,Environment) @@ -236,6 +239,10 @@ extern "C" { PyMethodDef PyEnvironment_Methods[] = { { "getCORIOLIS_TOP" , (PyCFunction)PyEnvironment_getCORIOLIS_TOP , METH_NOARGS , "Gets the symbolic technology file." } + , { "getSYMB_TECHNO_NAME" , (PyCFunction)PyEnvironment_getSYMB_TECHNO_NAME , METH_NOARGS + , "Gets the symbolic technology name." } + , { "getREAL_TECHNO_NAME" , (PyCFunction)PyEnvironment_getREAL_TECHNO_NAME , METH_NOARGS + , "Gets the real (target) technology name." } , { "getDisplayStyle" , (PyCFunction)PyEnvironment_getDisplayStyle , METH_NOARGS , "Gets the name of the display style currently in use." } , { "getSCALE_X" , (PyCFunction)PyEnvironment_getSCALE_X , METH_NOARGS @@ -286,6 +293,10 @@ extern "C" { , "Call the legacy XML Alliance environment parser." } , { "loadFromShell" , (PyCFunction)PyEnvironment_loadFromShell , METH_NOARGS , "Read the the environment from the process UNIX context." } + , { "setSYMB_TECHNO_NAME" , (PyCFunction)PyEnvironment_setSYMB_TECHNO_NAME , METH_VARARGS + , "Sets the symbolic technology name." } + , { "setREAL_TECHNO_NAME" , (PyCFunction)PyEnvironment_setREAL_TECHNO_NAME , METH_VARARGS + , "Sets the real (target) technology name." } , { "setDisplayStyle" , (PyCFunction)PyEnvironment_setDisplayStyle , METH_VARARGS , "Sets the name of the display style to be used." } , { "setSCALE_X" , (PyCFunction)PyEnvironment_setSCALE_X , METH_VARARGS