DIRECTORY Basics, CD, DABasics, Real, RefTab, Rope, Route, RoutePrivate, RTBasic; RouteUtil: CEDAR DEFINITIONS IMPORTS Real = BEGIN LayerToRoutingLayer: PROC [rules: Route.DesignRules, layer: CD.Layer] RETURNS [routingLayer: RoutePrivate.RoutingLayerOrNone] ~ INLINE { RETURN[SELECT layer FROM rules.trunkLayer => trunk, rules.branchLayer => branch, ENDCASE => none]; }; RoutingLayerToLayer: PROC [rules: Route.DesignRules, routingLayer: RoutePrivate.RoutingLayer] RETURNS [layer: CD.Layer] ~ INLINE { RETURN[SELECT routingLayer FROM trunk => rules.trunkLayer, branch => rules.branchLayer, ENDCASE => CD.undefLayer]; }; RoutingLayerName: ARRAY RoutePrivate.RoutingLayerOrNone OF Rope.ROPE; Length: PROC [pos1, pos2: DABasics.Position] RETURNS [DABasics.Number] = INLINE { RETURN[Real.Round[Real.SqRt[Real.FAdd[Real.FMul[Real.FSub[pos1.x, pos2.x], Real.FSub[pos1.x, pos2.x]], Real.FMul[Real.FSub[pos1.y, pos2.y], Real.FSub[pos1.y, pos2.y]]]]]] }; XYToPQ: PROC [rules: Route.DesignRules, pos: DABasics.Position] RETURNS [pqPos: RTBasic.PQPos] ~ INLINE { RETURN[SELECT rules.trunkDirection FROM horizontal => [pos.x, pos.y], vertical => [pos.y, pos.x], ENDCASE => [-1, -1]]; }; PQToXY: PROC [rules: Route.DesignRules, pqPos: RTBasic.PQPos] RETURNS [pos: DABasics.Position] ~ INLINE { RETURN[SELECT rules.trunkDirection FROM horizontal => [pqPos.p, pqPos.q], vertical => [pqPos.q, pqPos.p], ENDCASE => [-1, -1]]; }; CompareResult: PROCEDURE [result1, result2: Route.ResultData] RETURNS [result: Basics.Comparison]; CreateCDPin: PROC [name: Rope.ROPE, rect: DABasics.Rect, lev: CD.Layer_CD.undefLayer] RETURNS [cdPin: CD.Instance]; GetWidthWithContact: PROC [rules: Route.DesignRules, branch: NAT] RETURNS [width: NAT] = INLINE {RETURN[MAX[rules.contactSize, branch]]}; Include: PROC [cell: CD.Object_NIL, ob: CD.Object, position: DABasics.Position_[0, 0], orientation: CD.Orientation_original] RETURNS [application: CD.Instance]; GetVia: PROC [size: DABasics.Position, layer1, layer2: CD.Layer, cdLambda: DABasics.Number] RETURNS [cell: CD.Object]; StitchVias: PROC [size: DABasics.Position, layer1, layer2: CD.Layer, cdLambda: DABasics.Number, viaTable: RefTab.Ref] RETURNS [obj: CD.Object]; LineToRect: PROC [pos1, pos2: DABasics.Position, width: DABasics.Number] RETURNS [position: DABasics.Position, size: DABasics.Position]; END. fRouteUtil.mesa Christian Le Cocq January 11, 1988 1:15:52 pm PST Copyright c 1985, 1987 by Xerox Corporation. All rights reserved. by Bryan Preas July 10, 1985 6:57:00 pm PDT last edited by Bryan Preas April 19, 1987 1:39:21 pm PDT return lenth of line segment from pos1 to pos2. convert a position from x-y to p-q space. convert a position from p-q to x-y space. Create a ChipNDale pin. Calls CDPinObjects.CreatePinInstance but normalizes the rectangle first. Find the width of a pin when contact is included. include an object in a cell convert a line and a width to a rectangle and an orgin Κ˜šœ™Icode™1—˜Jšœ Οmœ7™BJšœ*Οkœ™.Jšœ7ž™:—J˜šž ˜ Jšœžœ=˜GJ˜—JšΠln œžœž ˜Jšžœ˜ Jšœž˜˜š Οnœžœ#žœžœ3žœ˜ˆšžœžœž˜Kšœ˜Kšœ˜Kšžœ ˜—K˜K˜—š  œžœEžœ žœ žœ˜‚šžœžœž˜Kšœ˜Kšœ˜Kšžœžœ ˜—K˜K˜—š œžœ!žœžœ˜EK˜—š œžœ!žœžœ˜QKšžœ€˜ͺKšœ˜K™/K™—š  œžœ4žœžœžœ˜išžœžœž˜'Kšœ˜Kšœ˜Kšžœ˜—K˜K™)K™—š œžœ2žœžœ˜išžœžœž˜'Kšœ"˜"Kšœ ˜ Kšžœ˜—K˜K™)K™—š  œž œ%˜=Kšžœ˜$K˜—š  œžœ žœžœžœ žœ žœ ˜sKšœa™aK™—šΠbnœžœ$žœžœ žœžœžœžœ˜‰Kšœ1™1K™—š  œžœžœžœžœ ˜3Kšœ1žœžœžœ ˜mKšœ™K˜—š  œžœ+žœ#žœžœ ˜vK˜—š   œžœ+žœ9žœžœ ˜K˜—š  œžœ9žœ8˜ˆKšœ6™6—J™—Jšžœ˜J˜J˜—…— 6­