RouteUtil.mesa ///Route/RouteUtil.mesa
Bryan Preas August 13, 1985 4:20:55 pm PDT
Copyright © 1985 by Xerox Corporation. All rights reserved.
by Bryan Preas July 10, 1985 6:57:00 pm PDT
last edited by Bryan Preas July 10, 1985 6:57:07 pm PDT
DIRECTORY
Basics,
CD,
List,
Rope,
Route,
RoutePrivate;
RouteUtil: CEDAR DEFINITIONS =
BEGIN
LayerToRoutingLayer: PROC [routingArea: Route.RoutingArea, layer: Route.Layer] RETURNS [routingLayer: RoutePrivate.RoutingLayer];
RoutingLayerToLayer: PROC [routingArea: Route.RoutingArea, routingLayer: RoutePrivate.RoutingLayer] RETURNS [layer: Route.Layer];
GetNumberProp: PROC [properties: Route.PropList, key: REF ATOM, default: Route.Number] RETURNS [Route.Number];
Search for property key. If found return value else return default.
PutNumberProp: PROC [properties: Route.PropList, key: REF ATOM, number: Route.Number] RETURNS [Route.PropList];
Put key and number on properties.
Length: PROC [pos1, pos2: Route.Position] RETURNS [Route.Number];
return lenth of line segment from pos1 to pos2.
XYToPQ: PROC [routingArea: Route.RoutingArea, pos: Route.Position] RETURNS [pqPos: RoutePrivate.PQPosition];
convert a position from x-y to p-q space.
PQToXY: PROC [routingArea: Route.RoutingArea, pqPos: RoutePrivate.PQPosition] RETURNS [pos: Route.Position];
convert a position from p-q to x-y space.
SimpleCompare: PROCEDURE [result1, result2: Route.Number]
RETURNS [result: Basics.Comparison];
CompareResult: PROCEDURE [result1, result2: Route.RoutingResult]
RETURNS [result: Basics.Comparison];
CreateCDPin: PROC [name: Rope.ROPE, rect: CD.Rect, lev: CD.Layer←CD.undefLayer] RETURNS [cdPin: CD.Instance];
Create a ChipNDale pin. Calls CDPinObjects.CreatePinInstance but normalizes th rectangle first.
GetPinWidth: PROC [routingArea: Route.RoutingArea, connections: Route.PinList, channelDirection: Route.Direction] RETURNS [widestBranchPin, widestTrunkPin: Route.Number];
Find the widest pin in connections in channelDirection.
GetWidthWithContact: PROC [routingArea: Route.RoutingArea, branch: Route.Number] RETURNS [width: Route.Number] = INLINE{RETURN[MAX[routingArea.rules.contactSize, branch]]};
Find the width of a pin when contact is included.
Include: PROC [cell: CD.Object←NIL, ob: CD.Object,
position: CD.Position←[0, 0], orientation: CD.Orientation𡤀] RETURNS [application: CD.Instance];
include an object in a cell
AddPin: PROC [obj: Route.Object, pin: Route.Pin];
AddVia: PROC [obj: Route.Object, name: Rope.ROPE, pos, size: Route.Position, layer1, layer2: Route.Layer, cdLambda: Route.Number];
GetVia: PROC [size: Route.Position, layer1, layer2: Route.Layer, cdLambda: Route.Number] RETURNS [cell: Route.Object];
StitchVias: PROC [contact: Route.Object, size: Route.Position, layer1, layer2: Route.Layer, cdLambda: Route.Number] RETURNS [obj: Route.Object];
LineToRect: PROC [pos1, pos2: Route.Position, width: Route.Number] RETURNS [position: CD.Position, size: CD.Position];
convert a line and a width to a rectangle and an orgin
END.