<> <> <> <<>> DIRECTORY CD, Core, CoreFlat, CoreGeometry, D2Basic, RProperties, Rope, Route, RTBasic, RTCoreUtil, RTStructure; GC: CEDAR DEFINITIONS = BEGIN <> <> <> RopeList: TYPE = LIST OF Rope.ROPE; Layer: TYPE = CD.Layer; Rect: TYPE = D2Basic.Rect; RefRect: TYPE = REF Rect; Pos: TYPE = D2Basic.Vector; Number: TYPE = D2Basic.Number; SideOrNone: TYPE = RTBasic.SideOrNone; Side: TYPE = RTBasic.Side; DirectionOrNone: TYPE = RTBasic.DirectionOrNone; Direction: TYPE = RTBasic.Direction; PropList: TYPE = RProperties.PropList; <> Error: ERROR [errorType: ErrorType _ callingError, explanation: Rope.ROPE _ NIL]; Signal: SIGNAL [signalType: ErrorType _ callingError, explanation: Rope.ROPE _ NIL]; ErrorType: TYPE = {programmingError, callingError, noResource, designRuleViolation, other}; <> DesignRules: TYPE = REF DesignRulesRec; DesignRulesRec: TYPE = RECORD[ horizLayer, vertLayer: Rope.ROPE, horizRules, vertRules: Route.DesignRules, technology: CD.Technology, properties: PropList _ NIL]; metalHorizontalRules, metalVerticalRules: DesignRules; -- default design rules using $CmosB CreateDesignRules: PROC [technologyKey: ATOM, horizLayer, vertLayer: Rope.ROPE, properties: PropList _ NIL] RETURNS [designRules: DesignRules]; <> <> sideProp, bottomSideValue, rightSideValue, topSideValue, leftSideValue, noSideValue: ATOM; <> interestingProperties: RTCoreUtil.PropertyKeys; <> <> Parms: TYPE = REF ParmsRec; ParmsRec: TYPE = RECORD [ opt: Route.Optimization _ full, -- controls runtime vs quality signalIncomplete: BOOLEAN _ TRUE, -- SIGNAL if there are any incompletes signalSinglePinNets: BOOLEAN _ TRUE -- SIGNAL if there are any single pin nets ]; defaultParms: Parms; <> Context: TYPE = REF ContextRec; ContextRec: TYPE = RECORD [ name: Rope.ROPE _ NIL, -- name or the cell being constructed rules: DesignRules _ NIL, -- widths and spacings to be used structure: RTStructure.Structure _ NIL, -- structure specifications parms: Parms _ NIL, topology: REF ANY _ NIL, -- for internal use only topologicalOrder: REF ANY _ NIL, -- for internal use only properties: PropList _ NIL]; Result: TYPE = REF ResultRec; ResultRec: TYPE = RECORD[ context: Context, object: CD.Object, polyLength, metalLength, metal2Length, polyToMetal, metalToMetal2: INT _ 0, numIncompletes: INT _ 0, incompleteNets: RopeList _ NIL]; CreateStructure: PROC [cellType: Core.CellType, flattenCellType: RTCoreUtil.FlattenCellTypeProc _ NIL, pinFilter: RTStructure.CorePinFilterProc _ NIL, userData: REF ANY _ NIL, decoration: CoreGeometry.Decoration, defaultLib: CD.Design _ NIL] RETURNS [structure: RTStructure.Structure]; <> <<>> CreateContext: PROC [name: Rope.ROPE _ NIL, structure: RTStructure.Structure, designRules: DesignRules _ metalHorizontalRules, parms: Parms _ defaultParms, properties: PropList _ NIL] RETURNS [context: Context]; <> <<>> InitialPlace: PROC [structure: RTStructure.Structure, initFile: Rope.ROPE]; <> <> <> DoInitialGlobalRoute: PROC [context: Context]; <> DoImproveGlobalRoute: PROC [context: Context]; <> DoDetailRoute: PROC [context: Context] RETURNS [result: Result]; <> <> Destroy: PROC [context: Context]; <> END.