<> <> <> <> <> <<>> DIRECTORY CD, Core, CoreGeometry, Rope, Route, DABasics, CoreRouteFlat; GC: CEDAR DEFINITIONS = BEGIN <> <> <> RopeList: TYPE = LIST OF Rope.ROPE; Layer: TYPE = CD.Layer; Rect: TYPE = DABasics.Rect; RefRect: TYPE = REF Rect; Pos: TYPE = DABasics.Position; Number: TYPE = DABasics.Number; SideOrNone: TYPE = DABasics.SideOrNone; Side: TYPE = DABasics.Side; Direction: TYPE = DABasics.Direction; ConnectionStrength: TYPE ~ {goodInternal, power, highImpedance, none}; LayoutStyle: TYPE ~ {ic, hybrid}; <> 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: Rope.ROPE, vertLayer: Rope.ROPE, horizParams: Route.DesignRulesParameters, vertParams: Route.DesignRulesParameters, horizRules: Route.DesignRules, vertRules: Route.DesignRules, technology: CD.Technology]; metalHorizontalRules: DesignRules; -- default design rules using $CmosB metalVerticalRules: DesignRules; -- default design rules using $CmosB CreateDesignRules: PROC[ technologyKey: ATOM, rulesKey: ATOM, horizLayer: Rope.ROPE, vertLayer: Rope.ROPE] RETURNS[designRules: DesignRules]; <> <> interestingProperties: LIST OF ATOM; -- interesting to GC <> defaultParms: Parms; Parms: TYPE = REF ParmsRec; ParmsRec: TYPE = RECORD [ opt: Route.Optimization _ full, -- controls runtime vs quality signalSinglePinNets: BOOL _ TRUE]; -- SIGNAL if any single pin nets <> 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: CoreRouteFlat.Structure _ NIL, -- structure specifications parms: Parms _ NIL, topology: REF ANY _ NIL, -- for internal use only topologicalOrder: REF ANY _ NIL]; -- for internal use only Result: TYPE = REF ResultRec; ResultRec: TYPE = RECORD[ context: Context, object: CD.Object, polyLength: INT _ 0, metalLength: INT _ 0, metal2Length: INT _ 0, polyToMetal: INT _ 0, metalToMetal2: INT _ 0, numIncompletes: INT _ 0, incompleteNets: RopeList _ NIL]; CreateContext: PROC[ name: Rope.ROPE _ NIL, structure: CoreRouteFlat.Structure, designRules: DesignRules _ metalHorizontalRules, parms: Parms _ defaultParms] RETURNS[context: Context]; <> <<>> InitialPlace: PROC[structure: CoreRouteFlat.Structure]; <> <> <> DoInitialGlobalRoute: PROC[context: Context, layoutStyle: LayoutStyle]; <> DoImproveGlobalRoute: PROC[context: Context, layoutStyle: LayoutStyle]; <> DoDetailRoute: PROC[context: Context, layoutStyle: LayoutStyle] RETURNS [result: Result]; <> <> Destroy: PROC[context: Context]; <> END.