<> <> <> <> <> DIRECTORY CD, Connections, Rope, Route; Cabbage: CEDAR DEFINITIONS = BEGIN <> <> <> <> <> <> <> <<1. Currently wire widths specifications from Connections are transformed to net names. This means that there can be only one wire width per net name.>> <<2. 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.>> <<3. 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}; <> <<-- All the parameters for the channel and switchbox router>> PadRingParams: TYPE = REF PadRingParamsRec; PadRingParamsRec: TYPE = RECORD [ horizLayer: Rope.ROPE, -- "poly", "metal" or "metal2" vertLayer: Rope.ROPE, -- "poly", "metal" or "metal2" technologyKey: ATOM _ $cmosB, -- $cmosA or $cmosB outerBTChanWidth, outerLRChanWidth: INT _ 32, -- width of channel at periphery in lambdas powerBTCellWidth, powerLRCellWidth: INT _ 200, -- width of power at periphery in lambdas opt: Route.Optimization _ noIncompletes, -- controls runtime vs quality signalSinglePinNets: BOOLEAN _ TRUE -- SIGNAL if there are any single pin nets ]; <> defaultPadRingParams: PadRingParams; WireWidthProc: TYPE = PROC[netName: Rope.ROPE, context: REF ANY _ NIL] RETURNS [wireWidth: INT]; <> <> <> Center: PROC [inner, bottomLeft, bottom, bottomRight, right, topRight, top, topLeft, left: CD.Object, parms: Cabbage.PadRingParams] RETURNS [innerPos: CD.Position]; <> <> <<>> <> <> <> <> <> <> <<>> PadRoute: PROC [inner, bottomLeft, bottom, bottomRight, right, topRight, top, topLeft, left: CD.Object, innerPos: CD.Position, connections: Connections.Table, parms: PadRingParams _ defaultPadRingParams, name: Rope.ROPE _ NIL] RETURNS [chip: CD.Object]; PadLimitedRoute: PROC [inner, bottomLeft, bottom, bottomRight, right, topRight, top, topLeft, left: CD.Object, innerPos: CD.Position, connections: Connections.Table, parms: PadRingParams _ defaultPadRingParams, name: Rope.ROPE _ NIL] RETURNS [chip: CD.Object]; END.