DIRECTORY IO, Rope, SC, SCStats, TerminalIO; SCStatsImpl: CEDAR PROGRAM IMPORTS IO, TerminalIO EXPORTS SCStats = BEGIN WriteStats: PUBLIC PROC [result: SC.Result] ~ { stats: LIST OF SC.ChannelStats _ result.stats; TerminalIO.PutRope[text: "\n Routing Statistics"]; UNTIL stats = NIL DO netStats: LIST OF SC.NetEntry _ stats.first.netStats; TerminalIO.PutF[format: "\n\tchannel: %g", v1: IO.int[stats.first.channel]]; UNTIL netStats = NIL DO pinStats: LIST OF SC.PinEntry _ netStats.first.pinStats; ftStats: LIST OF SC.PinEntry _ netStats.first.ftStats; TerminalIO.PutF[format: "\n\t\tname: %g, leftExit: %g, rightExit: %g", v1: IO.rope[netStats.first.name], v2: IO.bool[netStats.first.leftExit], v3: IO.bool[netStats.first.rightExit]]; UNTIL ftStats = NIL DO TerminalIO.PutF[format: "\n\t\t\tfeedThroughBottom: %g, position: %g", v1: IO.bool[ftStats.first.bottom], v2: IO.int[ftStats.first.position]]; ftStats _ ftStats.rest; ENDLOOP; UNTIL pinStats = NIL DO TerminalIO.PutF[format: "\n\t\t\tbottom: %g, position: %g", v1: IO.bool[pinStats.first.bottom], v2: IO.int[pinStats.first.position]]; pinStats _ pinStats.rest; ENDLOOP; netStats _ netStats.rest; ENDLOOP; stats _ stats.rest; ENDLOOP; TerminalIO.PutRope[text: "\n End Routing Statistics\n"]; }; ReadStats: PUBLIC PROC [fileName: Rope.ROPE] RETURNS [stats: LIST OF SC.ChannelStats] ~ { }; END. ξSCStatsImpl.mesa Copyright Σ 1988 by Xerox Corporation. All rights reserved. Last Edited by: Preas, September 5, 1985 10:39:21 am PDT To print stats from SC placement and routing; set SCNewRouteImpl.keepStats _ TRUE to gather statistics outer list is of the channels next inner list is of the nets within this channel inner list is of the pins within the net within this channel inner list is of the pins within the net within this channel read as stats file and make a data structure Κ ˜codešœ™Kšœ<™<šœ5Οk™8K™—K™-Kšœ8™8—K™š œ˜ Kšœ"˜"—K˜šΟn œœ˜K˜Kšœœ ˜Kšœ ˜K˜—K˜šž œ œ œ ˜/Kšœœœœ˜.Kšœ2˜2šœ œ˜Jšœ™Kšœ œœ$˜5Kšœ/œ˜Lšœ œ˜Jšœ2™2Kšœ œœ'˜8Kšœ œœ&˜6KšœKœ œ$œ!˜Άšœ œ˜Jšœ<™