DIRECTORY CD, CDBasics, PW, PWRoute, Rope; PWRouteTestA: CEDAR PROGRAM IMPORTS CD, CDBasics, PW, PWRoute = BEGIN ROPE: TYPE = Rope.ROPE; IRSize: PROC [obj: PW.Object] RETURNS [size: CD.Position] = {size _ CDBasics.SizeOfRect[CD.InterestRect[obj]]}; TestChRouterYA: PW.UserProc = BEGIN routerParams: PWRoute.RouterParams _ NEW[PWRoute.RouterParamsRec _ [trunkLayer: "metal", branchLayer: "metal2", signalSinglePinNets: FALSE, signalBreakAtExit: FALSE]]; top: PW.Object _ PW.Get[design, "-no name@585"]; bottom: PW.Object _ PW.Get[design, "-no name@573"]; test: PW.Object _ PWRoute.AbutChRouteListY[LIST[bottom, top], NIL, NIL, routerParams]; RETURN[test]; END; TestSb2SidesB: PW.UserProc = BEGIN routerParams: PWRoute.RouterParams _ NEW[PWRoute.RouterParamsRec _ [trunkLayer: "metal", branchLayer: "metal2", signalSinglePinNets: TRUE]]; vertical: PW.Object _ PW.Get[design, "Vertical"]; horizontal: PW.Object _ PW.Get[design, "Horizontal"]; sb: PW.Object _ PWRoute.AbutSbRoute[NIL, vertical, horizontal, NIL, horizontal, routerParams]; row: PW.Object _ PW.AbutListX[LIST[sb, vertical]]; test: PW.Object _ PW.CreateEmptyCell[]; dy: INT _ IRSize[row].y; [] _ PW.IncludeInCell[test, horizontal, [0, dy]]; [] _ PW.IncludeInCell[test, row, [0 , 0]]; PW.RepositionCell[test]; RETURN[test]; END; TestSbRouterHA: PW.UserProc = BEGIN routerParams: PWRoute.RouterParams _ NEW[PWRoute.RouterParamsRec _ [trunkLayer: "metal", branchLayer: "metal2", technologyKey: design.technology.key, opt: noIncompletes, signalSinglePinNets: FALSE]]; rightOrig: PW.Object _ PW.Get[design, "SbRight"]; rightXfer: PW.Object _ PWRoute.XferPins[design.technology.key, rightOrig, left, 50, "metal"]; right: PW.Object _ PW.AbutX[rightXfer, rightOrig]; topOrig: PW.Object _ PW.Get[design, "SbTop"]; topXfer: PW.Object _ PWRoute.XferPins[design.technology.key, topOrig, bottom, 50, "metal2"]; top: PW.Object _ PW.AbutY[topXfer, topOrig]; bottomOrig: PW.Object _ PW.Get[design, "SbBottom"]; bottomXfer: PW.Object _ PWRoute.XferPins[design.technology.key, bottomOrig, top, 50, "metal2"]; bottom: PW.Object _ PW.AbutY[bottomOrig, bottomXfer]; sb: PW.Object _ PWRoute.AbutSbRoute[bottom, right, top, NIL, horizontal, routerParams]; column: PW.Object _ PW.AbutListY[LIST[bottom, sb, top]]; test: PW.Object _ PW.CreateEmptyCell[]; dy1: INT _ IRSize[bottom].y; dx1: INT _ 0; dx2: INT _ IRSize[column].x; [] _ PW.IncludeInCell[test, column, [dx1 , 0]]; [] _ PW.IncludeInCell[test, right, [dx1 + dx2, dy1]]; PW.RepositionCell[test]; RETURN[test]; END; PW.Register[TestChRouterYA, "TestChRouterYA"]; PW.Register[TestSbRouterHA, "TestSbRouterHA"]; PW.Register[TestSb2SidesB, "TestSb2SidesB"]; END. RPWRouteTestA.mesa Copyright c 1984, 1986 by Xerox Corporation. All rights reversed. Last Edited by: Preas, February 12, 1986 2:38:05 pm PST Use with the file PWRouteTestA.dale to test routing: PWRoute.load cdread PWRouteTestA or PWRouteTestB run PWRouteTestA middle click P in the ChipNDale viewer select the appropriate generator ΚS˜– "Cedar" stylešœ™Jšœ Οmœ7™BJ™7J˜—šœ4™4Jšœ ™ Jšœ#™#Jšœ™J™&J™ —J˜šΟk œ˜ Jšœžœ˜ —J˜šœžœžœ˜Jšžœžœ ˜$Jšžœ˜J˜Jšžœžœžœ˜J˜š Οnœžœžœžœžœ ˜;Jšœ3˜3J˜—šΟbœžœ ˜Jšž˜J˜Jšœ%žœ˜§J˜Jšœžœ žœ˜0Jšœžœ žœ˜3Jš œžœ#žœžœžœ˜VJšžœ˜ Jšžœ˜—J˜š  œžœ ˜Jšž˜J˜Jšœ%žœd˜ŒJ˜Jšœ žœ žœ˜1Jšœ žœ žœ˜5JšœžœX˜^Jšœžœ žœ žœ˜2Jšœžœ žœ˜'Jšœžœ˜Jšœžœ*˜1Jšœžœ#˜*J˜Jšžœ˜ Jšžœ˜—J˜š œžœ ˜Jšž˜J˜Jšœ%žœŸ˜ΗJ˜Jšœ žœ žœ˜1Jšœ žœ žœ?˜]Jšœžœ žœ˜2Jšœ žœ žœ˜-Jšœ žœ žœ@˜\Jšœžœ žœ˜,Jšœ žœ žœ˜3Jšœ žœ žœ@˜_Jšœžœ žœ˜5JšœžœQ˜WJšœžœ žœ žœ˜8Jšœžœ žœ˜'Jšœžœ˜Jšœžœ˜ Jšœžœ˜Jšœžœ(˜/Jšœžœ.˜5J˜Jšžœ˜Jšžœ˜J˜—Jšžœ,˜.Jšžœ,˜.Jšžœ*˜,Jšžœ˜—J˜—…— t