TimberWolf Systems, Inc. release version 1.2.3 date 8/28/95. Added SVR's SDL to TWtranslate. Fixed problem with TWtranslate reading LEF on IRIX/HP-UX platforms. Now ALIGN_SUPPLY_PINS option to the .blk file is working properly even with non-uniform port sizes. An error in this routine had caused the global router to place macro cells in the wrong place. This resulted in the compactor being called erroneously. Now avoid a crash in the global router when pins get mapped to the same node in the graph. Added check_orient to TimberWolfSC to insure that cells have the proper orientation. Fixed problem with erroneously detection syntax errors. Was converting strings beginning with E into numbers. Fixed problem with integer length pads output at non-integer locations. The annealing programs now do not crash when the schedule is set too fast during clustering. Fixed an off by 1 error with RIGIDLY FIXED cells. Now the global router removes cycles in the Steiner trees automatically. Now properly find all the blockages when automatically determining over the cell feedthru positions. Now incremental global routing can handle even prerouting with invalid routing. In addition, all dangling feeds are now removed in the global router. Now use the RMST when drawing data instead of the Euclidean MST. Added the SITE and TRACK data structures to handle the upcoming gate array version. Fixed floating point problem in the timing driven code caused by a faulty compiler. Parentheses rectified the situation. Added the CELL_ORIGIN keyword to make fixed constraints easier and more general. This version uses Tk 4.0. The iconbar now works properly and save the user configuration. In genrows, now allow the except keyword again. The global router was crashing when too many ports were specified at the same x location. Now properly scale the rigid constraints in the global router. Added new placement modification routines in order to place the power and ground buses. Below is an example Tcl script. # How to place the power matrix. This Tcl can be customized # to add/modify the placement of any design. # This Tcl script uses the following TimberWolf commands: # model_width # add_instance # place_instance # row_info # remove_overlap # This routine build up a power cell composed of 3 pieces : a single # left cell, multiple center cells, and a single right cell. proc place_power_cell { pos row max_width } { # symbolicName must be global in all procs for error messages. global symbolicName # first place the left cell. set width [model_width xvcc_l] set inst [add_instance xvcc_l] place_instance $inst RIGIDLY $pos BLOCK $row CELL_ORIGIN L C ORIENT 0 set pos [expr $pos+$width] # find width of the right cell and update max width. set cell_width [model_width xvcc_r] set max_width [expr $max_width-$cell_width-$width] # place the center cells set cell_width [model_width xvcc_m] for { } {$width <= $max_width} {set width [expr $width+$cell_width]} { set inst [add_instance xvcc_m] place_instance $inst RIGIDLY $pos BLOCK $row CELL_ORIGIN L C ORIENT 0 set pos [expr $pos+$cell_width] } # place the right cell set cell_width [model_width xvcc_r] set inst [add_instance xvcc_r] place_instance $inst RIGIDLY $pos BLOCK $row CELL_ORIGIN L C ORIENT 0 set width [expr $width+$cell_width] return $width } proc power_matrix { power_spacing power_width } { global numrows global symbolicName for {set row 1} {$row <= $numrows} {incr row} { # row_extent holds the row information (llx lly urx ury). # start is the beginning of row. # end is the end of row. set row_extent [row_info $row] set start [lindex $row_extent 0] set end [lindex $row_extent 2] for {set xpos [expr $start+$power_spacing]} {$xpos < $end} {set xpos \ [expr $xpos+$power_spacing]} { set width [place_power_cell $xpos $row $power_width] set xpos [expr $xpos+$width] } } # Must remove overlap to instantiate the rigidly fixed cells. remove_overlap } # Start the main routine. # Set the dimensions set power_spacing 300 set power_width 300 # Now call the power matrix tcl to instantiate the power matrix. power_matrix $power_spacing $power_width # Now redraw the data to see the changes. twmenu redraw # Change to on if you want to enter a graphics wait loop. do_wait off