PWRoute.mesa
Copyright © 1985 by Xerox Corporation. All rights reserved.
Created by Louis Monier August 15, 1985 2:23:45 pm PDT
Last Edited by: Louis Monier August 22, 1985 12:31:52 pm PDT
Bertrand Serlet August 28, 1985 6:42:44 pm PDT
DIRECTORY
PW,
Rope USING [ROPE];
PWRoute: CEDAR DEFINITIONS =
BEGIN
ROPE: TYPE = Rope.ROPE;
-- AbutRoute: uses a channel router to connect adjacent objects
AbutRouteListX: PROC [design: PW.Design,
listOb: PW.ListOb,
topListOb: PW.ListOb ← NIL,
bottomListOb: PW.ListOb ← NIL,
params: RouterParams ← defaultRouterParams] RETURNS [obj: PW.Object];
AbutRouteListY: PROC [design: PW.Design,
listOb: PW.ListOb,
rightListOb: PW.ListOb ← NIL,
leftListOb: PW.ListOb ← NIL,
params: RouterParams ← defaultRouterParams] RETURNS [obj: PW.Object];
-- All the parameters for the channel router
RouterParams: TYPE = REF RouterParamsRec;
RouterParamsRec: TYPE = RECORD [
trunkLayer: ROPE,       -- "poly", "metal" or "metal2"
branchLayer: ROPE,       -- branch goes accross
makeNetsProc: MakeNetsProc ← NIL,  -- NIL means pinName=netName
wireExtendProc: WireExtendProc ← NIL,-- to contact pin to wire
wireWidthProc: WireWidthProc ← NIL-- to control the width of a wire
];
-- build the equivalent classes (nets) of pins
MakeNetsProc: TYPE = PROC[pinName: ROPE] RETURNS [netName: ROPE];
-- how to connect to a pin
WireExtendProc: TYPE = PROC RETURNS [PW.Object];
-- width of the wire for a given net
WireWidthProc: TYPE = PROC [netName: ROPE] RETURNS [wireWidth: INT];
defaultRouterParams: RouterParams;
-- Given two cells that we plan to abut, this module parses the corresponding edges, extracts the pins, builds nets according to the names on the pins, then calls the router to produce a cell containing the channel routing.
MakeChannel: PUBLIC PROC[design: PW.Design, obj1, obj2, topOrRightObj, bottomOrLeftObj: PW.Object, params: RouterParams, isX: BOOL] RETURNS [channel: PW.Object];
END.