<> <> <> <> DIRECTORY CD, Rope; DesignRules: CEDAR DEFINITIONS = BEGIN <> <> <> Rules: TYPE = REF RulesRec; RulesRec: TYPE = RECORD [ id: ATOM, technology: CD.Technology, -- compatibility hack micronsPerLambdaValue: INT, micronsPerLambdaScale: INT, layers: LayerList _ NIL, holes: HoleTypeList _ NIL, mosTransistors: MOSTransistorTypeList _ NIL, values: RuleValueList _ NIL]; <<>> LayerList: TYPE = LIST OF Layer; Layer: TYPE = REF LayerRec; LayerRec: TYPE = RECORD [ id: ATOM, cifSymbol: Rope.ROPE, name: Rope.ROPE, description: Rope.ROPE, cdLayer: CD.Layer, -- compatibility hack implicitLayers: ImplicitLayerList _ NIL]; ImplicitLayerList: TYPE = LIST OF ImplicitLayer; ImplicitLayer: TYPE = REF ImplicitLayerRec; ImplicitLayerRec: TYPE = RECORD [ layer: Layer _ NIL, surround: RuleValue _ NIL]; HoleTypeList: TYPE = LIST OF HoleType; HoleType: TYPE = REF HoleTypeRec; HoleTypeRec: TYPE = RECORD [ id: ATOM _ NIL, layer1, layer2, cutLayer: Layer _ NIL, layer1Surround, layer2Surround: RuleValue _ NIL]; MOSTransistorTypeList: TYPE = LIST OF MOSTransistorType; MOSTransistorType: TYPE = REF MOSTransistorTypeRec; MOSTransistorTypeRec: TYPE = RECORD [ id: ATOM, gate, sourceDrain, bulk: Layer, gateExtension, sourceDrainExtension, bulkSurround: RuleValue]; RuleValueList: TYPE = LIST OF RuleValue; RuleValue: TYPE = REF RuleValueRec; RuleValueRec: TYPE = RECORD [ id: ATOM, type: RuleType, layer1, layer2: Layer, value: INT, scale: INT, name: Rope.ROPE, micronRule: BOOL]; RuleType: TYPE = {width, maxWidth, intraspace, interspace, surround, overlap, extension, special}; DesignRuleError: SIGNAL [msg: Rope.ROPE]; <> <> <<>> NewRules: PROC [id: ATOM, technology: CD.Technology, micronsPerLambdaValue: INT, micronsPerLambdaScale: INT _ 1] RETURNS [rules: Rules]; <> <<>> NewLayer: PROC [rules: Rules, id: ATOM, cifSymbol: Rope.ROPE, name: Rope.ROPE, description: Rope.ROPE, cdLayer: CD.Layer] RETURNS [layer: Layer]; <> <<>> NewImplicitLayer: PROC [rules: Rules, layer, implicit: Layer, surround: RuleValue]; <> <<>> NewHoleType: PROC [rules: Rules, id: ATOM, layer1, layer2, cutLayer: Layer, layer1SurroundRule, layer2SurroundRule: RuleValue]; <> <<>> NewMOSTransistorType: PROC [rules: Rules, id: ATOM, gate, sourceDrain, bulk: Layer, gateExtension, sourceDrainExtension, bulkSurround: RuleValue]; <> <<>> NewRule: PROC [rules: Rules, id: ATOM, type: RuleType, layer1, layer2: Layer, value: INT, name: Rope.ROPE, scale: INT _ 1]; <> <<>> NewMicronRule: PROC [rules: Rules, id: ATOM, type: RuleType, layer1, layer2: Layer, value: INT, name: Rope.ROPE, scale: INT _ 1]; <> <<>> FindRuleValue: PROC [rules: Rules, id: ATOM] RETURNS [ruleValue: RuleValue]; <<>> <> RegisterRuleSet: PROC [rules: Rules]; <> <<>> GetRuleSet: PROC [id: ATOM] RETURNS [rules: Rules]; <> <<>> CopyRuleSet: PROC [rules: Rules] RETURNS [newRules: Rules]; SetValue: PROC [rules: Rules, id: ATOM, value: INT, scale: INT _ 1]; <> FillInTemplate: PROC [rules: Rules, template: Rope.ROPE, filled: Rope.ROPE]; <> <<>> FetchRulesID: PROC [design: CD.Design] RETURNS [id: ATOM]; <<>> StoreRulesID: PROC [design: CD.Design, id: ATOM]; <<>> <> <> GetScaledValue: PROC [rules: Rules, id: ATOM] RETURNS [v: CD.Number, d: Rope.ROPE]; <> <<>> MinWidth: PROC [rules: Rules, layer: CD.Layer] RETURNS [w: CD.Number, d: Rope.ROPE]; <> MaxWidth: PROC [rules: Rules, layer: CD.Layer] RETURNS [w: CD.Number, d: Rope.ROPE]; <> MinSpace: PROC [rules: Rules, l1, l2: CD.Layer] RETURNS [s: CD.Number, d: Rope.ROPE]; <> <<>> <> Rectangle: PROC [rules: Rules, layer: CD.Layer, l: INT, w: INT _ 0, scale: INT _ 1] RETURNS [rectangle: CD.Object]; <> <<>> <> <<>> <> <> <<>> <> <> <<>> END.