<> <> <> <> <<>> DIRECTORY CD, CDCells, CDIO, CDOps, DABasics, Rope, Route, RoutePrivate; RouteTest2: CEDAR PROGRAM IMPORTS CD, CDCells, CDIO, CDOps, Route = BEGIN EnumerateChannelNets: Route.EnumerateChannelNetsProc ~ { <> nets: LIST OF NetDef _ NARROW[channelData]; UNTIL nets = NIL DO net: NetDef _ nets.first; eachNet[net.name, EnumerateChannelPins, net.exitLeftOrBottom, net.exitRightOrTop, net.mayExit, net.trunkSize, NIL, net.netData]; nets _ nets.rest; ENDLOOP}; EnumerateChannelPins: Route.EnumerateChannelPinsProc ~ { <> pins: LIST OF Route.Pin _ NARROW[netData]; UNTIL pins = NIL DO pin: Route.Pin _ pins.first; bottomOrLeft: BOOL _ pin.side = bottom; eachPin[bottomOrLeft, 8*pin.min, 8*pin.max, 8*pin.depth, pin.layer]; pins _ pins.rest; ENDLOOP}; NetDef: TYPE = REF NetDefRec; NetDefRec: TYPE = RECORD [ name: Rope.ROPE, exitLeftOrBottom, exitRightOrTop: BOOL _ FALSE, mayExit: BOOL _ TRUE, trunkSize: CD.Number _ 0, netData: LIST OF Route.Pin _ NIL]; name: Rope.ROPE _ "RouteTest2"; technology: CD.Technology _ CD.FetchTechnology[$cmosB]; metal: CD.Layer _ CD.FetchLayer[technology, $met]; metal2: CD.Layer _ CD.FetchLayer[technology, $met2]; rules: Route.DesignRulesParameters _ Route.DefaultDesignRulesParameters[technology, metal, metal2, horizontal]; a1: Route.Pin _ NEW[Route.PinRec _ [40, 44, 0, metal2, bottom]]; a2: Route.Pin _ NEW[Route.PinRec _ [120, 124, 0, metal2, top]]; a3: Route.Pin _ NEW[Route.PinRec _ [200, 204, 0, metal2, top]]; a: NetDef _ NEW[NetDefRec _ ["a", TRUE, FALSE, TRUE, 0, LIST[a1, a2, a3]]]; b1: Route.Pin _ NEW[Route.PinRec _ [120, 124, 0, metal2, bottom]]; b2: Route.Pin _ NEW[Route.PinRec _ [40, 44, 0, metal2, top]]; b: NetDef _ NEW[NetDefRec _ ["b", FALSE, FALSE, TRUE, 0, LIST[b1, b2]]]; c1: Route.Pin _ NEW[Route.PinRec _ [96, 100, 0, metal2, bottom]]; c2: Route.Pin _ NEW[Route.PinRec _ [146, 150, 0, metal2, top]]; c: NetDef _ NEW[NetDefRec _ ["c", FALSE, FALSE, TRUE, 0, LIST[c1, c2]]]; d1: Route.Pin _ NEW[Route.PinRec _ [146, 150, 0, metal2, bottom]]; d2: Route.Pin _ NEW[Route.PinRec _ [96, 100, 0, metal2, top]]; d: NetDef _ NEW[NetDefRec _ ["d", FALSE, FALSE, TRUE, 0, LIST[d1, d2]]]; e1: Route.Pin _ NEW[Route.PinRec _ [60, 64, 0, metal2, bottom]]; e2: Route.Pin _ NEW[Route.PinRec _ [110, 114, 0, metal2, top]]; e: NetDef _ NEW[NetDefRec _ ["e", FALSE, FALSE, TRUE, 0, LIST[e1, e2]]]; f1: Route.Pin _ NEW[Route.PinRec _ [60, 64, 0, metal2, top]]; f2: Route.Pin _ NEW[Route.PinRec _ [80, 90, 0, metal2, top]]; f3: Route.Pin _ NEW[Route.PinRec _ [220, 224, 0, metal2, top]]; f4: Route.Pin _ NEW[Route.PinRec _ [68, 72, 0, metal2, bottom]]; f5: Route.Pin _ NEW[Route.PinRec _ [212, 216, 0, metal2, bottom]]; f: NetDef _ NEW[NetDefRec _ ["f", FALSE, TRUE, TRUE, 0, LIST[f1, f2, f3, f4, f5]]]; g1: Route.Pin _ NEW[Route.PinRec _ [212, 216, 0, metal2, top]]; g2: Route.Pin _ NEW[Route.PinRec _ [238, 242, 0, metal2, top]]; g: NetDef _ NEW[NetDefRec _ ["g", FALSE, FALSE, TRUE, 0, LIST[g1, g2]]]; h1: Route.Pin _ NEW[Route.PinRec _ [238, 242, 0, metal2, bottom]]; h2: Route.Pin _ NEW[Route.PinRec _ [248, 260, 0, metal2, top]]; h: NetDef _ NEW[NetDefRec _ ["h", FALSE, FALSE, TRUE, 0, LIST[h1, h2]]]; nets: LIST OF NetDef _ LIST[a, b, c, d, e, f, g, h]; object: CD.Object _ Route.Channel[EnumerateChannelNets, 8*0, 8*264, rules, name, NIL, NIL, nets].object; design: CD.Design _ CDOps.CreateDesign[technology]; [ ] _ CDCells.IncludeOb[design: design, ob: object]; [ ] _ CDIO.WriteDesign[design, name]; END.