DIRECTORY CD, CDBasics, CDCells, PW, PWRoute, Rope, RTBasic; PWRouteTestA: CEDAR PROGRAM IMPORTS CD, CDBasics, CDCells, PW, PWRoute, RTBasic = BEGIN ROPE: TYPE = Rope.ROPE; IRSize: PROC [obj: PW.Object] RETURNS [size: CD.Position] = {size _ CDBasics.SizeOfRect[CD.InterestRect[obj]]}; TestChRouterXA: PW.UserProc = BEGIN routerParams: PWRoute.RouterParams _ NEW[PWRoute.RouterParamsRec _ [trunkLayer: "metal2", branchLayer: "metal"]]; left: CD.Object_ PW.Get[design, "LtPadRouteLeft"]; right: CD.Object_ PW.Get[design, "LtPadRouteRight"]; bottom: CD.Object_ PW.Get[design, "LtPadRouteBottom"]; test: CD.Object_ PWRoute.AbutChRouteListX[LIST[left, right], LIST[bottom], NIL, routerParams]; RETURN[test]; END; TestChRouterYA: PW.UserProc = BEGIN routerParams: PWRoute.RouterParams _ NEW[PWRoute.RouterParamsRec _ [trunkLayer: "metal", branchLayer: "metal2", signalSinglePinNets: FALSE, signalBreakAtExit: FALSE]]; top: CD.Object_ PW.Get[design, "-no name@585"]; bottom: CD.Object_ PW.Get[design, "-no name@573"]; test: CD.Object_ PWRoute.AbutChRouteListY[LIST[bottom, top], NIL, NIL, routerParams]; 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: CD.Object_ PW.Get[design, "SbRight"]; rightXfer: CD.Object_ PWRoute.XferPins[design.technology.key, rightOrig, left, 50, "metal"]; right: CD.Object_ PW.AbutX[rightXfer, rightOrig]; topOrig: CD.Object_ PW.Get[design, "SbTop"]; topXfer: CD.Object_ PWRoute.XferPins[design.technology.key, topOrig, bottom, 50, "metal2"]; top: CD.Object_ PW.AbutY[topXfer, topOrig]; bottomOrig: CD.Object_ PW.Get[design, "SbBottom"]; bottomXfer: CD.Object_ PWRoute.XferPins[design.technology.key, bottomOrig, top, 50, "metal2"]; bottom: CD.Object_ PW.AbutY[bottomOrig, bottomXfer]; sb: CD.Object_ PWRoute.AbutSbRoute[bottom, right, top, NIL, horizontal, routerParams]; column: CD.Object_ PW.AbutListY[LIST[bottom, sb, top]]; test: CD.Object_ CDCells.CreateEmptyCell[]; dy1: INT _ IRSize[bottom].y; dx1: INT _ 0; dx2: INT _ IRSize[column].x; [] _ CDCells.IncludeOb[cell: test, ob: column, trans: [[dx1 , 0], original]]; [] _ CDCells.IncludeOb[cell: test, ob: right, trans: [[dx1 + dx2, dy1], original]]; RTBasic.RepositionCell[test]; RETURN[test]; END; PW.Register[TestChRouterXA, "TestChRouterXA"]; PW.Register[TestChRouterYA, "TestChRouterYA"]; PW.Register[TestSbRouterHA, "TestSbRouterHA"]; END. RPWRouteTestA.mesa Copyright c 1985, 1986 by Xerox Corporation. All rights reversed. Last Edited by: Preas, December 18, 1986 3:51:41 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 Κ7˜– "Cedar" stylešœ™Jšœ Οmœ7™BJšœ4Οk™7J˜—šœ4™4Jšœ ™ Jšœ#™#Jšœ™J™&J™ —J˜šž œ˜ Jšžœžœ˜2—J˜šΟn œžœžœ˜Jšžœžœžœ˜6Jšžœ˜J˜Jšžœžœžœ˜J˜š Ÿœžœžœ žœžœ ˜;Jšœžœ˜3J˜—šΠbnœžœ ˜Jšž˜J˜Jšœ%žœI˜qJ˜Jšœžœ žœ˜2Jšœžœ žœ ˜4Jšœžœ žœ!˜6Jš œžœ"žœžœ žœ˜^Jšžœ˜ Jšžœ˜J˜—š œžœ ˜Jšž˜J˜Jšœ%žœ]žœžœ˜§J˜Jšœžœ žœ˜/Jšœžœ žœ˜2Jš œžœ"žœžœžœ˜UJšžœ˜ Jšžœ˜—J˜J˜š œžœ ˜Jšž˜J˜Jšœ%žœ—žœ˜ΗJ˜Jšœ žœ žœ˜0Jšœ žœO˜\Jšœžœ žœ˜1Jšœ žœ žœ˜,Jšœ žœP˜[Jšœžœ žœ˜+Jšœ žœ žœ˜2Jšœ žœP˜^Jšœžœ žœ˜4Jšœžœ1žœ˜VJšœžœ žœ žœ˜7Jšœžœ#˜+Jšœžœ˜Jšœžœ˜ Jšœžœ˜JšœM˜MJšœS˜SJ˜Jšœžœ˜Jšžœ˜J˜—Jšžœ,˜.Jšžœ,˜.Jšžœ,˜.Jšžœ˜—J˜—…— 