DIRECTORY CD, CDCells, CDDirectory, CDIO, CDOps, Rope, Route, RouteUtil, TerminalIO; RouteTestB: CEDAR PROGRAM IMPORTS CD, CDCells, CDDirectory, CDIO, CDOps, Rope, Route, RouteUtil, TerminalIO SHARES Route = BEGIN a1, a2, a3, a4, a5, b1, b2, c1, c2, d1, d2, e1, e2, f1, f2, f3, f4, f5, f6, g1, g2, h1, h2: Route.Pin; a1cd, a2cd, a3cd, a4cd, a5cd, b1cd, b2cd, c1cd, c2cd, d1cd, d2cd, e1cd, e2cd, f1cd, f2cd, f3cd, f4cd, f5cd, f6cd, g1cd, g2cd, h1cd, h2cd: CD.Instance; result: Route.RoutingResult; design: CD.Design; object: CD.Object; technology: CD.Technology _ CD.FetchTechnology[$cmos]; metal: Route.Layer _ CD.FetchLayer[technology, $met]; metal2: Route.Layer _ CD.FetchLayer[technology, $met2]; rules: Route.DesignRules _ Route.CreateDesignRules[$cmos, metal, metal2, horizontal]; routingArea: Route.RoutingArea _ Route.CreateRoutingArea["RouteTestB", rules]; Route.IncludeRoutingAreaSide[routingArea, bottom, [0, 0]]; Route.IncludeRoutingAreaSide[routingArea, top, [0, 0]]; Route.IncludeRoutingAreaSide[routingArea, left, [0, 0]]; a1cd _ RouteUtil.CreateCDPin["a1", [8, 0, 24, -8], metal2]; a1 _ Route.CreatePin[a1cd, bottom]; a2cd _ RouteUtil.CreateCDPin["a2", [8, 0, 12, 8], metal2]; a2 _ Route.CreatePin[a2cd, top]; a3cd _ RouteUtil.CreateCDPin["a3", [44, 0, 52, 8], metal2]; a3 _ Route.CreatePin[a3cd, top]; a4cd _ RouteUtil.CreateCDPin["a4", [44, 0, 52, 8], metal2]; a4 _ Route.CreatePin[a4cd, bottom]; a5cd _ RouteUtil.CreateCDPin["a5", [0, 0, 0, 0], metal]; a5 _ Route.CreatePin[a5cd, left]; Route.IncludeNet[routingArea, "a", LIST[a1, a2, a3, a4, a5]]; b1cd _ RouteUtil.CreateCDPin["b1", [64, 0, 68, -8], metal2]; b1 _ Route.CreatePin[b1cd, bottom]; b2cd _ RouteUtil.CreateCDPin["b2", [64, 0, 68, 8], metal2]; b2 _ Route.CreatePin[b2cd, top]; Route.IncludeNet[routingArea, "b", LIST[b1, b2]]; c1cd _ RouteUtil.CreateCDPin["c1", [90, 0, 98, -8], metal2]; c1 _ Route.CreatePin[c1cd, bottom]; c2cd _ RouteUtil.CreateCDPin["c2", [150, 0, 158, 8], metal2]; c2 _ Route.CreatePin[c2cd, top]; Route.IncludeNet[routingArea, "c", LIST[c1, c2]]; d1cd _ RouteUtil.CreateCDPin["d1", [150, 0, 158, -8], metal2]; d1 _ Route.CreatePin[d1cd, bottom]; d2cd _ RouteUtil.CreateCDPin["d2", [90, 0, 98, 8], metal2]; d2 _ Route.CreatePin[d2cd, top]; Route.IncludeNet[routingArea, "d", LIST[d1, d2]]; e1cd _ RouteUtil.CreateCDPin["e1", [190, 0, 198, -8], metal2]; e1 _ Route.CreatePin[e1cd, bottom]; e2cd _ RouteUtil.CreateCDPin["e2", [170, 0, 178, 8], metal2]; e2 _ Route.CreatePin[e2cd, top]; Route.IncludeNet[routingArea, "e", LIST[e1, e2]]; f1cd _ RouteUtil.CreateCDPin["f1", [170, 0, 178, -8], metal2]; f1 _ Route.CreatePin[f1cd, bottom]; f2cd _ RouteUtil.CreateCDPin["f2", [190, 0, 198, 8], metal2]; f2 _ Route.CreatePin[f2cd, top]; f3cd _ RouteUtil.CreateCDPin["f3", [210, 0, 218, 8], metal2]; f3 _ Route.CreatePin[f3cd, top]; f4cd _ RouteUtil.CreateCDPin["f4", [210, 0, 218, -8], metal2]; f4 _ Route.CreatePin[f4cd, bottom]; f5cd _ RouteUtil.CreateCDPin["f5", [0, 0, 0, 0], metal]; f5 _ Route.CreatePin[f5cd, right]; f6cd _ RouteUtil.CreateCDPin["f6", [0, 0, 0, 0], metal]; f6 _ Route.CreatePin[f6cd, left]; Route.IncludeNet[routingArea, "f", LIST[f1, f2, f3, f4, f5, f6]]; g1cd _ RouteUtil.CreateCDPin["g1", [230, 0, 238, -8], metal2]; g1 _ Route.CreatePin[g1cd, bottom]; g2cd _ RouteUtil.CreateCDPin["g1", [230, 0, 238, 8], metal2]; g2 _ Route.CreatePin[g2cd, top]; Route.IncludeNet[routingArea, "g", LIST[g1, g2]]; h1cd _ RouteUtil.CreateCDPin["h1", [250, 0, 258, -8], metal2]; h1 _ Route.CreatePin[h1cd, bottom]; h2cd _ RouteUtil.CreateCDPin["h2", [250, 0, 258, 8], metal2]; h2 _ Route.CreatePin[h2cd, top]; Route.IncludeNet[routingArea, "h", LIST[h1, h2]]; result _ Route.ChannelRoute[routingArea, [[0, 0], [270, 0], [0, 30], [-10, 0]], [0, 0, 270, 30]]; design _ CDOps.CreateDesign[technology]; object _ Route.RetrieveRouting[result, result.routingArea.name, NIL, NIL].object; [ ] _ CDCells.IncludeOb[design: design, cell: NIL, ob: object, position: [0, 0], orientation: 0, cellCSystem: interrestCoords, obCSystem: interrestCoords, mode: dontPropagate]; IF CDIO.WriteDesign[design, result.routingArea.name] THEN BEGIN newCellName: Rope.ROPE _ CDDirectory.Name[object]; IF ~Rope.Equal[result.routingArea.name, newCellName] THEN TerminalIO.WriteRope[Rope.Cat["cell name changed to: ", newCellName, "\n"]]; END ELSE TerminalIO.WriteRope["Error: design not written\n"]; END. Ύ///route/RouteTestB.mesa Copyright c 1985 by Xerox Corporation. All rights reserved. Last Edited by: Preas, July 17, 1985 11:44:46 am PDT Bryan Preas August 23, 1985 6:25:50 pm PDT ΚK˜Jšœ™Jšœ Οmœ1™<™4Icode™*—J™šΟk œ˜ Jšžœ˜J˜J˜ Jšžœ˜J˜Jšœ˜Jšœ˜J˜ Jšœ ˜ —J˜šœ žœž˜J˜Jšžœžœžœ+˜QJšžœ˜—˜Jšž˜Jšœf˜fJšœ–˜–Jšœ˜Jšœžœ˜Jšœžœ˜J˜Jšœ žœžœ˜6Jšœ5˜5Jšœ7˜7JšœU˜UJšœN˜NJšœ:˜:Jšœ7˜7Jšœ8˜8Jšœ;˜;Jšœ#˜#Jšœ:˜:Jšœ ˜ Jšœ;˜;Jšœ ˜ Jšœ;˜;Jšœ#˜#Jšœ8˜8Jšœ!˜!Jšœ#žœ˜=Jšœ<˜˜>Jšœ#˜#Jšœ;˜;Jšœ ˜ Jšœ#žœ ˜1Jšœ>˜>Jšœ#˜#Jšœ=˜=Jšœ ˜ Jšœ#žœ ˜1Jšœ>˜>Jšœ#˜#Jšœ=˜=Jšœ ˜ Jšœ=˜=Jšœ ˜ Jšœ>˜>Jšœ#˜#Jšœ8˜8Jšœ"˜"Jšœ8˜8Jšœ!˜!Jšœ#žœ˜AJšœ>˜>Jšœ#˜#Jšœ=˜=Jšœ ˜ Jšœ#žœ ˜1Jšœ>˜>Jšœ#˜#Jšœ=˜=Jšœ ˜ Jšœ#žœ ˜1Jšœa˜aJšœ(˜(Jšœ@žœžœ ˜Qšœ(˜(Jšœ9˜9JšœO˜O—J˜šžœžœ/ž˜:Jšž˜Jšœžœ˜2šžœ3ž˜9JšœL˜L—Jšž˜—šž˜J˜4J˜—Jšžœ˜—J˜J˜—…—$-