CabbagePrivate.mesa
Copyright Ó 1986, 1987 by Xerox Corporation. All rights reserved.
by Bryan Preas, September 30, 1987 1:00:37 pm PDT
Bertrand Serlet April 27, 1987 0:19:44 am PDT
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.