DIRECTORY CD, CDDebug, CDIO, Commander, Convert, DABasics, Rope, Route, RoutePrivate; RouteTest12: CEDAR PROGRAM IMPORTS CD, CDDebug, CDIO, Commander, Convert, Rope, 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*8, 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; offset: INT _ IF runType = shiftRight AND bottomOrLeft THEN +11*4 ELSE IF runType = shiftLeft AND bottomOrLeft THEN -11*4 ELSE 0; eachPin[bottomOrLeft, pin.min*8 +offset, pin.max*8+offset, pin.depth, pin.layer]; pins _ pins.rest; ENDLOOP}; BrokenNet: Route.BrokenNetProc ~ { newLabel _ Rope.Cat[sourceNet, "-", Convert.RopeFromInt[regionNumber], "/", Convert.RopeFromInt[numberOfRegions]]}; MakeDDENets: PROC [] RETURNS [nets: LIST OF NetDef] ~ { Net5: PROC [ ] RETURNS [net5: NetDef] ~ { net5p1: Route.Pin _ NEW[Route.PinRec _ [118, 121, 0, metal, top]]; net5p6: Route.Pin _ NEW[Route.PinRec _ [52, 55, 0, metal, bottom]]; net5 _ NEW[NetDefRec _ ["net5", FALSE, FALSE, FALSE, 0, LIST[net5p1, net5p6]]]}; Net8: PROC [ ] RETURNS [net8: NetDef] ~ { net8p1: Route.Pin _ NEW[Route.PinRec _ [41, 44, 0, metal, top]]; net8p6: Route.Pin _ NEW[Route.PinRec _ [162, 165, 0, metal, bottom]]; net8 _ NEW[NetDefRec _ ["net8", FALSE, FALSE, FALSE, 0, LIST[net8p1, net8p6]]]}; Net14: PROC [ ] RETURNS [net14: NetDef] ~ { net14p1: Route.Pin _ NEW[Route.PinRec _ [162, 165, 0, metal, top]]; net14p4: Route.Pin _ NEW[Route.PinRec _ [118, 121, 0, metal, bottom]]; net14 _ NEW[NetDefRec _ ["net14", FALSE, FALSE, FALSE, 0, LIST[net14p1, net14p4]]]}; NetA: PROC [ ] RETURNS [netA: NetDef] ~ { netAp1: Route.Pin _ NEW[Route.PinRec _ [85, 88, 0, metal, top]]; netAp2: Route.Pin _ NEW[Route.PinRec _ [63, 66, 0, metal, bottom]]; netA _ NEW[NetDefRec _ ["netA", FALSE, FALSE, FALSE, 0, LIST[netAp1, netAp2]]]}; nets _ LIST[Net5[], Net8[], Net14[], NetA[]]; }; RunType: TYPE = {base, shiftLeft, shiftRight}; runType: RunType _ shiftRight; 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 _ "RouteTest12"; 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, metal2, metal, horizontal]; Route12: Commander.CommandProc ~{ nets: LIST OF NetDef _ MakeDDENets[]; object: CD.Object _ Route.Channel[EnumerateChannelNets, -12, 2022*8+76, rules, name, BrokenNet, NIL, nets].object; design: CD.Design _ CDDebug.Draw[object, technology].dummyDesign; design.mutability _ editable; [ ] _ CDIO.WriteDesign[design, name]; }; Commander.Register["Route12", Route12]; END. ¬RouteTest12.mesa Copyright Σ 1985, 1987, 1989 by Xerox Corporation. All rights reserved. Last Edited by: Preas, May 18, 1988 12:38:34 pm PDT Christian Le Cocq December 2, 1987 12:47:46 pm PST PROC [channelData: REF, eachNet: EachChannelNetProc]; PROC [channelData, netData: REF, eachPin: EachChannelPinProc]; [channelData, netData: REF, sourceNet: Label, regionNumber, numberOfRegions: NAT] RETURNS [newLabel: Label] Κ1˜Icodešœ™KšœH™Hšœ0Οk™3Kšœ/™2—K™š œ˜ Kšœ œ:˜K—K˜šΟn œœ˜K˜Kšœœ œ!˜:Kšœ˜K˜—šžœ$˜8Kšœœ™5Kšœœœ œ˜+šœœ˜Kšœ˜Kšœpœ˜‚Kšœ˜Kšœ˜ K˜——šžœ$˜8Kšœœ™>Kšœœœ œ ˜*šœœ˜Kšœ˜Kšœœ˜'Kšœœœ œœœœ œœœ˜‚KšœQ˜QKšœ˜Kšœ˜ K˜——šž œ˜"Kšœœ3œœ™kKšœs˜sK˜—š ž œœœœœ ˜7˜K™—šžœœœ˜)Kšœœ+˜BKšœœ,˜CKš œœœœœœ˜PK™—šžœœœ˜)Kšœœ)˜@Kšœœ.˜EKš œœœœœœ˜PK˜—šžœœœ˜+Kšœœ+˜CKšœœ.˜FKš œœœœœœ˜TK˜—šžœœœ˜)Kšœœ)˜@Kšœœ,˜CKš œœœœœœ˜PK˜—Kšœœ"˜-K˜K˜K˜—K˜Kšœ œ!˜.Kšœ˜K˜Kšœœœ ˜šœ œœ˜Kšœ œ˜Kšœ"œœ˜/Kšœ œœ˜Kšœ œ ˜Kšœ œœ œ˜"—K˜K˜Kšœ œ˜ Kšœ œœ˜7Kšœœ œ˜2Kšœœ œ˜4Kšœo˜oK˜šœ ž œž œ˜!Kšœœœ ž œ˜%KšœœVœ˜rK˜Kšœœ7˜AKšœ˜K˜Kšœœ˜'Kšœ˜K˜—šž œžœ˜'K˜—Kš˜—…— |Y