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: Preas October 29, 1985 3:29:12 pm PST
DIRECTORY
PW,
Rope USING [ROPE];
PWRoute: CEDAR DEFINITIONS =
BEGIN
ROPE: TYPE = Rope.ROPE;
-- AbutChRoute: uses a channel router to connect adjacent objects; listOb contains objects that are to be interconnected by routing between each pair of objects. topListOb, bottomListOb (for AbutChRouteListX) and rightListOb, leftListOb (for AbutChRouteListY) carry pins that indicate nets to exit the channel from the ends; pin location are not significant for these objects. parms define routing layers and widths as well as how to construct hte nets from the pins. The returned object contains the objects in listOb in addition to objects that define the routing between pairs of objects; the size of the returned object is determined by area required for the routing.
AbutChRouteListX: PROC [design: PW.Design,
listOb: PW.ListOb,
bottomListOb: PW.ListOb ← NIL,
topListOb: PW.ListOb ← NIL,
params: RouterParams ← defaultRouterParams] RETURNS [obj: PW.Object];
AbutChRouteListY: PROC [design: PW.Design,
listOb: PW.ListOb,
leftListOb: PW.ListOb ← NIL,
rightListOb: PW.ListOb ← NIL,
params: RouterParams ← defaultRouterParams] RETURNS [obj: PW.Object];
-- AbutSBRoute: uses a switchBox router to connect adjacent objects. bottomOb, rightOb, topOb, leftOb define the pin positions and the size of the routing area. AbutSBRoute will fail interconntection for which it does not have room to route. The returned object is just the routing area.
HorV: TYPE = {horizontal, vertical};
AbutSbRoute: PROC [design: PW.Design,
bottomOb, rightOb, topOb, leftOb: PW.Object ← NIL,
trunkDir: HorV ← horizontal,
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", runs length of area
branchLayer: ROPE,       -- branch goes across the area
makeNetsProc: MakeNetsProc ← NIL,  -- NIL means pinName=netName
wireWidthProc: WireWidthProc ← NIL-- to control the width of a trunk 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.
RouteType: TYPE = {channel, switchBox};
MakeChannel: PUBLIC PROC[design: PW.Design, obj1, obj2, bottomOrLeftObj, topOrRightObj: PW.Object, params: RouterParams, isX: BOOL, routeType: RouteType] RETURNS [channel: PW.Object];
END.