com.sun.electric.technology
Class Technology

java.lang.Object
  extended by com.sun.electric.technology.Technology
All Implemented Interfaces:
java.io.Serializable, java.lang.Comparable<Technology>
Direct Known Subclasses:
Artwork, EFIDO, FPGA, GEM, Generic, MoCMOS, PCB, RCMOS, Schematics

public class Technology
extends java.lang.Object
implements java.lang.Comparable<Technology>, java.io.Serializable

Technology is the base class for all of the specific technologies in Electric. It is organized into two main areas: nodes and arcs. Both nodes and arcs are composed of Layers.

Subclasses of Technology usually start by defining the Layers (such as Metal-1, Metal-2, etc.) Then the ArcProto objects are created, built entirely from Layers. Next PrimitiveNode objects are created, and they have Layers as well as connectivity to the ArcProtos. The Technology concludes with miscellaneous data assignments of technology-wide information.

Here are the nodes in a sample CMOS technology. Note that there are two types of transistors and diffusion contacts, one for Well and one for Substrate. Each layer that can exist as a wire must have a pin node (in this case, metal, polysilicon, and two flavors of diffusion. Note that there are pure-layer nodes at the bottom which allow arbitrary geometry to be constructed.

The Schematic technology has some unusual features.

Conceptually, a Technology has 3 types of information:

Author:
Steven M. Rubin
See Also:
Serialized Form

Nested Class Summary
protected static class Technology.ArcLayer
          Defines a single layer of a ArcProto.
static class Technology.Distance
           
static interface Technology.DistanceContext
           
static class Technology.DistanceRule
           
static class Technology.MultiCutData
          Class MultiCutData determines the locations of cuts in a multi-cut contact node.
static class Technology.NodeLayer
          Defines a single layer of a PrimitiveNode.
 class Technology.SizeCorrector
           
static class Technology.TechPoint
          Defines a point in space that is relative to a NodeInst's bounds.
static class Technology.TechSetting
          Class to extend prefs so that changes to MOSIS CMOS options will update the display.
 
Field Summary
protected  DRCRules cachedRules
          Cached rules for the technology.
static Version DISK_VERSION_1
          Jelib writes base sizes since this Electric Version
static Version DISK_VERSION_2
          Jelib writes oversize over standard primitive since this Electric Version
static Technology.DistanceContext EMPTY_CONTEXT
           
static ImmutableArrayList<Technology> EMPTY_LIST
           
protected  java.lang.Object[][] factoryNodeGroups
          Default element groups for the component menu
protected  java.util.List<Foundry> foundries
          static list of all Manufacturers in Electric
static com.sun.electric.technology.Technology.LayerHeight LAYERS_BY_HEIGHT
           
static com.sun.electric.technology.Technology.LayerHeight LAYERS_BY_HEIGHT_LIFT_CONTACTS
           
static com.sun.electric.technology.Technology.LayerZValueSorting LAYERS_BY_ZVALUE
           
static int N_TYPE
          indicates n-type objects.
protected  java.lang.Object[][] nodeGroups
          To group elements for the component menu
static Technology[] NULL_ARRAY
           
protected  java.util.HashMap<java.lang.String,ArcProto> oldArcNames
          Old names of arcs
protected  java.util.HashMap<java.lang.String,PrimitiveNode> oldNodeNames
          Old names of primitive nodes
static int P_TYPE
          indicates p-type objects.
static java.lang.String SPECIALMENUCELL
           
static java.lang.String SPECIALMENUEXPORT
           
static java.lang.String SPECIALMENUHIGH
           
static java.lang.String SPECIALMENUMISC
           
static java.lang.String SPECIALMENUPORT
           
static java.lang.String SPECIALMENUPURE
           
static java.lang.String SPECIALMENUSPICE
           
static java.lang.String SPECIALMENUTEXT
           
protected static Artwork sysArtwork
           
protected static FPGA sysFPGA
           
protected static Generic sysGeneric
           
protected static Schematics sysSchematics
           
static Variable.Key TECH_TMPVAR
          Temporary variable for holding names
static Variable.Key TRANS_CONTACT
          key of Variable for saving scalable transistor contact information.
protected  Xml.Technology xmlTech
          Xml representation of this Technology
 
Constructor Summary
protected Technology(Generic generic, java.lang.String techName)
          Constructs a Technology.
protected Technology(Generic generic, java.lang.String techName, Foundry.Type defaultFoundry, int defaultNumMetals)
          Constructs a Technology.
  Technology(Generic generic, Xml.Technology t)
           
protected Technology(IdManager idManager, Generic generic, java.lang.String techName, Foundry.Type defaultFoundry, int defaultNumMetals)
          Constructs a Technology.
 
Method Summary
 void addArcProto(ArcProto ap)
          Method to add a new ArcProto to this Technology.
 void addLayer(Layer layer)
          Method to add a new Layer to this Technology.
 void addNodeProto(PrimitiveNode np)
          Method to add a new PrimitiveNode to this Technology.
static void cacheTransparentLayerColors()
          Method to reload the color map when the layer color preferences have changed.
 boolean cleanUnusedNodesInLibrary(NodeInst ni, java.util.List<Geometric> list)
          Method to clean libraries with unused primitive nodes.
 int compareTo(Technology that)
          Compares Technologies by their names.
protected  Poly[] computeShapeOfNode(NodeInst ni, boolean electrical, boolean reasonable, Technology.NodeLayer[] primLayers, Layer layerOverride)
          Returns the polygons that describe node "ni", given a set of NodeLayer objects to use.
 ArcProto convertOldArcName(java.lang.String name)
          Method to convert old primitive arc names to their proper ArcProtos.
 PrimitiveNode convertOldNodeName(java.lang.String name)
          Method to convert old primitive node names to their proper NodeProtos.
 PrimitivePort convertOldPortName(java.lang.String portName, PrimitiveNode np)
          Method to convert old primitive port names to their proper PortProtos.
 java.util.Map<Setting,java.lang.Object> convertOldVariable(java.lang.String varName, java.lang.Object value)
          Method to convert any old-style variable information to the new options.
 void dump(java.io.PrintWriter out)
           
protected  void dumpExtraProjectSettings(java.io.PrintWriter out)
           
 java.lang.Object[][] filterNodeGroups(java.lang.Object[][] oldNG)
          Method to remove component menu entries that are impossible because of inaccessible objects.
 ArcProto findArcProto(java.lang.String name)
          Returns the ArcProto in this technology with a particular name.
protected  Foundry findFoundry(java.lang.String name)
          Find the Foundry in this technology with a particular name.
 Layer findLayer(java.lang.String layerName)
          Method to find a Layer with a given name.
 Layer findLayerFromFunction(Layer.Function fun)
          Method to find the Layer in this Technology that matches a function description.
 PrimitiveNode findNodeProto(java.lang.String name)
          Returns the PrimitiveNode in this technology with a particular name.
static Technology findTechnology(java.lang.String name)
          Find the Technology with a particular name.
static Technology findTechnology(TechId techId)
          Find the Technology with a particular TechId.
 ArcProto getArcProto(ArcProtoId arcProtoId)
          Returns the ArcProto in this technology with a particular Id
 java.util.Iterator<ArcProto> getArcs()
          Returns an Iterator on the ArcProto objects in this technology.
 java.util.Collection<ArcProto> getArcsCollection()
          Retusn a collection of the ArcProto objects in this technology
 DRCRules getCachedRules()
          Method to retrieve cached rules
static Technology getCMOS90Technology()
          Method to return the CMOS 90 nanometer technology.
 java.awt.Color[] getColorMap()
          Returns the color map for transparent layers in this technology.
static java.awt.Color[] getColorMap(java.awt.Color[] layers, int numLayers)
           
static Technology getCurrent()
          Returns the current Technology.
 java.lang.Object[][] getDefaultNodesGrouped()
          Method to construct a default group of elements for the palette.
 double getDiffAlpha()
          Method to get the diffusion to gate capacitance ratio for Logical Effort.
 Setting getDiffAlphaSetting()
          Returns project Setting to tell the diffusion to gate capacitance ratio for Logical Effort.
 java.awt.Color[] getFactoryColorMap()
           
 XMLRules getFactoryDesignRules()
          Method to get the factory design rules.
 java.util.Iterator<Foundry> getFoundries()
          Get an iterator over all of the Manufacturers.
 double getGateCapacitance()
          Method to get the Gate Capacitance for Logical Effort.
 Setting getGateCapacitanceSetting()
          Returns project Setting to tell the Gate Capacitance for Logical Effort.
 Setting getGateIncludedSetting()
          Returns project Setting to tell gate inclusion.
 double getGateLengthSubtraction()
          Gets the gate length subtraction for this Technology (in microns).
 Setting getGateLengthSubtractionSetting()
          Returns project Setting to tell the gate length subtraction for this Technology (in microns) This is used because there is sometimes a subtracted offset from the layout to the drawn length.
 java.util.Map<Layer,java.lang.String> getGDSLayers()
          Method to return the map from Layers of this Technology to their GDS names in current foundry.
 Setting getGroundNetIncludedSetting()
          Returns project Setting to tell ground network inclusion.
 TechId getId()
          Returns the TechId of this technology.
 int getIndex()
          Returns the 0-based index of this Technology.
 Layer getLayer(int index)
          Returns a specific Layer number in this Technology.
static Layer getLayerFromOverride(java.lang.String override, int startPos, char endChr, Technology tech)
           
 java.util.Iterator<Layer> getLayers()
          Returns an Iterator on the Layers in this Technology.
 java.util.List<Layer> getLayersSortedByHeight()
          Method to make a sorted list of layers in this Technology.
 java.util.List<Layer> getLayersSortedByZValue()
          Method to make a sorted list of layers in this Technology based on their Z value, a preference stored per layer.
 double getMaxSeriesResistance()
          Get the maximum series resistance for layout extraction for this Technology.
 Setting getMaxSeriesResistanceSetting()
          Returns project Setting to tell the maximum series resistance for layout extraction for this Technology.
 double getMinCapacitance()
          Returns the minimum capacitance of this Technology.
 Setting getMinCapacitanceSetting()
          Returns project Setting to tell the minimum capacitance of this Technology.
 double getMinResistance()
          Returns the minimum resistance of this Technology.
 Setting getMinResistanceSetting()
          Returns project Setting to tell the minimum resistance of this Technology.
static Technology getMocmosTechnology()
          Method to return the MOSIS CMOS technology.
 Technology.MultiCutData getMultiCutData(NodeInst ni)
          Method to get a multi-cut structure associated to a NodeInst representing a Multiple-cut contact.
 ERectangle getNodeInstBaseRectangle(NodeInst ni)
          Method to get the base (highlight) ERectangle associated with a NodeInst in this PrimitiveNode.
 java.util.Iterator<PrimitiveNode> getNodes()
          Returns an Iterator on the PrimitiveNode objects in this technology.
 java.util.Collection<PrimitiveNode> getNodesCollection()
          Retusn a collection of the PrimitiveNode objects in this technology
 java.lang.Object[][] getNodesGrouped(Cell curCell)
          Method to retrieve correct group of elements for the palette.
 java.lang.String getNodesGroupedXML()
          Method to get the group of elements for the component menu.
 java.util.List<PrimitiveNode> getNodesSortedByName()
          Method to return a sorted list of nodes in the technology
 int getNumArcs()
          Returns the number of ArcProto objects in this technology.
 int getNumLayers()
          Returns the number of Layers in this Technology.
 int getNumMetals()
          Dummy method overridden by implementing technologies to define the number of metal layers in the technology.
 Setting getNumMetalsSetting()
          Returns project Setting to tell the number of metal layers in the MoCMOS technology.
 int getNumNodes()
          Returns the number of PrimitiveNodes objects in this technology.
 int getNumTransparentLayers()
          Returns the number of transparent layers in this technology.
 java.util.Map<java.lang.String,ArcProto> getOldArcNames()
           
 java.util.Map<java.lang.String,PrimitiveNode> getOldNodeNames()
           
 void getPrefComponentMenu()
          Method to see if there are component menu preferences.
 java.lang.String getPrefFoundry()
          Method to get foundry in Tech Palette.
 Setting getPrefFoundrySetting()
          Returns project Setting to tell foundry for DRC rules.
 PrimitiveNode.Function getPrimitiveFunction(PrimitiveNode pn, int techBits)
          Method to return the pure "NodeProto Function" a PrimitiveNode in this Technology.
 PrimitiveNode getPrimitiveNode(PrimitiveNodeId primitiveNodeId)
          Returns the PrimitiveNode in this technology with a particular Id
 ProjSettingsNode getProjectSettings()
           
 PrimitiveNodeSize getResistorSize(NodeInst ni, VarContext context)
          Method to return the size of a resistor-type NodeInst in this Technology.
 double getResolution()
          Method to retrieve the resolution associated to the technology.
protected  java.util.Map<java.lang.String,java.lang.String> getRuleAliases()
           
static java.lang.StringBuffer getRuleDifferences(DRCRules origRules, DRCRules newRules)
          Method to compare a Rules set with the "factory" set and construct an override string.
 int getRuleNodeIndex(java.lang.String name)
          Method to determine index of layer or node involved in the rule
protected  java.lang.String getRuleSuffix()
           
 java.util.List<Layer> getSavedLayerOrder()
          Method to return a list of layers that are saved for this Technology.
 double getScale()
          Returns the scale for this Technology.
 Setting getScaleSetting()
          Returns project Setting to tell the scale of this technology.
 java.lang.String getScaleVariableName()
          Method to obtain the Variable name for scaling this Technology.
 Foundry getSelectedFoundry()
          Method to get the foundry index associated with this technology.
protected  void getShapeOfArc(AbstractShapeBuilder b, ImmutableArcInst a)
          Fill the polygons that describe arc "a".
protected  void getShapeOfArc(AbstractShapeBuilder b, ImmutableArcInst a, Layer layerOverride)
          Fill the polygons that describe arc "a".
 Poly[] getShapeOfArc(ArcInst ai)
          Returns the polygons that describe arc "ai".
 Poly[] getShapeOfArc(ArcInst ai, Layer.Function.Set onlyTheseLayers)
          Returns the polygons that describe arc "ai".
 Poly[] getShapeOfNode(NodeInst ni)
          Returns the polygons that describe node "ni".
 Poly[] getShapeOfNode(NodeInst ni, boolean electrical, boolean reasonable, Layer.Function.Set onlyTheseLayers)
          Returns the polygons that describe node "ni".
protected  Poly[] getShapeOfNode(NodeInst ni, boolean electrical, boolean reasonable, Technology.NodeLayer[] primLayers, Layer layerOverride)
          Returns the polygons that describe node "ni", given a set of NodeLayer objects to use.
 Poly getShapeOfPort(NodeInst ni, PrimitivePort pp)
          Returns a polygon that describes a particular port on a NodeInst.
 Poly getShapeOfPort(NodeInst ni, PrimitivePort pp, java.awt.geom.Point2D selectPt)
          Returns a polygon that describes a particular port on a NodeInst.
 Technology.SizeCorrector getSizeCorrector(Version version, java.util.Map<Setting,java.lang.Object> projectSettings, boolean isJelib, boolean keepExtendOverMin)
           
static java.util.List<java.lang.String> getSoftTechnologies()
          Method to get an array of additional technologies that should be added to Electric.
 double[] getSpacingDistances(Poly poly1, Poly poly2)
          This is the most basic function to determine the widest wire and the parallel distance that run along them.
 java.lang.String[] getSpiceHeaderLevel1()
          Method to return the level-1 header cards for SPICE in this Technology.
 java.lang.String[] getSpiceHeaderLevel2()
          Method to return the level-2 header cards for SPICE in this Technology.
 java.lang.String[] getSpiceHeaderLevel3()
          Method to return the level-3 header cards for SPICE in this Technology.
 java.lang.String getTechDesc()
          Returns the full description of this Technology.
 java.lang.String getTechName()
          Returns the name of this technology.
static java.util.Iterator<Technology> getTechnologies()
          Get an iterator over all of the Technologies.
static Pref.Group getTechnologyPreferences()
          Method to return the Pref object associated with all Technologies.
 java.lang.String getTechShortName()
          Returns the short name of this technology.
 double getTransistorActiveLength(NodeInst ni)
          Method to return length of active reqion.
 PortInst getTransistorAltGatePort(NodeInst ni)
          Method to return the other gate PortInst for this transistor NodeInst.
 PortInst getTransistorBasePort(NodeInst ni)
          Method to return a base PortInst for this transistor NodeInst.
 PortInst getTransistorBiasPort(NodeInst ni)
          Method to return a bias PortInst for this transistor NodeInst.
 PortInst getTransistorCollectorPort(NodeInst ni)
          Method to return a collector PortInst for this transistor NodeInst.
 PortInst getTransistorDrainPort(NodeInst ni)
          Method to return a drain PortInst for this transistor NodeInst.
 PortInst getTransistorEmitterPort(NodeInst ni)
          Method to return a emitter PortInst for this transistor NodeInst.
 PortInst getTransistorGatePort(NodeInst ni)
          Method to return a gate PortInst for this transistor NodeInst.
 TransistorSize getTransistorSize(NodeInst ni, VarContext context)
          Method to return the size of a transistor NodeInst in this Technology.
 PortInst getTransistorSourcePort(NodeInst ni)
          Method to return a source PortInst for this transistor NodeInst.
static Technology getTSMC180Technology()
          Method to return the TSMC 180 nanometer technology.
 double getWireRatio()
          Method to get the wire capacitance ratio for Logical Effort.
 Setting getWireRatioSetting()
          Returns project Setting to tell the wire capacitance ratio for Logical Effort.
 Xml.Technology getXmlTech()
           
static void initAllTechnologies()
          This is called once, at the start of Electric, to initialize the technologies.
 boolean isEasyShape(ImmutableArcInst a, boolean explain)
          Tells if arc can be drawn by simplified algorithm Overidden ins subclasses
 boolean isGateIncluded()
          Returns true if gate is included in resistance calculation.
 boolean isGroundNetIncluded()
          Returns true if ground network is included in parasitics calculation.
 boolean isLayout()
          Returns true if this Technology is a layout technology.
 boolean isMultiCutCase(NodeInst ni)
          Method to decide whether a NodeInst is a multi-cut contact.
 boolean isMultiCutInTechnology(Technology.MultiCutData mcd)
          Method to determine if cut case is considered multi cut It gets overridden by CMOS90
 boolean isNoDirectionalArcs()
          Returns true if this technology does not have directional arcs.
 boolean isNoNegatedArcs()
          Returns true if this technology does not have negated arcs.
 boolean isNonElectrical()
          Returns true if this technology is "non-electrical".
 boolean isNonStandard()
          Returns true if this technology is non-standard.
 boolean isNoPrimitiveNodes()
          Returns true if this technology has no primitives.
 boolean isScaleRelevant()
          Method to tell whether scaling is relevant for this Technology.
 boolean isSchematics()
          Returns true if this Technology is a schematics technology.
 boolean isStaticTechnology()
          Returns true if this technoology is "static" (cannot be deleted).
protected  boolean isUniversalConnectivityPort(PrimitivePort pp)
          Tells if all ArcProtos can connect to the PrimitivePort
 boolean isValidVTPolyRule(DRCTemplate theRule)
          Method to determine if the rule name matches an existing VT Poly rule
protected  void make3d(Xml807.Technology t, Xml807.RuleSet ruleSet)
           
static NodeInst makeNodeInst(NodeProto np)
          Method to create temporary nodes for the palette
static NodeInst makeNodeInst(NodeProto np, PrimitiveNode.Function func, int angle, boolean display, java.lang.String varName, double fontSize)
          Method to create temporary nodes for the palette
protected  void makeRuleSets(Xml807.Technology t)
           
 Xml.Technology makeXml()
          Create Xml structure of this Technology
 Xml807.Technology makeXml807()
          Create Xml structure of this Technology
protected  ArcProto newArcProto(java.lang.String protoName, double lambdaWidthOffset, double defaultWidth, ArcProto.Function function, Technology.ArcLayer... layers)
          Method to create a new ArcProto from the parameters.
protected  void newFoundry(Foundry.Type mode, java.net.URL fileURL, java.lang.String... gdsLayers)
          Method to create a new on this technology.
protected static void printlnBits(java.io.PrintWriter out, java.lang.String[] bitNames, int bits)
           
protected static void printlnSetting(java.io.PrintWriter out, Setting setting)
           
protected  void resizeArcs(XMLRules rules)
           
protected  void resizeXml(XMLRules rules)
           
 boolean sameLayer(Layer layer1, Layer layer2)
          Method to tell whether two layers should be considered equivalent for the purposes of cropping.
protected  void setArcCorrection(Technology.SizeCorrector sc, java.lang.String arcName, double lambdaBaseWidth)
           
 void setCachedRules(DRCRules rules)
          Method to set cached rules
 void setColorMap(java.awt.Color[] map)
          Sets the color map for transparent layers in this technology.
 void setColorMapFromLayers(java.awt.Color[] layers)
          Sets the color map from transparent layers in this technology.
 void setCurrent()
          Set this to be the current Technology The current technology is maintained by the system as a default in situations where a technology cannot be determined.
 void setDefaultOutline(NodeInst ni)
          Method to set default outline information on a NodeInst.
protected  void setFactoryLESettings(double gateCapacitance, double wireRation, double diffAlpha)
           
 void setFactoryParasitics(double minResistance, double minCapacitance)
          Method to set default parasitic values on this Technology.
protected  void setFactoryResolution(double factory)
          Method to set Technology resolution in IO/DRC tools.
protected  void setFactoryScale(double factory, boolean scaleRelevant)
          Sets the factory scale of this technology.
protected  void setFactoryTransparentLayers(java.awt.Color[] layers)
          Sets the color map for transparent layers in this technology.
 void setNodesGrouped(java.lang.Object[][] ng, java.lang.String xml)
          Method to change the group of elements for the component menu.
protected  void setNoDirectionalArcs()
          Sets the technology to have no directional arcs.
protected  void setNoNegatedArcs()
          Sets the technology to have no negated arcs.
protected  void setNonElectrical()
          Sets the technology to be "non-electrical".
protected  void setNonStandard()
          Sets the technology to be non-standard.
 void setNoPrimitiveNodes()
          Sets the technology to have no primitives.
protected  void setNotUsed(int numPolys)
           
 void setNumTransparentLayers(int nl)
          Sets the number of transparent layers in this technology.
 void setPrimitiveFunction(NodeInst ni, PrimitiveNode.Function function)
          Method to set the pure "NodeProto Function" for a primitive NodeInst in this Technology.
 void setPrimitiveNodeSize(NodeInst ni, double width, double length)
          Method to set the size of a transistor NodeInst in this Technology.
 void setResolution(double resolution)
          Method to set the technology resolution.
 void setRuleVariables(DRCRules newRules)
          Method to be called from DRC:setRules
 void setSavedLayerOrder(java.util.List<Layer> layers)
          Method to save a list of layers for this Technology in a preferred order.
static void setSoftTechnologies(java.util.List<java.lang.String> a)
          Method to set an array of additional technologies that should be added to Electric.
 void setSpiceHeaderLevel1(java.lang.String[] lines)
          Method to set the level-1 header cards for SPICE in this Technology.
 void setSpiceHeaderLevel2(java.lang.String[] lines)
          Method to set the level-2 header cards for SPICE in this Technology.
 void setSpiceHeaderLevel3(java.lang.String[] lines)
          Method to set the level-3 header cards for SPICE in this Technology.
 void setState()
          Method to set state of a technology.
protected  void setStaticTechnology()
          Sets the technology to be "static".
 void setTechDesc(java.lang.String techDesc)
          Sets the full description of this Technology.
 void setTechName(java.lang.String techName)
          Sets the name of this technology.
protected  void setTechShortName(java.lang.String techShortName)
          Sets the short name of this technology.
 void setup(EDatabase database)
          Method to initialize a technology.
 java.lang.String toString()
          Returns a printable version of this Technology.
static Technology whatTechnology(NodeProto cell)
          Method to determine the appropriate Technology to use for a Cell.
static Technology whatTechnology(NodeProto cellOrPrim, NodeProto[] nodeProtoList, int startNodeProto, int endNodeProto, ArcProto[] arcProtoList)
          Method to determine the appropriate technology to use for a cell.
protected  java.lang.Object writeReplace()
           
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
 

Field Detail

DISK_VERSION_1

public static final Version DISK_VERSION_1
Jelib writes base sizes since this Electric Version


DISK_VERSION_2

public static final Version DISK_VERSION_2
Jelib writes oversize over standard primitive since this Electric Version


NULL_ARRAY

public static final Technology[] NULL_ARRAY

EMPTY_LIST

public static final ImmutableArrayList<Technology> EMPTY_LIST

TRANS_CONTACT

public static final Variable.Key TRANS_CONTACT
key of Variable for saving scalable transistor contact information.


SPECIALMENUCELL

public static final java.lang.String SPECIALMENUCELL
See Also:
Constant Field Values

SPECIALMENUMISC

public static final java.lang.String SPECIALMENUMISC
See Also:
Constant Field Values

SPECIALMENUPURE

public static final java.lang.String SPECIALMENUPURE
See Also:
Constant Field Values

SPECIALMENUSPICE

public static final java.lang.String SPECIALMENUSPICE
See Also:
Constant Field Values

SPECIALMENUEXPORT

public static final java.lang.String SPECIALMENUEXPORT
See Also:
Constant Field Values

SPECIALMENUTEXT

public static final java.lang.String SPECIALMENUTEXT
See Also:
Constant Field Values

SPECIALMENUHIGH

public static final java.lang.String SPECIALMENUHIGH
See Also:
Constant Field Values

SPECIALMENUPORT

public static final java.lang.String SPECIALMENUPORT
See Also:
Constant Field Values

EMPTY_CONTEXT

public static Technology.DistanceContext EMPTY_CONTEXT

oldNodeNames

protected final java.util.HashMap<java.lang.String,PrimitiveNode> oldNodeNames
Old names of primitive nodes


oldArcNames

protected final java.util.HashMap<java.lang.String,ArcProto> oldArcNames
Old names of arcs


foundries

protected final java.util.List<Foundry> foundries
static list of all Manufacturers in Electric


nodeGroups

protected java.lang.Object[][] nodeGroups
To group elements for the component menu


factoryNodeGroups

protected java.lang.Object[][] factoryNodeGroups
Default element groups for the component menu


N_TYPE

public static final int N_TYPE
indicates n-type objects.

See Also:
Constant Field Values

P_TYPE

public static final int P_TYPE
indicates p-type objects.

See Also:
Constant Field Values

cachedRules

protected DRCRules cachedRules
Cached rules for the technology.


xmlTech

protected Xml.Technology xmlTech
Xml representation of this Technology


sysGeneric

protected static Generic sysGeneric

sysArtwork

protected static Artwork sysArtwork

sysFPGA

protected static FPGA sysFPGA

sysSchematics

protected static Schematics sysSchematics

LAYERS_BY_HEIGHT

public static final com.sun.electric.technology.Technology.LayerHeight LAYERS_BY_HEIGHT

LAYERS_BY_HEIGHT_LIFT_CONTACTS

public static final com.sun.electric.technology.Technology.LayerHeight LAYERS_BY_HEIGHT_LIFT_CONTACTS

LAYERS_BY_ZVALUE

public static final com.sun.electric.technology.Technology.LayerZValueSorting LAYERS_BY_ZVALUE

TECH_TMPVAR

public static final Variable.Key TECH_TMPVAR
Temporary variable for holding names

Constructor Detail

Technology

protected Technology(Generic generic,
                     java.lang.String techName)
Constructs a Technology. This should not be called directly, but instead is invoked through each subclass's factory.


Technology

protected Technology(Generic generic,
                     java.lang.String techName,
                     Foundry.Type defaultFoundry,
                     int defaultNumMetals)
Constructs a Technology. This should not be called directly, but instead is invoked through each subclass's factory.


Technology

protected Technology(IdManager idManager,
                     Generic generic,
                     java.lang.String techName,
                     Foundry.Type defaultFoundry,
                     int defaultNumMetals)
Constructs a Technology. This should not be called directly, but instead is invoked through each subclass's factory.


Technology

public Technology(Generic generic,
                  Xml.Technology t)
Method Detail

getSizeCorrector

public Technology.SizeCorrector getSizeCorrector(Version version,
                                                 java.util.Map<Setting,java.lang.Object> projectSettings,
                                                 boolean isJelib,
                                                 boolean keepExtendOverMin)

setArcCorrection

protected void setArcCorrection(Technology.SizeCorrector sc,
                                java.lang.String arcName,
                                double lambdaBaseWidth)

writeReplace

protected java.lang.Object writeReplace()

getXmlTech

public Xml.Technology getXmlTech()

resizeXml

protected void resizeXml(XMLRules rules)

initAllTechnologies

public static void initAllTechnologies()
This is called once, at the start of Electric, to initialize the technologies. Because of Java's "lazy evaluation", the only way to force the technology constructors to fire and build a proper list of technologies, is to call each class. So, each technology is listed here. If a new technology is created, this must be added to this list.


getSoftTechnologies

public static java.util.List<java.lang.String> getSoftTechnologies()
Method to get an array of additional technologies that should be added to Electric. These added technologies are XML files, and the list is the path to those files.

Returns:
an array of additional technologies that should be added to Electric.

setSoftTechnologies

public static void setSoftTechnologies(java.util.List<java.lang.String> a)
Method to set an array of additional technologies that should be added to Electric. These added technologies are XML files, and the list is the path to those files.

Parameters:
a - an array of additional technologies that should be added to Electric.

getMocmosTechnology

public static Technology getMocmosTechnology()
Method to return the MOSIS CMOS technology.

Returns:
the MOSIS CMOS technology object.

getTSMC180Technology

public static Technology getTSMC180Technology()
Method to return the TSMC 180 nanometer technology. Since the technology is a "plugin" and not distributed universally, it may not exist.

Returns:
the TSMC180 technology object (null if it does not exist).

getCMOS90Technology

public static Technology getCMOS90Technology()
Method to return the CMOS 90 nanometer technology. Since the technology is a "plugin" and not distributed universally, it may not exist.

Returns:
the CMOS90 technology object (null if it does not exist).

setup

public void setup(EDatabase database)
Method to initialize a technology. Calls the technology's specific "init()" method (if any). Also sets up mappings from pseudo-layers to real layers.


setState

public void setState()
Method to set state of a technology. It gets overridden by individual technologies.


setNotUsed

protected void setNotUsed(int numPolys)

getCurrent

public static Technology getCurrent()
Returns the current Technology.

Returns:
the current Technology. The current technology is maintained by the system as a default in situations where a technology cannot be determined.

setCurrent

public void setCurrent()
Set this to be the current Technology The current technology is maintained by the system as a default in situations where a technology cannot be determined.


findTechnology

public static Technology findTechnology(java.lang.String name)
Find the Technology with a particular name.

Parameters:
name - the name of the desired Technology
Returns:
the Technology with the same name, or null if no Technology matches.

findTechnology

public static Technology findTechnology(TechId techId)
Find the Technology with a particular TechId.

Parameters:
techId - the TechId of the desired Technology
Returns:
the Technology with the same name, or null if no Technology matches.

getTechnologies

public static java.util.Iterator<Technology> getTechnologies()
Get an iterator over all of the Technologies.

Returns:
an iterator over all of the Technologies.

convertOldVariable

public java.util.Map<Setting,java.lang.Object> convertOldVariable(java.lang.String varName,
                                                                  java.lang.Object value)
Method to convert any old-style variable information to the new options. May be overrideen in subclasses.

Parameters:
varName - name of variable
value - value of variable
Returns:
map from project settings to sitting values if variable was converted

cleanUnusedNodesInLibrary

public boolean cleanUnusedNodesInLibrary(NodeInst ni,
                                         java.util.List<Geometric> list)
Method to clean libraries with unused primitive nodes. May be overridden in technologies. By default it does nothing

Parameters:
ni - NodeInst node to analyze
list - nodes that will be removed in a remove job.
Returns:
true if node is not in used

dump

public void dump(java.io.PrintWriter out)

dumpExtraProjectSettings

protected void dumpExtraProjectSettings(java.io.PrintWriter out)

printlnSetting

protected static void printlnSetting(java.io.PrintWriter out,
                                     Setting setting)

printlnBits

protected static void printlnBits(java.io.PrintWriter out,
                                  java.lang.String[] bitNames,
                                  int bits)

makeXml

public Xml.Technology makeXml()
Create Xml structure of this Technology


makeXml807

public Xml807.Technology makeXml807()
Create Xml structure of this Technology


makeRuleSets

protected void makeRuleSets(Xml807.Technology t)

make3d

protected void make3d(Xml807.Technology t,
                      Xml807.RuleSet ruleSet)

getLayers

public java.util.Iterator<Layer> getLayers()
Returns an Iterator on the Layers in this Technology.

Returns:
an Iterator on the Layers in this Technology.

getLayer

public Layer getLayer(int index)
Returns a specific Layer number in this Technology.

Parameters:
index - the index of the desired Layer.
Returns:
the indexed Layer in this Technology.

getNumLayers

public int getNumLayers()
Returns the number of Layers in this Technology.

Returns:
the number of Layers in this Technology.

findLayer

public Layer findLayer(java.lang.String layerName)
Method to find a Layer with a given name.

Parameters:
layerName - the name of the desired Layer.
Returns:
the Layer with that name (null if none found).

getRuleNodeIndex

public int getRuleNodeIndex(java.lang.String name)
Method to determine index of layer or node involved in the rule

Parameters:
name - name of the layer or node
Returns:
the index of the rule.

getLayerFromOverride

public static Layer getLayerFromOverride(java.lang.String override,
                                         int startPos,
                                         char endChr,
                                         Technology tech)

findLayerFromFunction

public Layer findLayerFromFunction(Layer.Function fun)
Method to find the Layer in this Technology that matches a function description.

Parameters:
fun - the layer function to locate.
Returns:
the Layer that matches this description (null if not found).

addLayer

public void addLayer(Layer layer)
Method to add a new Layer to this Technology. This is usually done during initialization.

Parameters:
layer - the Layer to be added to this Technology.

sameLayer

public boolean sameLayer(Layer layer1,
                         Layer layer2)
Method to tell whether two layers should be considered equivalent for the purposes of cropping. The method is overridden by individual technologies to provide specific answers.

Parameters:
layer1 - the first Layer.
layer2 - the second Layer.
Returns:
true if the layers are equivalent.

getLayersSortedByHeight

public java.util.List<Layer> getLayersSortedByHeight()
Method to make a sorted list of layers in this Technology. The list is sorted by depth (from bottom to top) stored in Function.height.

Returns:
a sorted list of Layers in this Technology.

getLayersSortedByZValue

public java.util.List<Layer> getLayersSortedByZValue()
Method to make a sorted list of layers in this Technology based on their Z value, a preference stored per layer.

Returns:
a sorted list of Layers in this Technology.

getSavedLayerOrder

public java.util.List<Layer> getSavedLayerOrder()
Method to return a list of layers that are saved for this Technology. The saved layers are used in the "Layers" tab (which can be user-rearranged).

Returns:
a list of layers for this Technology in the saved order.

setSavedLayerOrder

public void setSavedLayerOrder(java.util.List<Layer> layers)
Method to save a list of layers for this Technology in a preferred order. This ordering is managed by the "Layers" tab which users can rearrange.

Parameters:
layers - a list of layers for this Technology in a preferred order.

getNumMetals

public int getNumMetals()
Dummy method overridden by implementing technologies to define the number of metal layers in the technology. Applies to layout technologies. Can by changed by user preferences.

Returns:
the number of metal layers currently specified for the technology

getNumMetalsSetting

public Setting getNumMetalsSetting()
Returns project Setting to tell the number of metal layers in the MoCMOS technology.

Returns:
project Setting to tell the number of metal layers in the MoCMOS technology (from 2 to 6).

newArcProto

protected ArcProto newArcProto(java.lang.String protoName,
                               double lambdaWidthOffset,
                               double defaultWidth,
                               ArcProto.Function function,
                               Technology.ArcLayer... layers)
Method to create a new ArcProto from the parameters.

Parameters:
protoName - the name of this ArcProto. It may not have unprintable characters, spaces, or tabs in it.
lambdaWidthOffset - width offset in lambda units.
defaultWidth - the default width of this ArcProto.
layers - the Layers that make up this ArcProto.
Returns:
the newly created ArcProto.

findArcProto

public ArcProto findArcProto(java.lang.String name)
Returns the ArcProto in this technology with a particular name.

Parameters:
name - the name of the ArcProto.
Returns:
the ArcProto in this technology with that name.

getArcProto

public ArcProto getArcProto(ArcProtoId arcProtoId)
Returns the ArcProto in this technology with a particular Id

Parameters:
arcProtoId - the Id of the ArcProto.
Returns:
the ArcProto in this technology with that Id.

getArcs

public java.util.Iterator<ArcProto> getArcs()
Returns an Iterator on the ArcProto objects in this technology.

Returns:
an Iterator on the ArcProto objects in this technology.

getArcsCollection

public java.util.Collection<ArcProto> getArcsCollection()
Retusn a collection of the ArcProto objects in this technology

Returns:
a collection of the ArcProto objects in this technology

getNumArcs

public int getNumArcs()
Returns the number of ArcProto objects in this technology.

Returns:
the number of ArcProto objects in this technology.

addArcProto

public void addArcProto(ArcProto ap)
Method to add a new ArcProto to this Technology. This is usually done during initialization.

Parameters:
ap - the ArcProto to be added to this Technology.

setNoDirectionalArcs

protected void setNoDirectionalArcs()
Sets the technology to have no directional arcs. Users should never call this method. It is set once by the technology during initialization. Directional arcs are those with arrows on them, indicating (only graphically) the direction of flow through the arc.


isNoDirectionalArcs

public boolean isNoDirectionalArcs()
Returns true if this technology does not have directional arcs.

Returns:
true if this technology does not have directional arcs. Directional arcs are those with arrows on them, indicating (only graphically) the direction of flow through the arc.

setNoNegatedArcs

protected void setNoNegatedArcs()
Sets the technology to have no negated arcs. Users should never call this method. It is set once by the technology during initialization. Negated arcs have bubbles on them to graphically indicated negation. Only Schematics and related technologies allow negated arcs.


isNoNegatedArcs

public boolean isNoNegatedArcs()
Returns true if this technology does not have negated arcs.

Returns:
true if this technology does not have negated arcs. Negated arcs have bubbles on them to graphically indicated negation. Only Schematics and related technologies allow negated arcs.

getShapeOfArc

public Poly[] getShapeOfArc(ArcInst ai)
Returns the polygons that describe arc "ai".

Parameters:
ai - the ArcInst that is being described.
Returns:
an array of Poly objects that describes this ArcInst graphically.

getShapeOfArc

public Poly[] getShapeOfArc(ArcInst ai,
                            Layer.Function.Set onlyTheseLayers)
Returns the polygons that describe arc "ai".

Parameters:
ai - the ArcInst that is being described.
onlyTheseLayers - to filter the only required layers
Returns:
an array of Poly objects that describes this ArcInst graphically.

getShapeOfArc

protected void getShapeOfArc(AbstractShapeBuilder b,
                             ImmutableArcInst a)
Fill the polygons that describe arc "a".

Parameters:
b - AbstractShapeBuilder to fill polygons.
a - the ImmutableArcInst that is being described.

getShapeOfArc

protected void getShapeOfArc(AbstractShapeBuilder b,
                             ImmutableArcInst a,
                             Layer layerOverride)
Fill the polygons that describe arc "a".

Parameters:
b - AbstractShapeBuilder to fill polygons.
a - the ImmutableArcInst that is being described.
layerOverride - the layer to use for all generated polygons (if not null).

isEasyShape

public boolean isEasyShape(ImmutableArcInst a,
                           boolean explain)
Tells if arc can be drawn by simplified algorithm Overidden ins subclasses

Parameters:
a - arc to test
explain - if true then print explanation why arc is not easy
Returns:
true if arc can be drawn by simplified algorithm

convertOldArcName

public ArcProto convertOldArcName(java.lang.String name)
Method to convert old primitive arc names to their proper ArcProtos.

Parameters:
name - the unknown arc name, read from an old Library.
Returns:
the proper ArcProto to use for this name.

getOldArcNames

public java.util.Map<java.lang.String,ArcProto> getOldArcNames()

getNodesSortedByName

public java.util.List<PrimitiveNode> getNodesSortedByName()
Method to return a sorted list of nodes in the technology

Returns:
a list with all nodes sorted

findNodeProto

public PrimitiveNode findNodeProto(java.lang.String name)
Returns the PrimitiveNode in this technology with a particular name.

Parameters:
name - the name of the PrimitiveNode.
Returns:
the PrimitiveNode in this technology with that name.

getPrimitiveNode

public PrimitiveNode getPrimitiveNode(PrimitiveNodeId primitiveNodeId)
Returns the PrimitiveNode in this technology with a particular Id

Parameters:
primitiveNodeId - the Id of the PrimitiveNode.
Returns:
the PrimitiveNiode in this technology with that Id.

getNodes

public java.util.Iterator<PrimitiveNode> getNodes()
Returns an Iterator on the PrimitiveNode objects in this technology.

Returns:
an Iterator on the PrimitiveNode objects in this technology.

getNodesCollection

public java.util.Collection<PrimitiveNode> getNodesCollection()
Retusn a collection of the PrimitiveNode objects in this technology

Returns:
a collection of the PrimitiveNode objects in this technology

getNumNodes

public int getNumNodes()
Returns the number of PrimitiveNodes objects in this technology.

Returns:
the number of PrimitiveNodes objects in this technology.

addNodeProto

public void addNodeProto(PrimitiveNode np)
Method to add a new PrimitiveNode to this Technology. This is usually done during initialization.

Parameters:
np - the PrimitiveNode to be added to this Technology.

getPrimitiveFunction

public PrimitiveNode.Function getPrimitiveFunction(PrimitiveNode pn,
                                                   int techBits)
Method to return the pure "NodeProto Function" a PrimitiveNode in this Technology. This method is overridden by technologies (such as Schematics) that know the node's function.

Parameters:
pn - PrimitiveNode to check.
techBits - tech bits
Returns:
the PrimitiveNode.Function that describes the PrinitiveNode with specific tech bits.

getResistorSize

public PrimitiveNodeSize getResistorSize(NodeInst ni,
                                         VarContext context)
Method to return the size of a resistor-type NodeInst in this Technology.

Parameters:
ni - the NodeInst.
context - the VarContext in which any vars will be evaluated, pass in VarContext.globalContext if no context needed, or set to null to avoid evaluation of variables (if any).
Returns:
the size of the NodeInst.

getTransistorActiveLength

public double getTransistorActiveLength(NodeInst ni)
Method to return length of active reqion. This will be used for parasitics extraction. Electric layers are used for the calculation

Parameters:
ni - the NodeInst.
Returns:
length of the any active region

getTransistorSize

public TransistorSize getTransistorSize(NodeInst ni,
                                        VarContext context)
Method to return the size of a transistor NodeInst in this Technology. You should most likely be calling NodeInst.getTransistorSize instead of this.

Parameters:
ni - the NodeInst.
context - the VarContext in which any vars will be evaluated, pass in VarContext.globalContext if no context needed, or set to null to avoid evaluation of variables (if any).
Returns:
the size of the NodeInst.

setPrimitiveNodeSize

public void setPrimitiveNodeSize(NodeInst ni,
                                 double width,
                                 double length)
Method to set the size of a transistor NodeInst in this Technology. You should be calling NodeInst.setTransistorSize instead of this.

Parameters:
ni - the NodeInst
width - the new width (positive values only)
length - the new length (positive values only)

getTransistorGatePort

public PortInst getTransistorGatePort(NodeInst ni)
Method to return a gate PortInst for this transistor NodeInst. Implementation Note: May want to make this a more general method, getPrimitivePort(PortType), if the number of port types increases. Note: You should be calling NodeInst.getTransistorGatePort() instead of this, most likely.

Parameters:
ni - the NodeInst
Returns:
a PortInst for the gate of the transistor

getTransistorAltGatePort

public PortInst getTransistorAltGatePort(NodeInst ni)
Method to return the other gate PortInst for this transistor NodeInst. Only useful for layout transistors that have two gate ports. Implementation Note: May want to make this a more general method, getPrimitivePort(PortType), if the number of port types increases. Note: You should be calling NodeInst.getTransistorGatePort() instead of this, most likely.

Parameters:
ni - the NodeInst
Returns:
a PortInst for the alternate gate of the transistor

getTransistorBasePort

public PortInst getTransistorBasePort(NodeInst ni)
Method to return a base PortInst for this transistor NodeInst.

Parameters:
ni - the NodeInst
Returns:
a PortInst for the base of the transistor

getTransistorSourcePort

public PortInst getTransistorSourcePort(NodeInst ni)
Method to return a source PortInst for this transistor NodeInst. Implementation Note: May want to make this a more general method, getPrimitivePort(PortType), if the number of port types increases. Note: You should be calling NodeInst.getTransistorSourcePort() instead of this, most likely.

Parameters:
ni - the NodeInst
Returns:
a PortInst for the source of the transistor

getTransistorEmitterPort

public PortInst getTransistorEmitterPort(NodeInst ni)
Method to return a emitter PortInst for this transistor NodeInst.

Parameters:
ni - the NodeInst
Returns:
a PortInst for the emitter of the transistor

getTransistorDrainPort

public PortInst getTransistorDrainPort(NodeInst ni)
Method to return a drain PortInst for this transistor NodeInst. Implementation Note: May want to make this a more general method, getPrimitivePort(PortType), if the number of port types increases. Note: You should be calling NodeInst.getTransistorDrainPort() instead of this, most likely.

Parameters:
ni - the NodeInst
Returns:
a PortInst for the drain of the transistor

getTransistorCollectorPort

public PortInst getTransistorCollectorPort(NodeInst ni)
Method to return a collector PortInst for this transistor NodeInst.

Parameters:
ni - the NodeInst
Returns:
a PortInst for the collector of the transistor

getTransistorBiasPort

public PortInst getTransistorBiasPort(NodeInst ni)
Method to return a bias PortInst for this transistor NodeInst. Implementation Note: May want to make this a more general method, getPrimitivePort(PortType), if the number of port types increases. Note: You should be calling NodeInst.getTransistorBiasPort() instead of this, most likely.

Parameters:
ni - the NodeInst
Returns:
a PortInst for the bias of the transistor

setPrimitiveFunction

public void setPrimitiveFunction(NodeInst ni,
                                 PrimitiveNode.Function function)
Method to set the pure "NodeProto Function" for a primitive NodeInst in this Technology. This method is overridden by technologies (such as Schematics) that can change a node's function.

Parameters:
ni - the NodeInst to check.
function - the PrimitiveNode.Function to set on the NodeInst.

setNoPrimitiveNodes

public void setNoPrimitiveNodes()
Sets the technology to have no primitives. Users should never call this method. It is set once by the technology during initialization. This indicates to the user interface that it should not switch to this technology. The FPGA technology has this bit set because it initially contains no primitives, and they are only created dynamically.


isNoPrimitiveNodes

public boolean isNoPrimitiveNodes()
Returns true if this technology has no primitives.

Returns:
true if this technology has no primitives. This indicates to the user interface that it should not switch to this technology. The FPGA technology has this bit set because it initially contains no primitives, and they are only created dynamically.

setDefaultOutline

public void setDefaultOutline(NodeInst ni)
Method to set default outline information on a NodeInst. Very few primitives have default outline information (usually just in the Artwork Technology). This method is overridden by the appropriate technology.

Parameters:
ni - the NodeInst to load with default outline information.

getNodeInstBaseRectangle

public ERectangle getNodeInstBaseRectangle(NodeInst ni)
Method to get the base (highlight) ERectangle associated with a NodeInst in this PrimitiveNode. Base ERectangle is a highlight rectangle of standard-size NodeInst of this PrimtiveNode By having this be a method of Technology, it can be overridden by individual Technologies that need to make special considerations.

Parameters:
ni - the NodeInst to query.
Returns:
the base ERectangle of this PrimitiveNode.

getShapeOfNode

public Poly[] getShapeOfNode(NodeInst ni)
Returns the polygons that describe node "ni".

Parameters:
ni - the NodeInst that is being described. The prototype of this NodeInst must be a PrimitiveNode and not a Cell.
Returns:
an array of Poly objects that describes this NodeInst graphically.

getShapeOfNode

public Poly[] getShapeOfNode(NodeInst ni,
                             boolean electrical,
                             boolean reasonable,
                             Layer.Function.Set onlyTheseLayers)
Returns the polygons that describe node "ni".

Parameters:
ni - the NodeInst that is being described. The prototype of this NodeInst must be a PrimitiveNode and not a Cell.
electrical - true to get the "electrical" layers. When electrical layers are requested, each layer is tied to a specific port on the node. If any piece of geometry covers more than one port, it must be split for the purposes of an "electrical" description. For example, the MOS transistor has 2 layers: Active and Poly. But it has 3 electrical layers: Active, Active, and Poly. The active must be split since each half corresponds to a different PrimitivePort on the PrimitiveNode.
reasonable - true to get only a minimal set of contact cuts in large contacts. The minimal set covers all edge contacts, but ignores the inner cuts in large contacts.
onlyTheseLayers - a set of layers to draw (if null, draw all layers).
Returns:
an array of Poly objects that describes this NodeInst graphically.

getShapeOfNode

protected Poly[] getShapeOfNode(NodeInst ni,
                                boolean electrical,
                                boolean reasonable,
                                Technology.NodeLayer[] primLayers,
                                Layer layerOverride)
Returns the polygons that describe node "ni", given a set of NodeLayer objects to use. This method is overridden by specific Technologys.

Parameters:
ni - the NodeInst that is being described.
electrical - true to get the "electrical" layers Like the list returned by "getLayers", the results describe this PrimitiveNode, but each layer is tied to a specific port on the node. If any piece of geometry covers more than one port, it must be split for the purposes of an "electrical" description.
For example, the MOS transistor has 2 layers: Active and Poly. But it has 3 electrical layers: Active, Active, and Poly. The active must be split since each half corresponds to a different PrimitivePort on the PrimitiveNode.
reasonable - true to get only a minimal set of contact cuts in large contacts. The minimal set covers all edge contacts, but ignores the inner cuts in large contacts.
primLayers - an array of NodeLayer objects to convert to Poly objects.
layerOverride - the layer to use for all generated polygons (if not null). The prototype of this NodeInst must be a PrimitiveNode and not a Cell.
Returns:
an array of Poly objects that describes this NodeInst graphically. This array includes displayable variables on the NodeInst.

computeShapeOfNode

protected Poly[] computeShapeOfNode(NodeInst ni,
                                    boolean electrical,
                                    boolean reasonable,
                                    Technology.NodeLayer[] primLayers,
                                    Layer layerOverride)
Returns the polygons that describe node "ni", given a set of NodeLayer objects to use. This method is called by the specific Technology overrides of getShapeOfNode().

Parameters:
ni - the NodeInst that is being described.
electrical - true to get the "electrical" layers Like the list returned by "getLayers", the results describe this PrimitiveNode, but each layer is tied to a specific port on the node. If any piece of geometry covers more than one port, it must be split for the purposes of an "electrical" description.
For example, the MOS transistor has 2 layers: Active and Poly. But it has 3 electrical layers: Active, Active, and Poly. The active must be split since each half corresponds to a different PrimitivePort on the PrimitiveNode.
reasonable - true to get only a minimal set of contact cuts in large contacts. The minimal set covers all edge contacts, but ignores the inner cuts in large contacts.
primLayers - an array of NodeLayer objects to convert to Poly objects.
layerOverride - the layer to use for all generated polygons (if not null). The prototype of this NodeInst must be a PrimitiveNode and not a Cell.
Returns:
an array of Poly objects that describes this NodeInst graphically.

isMultiCutInTechnology

public boolean isMultiCutInTechnology(Technology.MultiCutData mcd)
Method to determine if cut case is considered multi cut It gets overridden by CMOS90


getMultiCutData

public Technology.MultiCutData getMultiCutData(NodeInst ni)
Method to get a multi-cut structure associated to a NodeInst representing a Multiple-cut contact.

Parameters:
ni - the NodeInst being tested.
Returns:
a non-null MultiCutData pointer if it is a Multiple-cut contact

isMultiCutCase

public boolean isMultiCutCase(NodeInst ni)
Method to decide whether a NodeInst is a multi-cut contact. The function is done by the Technologies so that it can be subclassed.

Parameters:
ni - the NodeInst being tested.
Returns:
true if it is a Multiple-cut contact.

convertOldNodeName

public PrimitiveNode convertOldNodeName(java.lang.String name)
Method to convert old primitive node names to their proper NodeProtos.

Parameters:
name - the unknown node name, read from an old Library.
Returns:
the proper PrimitiveNode to use for this name.

getOldNodeNames

public java.util.Map<java.lang.String,PrimitiveNode> getOldNodeNames()

getShapeOfPort

public Poly getShapeOfPort(NodeInst ni,
                           PrimitivePort pp)
Returns a polygon that describes a particular port on a NodeInst.

Parameters:
ni - the NodeInst that has the port of interest. The prototype of this NodeInst must be a PrimitiveNode and not a Cell.
pp - the PrimitivePort on that NodeInst that is being described.
Returns:
a Poly object that describes this PrimitivePort graphically.

getShapeOfPort

public Poly getShapeOfPort(NodeInst ni,
                           PrimitivePort pp,
                           java.awt.geom.Point2D selectPt)
Returns a polygon that describes a particular port on a NodeInst.

Parameters:
ni - the NodeInst that has the port of interest. The prototype of this NodeInst must be a PrimitiveNode and not a Cell.
pp - the PrimitivePort on that NodeInst that is being described.
selectPt - if not null, it requests a new location on the port, away from existing arcs, and close to this point. This is useful for "area" ports such as the left side of AND and OR gates.
Returns:
a Poly object that describes this PrimitivePort graphically.

convertOldPortName

public PrimitivePort convertOldPortName(java.lang.String portName,
                                        PrimitiveNode np)
Method to convert old primitive port names to their proper PortProtos. This method is overridden by those technologies that have any special port name conversion issues. By default, there is little to be done, because by the time this method is called, normal searches have failed.

Parameters:
portName - the unknown port name, read from an old Library.
np - the PrimitiveNode on which this port resides.
Returns:
the proper PrimitivePort to use for this name.

isUniversalConnectivityPort

protected boolean isUniversalConnectivityPort(PrimitivePort pp)
Tells if all ArcProtos can connect to the PrimitivePort

Parameters:
pp - PrimitivePort to test
Returns:
true if all ArcProtos can connect to the PrimitivePort

getTechnologyPreferences

public static Pref.Group getTechnologyPreferences()
Method to return the Pref object associated with all Technologies. The Pref object is used to save option information. Since preferences are organized by package, there is only one for the technologies (they are all in the same package).

Returns:
the Pref object associated with all Technologies.

getMinResistance

public double getMinResistance()
Returns the minimum resistance of this Technology. Default value is 10.0

Returns:
the minimum resistance of this Technology.

getMinResistanceSetting

public Setting getMinResistanceSetting()
Returns project Setting to tell the minimum resistance of this Technology.

Returns:
project Setting to tell the minimum resistance of this Technology.

getMinCapacitance

public double getMinCapacitance()
Returns the minimum capacitance of this Technology. Default value is 0.0

Returns:
the minimum capacitance of this Technology.

getMinCapacitanceSetting

public Setting getMinCapacitanceSetting()
Returns project Setting to tell the minimum capacitance of this Technology.

Returns:
project Setting to tell the minimum capacitance of this Technology.

getMaxSeriesResistance

public double getMaxSeriesResistance()
Get the maximum series resistance for layout extraction for this Technology.

Returns:
the maximum series resistance of extracted layout nets

getMaxSeriesResistanceSetting

public Setting getMaxSeriesResistanceSetting()
Returns project Setting to tell the maximum series resistance for layout extraction for this Technology.

Returns:
project Setting to tell the maximum series resistance for layout extraction for this Technology.

isGateIncluded

public boolean isGateIncluded()
Returns true if gate is included in resistance calculation. False is the default.

Returns:
true if gate is included in resistance calculation.

getGateIncludedSetting

public Setting getGateIncludedSetting()
Returns project Setting to tell gate inclusion.

Returns:
project Setting to tell gate inclusion

isGroundNetIncluded

public boolean isGroundNetIncluded()
Returns true if ground network is included in parasitics calculation. False is the default.

Returns:
true if ground network is included.

getGroundNetIncludedSetting

public Setting getGroundNetIncludedSetting()
Returns project Setting to tell ground network inclusion.

Returns:
project Setting to tell ground network inclusion

getGateLengthSubtraction

public double getGateLengthSubtraction()
Gets the gate length subtraction for this Technology (in microns). This is used because there is sometimes a subtracted offset from the layout to the drawn length.

Returns:
the gate length subtraction for this Technology

getGateLengthSubtractionSetting

public Setting getGateLengthSubtractionSetting()
Returns project Setting to tell the gate length subtraction for this Technology (in microns) This is used because there is sometimes a subtracted offset from the layout to the drawn length.

Returns:
project Setting to tell the subtraction value for a gate length in microns

setFactoryParasitics

public void setFactoryParasitics(double minResistance,
                                 double minCapacitance)
Method to set default parasitic values on this Technology. These values are not saved in the options.

Parameters:
minResistance - the minimum resistance in this Technology.
minCapacitance - the minimum capacitance in this Technology.

setFactoryLESettings

protected void setFactoryLESettings(double gateCapacitance,
                                    double wireRation,
                                    double diffAlpha)

getGateCapacitance

public double getGateCapacitance()
Method to get the Gate Capacitance for Logical Effort. The default is DEFAULT_GATECAP.

Returns:
the Gate Capacitance for Logical Effort.

getGateCapacitanceSetting

public Setting getGateCapacitanceSetting()
Returns project Setting to tell the Gate Capacitance for Logical Effort.

Returns:
project Setting to tell the Gate Capacitance for Logical Effort.

getWireRatio

public double getWireRatio()
Method to get the wire capacitance ratio for Logical Effort. The default is DEFAULT_WIRERATIO.

Returns:
the wire capacitance ratio for Logical Effort.

getWireRatioSetting

public Setting getWireRatioSetting()
Returns project Setting to tell the wire capacitance ratio for Logical Effort.

Returns:
project Setting to tell the wire capacitance ratio for Logical Effort.

getDiffAlpha

public double getDiffAlpha()
Method to get the diffusion to gate capacitance ratio for Logical Effort. The default is DEFAULT_DIFFALPHA.

Returns:
the diffusion to gate capacitance ratio for Logical Effort.

getDiffAlphaSetting

public Setting getDiffAlphaSetting()
Returns project Setting to tell the diffusion to gate capacitance ratio for Logical Effort.

Returns:
project Setting to tell the diffusion to gate capacitance ratio for Logical Effort.

getSpiceHeaderLevel1

public java.lang.String[] getSpiceHeaderLevel1()
Method to return the level-1 header cards for SPICE in this Technology. The default is [""].

Returns:
the level-1 header cards for SPICE in this Technology.

setSpiceHeaderLevel1

public void setSpiceHeaderLevel1(java.lang.String[] lines)
Method to set the level-1 header cards for SPICE in this Technology.

Parameters:
lines - the level-1 header cards for SPICE in this Technology.

getSpiceHeaderLevel2

public java.lang.String[] getSpiceHeaderLevel2()
Method to return the level-2 header cards for SPICE in this Technology. The default is [""].

Returns:
the level-2 header cards for SPICE in this Technology.

setSpiceHeaderLevel2

public void setSpiceHeaderLevel2(java.lang.String[] lines)
Method to set the level-2 header cards for SPICE in this Technology.

Parameters:
lines - the level-2 header cards for SPICE in this Technology.

getSpiceHeaderLevel3

public java.lang.String[] getSpiceHeaderLevel3()
Method to return the level-3 header cards for SPICE in this Technology. The default is [""].

Returns:
the level-3 header cards for SPICE in this Technology.

setSpiceHeaderLevel3

public void setSpiceHeaderLevel3(java.lang.String[] lines)
Method to set the level-3 header cards for SPICE in this Technology.

Parameters:
lines - the level-3 header cards for SPICE in this Technology.

setNonElectrical

protected void setNonElectrical()
Sets the technology to be "non-electrical". Users should never call this method. It is set once by the technology during initialization. Examples of non-electrical technologies are "Artwork" and "Gem".


isNonElectrical

public boolean isNonElectrical()
Returns true if this technology is "non-electrical".

Returns:
true if this technology is "non-electrical". Examples of non-electrical technologies are "Artwork" and "Gem".

setNonStandard

protected void setNonStandard()
Sets the technology to be non-standard. Users should never call this method. It is set once by the technology during initialization. A non-standard technology cannot be edited in the technology editor. Examples are Schematics and Artwork, which have more complex graphics.


isNonStandard

public boolean isNonStandard()
Returns true if this technology is non-standard.

Returns:
true if this technology is non-standard. A non-standard technology cannot be edited in the technology editor. Examples are Schematics and Artwork, which have more complex graphics.

setStaticTechnology

protected void setStaticTechnology()
Sets the technology to be "static". Users should never call this method. It is set once by the technology during initialization. Static technologies are the core set of technologies in Electric that are essential, and cannot be deleted. The technology-editor can create others later, and they can be deleted.


isStaticTechnology

public boolean isStaticTechnology()
Returns true if this technoology is "static" (cannot be deleted).

Returns:
true if this technoology is "static" (cannot be deleted). Static technologies are the core set of technologies in Electric that are essential, and cannot be deleted. The technology-editor can create others later, and they can be deleted.

getId

public TechId getId()
Returns the TechId of this technology. Each technology has a unique name, such as "mocmos" (MOSIS CMOS).

Returns:
the TechId of this technology.

getTechName

public java.lang.String getTechName()
Returns the name of this technology. Each technology has a unique name, such as "mocmos" (MOSIS CMOS).

Returns:
the name of this technology.

setTechName

public void setTechName(java.lang.String techName)
Sets the name of this technology. Technology names must be unique.


getTechShortName

public java.lang.String getTechShortName()
Returns the short name of this technology. The short name is user readable ("MOSIS CMOS" instead of "mocmos") but is shorter than the "description" which often includes options.

Returns:
the short name of this technology.

setTechShortName

protected void setTechShortName(java.lang.String techShortName)
Sets the short name of this technology. The short name is user readable ("MOSIS CMOS" instead of "mocmos") but is shorter than the "description" which often includes options.

Parameters:
techShortName - the short name for this technology.

getTechDesc

public java.lang.String getTechDesc()
Returns the full description of this Technology. Full descriptions go beyond the one-word technology name by including such information as foundry, nuumber of available layers, and process specifics. For example, "Complementary MOS (from MOSIS, Submicron, 2-6 metals [4], double poly)".

Returns:
the full description of this Technology.

setTechDesc

public void setTechDesc(java.lang.String techDesc)
Sets the full description of this Technology. Full descriptions go beyond the one-word technology name by including such information as foundry, nuumber of available layers, and process specifics. For example, "Complementary MOS (from MOSIS, Submicron, 2-6 metals [4], double poly)".


getScale

public double getScale()
Returns the scale for this Technology. The technology's scale is for manufacturing output, which must convert the unit-based values in Electric to real-world values (in nanometers).

Returns:
the scale for this Technology.

getScaleVariableName

public java.lang.String getScaleVariableName()
Method to obtain the Variable name for scaling this Technology. Do not use this for arbitrary use. The method exists so that ELIB readers can handle the unusual location of scale information in the ELIB files.

Returns:
the Variable name for scaling this Technology.

setFactoryScale

protected void setFactoryScale(double factory,
                               boolean scaleRelevant)
Sets the factory scale of this technology. The technology's scale is for manufacturing output, which must convert the unit-based values in Electric to real-world values (in nanometers).

Parameters:
factory - the factory scale between this technology and the real units.
scaleRelevant - true if this is a layout technology, and the scale factor has meaning.

getScaleSetting

public Setting getScaleSetting()
Returns project Setting to tell the scale of this technology. The technology's scale is for manufacturing output, which must convert the unit-based values in Electric to real-world values (in nanometers).

Returns:
project Setting to tell the scale between this technology and the real units.

isScaleRelevant

public boolean isScaleRelevant()
Method to tell whether scaling is relevant for this Technology. Most technolgies produce drawings that are exact images of a final product. For these technologies (CMOS, bipolar, etc.) the "scale" from displayed grid units to actual dimensions is a relevant factor. Other technologies, such as schematics, artwork, and generic, are not converted to physical objects, and "scale" is not relevant no meaning for them.

Returns:
true if scaling is relevant for this Technology.

setFactoryResolution

protected void setFactoryResolution(double factory)
Method to set Technology resolution in IO/DRC tools. This has to be stored per technology.

Parameters:
factory - factory value

setResolution

public void setResolution(double resolution)
Method to set the technology resolution. This is the minimum size unit that can be represented.

Parameters:
resolution - new resolution value.

getResolution

public double getResolution()
Method to retrieve the resolution associated to the technology. This is the minimum size unit that can be represented.

Returns:
the technology's resolution value.

getPrefFoundry

public java.lang.String getPrefFoundry()
Method to get foundry in Tech Palette. Different foundry can define different DRC rules. The default is "Generic".

Returns:
the foundry to use in Tech Palette

getPrefFoundrySetting

public Setting getPrefFoundrySetting()
Returns project Setting to tell foundry for DRC rules.

Returns:
project Setting to tell the foundry for DRC rules.

findFoundry

protected Foundry findFoundry(java.lang.String name)
Find the Foundry in this technology with a particular name. Protected so sub classes will use it

Parameters:
name - the name of the desired Foundry.
Returns:
the Foundry with the same name, or null if no Foundry matches.

getFoundries

public java.util.Iterator<Foundry> getFoundries()
Get an iterator over all of the Manufacturers.

Returns:
an iterator over all of the Manufacturers.

newFoundry

protected void newFoundry(Foundry.Type mode,
                          java.net.URL fileURL,
                          java.lang.String... gdsLayers)
Method to create a new on this technology.

Parameters:
mode - factory type
fileURL - URL of xml file with description of rules
gdsLayers - stirngs with definition of gds numbers for layers

getSelectedFoundry

public Foundry getSelectedFoundry()
Method to get the foundry index associated with this technology.

Returns:
the foundry index associated with this technology.

getGDSLayers

public java.util.Map<Layer,java.lang.String> getGDSLayers()
Method to return the map from Layers of this Technology to their GDS names in current foundry. Only Layers with non-empty GDS names are present in the map

Returns:
the map from Layers to GDS names

setFactoryTransparentLayers

protected void setFactoryTransparentLayers(java.awt.Color[] layers)
Sets the color map for transparent layers in this technology. Users should never call this method. It is set once by the technology during initialization.

Parameters:
layers - is an array of colors, one per transparent layer. This is expanded to a map that is 2 to the power "getNumTransparentLayers()". Color merging is computed automatically.

cacheTransparentLayerColors

public static void cacheTransparentLayerColors()
Method to reload the color map when the layer color preferences have changed.


getFactoryColorMap

public java.awt.Color[] getFactoryColorMap()

getNumTransparentLayers

public int getNumTransparentLayers()
Returns the number of transparent layers in this technology. Informs the display system of the number of overlapping or transparent layers in use.

Returns:
the number of transparent layers in this technology. There may be 0 transparent layers in technologies that don't do overlapping, such as Schematics.

setNumTransparentLayers

public void setNumTransparentLayers(int nl)
Sets the number of transparent layers in this technology.

Parameters:
nl - the number of transparent layers in this technology.

setColorMap

public void setColorMap(java.awt.Color[] map)
Sets the color map for transparent layers in this technology.

Parameters:
map - the color map for transparent layers in this technology. There must be a number of entries in this map equal to 2 to the power "getNumTransparentLayers()".

setColorMapFromLayers

public void setColorMapFromLayers(java.awt.Color[] layers)
Sets the color map from transparent layers in this technology.

Parameters:
layers - an array of colors, one per transparent layer. This is expanded to a map that is 2 to the power "getNumTransparentLayers()". Color merging is computed automatically.

getColorMap

public static java.awt.Color[] getColorMap(java.awt.Color[] layers,
                                           int numLayers)

getFactoryDesignRules

public XMLRules getFactoryDesignRules()
Method to get the factory design rules. Individual technologies subclass this to create their own rules.

Returns:
the design rules for this Technology. Returns null if there are no design rules in this Technology.

resizeArcs

protected void resizeArcs(XMLRules rules)

getRuleSuffix

protected java.lang.String getRuleSuffix()

getRuleAliases

protected java.util.Map<java.lang.String,java.lang.String> getRuleAliases()

getRuleDifferences

public static java.lang.StringBuffer getRuleDifferences(DRCRules origRules,
                                                        DRCRules newRules)
Method to compare a Rules set with the "factory" set and construct an override string.

Parameters:
origRules -
newRules -
Returns:
a StringBuffer that describes any overrides. Returns "" if there are none.

setRuleVariables

public void setRuleVariables(DRCRules newRules)
Method to be called from DRC:setRules

Parameters:
newRules -

getColorMap

public java.awt.Color[] getColorMap()
Returns the color map for transparent layers in this technology.

Returns:
the color map for transparent layers in this technology. The number of entries in this map equals 2 to the power "getNumTransparentLayers()".

getIndex

public int getIndex()
Returns the 0-based index of this Technology. Each Technology has a unique index that can be used for array lookup.

Returns:
the index of this Technology.

whatTechnology

public static Technology whatTechnology(NodeProto cell)
Method to determine the appropriate Technology to use for a Cell.

Parameters:
cell - the Cell to examine.
Returns:
the Technology for that cell.

whatTechnology

public static Technology whatTechnology(NodeProto cellOrPrim,
                                        NodeProto[] nodeProtoList,
                                        int startNodeProto,
                                        int endNodeProto,
                                        ArcProto[] arcProtoList)
Method to determine the appropriate technology to use for a cell. The contents of the cell can be defined by the lists of NodeInsts and ArcInsts, or if they are null, then by the contents of the Cell.

Parameters:
cellOrPrim - the Cell to examine.
nodeProtoList - the list of prototypes of NodeInsts in the Cell.
startNodeProto - the starting point in the "nodeProtoList" array.
endNodeProto - the ending point in the "nodeProtoList" array.
arcProtoList - the list of prototypes of ArcInsts in the Cell.
Returns:
the Technology for that cell.

isLayout

public boolean isLayout()
Returns true if this Technology is a layout technology.

Returns:
true if this Technology is a layout technology.

isSchematics

public boolean isSchematics()
Returns true if this Technology is a schematics technology.

Returns:
true if this Technology is a schematics technology.

compareTo

public int compareTo(Technology that)
Compares Technologies by their names.

Specified by:
compareTo in interface java.lang.Comparable<Technology>
Parameters:
that - the other Technology.
Returns:
a comparison between the Technologies.

toString

public java.lang.String toString()
Returns a printable version of this Technology.

Overrides:
toString in class java.lang.Object
Returns:
a printable version of this Technology.

setNodesGrouped

public void setNodesGrouped(java.lang.Object[][] ng,
                            java.lang.String xml)
Method to change the group of elements for the component menu.

Parameters:
ng - the new set of objects to display in the component menu.
xml - the XML for the new component menu groupings.

getNodesGroupedXML

public java.lang.String getNodesGroupedXML()
Method to get the group of elements for the component menu.

Returns:
the XML for the new component menu groupings.

getPrefComponentMenu

public void getPrefComponentMenu()
Method to see if there are component menu preferences. If such preferences exist, the field variable "nodeGroups" is loaded with that menu.


getDefaultNodesGrouped

public java.lang.Object[][] getDefaultNodesGrouped()
Method to construct a default group of elements for the palette.

Returns:
the default set of objects to display in the component menu.

getNodesGrouped

public java.lang.Object[][] getNodesGrouped(Cell curCell)
Method to retrieve correct group of elements for the palette.

Parameters:
curCell - the current cell being displayed (may affect the palette).
Returns:
the new set of objects to display in the component menu.

filterNodeGroups

public java.lang.Object[][] filterNodeGroups(java.lang.Object[][] oldNG)
Method to remove component menu entries that are impossible because of inaccessible objects.

Parameters:
oldNG - the old list of component menu entries.
Returns:
a filtered list of component menu entries.

makeNodeInst

public static NodeInst makeNodeInst(NodeProto np)
Method to create temporary nodes for the palette

Parameters:
np - prototype of the node to place in the palette.

makeNodeInst

public static NodeInst makeNodeInst(NodeProto np,
                                    PrimitiveNode.Function func,
                                    int angle,
                                    boolean display,
                                    java.lang.String varName,
                                    double fontSize)
Method to create temporary nodes for the palette

Parameters:
np - prototype of the node to place in the palette.
func - function of the node (helps parameterize the node).
angle - initial placement angle of the node.

getSpacingDistances

public double[] getSpacingDistances(Poly poly1,
                                    Poly poly2)
This is the most basic function to determine the widest wire and the parallel distance that run along them. Done because MOSRules doesn't consider the parallel distance as input.


getCachedRules

public DRCRules getCachedRules()
Method to retrieve cached rules

Returns:
cached design rules.

setCachedRules

public void setCachedRules(DRCRules rules)
Method to set cached rules


isValidVTPolyRule

public boolean isValidVTPolyRule(DRCTemplate theRule)
Method to determine if the rule name matches an existing VT Poly rule

Parameters:
theRule -
Returns:
true if it matches

getProjectSettings

public ProjSettingsNode getProjectSettings()