<> <> <> <> <<>> DIRECTORY DABasics, Cabbage, CD, Connections, Core, Rope, Route, RTBasic; CabbagePrivate: CEDAR DEFINITIONS = BEGIN Handle: TYPE = REF HandleRec; HandleRec: TYPE = RECORD [ name: Rope.ROPE _ NIL, routeType: RouteType _ normal, size: DABasics.Position _ [0, 0], vddNet, gndNet: Connections.Net _ NIL, connections: Connections.Table _ NIL, parms: Cabbage.PadRingParams _ NIL, rules: DesignRules _ NIL, powerDistribution: PowerDistribution _ NIL, globalRouting: GlobalRouting _ NIL, detailedRouting: DetailedRouting _ NIL, detailedRoutingPL: DetailedRoutingPL _ NIL, widthTable: Connections.Table _ NIL, inner, bottomLeft, bottom, bottomRight, right, topRight, top, topLeft, left: ObjectDescription ]; RouteType: TYPE ~ {normal, padLimited}; ObjectDescription: TYPE ~ RECORD[ origin, size: DABasics.Position _ [0, 0], object: CD.Object _ NIL ]; DesignRules: TYPE = REF DesignRulesRec; DesignRulesRec: TYPE = RECORD[ horizInsideParms, horizOutsideParms, vertInsideParms, vertOutsideParms: ParmSet ]; ParmSet: TYPE = RECORD[ parms: Route.DesignRulesParameters, rules: Route.DesignRules ]; GlobalRouting: TYPE = REF GlobalRoutingRec; GlobalRoutingRec: TYPE = RECORD[ exitLists: ARRAY Division OF ExitList _ ALL[NIL] ]; ExitList: TYPE = LIST OF Connections.Net; Division: TYPE = {bottomLeft, bottomRight, rightBottom, rightTop, topRight, topLeft, leftTop, leftBottom}; DetailedRouting: TYPE = REF DetailedRoutingRec; DetailedRoutingRec: TYPE = RECORD[ channels: ARRAY DABasics.Side OF Channel, switchBoxes: ARRAY Corners OF Channel ]; DetailedRoutingPL: TYPE = REF DetailedRoutingPLRec; DetailedRoutingPLRec: TYPE = RECORD[ channels: ARRAY RTBasic.LRSide OF Channel, switchBoxes: ARRAY RTBasic.TBSide OF Channel ]; Channel: TYPE = RECORD[ size, origin: DABasics.Position _ [0, 0], object: CD.Object _ NIL, cellType: Core.CellType _ NIL]; Corners: TYPE = {bottomLeft, bottomRight, topRight, topLeft}; PowerDistribution: TYPE = REF PowerDistributionRec; PowerDistributionRec: TYPE = RECORD[ channels: ARRAY DABasics.Side OF Channel, power: ARRAY DABasics.Side OF Channel, switchBoxes: ARRAY Corners OF Channel, powerCorners: ARRAY Corners OF Channel ]; SegmentSeq: TYPE = REF SegmentSeqRec; SegmentSeqRec: TYPE = RECORD[seq: SEQUENCE numSegments: NAT OF Connections.Segment]; SegmentPair: TYPE = RECORD[ seg1, seg2: Connections.Segment]; CreateHandle: PROC [inner, bottomLeft, bottom, bottomRight, right, topRight, top, topLeft, left: CD.Object, connections: Connections.Table, parms: Cabbage.PadRingParams, name: Rope.ROPE, routeType: CabbagePrivate.RouteType] RETURNS [handle: CabbagePrivate.Handle]; CheckInnerPos: PROC [handle: CabbagePrivate.Handle, innerPos: DABasics.Position]; DistributePower: PROC [handle: CabbagePrivate.Handle]; GlobalRoute: PROC [handle: CabbagePrivate.Handle]; DetailedRoute: PROC [handle: CabbagePrivate.Handle]; MakeChip: PROC [handle: CabbagePrivate.Handle] RETURNS [chip: CD.Object]; END.