DIRECTORY DABasics, CD, Connections, RefTab, Rope, Route; Cabbage: CEDAR DEFINITIONS = BEGIN 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}; 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 wireWidthProc: Cabbage.WireWidthProc _ NIL, -- to control the width of a trunk wire 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 _ full, -- 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]; MakeInner: PROC [oldInner: CD.Object, connections: Connections.Table, parms: PadRingParams] RETURNS [inner: CD.Object]; MakeOuter: PROC [oldOuter: CD.Object, side: DABasics.Side, connections: Connections.Table, parms: PadRingParams] RETURNS [outer: CD.Object]; 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. .Cabbage.mesa Copyright Ó 1986, 1987 by Xerox Corporation. All rights reserved. Created by Bryan Preas, May 21, 1986 2:59:20 pm PDT Last Edited by: Preas, May 20, 1986 2:37:00 pm PDT Bertrand Serlet April 29, 1987 5:35:11 pm PDT Theory This interface allows easy routing of interior of chips to pad frames. Interconnection requirements are specified by the Connections interface. The input objects are the interior of the chip, the four sides of the chip containing the pads, and the four corners of the pad frame. Signal connections to the corners are not allowed. Routing is performed in two modes: normal and pad limited. Normal routing is performed in eight areas: four channels whose length are defined by the dimensions of the interior object, and four switchboxes in the corners. Pins on the bonding pad sides are not allowed to cross the "seams" among the routing areas. Pad limited routing is performed in four areas: two channels whose length are defined by the dimensions of the interior object, and two switchboxes on the upper and lower surfaces. Pins on the bonding pad sides are not allowed to cross the "seams" among the routing areas. Nets with the names "Vdd" and "Gnd" are distinguished. The are not permitted to participate in constraint loops with each other. Pins of these nets on the side surfaces the conflict with pins of the other net are not included in the routing. Restrictions: 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 . Errors Types -- All the parameters for the channel and switchbox router The pad router will signal if design rule violations are found in the input. Proceeding from the signals may cause design rule violations in the routing!! Setting the Signal Booleans to FALSE should be used with caution!! width of the trunk for a specified net Preparing the input Returns the innerPos needed for centering the inner in the pad frame. This is usually what is desired. However the position of the inner cell can be positioned other than in the center. Refer to discussion of PadRoute. Extends the wires of oldInner to make an proper inner. The extension takes into account the routing layer. Not yet implemented. Extends the wires of oldPadRoute.Sides to make an proper PadRoute.Sides. The extension takes into account the routing layer. Not yet implemented. Route the chip Two procedured are supplied: PadRoute and PadLimitedRoute. PadRoute will work for all chips but sometimes does not exploit the area in the corners of pad limited chips well. PadLimitedRoute divides the routing areas differently to route pad limited chips better. inner is the interior part of the chip bottomLeft, bottom, bottomRight, right, topRight, top, topLeft, left are the objects in the pad ring; any may be NIL. Dimensions of the corner objects should not be smaller than the projections of their adjacent sides. The pad ring objects are "glued" together with wiring for those connections that are compatabel at the boundries. innerPos must place the inner object in the interior of the padring; otherwise it is ignored. The origin of the coordinate system is the lower left corner of the assemblrd pad ring. connections specifies those points to be connected parms specifies the physical parameters and the runtime options if name is specified, the chip is created with that name Note: This version requires that the inner object be positioned so that the "seams" between the routing areas (the projections of the edges of the inner object through the routing area) must not intersect a pin on the pad ring. Future versions will relax this restriction. Êô˜šœ ™ JšœB™BJšœ0Ïk™3Jšœ/™2Icodešœ-™-—J˜š œ˜ Jšœœ#˜/—J˜JšÐbnœœ œ˜"head™IbodyšœÌ™ÌM™:M™þM™‘M™ô™M™ÁM™ÒM™³M™ö——™JšÏnœœ9œœ˜QJšŸœœ9œœ˜SJšœ œL˜[—™KšÏc:™:Kšœœœ˜+šœœœ˜!Kšœœ ˜8Kšœœ ˜6Kšœœ  ˜2Kšœ'œ '˜SKšœ$œ +˜YKšœ$œ )˜XKšœ! ˜?Kšœœœ *˜NKšœ˜K˜—šœ¼œ™ßK˜—Kšœ$˜$K˜šœœœœ œœœœ œ˜`Kšœ'™'——™KšœÝ™Ýš ŸœœOœ'œ œ ˜¤K˜—Kšœ€™€š Ÿ œœ œ?œ œ ˜wK™—Kšœ’™’Kš Ÿ œœ œTœ œ ˜Œ—šœ™šœˆ™ˆK™Kšœ&™&KšœqœÚ™ÎKšœ¶™¶Kšœ2™2Kšœ?™?K™8—™KšŸœŽ™’K™—šŸœœOœœcœœœœ ˜ýK˜—KšŸœœOœœcœœœœ ˜„—Kšœ˜—…—*L