DIRECTORY Cabbage, CD, Connections, Core, HashTable, PWRoute, Rope, Route, RTBasic; CabbagePrivate: CEDAR DEFINITIONS = BEGIN Handle: TYPE = REF HandleRec; HandleRec: TYPE = RECORD [ name: Rope.ROPE _ NIL, routeType: RouteType _ normal, size: CD.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: CD.Position _ [0, 0], object: Cabbage.Object _ NIL ]; DesignRules: TYPE = REF DesignRulesRec; DesignRulesRec: TYPE = RECORD[ horizParms, vertParms: ParmSet ]; ParmSet: TYPE = RECORD[ parms: PWRoute.RouterParams, 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 Route.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: CD.Position _ [0, 0], object: Cabbage.Object _ NIL, cellType: Core.CellType _ NIL]; Corners: TYPE = {bottomLeft, bottomRight, topRight, topLeft}; PowerDistribution: TYPE = REF PowerDistributionRec; PowerDistributionRec: TYPE = RECORD[ channels: ARRAY Route.Side OF Channel, power: ARRAY Route.Side OF Channel, switchBoxes: 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: Cabbage.Object, connections: Connections.Table, parms: Cabbage.PadRingParams, name: Rope.ROPE, routeType: CabbagePrivate.RouteType] RETURNS [handle: CabbagePrivate.Handle]; CheckInnerPos: PROC [handle: CabbagePrivate.Handle, innerPos: CD.Position]; DistributePower: PROC [handle: CabbagePrivate.Handle]; GlobalRoute: PROC [handle: CabbagePrivate.Handle]; DetailedRoute: PROC [handle: CabbagePrivate.Handle]; MakeChip: PROC [handle: CabbagePrivate.Handle] RETURNS [chip: Cabbage.Object]; END. ŒCabbagePrivate.mesa Copyright Σ 1986, 1987 by Xerox Corporation. All rights reserved. by Bryan Preas, April 2, 1987 11:09:58 am PST Κω˜šœ™JšœB™BJšœ-™-—J™šΟk ˜ Jšœ œ>˜IJ˜—šΟnœœ œ˜#Jš˜J˜Jšœœœ ˜šœ œœ˜Jšœ œœ˜J˜Jšœœ˜Jšœ"œ˜&Jšœ!œ˜%Jšœœ˜#Jšœœ˜Jšœ'œ˜+Jšœœ˜#Jšœ#œ˜'Jšœ'œ˜+Jšœ œ˜$Jšœ^˜^Jšœ˜—Icode˜Kšœ œ˜'K˜šœœœ˜!Kšœœ˜#Kšœ˜Kšœ˜—J˜Jšœ œœ˜'šœœœ˜Jšœ˜Jšœ˜—šœ œœ˜Jšœ˜Jšœ˜Jšœ˜J˜—Jšœœœ˜+šœœœ˜ Jš œ œ œ œœ˜0Jšœ˜—Jšœ œœœ˜)Jšœ œ\˜jJ˜Jšœœœ˜/šœœœ˜"Jšœ œ œ ˜&Jšœ œ œ˜%Jšœ˜—Jšœœœ˜3šœœœ˜$Jšœ œœ ˜*Jšœ œœ˜,Jšœ˜—šœ œœ˜Jšœœ˜#Jšœœ˜Jšœœ˜—šœ œ0˜=J˜—Jšœœœ˜3šœœœ˜$Jšœ œ œ ˜&Jšœœ œ ˜#Jšœ œ œ˜%Jšœ˜J˜—Kšœ œœ˜%š œœœœœœ˜TK˜—šœ œœ˜Kšœ!˜!K˜—šž œœ¨œ%œ!˜K˜—šž œœ+œ ˜KK˜—šžœœ!˜6K˜—šž œœ!˜2K˜—šž œœ!˜4K˜—Kšžœœ!œ˜NJ˜Jšœ˜—J˜J˜J˜—…— ™