<> <> <> <> DIRECTORY CD, Rope, Route, Connections; Cabbage: CEDAR DEFINITIONS = BEGIN <> <> <> <> <> <> <> <<1. Currently, it is a client requirement to place the interior object so that projections of its edges do not intersect pins on the bonding pad sides. This will be relaxed in future versions.>> <<2. Currently wire widths specifications from Connections are transformed to net names. This means that there can be only one wire width per net name. This will be relaxed when Connections is moved into Route.>> <<3. Incomplete routing may occur if the switchbox areas (the corners) are too small or too congested in a part of the switchbox. Automatic recovery is planned but not implemented.>> <<4. The portions of the left and right bonding pad sides that are routed with switchboxes can have only one net per portion. Also, these portions must have "sparse" connections: spacing should be much greater than the minimum pin-to-pin spacing .>> <> Error: ERROR [errorType: ErrorType _ callingError, explanation: Rope.ROPE _ NIL]; Signal: SIGNAL [errorType: ErrorType _ callingError, explanation: Rope.ROPE _ NIL]; ErrorType: TYPE = {programmingError, callingError, noResource, designRuleViolation, other}; <> ROPE: TYPE = Rope.ROPE; Side: TYPE ~ Route.Side; Object: TYPE = CD.Object; <> <<-- All the parameters for the channel and switchbox router>> PadRingParams: TYPE = REF PadRingParamsRec; PadRingParamsRec: TYPE = RECORD [ horizLayer: ROPE, -- "poly", "metal" or "metal2", runs length of area vertLayer: ROPE, -- branch goes across the area technologyKey: ATOM _ $cmosB, -- $cmosA or $cmosB opt: Route.Optimization _ full, -- controls runtime vs quality signalIncomplete: BOOLEAN _ TRUE, -- SIGNAL if there are any incompletes signalSinglePinNets: BOOLEAN _ TRUE -- SIGNAL if there are any single pin nets ]; <> defaultPadRingParams: PadRingParams; <> <> Center: PROC [inner, bottomLeft, bottom, bottomRight, right, topRight, top, topLeft, left: Object, parms: Cabbage.PadRingParams] RETURNS [innerPos: CD.Position]; <> MakeInner: PROC [oldInner: Object, connections: Connections.Table, parms: PadRingParams] RETURNS [inner: Object]; <<>> <> MakeOuter: PROC [oldOuter: Object, side: Side, connections: Connections.Table, parms: PadRingParams] RETURNS [outer: Object]; <> <> <<>> <> <> <> <> <> <> <<>> <> <<>> PadRoute: PROC [inner, bottomLeft, bottom, bottomRight, right, topRight, top, topLeft, left: Object, innerPos: CD.Position, connections: Connections.Table, parms: PadRingParams _ defaultPadRingParams, name: Rope.ROPE _ NIL] RETURNS [chip: Object]; PadLimitedRoute: PROC [inner, bottomLeft, bottom, bottomRight, right, topRight, top, topLeft, left: Object, innerPos: CD.Position, connections: Connections.Table, parms: PadRingParams _ defaultPadRingParams, name: Rope.ROPE _ NIL] RETURNS [chip: Object]; END.