From bed79c01562b347035b8d7ab7aaf570af7d1506b Mon Sep 17 00:00:00 2001 From: Jean-Paul Chaput Date: Fri, 17 Nov 2017 10:54:19 +0100 Subject: [PATCH] New DataBase::getCell() and bug in Technology::getNthMetal(). * New: Hurricane::DataBase::getCell() method to search a cell through all the libraries of *all* the frameworks, not just Alliance. Also exported in Python interface. * Bug: In Technology::getNthMetal() the function was not returning the right metal, there was an offset of one. And when the offset was 0, no metal was even returned. Same fix goes for getNthCut(). The fault was in Mask<>::nthbit(). * Change: In Hurricane::CellWidget, the initial window size is too tiny. Increase the size from 250 to 500 pixels. --- crlcore/etc/130/hcmos9gp/technology.conf | 30 --- .../scn6m_deep_09}/alliance.conf | 0 .../scn6m_deep_09}/display.conf | 0 .../{cmos => 180/scn6m_deep_09}/etesian.conf | 0 .../scn6m_deep_09}/hMetis.conf | 0 .../scn6m_deep_09}/kite.conf | 0 .../scn6m_deep_09}/mauka.conf | 0 .../scn6m_deep_09}/misc.conf | 0 .../scn6m_deep_09}/nimbus.conf | 0 .../scn6m_deep_09}/patterns.conf | 0 .../scn6m_deep_09}/plugins.conf | 0 .../scn6m_deep_09}/stratus1.conf | 0 crlcore/etc/180/scn6m_deep_09/technology.conf | 197 +++++++++++++++--- crlcore/etc/scmos_deep_018/technology.conf | 169 --------------- crlcore/etc/{ => symbolic}/cmos/alliance.conf | 0 crlcore/etc/{ => symbolic}/cmos/display.conf | 0 .../{ispd05 => symbolic/cmos}/etesian.conf | 0 crlcore/etc/{ => symbolic}/cmos/hMetis.conf | 0 crlcore/etc/{ => symbolic}/cmos/kite.conf | 0 crlcore/etc/{ => symbolic}/cmos/mauka.conf | 0 crlcore/etc/{ => symbolic}/cmos/misc.conf | 0 crlcore/etc/{ => symbolic}/cmos/nimbus.conf | 0 crlcore/etc/{ => symbolic}/cmos/patterns.conf | 0 crlcore/etc/{ => symbolic}/cmos/plugins.conf | 0 crlcore/etc/{ => symbolic}/cmos/stratus1.conf | 0 .../etc/{ => symbolic}/cmos/technology.conf | 0 .../etc/{ => symbolic}/ispd05/alliance.conf | 0 .../etc/{ => symbolic}/ispd05/display.conf | 0 .../ispd05}/etesian.conf | 0 crlcore/etc/{ => symbolic}/ispd05/hMetis.conf | 0 crlcore/etc/{ => symbolic}/ispd05/kite.conf | 0 crlcore/etc/{ => symbolic}/ispd05/mauka.conf | 0 crlcore/etc/{ => symbolic}/ispd05/misc.conf | 0 crlcore/etc/{ => symbolic}/ispd05/nimbus.conf | 0 .../etc/{ => symbolic}/ispd05/patterns.conf | 0 .../etc/{ => symbolic}/ispd05/plugins.conf | 0 .../etc/{ => symbolic}/ispd05/stratus1.conf | 0 .../etc/{ => symbolic}/ispd05/technology.conf | 0 .../etc/{ => symbolic}/vsc200/alliance.conf | 0 .../etc/{ => symbolic}/vsc200/display.conf | 0 .../etc/{ => symbolic}/vsc200/etesian.conf | 0 crlcore/etc/{ => symbolic}/vsc200/hMetis.conf | 0 crlcore/etc/{ => symbolic}/vsc200/kite.conf | 0 crlcore/etc/{ => symbolic}/vsc200/mauka.conf | 0 crlcore/etc/{ => symbolic}/vsc200/misc.conf | 0 crlcore/etc/{ => symbolic}/vsc200/nimbus.conf | 0 .../etc/{ => symbolic}/vsc200/patterns.conf | 0 .../etc/{ => symbolic}/vsc200/plugins.conf | 0 .../etc/{ => symbolic}/vsc200/stratus1.conf | 0 .../etc/{ => symbolic}/vsc200/technology.conf | 0 hurricane/src/hurricane/DataBase.cpp | 20 ++ hurricane/src/hurricane/Technology.cpp | 8 +- hurricane/src/hurricane/hurricane/DataBase.h | 1 + hurricane/src/hurricane/hurricane/Mask.h | 5 +- .../src/hurricane/hurricane/Technology.h | 1 + hurricane/src/isobar/PyDataBase.cpp | 26 ++- hurricane/src/isobar/PyDbU.cpp | 8 +- hurricane/src/viewer/CellWidget.cpp | 8 +- 58 files changed, 226 insertions(+), 247 deletions(-) delete mode 100644 crlcore/etc/130/hcmos9gp/technology.conf rename crlcore/etc/{scmos_deep_018 => 180/scn6m_deep_09}/alliance.conf (100%) rename crlcore/etc/{scmos_deep_018 => 180/scn6m_deep_09}/display.conf (100%) rename crlcore/etc/{cmos => 180/scn6m_deep_09}/etesian.conf (100%) rename crlcore/etc/{scmos_deep_018 => 180/scn6m_deep_09}/hMetis.conf (100%) rename crlcore/etc/{scmos_deep_018 => 180/scn6m_deep_09}/kite.conf (100%) rename crlcore/etc/{scmos_deep_018 => 180/scn6m_deep_09}/mauka.conf (100%) rename crlcore/etc/{scmos_deep_018 => 180/scn6m_deep_09}/misc.conf (100%) rename crlcore/etc/{scmos_deep_018 => 180/scn6m_deep_09}/nimbus.conf (100%) rename crlcore/etc/{scmos_deep_018 => 180/scn6m_deep_09}/patterns.conf (100%) rename crlcore/etc/{scmos_deep_018 => 180/scn6m_deep_09}/plugins.conf (100%) rename crlcore/etc/{scmos_deep_018 => 180/scn6m_deep_09}/stratus1.conf (100%) delete mode 100644 crlcore/etc/scmos_deep_018/technology.conf rename crlcore/etc/{ => symbolic}/cmos/alliance.conf (100%) rename crlcore/etc/{ => symbolic}/cmos/display.conf (100%) rename crlcore/etc/{ispd05 => symbolic/cmos}/etesian.conf (100%) rename crlcore/etc/{ => symbolic}/cmos/hMetis.conf (100%) rename crlcore/etc/{ => symbolic}/cmos/kite.conf (100%) rename crlcore/etc/{ => symbolic}/cmos/mauka.conf (100%) rename crlcore/etc/{ => symbolic}/cmos/misc.conf (100%) rename crlcore/etc/{ => symbolic}/cmos/nimbus.conf (100%) rename crlcore/etc/{ => symbolic}/cmos/patterns.conf (100%) rename crlcore/etc/{ => symbolic}/cmos/plugins.conf (100%) rename crlcore/etc/{ => symbolic}/cmos/stratus1.conf (100%) rename crlcore/etc/{ => symbolic}/cmos/technology.conf (100%) rename crlcore/etc/{ => symbolic}/ispd05/alliance.conf (100%) rename crlcore/etc/{ => symbolic}/ispd05/display.conf (100%) rename crlcore/etc/{scmos_deep_018 => symbolic/ispd05}/etesian.conf (100%) rename crlcore/etc/{ => symbolic}/ispd05/hMetis.conf (100%) rename crlcore/etc/{ => symbolic}/ispd05/kite.conf (100%) rename crlcore/etc/{ => symbolic}/ispd05/mauka.conf (100%) rename crlcore/etc/{ => symbolic}/ispd05/misc.conf (100%) rename crlcore/etc/{ => symbolic}/ispd05/nimbus.conf (100%) rename crlcore/etc/{ => symbolic}/ispd05/patterns.conf (100%) rename crlcore/etc/{ => symbolic}/ispd05/plugins.conf (100%) rename crlcore/etc/{ => symbolic}/ispd05/stratus1.conf (100%) rename crlcore/etc/{ => symbolic}/ispd05/technology.conf (100%) rename crlcore/etc/{ => symbolic}/vsc200/alliance.conf (100%) rename crlcore/etc/{ => symbolic}/vsc200/display.conf (100%) rename crlcore/etc/{ => symbolic}/vsc200/etesian.conf (100%) rename crlcore/etc/{ => symbolic}/vsc200/hMetis.conf (100%) rename crlcore/etc/{ => symbolic}/vsc200/kite.conf (100%) rename crlcore/etc/{ => symbolic}/vsc200/mauka.conf (100%) rename crlcore/etc/{ => symbolic}/vsc200/misc.conf (100%) rename crlcore/etc/{ => symbolic}/vsc200/nimbus.conf (100%) rename crlcore/etc/{ => symbolic}/vsc200/patterns.conf (100%) rename crlcore/etc/{ => symbolic}/vsc200/plugins.conf (100%) rename crlcore/etc/{ => symbolic}/vsc200/stratus1.conf (100%) rename crlcore/etc/{ => symbolic}/vsc200/technology.conf (100%) diff --git a/crlcore/etc/130/hcmos9gp/technology.conf b/crlcore/etc/130/hcmos9gp/technology.conf deleted file mode 100644 index 0b147812..00000000 --- a/crlcore/etc/130/hcmos9gp/technology.conf +++ /dev/null @@ -1,30 +0,0 @@ -# -*- Mode:Python; explicit-buffer-name: "technology.conf" -*- - -from Hurricane import DbU - - -technoConfig = { 'name' : 'hcmos9' - , 'gridValue' : 0.005 - , 'gridUnit' : DbU.UnitPowerMicro - , 'gridsPerLambda': 24 - } - -gdsLayersTable = \ - ( ("nWell" , "NWELL" , 3) - , ("nImplant", "NPLUS" , 26) - , ("pImplant", "PPLUS" , 25) - , ("active" , "ACTIVE" , 6) - , ("poly" , "POLY" , 17) - , ("cut0" , "CONTACT", 30) - , ("metal1" , "METAL1" , 31) - , ("cut1" , "VIA1" , 51) - , ("metal2" , "METAL2" , 32) - , ("cut2" , "VIA2" , 52) - , ("metal3" , "METAL3" , 33) - , ("cut3" , "VIA3" , 53) - , ("metal4" , "METAL4" , 34) - , ("cut4" , "VIA4" , 54) - , ("metal5" , "METAL5" , 35) - , ("cut5" , "VIA5" , 55) - , ("metal6" , "METAL6" , 36) - ) diff --git a/crlcore/etc/scmos_deep_018/alliance.conf b/crlcore/etc/180/scn6m_deep_09/alliance.conf similarity index 100% rename from crlcore/etc/scmos_deep_018/alliance.conf rename to crlcore/etc/180/scn6m_deep_09/alliance.conf diff --git a/crlcore/etc/scmos_deep_018/display.conf b/crlcore/etc/180/scn6m_deep_09/display.conf similarity index 100% rename from crlcore/etc/scmos_deep_018/display.conf rename to crlcore/etc/180/scn6m_deep_09/display.conf diff --git a/crlcore/etc/cmos/etesian.conf b/crlcore/etc/180/scn6m_deep_09/etesian.conf similarity index 100% rename from crlcore/etc/cmos/etesian.conf rename to crlcore/etc/180/scn6m_deep_09/etesian.conf diff --git a/crlcore/etc/scmos_deep_018/hMetis.conf b/crlcore/etc/180/scn6m_deep_09/hMetis.conf similarity index 100% rename from crlcore/etc/scmos_deep_018/hMetis.conf rename to crlcore/etc/180/scn6m_deep_09/hMetis.conf diff --git a/crlcore/etc/scmos_deep_018/kite.conf b/crlcore/etc/180/scn6m_deep_09/kite.conf similarity index 100% rename from crlcore/etc/scmos_deep_018/kite.conf rename to crlcore/etc/180/scn6m_deep_09/kite.conf diff --git a/crlcore/etc/scmos_deep_018/mauka.conf b/crlcore/etc/180/scn6m_deep_09/mauka.conf similarity index 100% rename from crlcore/etc/scmos_deep_018/mauka.conf rename to crlcore/etc/180/scn6m_deep_09/mauka.conf diff --git a/crlcore/etc/scmos_deep_018/misc.conf b/crlcore/etc/180/scn6m_deep_09/misc.conf similarity index 100% rename from crlcore/etc/scmos_deep_018/misc.conf rename to crlcore/etc/180/scn6m_deep_09/misc.conf diff --git a/crlcore/etc/scmos_deep_018/nimbus.conf b/crlcore/etc/180/scn6m_deep_09/nimbus.conf similarity index 100% rename from crlcore/etc/scmos_deep_018/nimbus.conf rename to crlcore/etc/180/scn6m_deep_09/nimbus.conf diff --git a/crlcore/etc/scmos_deep_018/patterns.conf b/crlcore/etc/180/scn6m_deep_09/patterns.conf similarity index 100% rename from crlcore/etc/scmos_deep_018/patterns.conf rename to crlcore/etc/180/scn6m_deep_09/patterns.conf diff --git a/crlcore/etc/scmos_deep_018/plugins.conf b/crlcore/etc/180/scn6m_deep_09/plugins.conf similarity index 100% rename from crlcore/etc/scmos_deep_018/plugins.conf rename to crlcore/etc/180/scn6m_deep_09/plugins.conf diff --git a/crlcore/etc/scmos_deep_018/stratus1.conf b/crlcore/etc/180/scn6m_deep_09/stratus1.conf similarity index 100% rename from crlcore/etc/scmos_deep_018/stratus1.conf rename to crlcore/etc/180/scn6m_deep_09/stratus1.conf diff --git a/crlcore/etc/180/scn6m_deep_09/technology.conf b/crlcore/etc/180/scn6m_deep_09/technology.conf index d1f00346..059d339b 100644 --- a/crlcore/etc/180/scn6m_deep_09/technology.conf +++ b/crlcore/etc/180/scn6m_deep_09/technology.conf @@ -1,40 +1,169 @@ -# -*- Mode:Python; explicit-buffer-name: "technology.conf" -*- +# -*- Mode:Python; explicit-buffer-name: "technology.conf" -*- -from Hurricane import DbU +import helpers -# MOSIS SCN6M_DEEP is a portable technology where lengths are expresseds -# in symbolic unit (lambda). We only know that the lambda is equal to half -# the value of the technology, that is 180nm gives 90nm. We have no information -# about the foundry grid. +# The informations here are extracted from the Alliance ".rds" file, +# and must be consistent with it. # -# We set the foundry grid to .005um and set the gridsPerLambda to 18. +# Provides standard settings for: +# - +# - +# - +# - -technoConfig = { 'name' : 'scn6m_deep' - , 'gridValue' : 0.005 - , 'gridUnit' : DbU.UnitPowerMicro - , 'gridsPerLambda': 18 - } +execfile( helpers.sysConfDir+'/common/technology.conf' ) -# Format of an entry in the table: -# (Symbolic_Name, CIF_Name, GDSII_Number) -gdsLayersTable = \ - ( ("pWell" , "CWN" , 41) - , ("nWell" , "CWP" , 42) - , ("active" , "CAA" , 43) - , ("pImplant", "CSP" , 44) - , ("nImplant", "CSN" , 45) - , ("poly" , "CPG" , 46) - , ("poly2" , "CM1" , 49) # poly2 is in fact metal1. - , ("cut0" , "CCC" , 25) - , ("metal1" , "CM1" , 49) - , ("cut1" , "CV1" , 50) - , ("metal2" , "CM2" , 51) - , ("cut2" , "CV2" , 61) - , ("metal3" , "CM3" , 62) - , ("cut3" , "CV3" , 30) - , ("metal4" , "CM4" , 31) - , ("cut4" , "CV4" , 32) - , ("metal5" , "CM5" , 33) - , ("cut5" , "CV5" , 36) - , ("metal6" , "CM6" , 37) + +# 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' , 2.0) + , ('NTIE.nImplant.extention.cap' , 2.5) + , ('NTIE.nImplant.extention.width' , 1.5) + , ('NTIE.active.extention.cap' , 0.5) + , ('NTIE.active.extention.width' , -0.5) + + , ('PTIE.minimum.width' , 3.0) + , ('PTIE.pWell.extention.cap' , 3.0) + , ('PTIE.pWell.extention.width' , 2.0) + , ('PTIE.pImplant.extention.cap' , 2.5) + , ('PTIE.pImplant.extention.width' , 1.5) + , ('PTIE.active.extention.cap' , 0.5) + , ('PTIE.active.extention.width' , -0.5) + + , ('NDIF.minimum.width' , 3.0) + , ('NDIF.nImplant.extention.cap' , 4.0) + , ('NDIF.nImplant.extention.width' , 2.0) + , ('NDIF.active.extention.cap' , 2.0) + , ('NDIF.active.extention.width' , 0.0) + + , ('PDIF.minimum.width' , 3.0) + , ('PDIF.pImplant.extention.cap' , 4.0) + , ('PDIF.pImplant.extention.width' , 2.0) + , ('PDIF.active.extention.cap' , 2.0) + , ('PDIF.active.extention.width' , 0.0) + + , ('GATE.minimum.width' , 2.0) + , ('GATE.poly.extention.cap' , 2.5) + + , ('NTRANS.minimum.width' , 2.0) + , ('NTRANS.nImplant.extention.cap' , 2.0) + , ('NTRANS.nImplant.extention.width' , 7.0) + , ('NTRANS.active.extention.cap' , 0.0) + , ('NTRANS.active.extention.width' , 3.0) + , ('NTRANS.poly.extention.cap' , 3.0) + , ('NTRANS.poly.extention.width' , 0.0) + + , ('PTRANS.minimum.width' , 2.0) + , ('PTRANS.nWell.extention.cap' , 2.5) + , ('PTRANS.nWell.extention.width' , 7.5) + , ('PTRANS.pImplant.extention.cap' , 2.0) + , ('PTRANS.pImplant.extention.width' , 7.0) + , ('PTRANS.active.extention.cap' , 0.0) + , ('PTRANS.active.extention.width' , 3.0) + , ('PTRANS.poly.extention.cap' , 3.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' , 2.0) + , ('METAL1.metal1.extention.cap' , 2.0) + , ('METAL1.metal1.extention.width' , 0.5) + , ('METAL2.minimum.width' , 3.0) + , ('METAL2.metal2.extention.cap' , 1.5) + , ('METAL3.minimum.width' , 3.0) + , ('METAL3.metal3.extention.cap' , 1.5) + , ('METAL4.minimum.width' , 3.0) + , ('METAL4.metal4.extention.cap' , 1.5) + , ('METAL5.minimum.width' , 3.0) + , ('METAL5.metal5.extention.cap' , 1.5) + , ('METAL6.minimum.width' , 5.0) + , ('METAL6.metal6.extention.cap' , 2.5) + #, ('METAL7.minimum.width' , 2.0) + #, ('METAL7.metal7.extention.cap' , 2.5) + #, ('METAL8.minimum.width' , 2.0) + #, ('METAL8.metal8.extention.cap' , 2.5) + + # Blockages. + , ('BLOCKAGE1.minimum.width' , 3.0) + , ('BLOCKAGE1.blockage1.extention.cap' , 2.0) + , ('BLOCKAGE1.blockage1.extention.width', 0.5) + , ('BLOCKAGE2.minimum.width' , 3.0) + , ('BLOCKAGE2.blockage2.extention.cap' , 2.0) + , ('BLOCKAGE3.minimum.width' , 3.0) + , ('BLOCKAGE3.blockage3.extention.cap' , 2.0) + , ('BLOCKAGE4.minimum.width' , 3.0) + , ('BLOCKAGE4.blockage4.extention.cap' , 2.0) + , ('BLOCKAGE5.minimum.width' , 3.0) + , ('BLOCKAGE5.blockage5.extention.cap' , 2.0) + , ('BLOCKAGE6.minimum.width' , 4.0) + , ('BLOCKAGE6.blockage6.extention.cap' , 2.5) + #, ('BLOCKAGE7.minimum.width' , 2.0) + #, ('BLOCKAGE7.blockage6.extention.cap' , 4.0) + #, ('BLOCKAGE8.minimum.width' , 2.0) + #, ('BLOCKAGE8.blockage6.extention.cap' , 4.0) + + # Contacts (i.e. Active <--> Metal). + , ('CONT_BODY_N.minimum.side' , 2.0) + , ('CONT_BODY_N.nWell.enclosure' , 4.0) + , ('CONT_BODY_N.nImplant.enclosure' , 3.5) + , ('CONT_BODY_N.active.enclosure' , 1.5) + , ('CONT_BODY_N.metal1.enclosure' , 1.0) + + , ('CONT_BODY_P.minimum.side' , 2.0) + , ('CONT_BODY_P.pWell.enclosure' , 4.0) + , ('CONT_BODY_P.pImplant.enclosure' , 3.5) + , ('CONT_BODY_P.active.enclosure' , 1.5) + , ('CONT_BODY_P.metal1.enclosure' , 1.0) + + , ('CONT_DIF_N.minimum.side' , 2.0) + , ('CONT_DIF_N.nImplant.enclosure' , 4.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' , 4.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' , 3.0) + , ('VIA12.metal1.enclosure' , 1.0) + , ('VIA12.metal2.enclosure' , 1.0) + , ('VIA23.minimum.side' , 3.0) + , ('VIA23.metal2.enclosure' , 1.0) + , ('VIA23.metal3.enclosure' , 1.0) + , ('VIA34.minimum.side' , 3.0) + , ('VIA34.metal3.enclosure' , 1.0) + , ('VIA34.metal4.enclosure' , 1.0) + , ('VIA45.minimum.side' , 3.0) + , ('VIA45.metal4.enclosure' , 1.0) + , ('VIA45.metal5.enclosure' , 1.0) + , ('VIA56.minimum.side' , 5.0) + , ('VIA56.metal5.enclosure' , 1.0) + , ('VIA56.metal6.enclosure' , 1.5) + #, ('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) ) diff --git a/crlcore/etc/scmos_deep_018/technology.conf b/crlcore/etc/scmos_deep_018/technology.conf deleted file mode 100644 index 059d339b..00000000 --- a/crlcore/etc/scmos_deep_018/technology.conf +++ /dev/null @@ -1,169 +0,0 @@ -# -*- Mode:Python; explicit-buffer-name: "technology.conf" -*- - -import helpers - -# The informations here are extracted from the Alliance ".rds" file, -# and must be consistent with it. -# -# Provides standard settings for: -# - -# - -# - -# - - -execfile( helpers.sysConfDir+'/common/technology.conf' ) - - -# 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' , 2.0) - , ('NTIE.nImplant.extention.cap' , 2.5) - , ('NTIE.nImplant.extention.width' , 1.5) - , ('NTIE.active.extention.cap' , 0.5) - , ('NTIE.active.extention.width' , -0.5) - - , ('PTIE.minimum.width' , 3.0) - , ('PTIE.pWell.extention.cap' , 3.0) - , ('PTIE.pWell.extention.width' , 2.0) - , ('PTIE.pImplant.extention.cap' , 2.5) - , ('PTIE.pImplant.extention.width' , 1.5) - , ('PTIE.active.extention.cap' , 0.5) - , ('PTIE.active.extention.width' , -0.5) - - , ('NDIF.minimum.width' , 3.0) - , ('NDIF.nImplant.extention.cap' , 4.0) - , ('NDIF.nImplant.extention.width' , 2.0) - , ('NDIF.active.extention.cap' , 2.0) - , ('NDIF.active.extention.width' , 0.0) - - , ('PDIF.minimum.width' , 3.0) - , ('PDIF.pImplant.extention.cap' , 4.0) - , ('PDIF.pImplant.extention.width' , 2.0) - , ('PDIF.active.extention.cap' , 2.0) - , ('PDIF.active.extention.width' , 0.0) - - , ('GATE.minimum.width' , 2.0) - , ('GATE.poly.extention.cap' , 2.5) - - , ('NTRANS.minimum.width' , 2.0) - , ('NTRANS.nImplant.extention.cap' , 2.0) - , ('NTRANS.nImplant.extention.width' , 7.0) - , ('NTRANS.active.extention.cap' , 0.0) - , ('NTRANS.active.extention.width' , 3.0) - , ('NTRANS.poly.extention.cap' , 3.0) - , ('NTRANS.poly.extention.width' , 0.0) - - , ('PTRANS.minimum.width' , 2.0) - , ('PTRANS.nWell.extention.cap' , 2.5) - , ('PTRANS.nWell.extention.width' , 7.5) - , ('PTRANS.pImplant.extention.cap' , 2.0) - , ('PTRANS.pImplant.extention.width' , 7.0) - , ('PTRANS.active.extention.cap' , 0.0) - , ('PTRANS.active.extention.width' , 3.0) - , ('PTRANS.poly.extention.cap' , 3.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' , 2.0) - , ('METAL1.metal1.extention.cap' , 2.0) - , ('METAL1.metal1.extention.width' , 0.5) - , ('METAL2.minimum.width' , 3.0) - , ('METAL2.metal2.extention.cap' , 1.5) - , ('METAL3.minimum.width' , 3.0) - , ('METAL3.metal3.extention.cap' , 1.5) - , ('METAL4.minimum.width' , 3.0) - , ('METAL4.metal4.extention.cap' , 1.5) - , ('METAL5.minimum.width' , 3.0) - , ('METAL5.metal5.extention.cap' , 1.5) - , ('METAL6.minimum.width' , 5.0) - , ('METAL6.metal6.extention.cap' , 2.5) - #, ('METAL7.minimum.width' , 2.0) - #, ('METAL7.metal7.extention.cap' , 2.5) - #, ('METAL8.minimum.width' , 2.0) - #, ('METAL8.metal8.extention.cap' , 2.5) - - # Blockages. - , ('BLOCKAGE1.minimum.width' , 3.0) - , ('BLOCKAGE1.blockage1.extention.cap' , 2.0) - , ('BLOCKAGE1.blockage1.extention.width', 0.5) - , ('BLOCKAGE2.minimum.width' , 3.0) - , ('BLOCKAGE2.blockage2.extention.cap' , 2.0) - , ('BLOCKAGE3.minimum.width' , 3.0) - , ('BLOCKAGE3.blockage3.extention.cap' , 2.0) - , ('BLOCKAGE4.minimum.width' , 3.0) - , ('BLOCKAGE4.blockage4.extention.cap' , 2.0) - , ('BLOCKAGE5.minimum.width' , 3.0) - , ('BLOCKAGE5.blockage5.extention.cap' , 2.0) - , ('BLOCKAGE6.minimum.width' , 4.0) - , ('BLOCKAGE6.blockage6.extention.cap' , 2.5) - #, ('BLOCKAGE7.minimum.width' , 2.0) - #, ('BLOCKAGE7.blockage6.extention.cap' , 4.0) - #, ('BLOCKAGE8.minimum.width' , 2.0) - #, ('BLOCKAGE8.blockage6.extention.cap' , 4.0) - - # Contacts (i.e. Active <--> Metal). - , ('CONT_BODY_N.minimum.side' , 2.0) - , ('CONT_BODY_N.nWell.enclosure' , 4.0) - , ('CONT_BODY_N.nImplant.enclosure' , 3.5) - , ('CONT_BODY_N.active.enclosure' , 1.5) - , ('CONT_BODY_N.metal1.enclosure' , 1.0) - - , ('CONT_BODY_P.minimum.side' , 2.0) - , ('CONT_BODY_P.pWell.enclosure' , 4.0) - , ('CONT_BODY_P.pImplant.enclosure' , 3.5) - , ('CONT_BODY_P.active.enclosure' , 1.5) - , ('CONT_BODY_P.metal1.enclosure' , 1.0) - - , ('CONT_DIF_N.minimum.side' , 2.0) - , ('CONT_DIF_N.nImplant.enclosure' , 4.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' , 4.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' , 3.0) - , ('VIA12.metal1.enclosure' , 1.0) - , ('VIA12.metal2.enclosure' , 1.0) - , ('VIA23.minimum.side' , 3.0) - , ('VIA23.metal2.enclosure' , 1.0) - , ('VIA23.metal3.enclosure' , 1.0) - , ('VIA34.minimum.side' , 3.0) - , ('VIA34.metal3.enclosure' , 1.0) - , ('VIA34.metal4.enclosure' , 1.0) - , ('VIA45.minimum.side' , 3.0) - , ('VIA45.metal4.enclosure' , 1.0) - , ('VIA45.metal5.enclosure' , 1.0) - , ('VIA56.minimum.side' , 5.0) - , ('VIA56.metal5.enclosure' , 1.0) - , ('VIA56.metal6.enclosure' , 1.5) - #, ('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) - ) diff --git a/crlcore/etc/cmos/alliance.conf b/crlcore/etc/symbolic/cmos/alliance.conf similarity index 100% rename from crlcore/etc/cmos/alliance.conf rename to crlcore/etc/symbolic/cmos/alliance.conf diff --git a/crlcore/etc/cmos/display.conf b/crlcore/etc/symbolic/cmos/display.conf similarity index 100% rename from crlcore/etc/cmos/display.conf rename to crlcore/etc/symbolic/cmos/display.conf diff --git a/crlcore/etc/ispd05/etesian.conf b/crlcore/etc/symbolic/cmos/etesian.conf similarity index 100% rename from crlcore/etc/ispd05/etesian.conf rename to crlcore/etc/symbolic/cmos/etesian.conf diff --git a/crlcore/etc/cmos/hMetis.conf b/crlcore/etc/symbolic/cmos/hMetis.conf similarity index 100% rename from crlcore/etc/cmos/hMetis.conf rename to crlcore/etc/symbolic/cmos/hMetis.conf diff --git a/crlcore/etc/cmos/kite.conf b/crlcore/etc/symbolic/cmos/kite.conf similarity index 100% rename from crlcore/etc/cmos/kite.conf rename to crlcore/etc/symbolic/cmos/kite.conf diff --git a/crlcore/etc/cmos/mauka.conf b/crlcore/etc/symbolic/cmos/mauka.conf similarity index 100% rename from crlcore/etc/cmos/mauka.conf rename to crlcore/etc/symbolic/cmos/mauka.conf diff --git a/crlcore/etc/cmos/misc.conf b/crlcore/etc/symbolic/cmos/misc.conf similarity index 100% rename from crlcore/etc/cmos/misc.conf rename to crlcore/etc/symbolic/cmos/misc.conf diff --git a/crlcore/etc/cmos/nimbus.conf b/crlcore/etc/symbolic/cmos/nimbus.conf similarity index 100% rename from crlcore/etc/cmos/nimbus.conf rename to crlcore/etc/symbolic/cmos/nimbus.conf diff --git a/crlcore/etc/cmos/patterns.conf b/crlcore/etc/symbolic/cmos/patterns.conf similarity index 100% rename from crlcore/etc/cmos/patterns.conf rename to crlcore/etc/symbolic/cmos/patterns.conf diff --git a/crlcore/etc/cmos/plugins.conf b/crlcore/etc/symbolic/cmos/plugins.conf similarity index 100% rename from crlcore/etc/cmos/plugins.conf rename to crlcore/etc/symbolic/cmos/plugins.conf diff --git a/crlcore/etc/cmos/stratus1.conf b/crlcore/etc/symbolic/cmos/stratus1.conf similarity index 100% rename from crlcore/etc/cmos/stratus1.conf rename to crlcore/etc/symbolic/cmos/stratus1.conf diff --git a/crlcore/etc/cmos/technology.conf b/crlcore/etc/symbolic/cmos/technology.conf similarity index 100% rename from crlcore/etc/cmos/technology.conf rename to crlcore/etc/symbolic/cmos/technology.conf diff --git a/crlcore/etc/ispd05/alliance.conf b/crlcore/etc/symbolic/ispd05/alliance.conf similarity index 100% rename from crlcore/etc/ispd05/alliance.conf rename to crlcore/etc/symbolic/ispd05/alliance.conf diff --git a/crlcore/etc/ispd05/display.conf b/crlcore/etc/symbolic/ispd05/display.conf similarity index 100% rename from crlcore/etc/ispd05/display.conf rename to crlcore/etc/symbolic/ispd05/display.conf diff --git a/crlcore/etc/scmos_deep_018/etesian.conf b/crlcore/etc/symbolic/ispd05/etesian.conf similarity index 100% rename from crlcore/etc/scmos_deep_018/etesian.conf rename to crlcore/etc/symbolic/ispd05/etesian.conf diff --git a/crlcore/etc/ispd05/hMetis.conf b/crlcore/etc/symbolic/ispd05/hMetis.conf similarity index 100% rename from crlcore/etc/ispd05/hMetis.conf rename to crlcore/etc/symbolic/ispd05/hMetis.conf diff --git a/crlcore/etc/ispd05/kite.conf b/crlcore/etc/symbolic/ispd05/kite.conf similarity index 100% rename from crlcore/etc/ispd05/kite.conf rename to crlcore/etc/symbolic/ispd05/kite.conf diff --git a/crlcore/etc/ispd05/mauka.conf b/crlcore/etc/symbolic/ispd05/mauka.conf similarity index 100% rename from crlcore/etc/ispd05/mauka.conf rename to crlcore/etc/symbolic/ispd05/mauka.conf diff --git a/crlcore/etc/ispd05/misc.conf b/crlcore/etc/symbolic/ispd05/misc.conf similarity index 100% rename from crlcore/etc/ispd05/misc.conf rename to crlcore/etc/symbolic/ispd05/misc.conf diff --git a/crlcore/etc/ispd05/nimbus.conf b/crlcore/etc/symbolic/ispd05/nimbus.conf similarity index 100% rename from crlcore/etc/ispd05/nimbus.conf rename to crlcore/etc/symbolic/ispd05/nimbus.conf diff --git a/crlcore/etc/ispd05/patterns.conf b/crlcore/etc/symbolic/ispd05/patterns.conf similarity index 100% rename from crlcore/etc/ispd05/patterns.conf rename to crlcore/etc/symbolic/ispd05/patterns.conf diff --git a/crlcore/etc/ispd05/plugins.conf b/crlcore/etc/symbolic/ispd05/plugins.conf similarity index 100% rename from crlcore/etc/ispd05/plugins.conf rename to crlcore/etc/symbolic/ispd05/plugins.conf diff --git a/crlcore/etc/ispd05/stratus1.conf b/crlcore/etc/symbolic/ispd05/stratus1.conf similarity index 100% rename from crlcore/etc/ispd05/stratus1.conf rename to crlcore/etc/symbolic/ispd05/stratus1.conf diff --git a/crlcore/etc/ispd05/technology.conf b/crlcore/etc/symbolic/ispd05/technology.conf similarity index 100% rename from crlcore/etc/ispd05/technology.conf rename to crlcore/etc/symbolic/ispd05/technology.conf diff --git a/crlcore/etc/vsc200/alliance.conf b/crlcore/etc/symbolic/vsc200/alliance.conf similarity index 100% rename from crlcore/etc/vsc200/alliance.conf rename to crlcore/etc/symbolic/vsc200/alliance.conf diff --git a/crlcore/etc/vsc200/display.conf b/crlcore/etc/symbolic/vsc200/display.conf similarity index 100% rename from crlcore/etc/vsc200/display.conf rename to crlcore/etc/symbolic/vsc200/display.conf diff --git a/crlcore/etc/vsc200/etesian.conf b/crlcore/etc/symbolic/vsc200/etesian.conf similarity index 100% rename from crlcore/etc/vsc200/etesian.conf rename to crlcore/etc/symbolic/vsc200/etesian.conf diff --git a/crlcore/etc/vsc200/hMetis.conf b/crlcore/etc/symbolic/vsc200/hMetis.conf similarity index 100% rename from crlcore/etc/vsc200/hMetis.conf rename to crlcore/etc/symbolic/vsc200/hMetis.conf diff --git a/crlcore/etc/vsc200/kite.conf b/crlcore/etc/symbolic/vsc200/kite.conf similarity index 100% rename from crlcore/etc/vsc200/kite.conf rename to crlcore/etc/symbolic/vsc200/kite.conf diff --git a/crlcore/etc/vsc200/mauka.conf b/crlcore/etc/symbolic/vsc200/mauka.conf similarity index 100% rename from crlcore/etc/vsc200/mauka.conf rename to crlcore/etc/symbolic/vsc200/mauka.conf diff --git a/crlcore/etc/vsc200/misc.conf b/crlcore/etc/symbolic/vsc200/misc.conf similarity index 100% rename from crlcore/etc/vsc200/misc.conf rename to crlcore/etc/symbolic/vsc200/misc.conf diff --git a/crlcore/etc/vsc200/nimbus.conf b/crlcore/etc/symbolic/vsc200/nimbus.conf similarity index 100% rename from crlcore/etc/vsc200/nimbus.conf rename to crlcore/etc/symbolic/vsc200/nimbus.conf diff --git a/crlcore/etc/vsc200/patterns.conf b/crlcore/etc/symbolic/vsc200/patterns.conf similarity index 100% rename from crlcore/etc/vsc200/patterns.conf rename to crlcore/etc/symbolic/vsc200/patterns.conf diff --git a/crlcore/etc/vsc200/plugins.conf b/crlcore/etc/symbolic/vsc200/plugins.conf similarity index 100% rename from crlcore/etc/vsc200/plugins.conf rename to crlcore/etc/symbolic/vsc200/plugins.conf diff --git a/crlcore/etc/vsc200/stratus1.conf b/crlcore/etc/symbolic/vsc200/stratus1.conf similarity index 100% rename from crlcore/etc/vsc200/stratus1.conf rename to crlcore/etc/symbolic/vsc200/stratus1.conf diff --git a/crlcore/etc/vsc200/technology.conf b/crlcore/etc/symbolic/vsc200/technology.conf similarity index 100% rename from crlcore/etc/vsc200/technology.conf rename to crlcore/etc/symbolic/vsc200/technology.conf diff --git a/hurricane/src/hurricane/DataBase.cpp b/hurricane/src/hurricane/DataBase.cpp index cc070d68..e417af5d 100644 --- a/hurricane/src/hurricane/DataBase.cpp +++ b/hurricane/src/hurricane/DataBase.cpp @@ -253,6 +253,26 @@ Cell* DataBase::getCell(string rpath, unsigned int flags) } +Cell* DataBase::getCell(string name) +// ********************************* +{ + vector libStack; + libStack.push_back( getRootLibrary() ); + + while ( not libStack.empty() ) { + Library* library = libStack.back(); + libStack.pop_back(); + + Cell* cell = library->getCell( name ); + if (cell) return cell; + + for ( Library* child : library->getLibraries() ) + libStack.push_back( child ); + } + + return NULL; +} + void DataBase::_toJson(JsonWriter* w) const // **************************************** { diff --git a/hurricane/src/hurricane/Technology.cpp b/hurricane/src/hurricane/Technology.cpp index 1f7aa05a..6627fc1d 100644 --- a/hurricane/src/hurricane/Technology.cpp +++ b/hurricane/src/hurricane/Technology.cpp @@ -290,9 +290,11 @@ ViaLayers Technology::getViaLayers() const Layer* Technology::getNthMetal ( int nth ) const - { - return getLayer ( _metalMask.nthbit(nth) ); - } + { return getLayer ( _metalMask.nthbit(nth) ); } + + + Layer* Technology::getNthCut ( int nth ) const + { return getLayer ( _cutMask.nthbit(nth) ); } void Technology::_onDbuChange ( float scale ) diff --git a/hurricane/src/hurricane/hurricane/DataBase.h b/hurricane/src/hurricane/hurricane/DataBase.h index bbdf9337..ef170e9e 100644 --- a/hurricane/src/hurricane/hurricane/DataBase.h +++ b/hurricane/src/hurricane/hurricane/DataBase.h @@ -86,6 +86,7 @@ class DataBase : public DBo { public: Library* getRootLibrary() const {return _rootLibrary;}; public: Library* getLibrary(string,unsigned int flags); public: Cell* getCell(string, unsigned int flags); + public: Cell* getCell(string); public: static DataBase* getDB(); }; diff --git a/hurricane/src/hurricane/hurricane/Mask.h b/hurricane/src/hurricane/hurricane/Mask.h index 1401d6a3..5cb37938 100644 --- a/hurricane/src/hurricane/hurricane/Mask.h +++ b/hurricane/src/hurricane/hurricane/Mask.h @@ -109,10 +109,11 @@ namespace Hurricane { template inline Mask Mask::nthbit ( unsigned int nth ) const { + ++nth; IntType select = 1; for ( ; select ; select=select<<1 ) { - if ( _mask & select ) nth--; - if ( !nth ) break; + if (_mask & select) nth--; + if (not nth) break; } return select; } diff --git a/hurricane/src/hurricane/hurricane/Technology.h b/hurricane/src/hurricane/hurricane/Technology.h index 53313504..618a08c8 100644 --- a/hurricane/src/hurricane/hurricane/Technology.h +++ b/hurricane/src/hurricane/hurricane/Technology.h @@ -97,6 +97,7 @@ namespace Hurricane { Layer* getCutBelow ( const Layer*, bool useWorking=true ) const; Layer* getViaBetween ( const Layer*, const Layer* ) const; Layer* getNthMetal ( int ) const; + Layer* getNthCut ( int ) const; // Updators. void setName ( const Name& ); bool setWorkingLayer ( const Name& ); diff --git a/hurricane/src/isobar/PyDataBase.cpp b/hurricane/src/isobar/PyDataBase.cpp index 4fdad060..71d89bf8 100644 --- a/hurricane/src/isobar/PyDataBase.cpp +++ b/hurricane/src/isobar/PyDataBase.cpp @@ -17,6 +17,7 @@ #include "hurricane/isobar/PyDataBase.h" #include "hurricane/isobar/PyTechnology.h" #include "hurricane/isobar/PyLibrary.h" +#include "hurricane/isobar/PyCell.h" namespace Isobar { @@ -96,6 +97,26 @@ extern "C" { return PyLibrary_Link(library); } + + static PyObject* PyDataBase_getCell ( PyDataBase* self, PyObject* args ) { + cdebug_log(20,0) << "PyDataBase_getCell ()" << endl; + + Cell* cell = NULL; + + HTRY + METHOD_HEAD("DataBase.getCell()") + char* name = NULL; + if (PyArg_ParseTuple(args,"s:DataBase.getCell", &name)) { + cell = db->getCell( name ); + } else { + PyErr_SetString ( ConstructorError, "invalid number of parameters for DataBase.getCell." ); + return NULL; + } + HCATCH + + return PyCell_Link( cell ); + } + // Standart Accessors (Attributes). // Standart Destroy (Attribute). @@ -110,8 +131,9 @@ extern "C" { , "Create the DataBase (only the first call created it)" } , { "getDB" , (PyCFunction)PyDataBase_getDB , METH_NOARGS|METH_STATIC , "Get the DataBase" } - , { "getTechnology" , (PyCFunction)PyDataBase_getTechnology , METH_NOARGS, "Return the Technology" } - , { "getRootLibrary", (PyCFunction)PyDataBase_getRootLibrary, METH_NOARGS, "Return the root library" } + , { "getTechnology" , (PyCFunction)PyDataBase_getTechnology , METH_NOARGS , "Return the Technology" } + , { "getRootLibrary", (PyCFunction)PyDataBase_getRootLibrary, METH_NOARGS , "Return the root library" } + , { "getCell" , (PyCFunction)PyDataBase_getCell , METH_VARARGS, "Return a Cell" } , { "destroy" , (PyCFunction)PyDataBase_destroy , METH_NOARGS , "Destroy associated hurricane object The python object remains." } , {NULL, NULL, 0, NULL} /* sentinel */ diff --git a/hurricane/src/isobar/PyDbU.cpp b/hurricane/src/isobar/PyDbU.cpp index f31799ba..eef41632 100644 --- a/hurricane/src/isobar/PyDbU.cpp +++ b/hurricane/src/isobar/PyDbU.cpp @@ -224,15 +224,15 @@ extern "C" { extern PyObject* PyDbU_setPhysicalsPerGrid ( PyObject* , PyObject* args ) { - double gridsPerLambda = 0.0; - unsigned int power = 0; + double physicalsPerGrid = 0.0; + unsigned int power = 0; HTRY - if (not PyArg_ParseTuple(args,"di:DbU.setPhysicalsPerGrid", &gridsPerLambda, &power) ) { + if (not PyArg_ParseTuple(args,"di:DbU.setPhysicalsPerGrid", &physicalsPerGrid, &power) ) { PyErr_SetString ( ConstructorError, "DbU.setPhysicalsPerGrid(): Invalid/bad type parameters ." ); return NULL; } - DbU::setPhysicalsPerGrid(gridsPerLambda,(DbU::UnitPower)power); + DbU::setPhysicalsPerGrid(physicalsPerGrid,(DbU::UnitPower)power); HCATCH Py_RETURN_NONE; diff --git a/hurricane/src/viewer/CellWidget.cpp b/hurricane/src/viewer/CellWidget.cpp index ce5038ea..2ab28095 100644 --- a/hurricane/src/viewer/CellWidget.cpp +++ b/hurricane/src/viewer/CellWidget.cpp @@ -1046,7 +1046,7 @@ namespace Hurricane { // Class : "Hurricane::CellWidget". - int CellWidget::_initialSide = 250; + int CellWidget::_initialSide = 500; CellWidget::CellWidget ( QWidget* parent ) @@ -1088,8 +1088,10 @@ namespace Hurricane { QFont font = Graphics::getNormalFont(); _textFontHeight = QFontMetrics(font).ascent(); - if (Graphics::isHighDpi()) resize( Graphics::toHighDpi(_initialSide) - , Graphics::toHighDpi(_initialSide) ); + if (Graphics::isHighDpi()) { + resize( Graphics::toHighDpi(_initialSide) + , Graphics::toHighDpi(_initialSide) ); + } }