Added support for extra resistor rules in Hurricane::Technology.

* New: In BasicLayer::Material, added "info" kind of material for layers
    that are only informationals (i.e. not real GDS one). Created to
    store geometric combination of layers, this is a temporary solution.
      Have to define a clearer semantic for that.
* New: In CRL/helpers/AnalogTechno.py, new "Count" type for count numbers
    that must not go through DbU::Unit converter. They are plain integers,
    but stored in DbU::Unit (keeping track of that semantic is left to
    the user).
This commit is contained in:
Jean-Paul Chaput 2019-11-13 16:09:38 +01:00
parent 88235dc3a4
commit 1e4b8b4647
4 changed files with 14 additions and 6 deletions

View File

@ -21,7 +21,7 @@ import Hurricane
from Hurricane import DbU
from Hurricane import DataBase
from Hurricane import Layer
from helpers.io import ErrorMessage
from helpers.io import ErrorMessage, catch
from helpers import Debug
@ -32,9 +32,12 @@ Length = 0x0001
Area = 0x0002
Asymmetric = 0x0004
Unit = 0x0008
Count = 0x0010
def valueToDbU ( value, unit, lengthType ):
if lengthType & Count: return value
length = DbU.fromPhysical( value, unit )
if lengthType & Length: return length
@ -105,9 +108,10 @@ def _loadAnalogTechno ( techno, ruleTable ):
, entry[5]
)
except Exception, e:
e = ErrorMessage( e )
e.addMessage( 'In %s:<analogTechnologyTable> at index %d.' % (technoFile,entryNo) )
print e
catch( e )
print ErrorMessage( 1, [ 'In %s:' % technoFile
, '"analogTechnologyTable" at index %d.' % entryNo ] )
return

View File

@ -627,7 +627,8 @@ namespace Hurricane {
PhysicalRules& rules = ilayer->second;
PhysicalRule search ( ruleName, 0, "" );
if (rules.find(&search) != rules.end()) {
throw Error( "Technology::addPhysicalRule(): Attempt to redefine rule \"%s\"." , ruleNameStr.c_str() );
throw Error( "Technology::addPhysicalRule(): Attempt to redefine rule \"%s\" for layer \"%s\"."
, ruleNameStr.c_str(), layerStr.c_str() );
}
rules.insert( new PhysicalRule(ruleName,value,reference) );

View File

@ -59,6 +59,7 @@ namespace Hurricane {
, cut
, metal
, blockage
, info
, other
};
// Constructors.
@ -181,9 +182,10 @@ inline std::string getString<const Hurricane::BasicLayer::Material::Code*>
case Hurricane::BasicLayer::Material::cut: return "cut";
case Hurricane::BasicLayer::Material::metal: return "metal";
case Hurricane::BasicLayer::Material::blockage: return "blockage";
case Hurricane::BasicLayer::Material::info: return "info";
case Hurricane::BasicLayer::Material::other: return "other";
}
return "abnormal";
return "undefined";
}

View File

@ -195,6 +195,7 @@ extern "C" {
LoadObjectConstant(PyTypeMaterial.tp_dict,BasicLayer::Material::cut ,"cut" );
LoadObjectConstant(PyTypeMaterial.tp_dict,BasicLayer::Material::metal ,"metal" );
LoadObjectConstant(PyTypeMaterial.tp_dict,BasicLayer::Material::blockage,"blockage");
LoadObjectConstant(PyTypeMaterial.tp_dict,BasicLayer::Material::info ,"info" );
LoadObjectConstant(PyTypeMaterial.tp_dict,BasicLayer::Material::other ,"other" );
}