CabbagePrivate.mesa
Copyright Ó 1986, 1987 by Xerox Corporation. All rights reserved.
by Bryan Preas, April 2, 1987 11:09:58 am PST
DIRECTORY
Cabbage, CD, Connections, Core, HashTable, PWRoute, Rope, Route, RTBasic;
CabbagePrivate: CEDAR DEFINITIONS =
BEGIN
Handle: TYPE = REF HandleRec;
HandleRec: TYPE = RECORD [
name: Rope.ROPENIL,
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.