DIRECTORY CD, CMosB, HashTable, OnionCoreArc, Rope; OnionCore: CEDAR DEFINITIONS IMPORTS CMosB = BEGIN ROPE: TYPE = Rope.ROPE; Side: TYPE = OnionCoreArc.Side; Arc: TYPE = OnionCoreArc.Arc; Seg: TYPE = OnionCoreArc.Seg; Net: TYPE = REF NetRec; NetRec: TYPE = RECORD [ name: ROPE, -- must be filled by the user width: INT _ 0, -- 0 default means minimum size routeEveryOuterSeg: BOOL _ TRUE, -- FALSE if there is redundancy in outer pins facing: BOOL _ FALSE, -- already facing chosen: BOOL _ FALSE, -- chosen for being routed eval: INT _ 0, -- evaluation function arc: Arc _ NIL, -- arc used by this net innerSegs, outerSegs, newInnerSegs: LIST OF Seg _ NIL -- pins of the net, position is relative to the [0, 0] of the interest rect of the outer. newInnerPins is used internally (pins for the next iteration) ]; IncludeInOuter: PROC [outer: CD.Object, nets: HashTable.Table, innerPos: CD.Position, innerSize, outerSize: CD.Position, radialLayer: CD.Layer _ CMosB.met, ringLayer: CD.Layer _ CMosB.met2] RETURNS [done: BOOL]; Center: PROC [inner, outer: CD.Object] RETURNS [innerPos: CD.Position]; END. <OnionCore.mesa Copyright c 1985 by Xerox Corporation. All rights reversed. Created by Bertrand Serlet, February 10, 1986 9:30:28 pm PST Bertrand Serlet, April 24, 1986 12:43:07 pm PST 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). Useful types Nets Onion ringing Nets is an association REF -> Net (REF can conveniently be a Core.Wire or a ROPE) Just adds the onion rings in outer The only fields that should be filled in nets are name, width, routeEveryOuterSeg, innerSegs and outerSegs. The nets table is modified in place, so watch out! Returns the innerPos needed for centering the inner in the outer. Usually that is what users want before refining by hand. ΚΧ˜– "Cedar" stylešœ™Jšœ Οmœ1™