DIRECTORY CD, Rope; Onion: CEDAR DEFINITIONS = BEGIN ROPE: TYPE = Rope.ROPE; LayersParameters: TYPE = REF LayersParametersRec; LayersParametersRec: TYPE = RECORD [ radialLayer: CD.Layer, ringLayer: CD.Layer, ringWidth: RingWidthProc, wireExtendProc: WireExtendProc -- NIL means no extension wanted! ]; defaultLayersParameters: READONLY LayersParameters; -- = REF [ channelDefaultParameters: READONLY LayersParameters; -- = REF [ WireExtendProc: TYPE = PROC [width, length: INT] RETURNS [wire: CD.Object]; WireExtendMetToMet: WireExtendProc; WireExtendPolToMetForPads: WireExtendProc; RingWidthProc: TYPE = PROC [netName: ROPE] RETURNS [ringWidth: CD.Number]; RingWidthIs4l: RingWidthProc; IncludePin: PUBLIC PROC [cell: CD.Object, name: ROPE, layer: CD.Layer, size, position: CD.Position, orientation: CD.Orientation _ 0] RETURNS [newInst: CD.Instance]; Center: PROC [inner, outer: CD.Object] RETURNS [innerPos: CD.Position]; MakeInner: PROC [obj: CD.Object] RETURNS [inner: CD.Object]; Status: TYPE = {doneOnce, impossible, finishedAll}; LRSRoute: PROC [inner, outer: CD.Object, innerPos: CD.Position, params: LayersParameters _ defaultLayersParameters] RETURNS [cell: CD.Object, status: Status]; END. tOnion.mesa Copyright c 1985 by Xerox Corporation. All rights reversed. Created by Bertrand Serlet, March 26, 1986 2:35:35 pm PST Last Edited by: Serlet, July 5, 1985 3:10:53 pm PDT Onion is a smill and (relatively) efficient PadRing router implemented from a paper by Smith, Saxe, Newkirk and Mathews (Stanford; CH1813-5, 1982 IEEE). This method is called Loop Routing Scheme (LRS). Right now the interface is not really clean. Come and see me. The following type allows some technology-independance The default is radial wires in metal while the ring in metal2. It is strongly CMosB dependent. radialLayer: CMosB.met, ringLayer: CMosB.met2, ringWidth: RingWidthIs4l, wireExtendProc: WireExtendMetToMet ]; radialLayer: CMosB.met, ringLayer: CMosB.met2, ringWidth: RingWidthIs4l, wireExtendProc: WireExtendMetToMet ]; WireExtendProc creates an object which is going to be rotated to be added to the routing rings. Conceptuilly, it generates the horizontil wire connecting on the right side the inner to the outer (in this order). RingWidthProc takes a net name and returns the ringWidth for this net. Nets with different sizes will be routed on separated tracks. Just a useful proc waiting to be in PW (or CD) Returns the innerPos needed for centering the inner in the outer. Usuilly that is what users want before optimizing. Extends the wires of obj to make an proper inner. The extension takes into account the layer of outside pins. This only works for generating radial metal wires. It works, but it is mostly a hack, now, so avoid its use if possible by putting yourself metal pins at the edge of your chiclass. -- doneOnce means done once, and finishedAll means done many times, including the finil extension to the outer. -- innerPos is the location of the origin of inner in the coord system of outer. THIS ONE IS THE IMPORTANT ONE. Status is at the end either impossible or finishedAll. Κ ˜– "Cedar" stylešœ ™ Jšœ Οmœ1™Jšœ™Jšœ™JšœΟgœ™Jšœ"™"J™—J˜šŸœžœ  ˜?Jšœ™Jšœ™Jšœ‘œ™Jšœ"™"J™—J˜JšœΣ™ΣJš Οnœžœžœžœžœžœ ˜KJšŸœ˜#JšŸœ˜*J˜Jšœ„™„Jš Πbn œžœžœ žœžœ žœ ˜JJšŸ Πbgœ˜J˜J™.Jš’ œžœžœžœžœ žœžœžœžœ žœ ˜€J˜Jšœt™tJš ’œžœžœ žœ žœ ˜GJ˜Jšœ’™’Jš ’ œžœžœ žœ žœ ˜