Revision information on Qrouter 1.4
Revision information on Qrouter 1.3
Revision information on Qrouter 1.2
Revision information on Qrouter 1.1
Revision information on Qrouter 1.0
- posted: October 2, 2024 at 2:00am version: 1.4 revision: 88
Removed "static" from the definition of FreeNodeTable() in delays.c, which prevents an error "undefined symbol: FreeNodeTable" at run-time, depending on the compiler/linker. Thanks to Georgie Suarez for the bug fix.
- posted: August 28, 2023 at 2:00am version: 1.4 revision: 87
Fix return type for FreeNodeTable
Declare some internal helpers as static
Also: Move some static forward declarations from header to source file
Also: Fix duplicate write_def declaration
Also: Updated the version to go along with the merge of pull request #6 from Stefan Bruens (Jan 28, 2022; mea culpa).
- posted: March 13, 2023 at 2:00am version: 1.4 revision: 86
Updated the qrouter.tcl launch script to use [info sharedlibextension] which should make qrouter work properly on Mac OS (extension ".dylib") and no longer requires an exception on Windows (extension ".dll").
- posted: October 22, 2021 at 3:00am version: 1.4 revision: 85
Added a function declaration for write_def() that was missing from qrouter.h and needs to be present for some compilers not to fail (I'm talking to you, OS-X).
- posted: February 23, 2021 at 3:00am version: 1.4 revision: 84
Modified lef.c so that it correctly handles the assignment of predefined rotated via types when one of the top or bottom layers is square. This is now done in three passes, so vias that have both layers oriented in specific directions are selected first, if they exist, followed by vias with no specific orientation for one of the layers, followed by vias that have no specific orientation for either layer.
- posted: May 22, 2020 at 3:00am version: 1.4 revision: 83
Corrected a bad error in the last commit that causes all LEF macros to end up with random values for the origin, which has a disasterous effect on routing, as might be expected.
Updated the version so that the last commit (which corrects an error from May 11 that was fixed a few days later) gets mirrored to github, and gets into the tarball.
- posted: May 11, 2020 at 3:00am version: 1.4 revision: 82
Modified the LEF read command to optionally accept parentheses on the values after ORIGIN in a LEF file, which technically adheres to the spec, even though it is not accepted practice from the tools made by the same company that, ahem, wrote the spec.
- posted: February 24, 2020 at 5:16pm version: 1.4 revision: 81
And again. . .
- posted: February 24, 2020 at 5:13pm version: 1.4 revision: 80
Yet another VERSION update test.
- posted: February 24, 2020 at 4:54pm version: 1.4 revision: 79
Test update of VERSION
Trying again with VERSION update
- posted: February 24, 2020 at 4:40pm version: 1.4 revision: 78
Make some corrections to prevent qrouter from crashing when running on a configuration file from an incompatible version; especially, DEF TRACKS records needs to ignore unknown layers or layers above the specified number of route layers.
Added argument to the standard_route script for "nocleanup". If "true", then the stage3 routing is bypassed, which greatly speeds up the routing when the quality of the final routes is not a concern.
Also: Reverted the addition of write_delays() to the main() routine, as write_delays() depends on Tcl hash functions and therefore cannot be run in a non-Tcl build. Since non-Tcl builds are highly discouraged, this is not high on the to-do list.
Also: Modified qrouter so that it annotates the output DEF file directly with any antenna connections created to fix antenna violations, in addition to creating a text output of those connections. This lets the DEF file correctly and completely reflect the final routed design, even though magic does not use this information when importing the design for extraction. But it is mandatory to do this in conjunction with the DEF2Verilog tool that is used to create the final netlist.
Also: Removed the latest added code for automatically annotating the DEF file NETS section with added antenna violation fixes from the non-Tcl build (which does not support the antenna checks because they use Tcl hash functions).
Also: In case of a LEF file not being read, fixed an error caused by scale being zero. This lets the first failure caused by the lack of a LEF file to generate an error message and exit rather than crashing qrouter.
Also: Updated tkcon.tcl, which somehow was not corrected to use the full "-underline" keyword on text widget configuration. I am beginning to question whether there is a mutually exclusive implementation between Tk 8.5 and 8.6. . .
Also: Added FreeBSD comment to Makefile.
Also: Fixed compile error in antenna.c - Clang FreeBSD
Also: Fixed FreeBSD options in configure scripts
Also: Manually defined type for FreeBSD.
Also: Removed files in .gitignore from the repo
Also: Added extensions to qrouter to handle 90 degree rotations in DEF components, which were previously not handled.
Also: Added a "query" command in Tcl to query what qrouter thinks about the routability at any specific grid position in the design. The underlying routine is also linked to the "has no taps" error such that the same information can be printed when a DEF file is read in if the verbose level is greater than 1. This should be a significant help in diagnosing problems with routability.
Also: Some enhancements to the command "query" introduced in the last commit. See online documentation for full command description.
Also: Additional minor corrections and enhancements to the node information printing. During DEF read, if a node has no taps and is considered unroutable, useful information is printed about the tap and its potential connection positions, including any user-defined obstructions that were in the .cfg file (which is often a reason for an obstruction and can include things that are not specifically defined by the "user", such as power post locations). The main correction from what was there before is to restrict messages to grid positions that are marked as belonging to the node in question.
Also: Correction to last commit; did not handle case where some grid positions being queried might have a NULL node record.
Also: Once again expanded upon the diagnostics, adding a "watch" option to the "query grid" or "query position" commands. Applied after reading LEF but before reading DEF
Also: Further expanded on the diagnostic "query" command from the last few commits to include a "watch" option that can be used to set up a position to be watched when the geometry is analyzed for tap locations and obstructions, and print out information when a location is disabled due to obstruction analysis. Otherwise the "query" command only says that a position has been disabled, but can give no further information about why it was disabled.
Also: Additional expansion of node watching to include reporting when check_obstruct is called, and give a somewhat meaningful response as to why it was called.
Also: Added command "unblock" which causes the count_reachable_taps to apply the "technically routable" rule for all nodes, not just for nodes that have no available taps. This helps in the case that a tap has a false positive block nearby, but one barely-routable gridpoint is considered routable, so the false positive blocks are not removed. Subsequently, it becomes very easy for the one tap point to become unroutable due to an offset.
Also: Made some optimizations that help with pins that are catecorner to obstructions. Catecorner obstructions save both the x and y distances from the obstruction to the grid point, and the one requiring the least amount of offset is used to determine the tap offset and via orientation restrictions. The check_obstruct routine distinguishes between the cases of two obstructions on two adjacent sides, and one obstruction in a corner causing an obstruction from two directions. The first is declared unroutable so that the latter case can be assumed by the code that finds valid tap offsets. This change handles a number of cases that were previously causing trouble with some standard cell layouts.
Also: Corrected routine find_route_blocks() so that it does not segfault when a blockage is outside of the route grid (which was causing negative gridx or gridy values). Thanks to Alessandro De Laurenzis for the bug report and patch.
Also: Implemented distributed install using --dist-dir= during configuration, to install into a directory that is not the actual run-time directory, but also does not require appending the whole install directory to the end of DESTDIR.
Also: Corrected --with-distdir= option use of withval in configure.in.
Also: Added a missing exec_prefix definition at the top that should be substituted by the configure script.
Also: Added patch from Alessandro De Laurenzis for compilation on netbsd/ openbsd, and correcting a missing include of stdarg.h in graphics.c, which calls one of the Tcl routines that uses va_list.
Also: Based on the previous fix, added an include for stdarg.h to every C code file that includes qrouter.h; not sure that this is necessary, but it does no harm.
Also: Fixing -Wimplicit-function-declaration msgs flagged by clang
Also: Removed VERSION from .gitignore, and updated VERSION.
Also: Change in handling of VERSION due to change in ocd git script
- posted: February 18, 2020 at 3:00am version: 1.4 revision: 77
Fixing -Wimplicit-function-declaration msgs flagged by clang
- posted: February 10, 2020 at 3:00am version: 1.4 revision: 76
Added patch from Alessandro De Laurenzis for compilation on netbsd/ openbsd, and correcting a missing include of stdarg.h in graphics.c, which calls one of the Tcl routines that uses va_list.
Based on the previous fix, added an include for stdarg.h to every C code file that includes qrouter.h; not sure that this is necessary, but it does no harm.
- posted: February 3, 2020 at 3:00am version: 1.4 revision: 75
Added a missing exec_prefix definition at the top that should be substituted by the configure script.
- posted: January 30, 2020 at 3:02am version: 1.4 revision: 74
Implemented distributed install using --dist-dir= during configuration, to install into a directory that is not the actual run-time directory, but also does not require appending the whole install directory to the end of DESTDIR.
Corrected --with-distdir= option use of withval in configure.in.
- posted: January 19, 2020 at 3:00am version: 1.4 revision: 73
Corrected routine find_route_blocks() so that it does not segfault when a blockage is outside of the route grid (which was causing negative gridx or gridy values). Thanks to Alessandro De Laurenzis for the bug report and patch.
- posted: January 11, 2020 at 3:00am version: 1.4 revision: 72
Made some optimizations that help with pins that are catecorner to obstructions. Catecorner obstructions save both the x and y distances from the obstruction to the grid point, and the one requiring the least amount of offset is used to determine the tap offset and via orientation restrictions. The check_obstruct routine distinguishes between the cases of two obstructions on two adjacent sides, and one obstruction in a corner causing an obstruction from two directions. The first is declared unroutable so that the latter case can be assumed by the code that finds valid tap offsets. This change handles a number of cases that were previously causing trouble with some standard cell layouts.
- posted: September 17, 2019 at 3:00am version: 1.4 revision: 71
Added command "unblock" which causes the count_reachable_taps to apply the "technically routable" rule for all nodes, not just for nodes that have no available taps. This helps in the case that a tap has a false positive block nearby, but one barely-routable gridpoint is considered routable, so the false positive blocks are not removed. Subsequently, it becomes very easy for the one tap point to become unroutable due to an offset.
- posted: August 23, 2019 at 3:00am version: 1.4 revision: 70
Once again expanded upon the diagnostics, adding a "watch" option to the "query grid" or "query position" commands. Applied after reading LEF but before reading DEF
Further expanded on the diagnostic "query" command from the last few commits to include a "watch" option that can be used to set up a position to be watched when the geometry is analyzed for tap locations and obstructions, and print out information when a location is disabled due to obstruction analysis. Otherwise the "query" command only says that a position has been disabled, but can give no further information about why it was disabled.
Also: Additional expansion of node watching to include reporting when check_obstruct is called, and give a somewhat meaningful response as to why it was called.
- posted: August 22, 2019 at 3:00am version: 1.4 revision: 69
Added a "query" command in Tcl to query what qrouter thinks about the routability at any specific grid position in the design. The underlying routine is also linked to the "has no taps" error such that the same information can be printed when a DEF file is read in if the verbose level is greater than 1. This should be a significant help in diagnosing problems with routability.
Some enhancements to the command "query" introduced in the last commit. See online documentation for full command description.
Also: Additional minor corrections and enhancements to the node information printing. During DEF read, if a node has no taps and is considered unroutable, useful information is printed about the tap and its potential connection positions, including any user-defined obstructions that were in the .cfg file (which is often a reason for an obstruction and can include things that are not specifically defined by the "user", such as power post locations). The main correction from what was there before is to restrict messages to grid positions that are marked as belonging to the node in question.
Also: Correction to last commit; did not handle case where some grid positions being queried might have a NULL node record.
- posted: August 15, 2019 at 3:00am version: 1.4 revision: 68
Added extensions to qrouter to handle 90 degree rotations in DEF components, which were previously not handled.
- posted: August 4, 2019 at 3:00am version: 1.4 revision: 67
Added FreeBSD comment to Makefile.
Fixed compile error in antenna.c - Clang FreeBSD
Also: Fixed FreeBSD options in configure scripts
Also: Manually defined type for FreeBSD.
Also: Removed files in .gitignore from the repo
- posted: July 30, 2019 at 3:00am version: 1.4 revision: 66
Updated tkcon.tcl, which somehow was not corrected to use the full "-underline" keyword on text widget configuration. I am beginning to question whether there is a mutually exclusive implementation between Tk 8.5 and 8.6. . .
- posted: July 26, 2019 at 3:00am version: 1.4 revision: 65
Removed the latest added code for automatically annotating the DEF file NETS section with added antenna violation fixes from the non-Tcl build (which does not support the antenna checks because they use Tcl hash functions).
In case of a LEF file not being read, fixed an error caused by scale being zero. This lets the first failure caused by the lack of a LEF file to generate an error message and exit rather than crashing qrouter.
- posted: July 24, 2019 at 3:00am version: 1.4 revision: 64
Modified qrouter so that it annotates the output DEF file directly with any antenna connections created to fix antenna violations, in addition to creating a text output of those connections. This lets the DEF file correctly and completely reflect the final routed design, even though magic does not use this information when importing the design for extraction. But it is mandatory to do this in conjunction with the DEF2Verilog tool that is used to create the final netlist.
- posted: July 18, 2019 at 3:00am version: 1.4 revision: 63
Reverted the addition of write_delays() to the main() routine, as write_delays() depends on Tcl hash functions and therefore cannot be run in a non-Tcl build. Since non-Tcl builds are highly discouraged, this is not high on the to-do list.
- posted: July 9, 2019 at 3:00am version: 1.4 revision: 62
Added argument to the standard_route script for "nocleanup". If "true", then the stage3 routing is bypassed, which greatly speeds up the routing when the quality of the final routes is not a concern.
- posted: June 11, 2019 at 3:00am version: 1.4 revision: 61
Make some corrections to prevent qrouter from crashing when running on a configuration file from an incompatible version; especially, DEF TRACKS records needs to ignore unknown layers or layers above the specified number of route layers.
- posted: May 21, 2019 at 3:00am version: 1.4 revision: 60
Added changes and enhancements from Staf Verhaegen, mostly pertaining to the handling of track offsets when using 1-of-N track pitch. Also provides "pitchx" and "pitchy" commands to report track pitch.
- posted: May 9, 2019 at 3:00am version: 1.4 revision: 59
Added "write_delays" to the list of routines called from main() when running qrouter not compiled with Tcl/Tk support. This will prevent it from causing errors in qflow due to the lack of a delay file output.
- posted: May 7, 2019 at 9:13am version: 1.4 revision: 58
Corrected a missing break statement in a case block. Thanks to Niels Moseley for the bug report and bug fix.
Corrected the handling of pre-routed SPECIALDEFS in the DEF file, which was not counting power rail nets marked FIXED, causing both a miscount of SPECIALNETS and a syntax error in the final DEF output where END SPECIALNETS occurs before the end of the list of nets.
- posted: April 12, 2019 at 3:00am version: 1.4 revision: 57
Tracked down an error with out-of-bounds access due to extended taps marking positions outside of the grid. Clipped all extended taps to be within-grid.
Found the error where out-of-bounds extended taps were being allowed during DefRead, which was due mainly to not setting the number of channels in the grid before reading the NETS section.
Also: Added a "distclean" target to the Makefile, as this is expected by the git project handler on the opencircuitdesign server.
Also: ocd_git_pure automatic update to repo
Also: ocd_git_pure automatic update to repo
Also: ocd_git_pure automatic update to repo
Also: ocd_git_pure automatic update to repo
Also: ocd_git_pure automatic update to repo
Also: ocd_git_pure automatic update to repo
Also: ocd_git_pure automatic update to repo
- posted: April 11, 2019 at 3:00am version: 1.4 revision: 56
ocd_git_pure automatic update to repo
- posted: April 10, 2019 at 3:00am version: 1.4 revision: 55
ocd_git_pure automatic update to repo
- posted: April 9, 2019 at 3:00am version: 1.4 revision: 54
ocd_git_pure automatic update to repo
- posted: April 8, 2019 at 3:00am version: 1.4 revision: 53
ocd_git_pure automatic update to repo
- posted: April 7, 2019 at 3:00am version: 1.4 revision: 52
ocd_git_pure automatic update to repo
- posted: April 6, 2019 at 3:00am version: 1.4 revision: 51
ocd_git_pure automatic update to repo
- posted: April 5, 2019 at 3:00am version: 1.4 revision: 50
Corrected (rare) issue with blockage layers that are on the layer above an offset pin and offset with the pin.
ocd_git_pure.py automatic update
- posted: March 21, 2019 at 3:00am version: 1.4 revision: 49
Update at Wed Mar 20 15:57:26 EDT 2019 by tim
Corrected the way qrouter reads LEF files to correspond to the format definition in which route layers are counted bottom to top from zero in the order they are found in the technology LEF file.
- posted: March 3, 2019 at 3:00am version: 1.4 revision: 48
Update at Sat Mar 2 14:56:49 EST 2019 by tim
Changed README to fix incorrect "--with-prefix=", which should instead be "--prefix=".
- posted: February 15, 2019 at 3:00am version: 1.4 revision: 47
Update at Thu Feb 14 11:43:04 EST 2019 by tim
Fixed handling of LEF file reads for more 5.7 and 5.8 compatibility. Was getting confused by the ridiculously stupid syntax for ACMINCURRENTDENSITY. Affected the .info file output which affected the sizing of pins in placement, and was preventing routing due to incorrect layer widths.
- posted: January 24, 2019 at 3:00am version: 1.4 revision: 46
Update at Wed Jan 23 16:20:48 EST 2019 by tim
Corrected bounds checking on blockages, which was managing to calculate negative values for grid positions for taps that were outside the routing bounding box.
- posted: January 5, 2019 at 3:00am version: 1.4 revision: 45
Update at Fri Jan 4 10:15:46 EST 2019 by tim
Corrected a minor error related to yesterday's update, that causes a net driver to occasionally be listed also as a receiver in the delay file.
Also: Found one more corner case when walking directional paths, which occurs when a route contains exactly two stacked vias. This is quite rare as most via stacks violate minimum metal area rules, so there is an additional route spur between the two vias, but, for example, the SCMOS technologies distributed with qflow do not declare minimum metal area, causing this situation to show up on occasion.
- posted: January 4, 2019 at 3:00am version: 1.4 revision: 44
Update at Thu Jan 3 10:37:05 EST 2019 by tim
Revised the route walking algorithm in delays so that it tracks the direction of the path through every via (up or down). This forces every walked path to land on a unique (x, y, l) coordinate which eliminates errors in finding where paths connect, resulting in "route not walked" errors.
- posted: December 29, 2018 at 3:00am version: 1.4 revision: 43
Update at Fri Dec 28 10:48:47 EST 2018 by tim
Corrected bad logic in the string list appending in the non-Tcl configuration file reading code. Thanks to Martin Devera for the bug fix. Same change as was made to qrouter version 1.3.
- posted: December 28, 2018 at 3:00am version: 1.4 revision: 42
Update at Thu Dec 27 12:30:52 EST 2018 by tim
Added a catch for x, y min/max never set, to avoid segfaulting. This is not a normal condition but it shouldn't crash the tool.
- posted: December 18, 2018 at 3:00am version: 1.4 revision: 41
Update at Mon Dec 17 11:15:12 EST 2018 by tim
Extended the handling of the antenna cell name in the "antenna" command to allow a wildcard "*" character to denote all cells beginning with the string passed to the antenna init command.
Also: Fix to non-Tcl version of qrouter to correct a typo that prevents it from compiling.
- posted: November 21, 2018 at 3:00am version: 1.4 revision: 40
Update at Tue Nov 20 13:02:59 EST 2018 by tim
Quick fix to small error in output diagnostic text.
- posted: November 16, 2018 at 3:00am version: 1.4 revision: 39
Update at Thu Nov 15 11:57:01 EST 2018 by tim
Several updates and corrections: (1) Prevent crash condition if a PIN entry names a net that is not in the NETS section of the DEF file; (2) Print any error result from reading the config file; (3) Print error result from config file to terminal instead of the console if the console is being used, so that the error result doesn't vanish with the console; (4) fixed priority net command so that it works, so that the nets are prioritized in the order given by the command, and so that the command may be called multiple times.
- posted: November 15, 2018 at 3:00am version: 1.4 revision: 38
Update at Wed Nov 14 08:22:08 EST 2018 by tim
Corrected an error in the print_node_name function that may try to write more bytes than allocated to the string. Thanks to Thomas Parry for tracking down this bug.
- posted: November 3, 2018 at 3:00am version: 1.4 revision: 37
Update at Fri Nov 2 07:55:10 EDT 2018 by tim
Fixed an error that prevents compiling the non-Tcl/Tk version.
- posted: November 2, 2018 at 3:00am version: 1.4 revision: 36
Update at Thu Nov 1 10:33:38 EDT 2018 by tim
Corrected an error introduced in a recent commit in which power and ground nets in SPECIALNETS cause a net to be marked as ignored, even if another part of the net was in the NETS section and needs to be routed. This problem arises due to a recent update in qflow that marks power and ground nets in the SPECIALNETS section as FIXED instead of ROUTED. Also the error only shows up in technologies like the distributed SCMOS technologies that do not have LOGIC0 and LOGIC1 cells in the standard cell set. Otherwise power and ground are not routed nets.
- posted: October 30, 2018 at 3:00am version: 1.4 revision: 35
Update at Mon Oct 29 12:15:07 EDT 2018 by tim
Fixed error in last commit; caused invalid node indexes that can result in a segfault.
- posted: October 28, 2018 at 3:00am version: 1.4 revision: 34
Update at Sat Oct 27 16:59:06 EDT 2018 by tim
Effort to make qrouter re-entrant, such that qrouter can write a partially-routed design, then re-read that design and continue routing. The process is complicated by the fact that routed nets may not land on track intersections, so it requires a bit of work to reconstruct the original route segments.
- posted: October 26, 2018 at 3:00am version: 1.4 revision: 33
Update at Thu Oct 25 13:02:30 EDT 2018 by tim
Revised DEF input and output to properly handle specialnets that may have been generated by a previous run of qrouter, keeping only those that are marked FIXED or are power and ground nets. This prevents copying stub routes that are no longer used. Also fixed an error that incorrectly printed out the last route of a net before the "+" line when handling fixed or cover nets.
- posted: October 23, 2018 at 3:00am version: 1.4 revision: 32
Update at Mon Oct 22 11:28:20 EDT 2018 by tim
Found an error in the reading of DEF files that caused net segments to become disjoint (they were read in reverse order, and this was not accounted for). That prevented the proper parsing of pre- routed nets. Also, stopped treating FIXED pre-routed nets outside of the SPECIALNETS section as obstructions, and instead treated them as routed nets with the NET_IGNORE flag set. This causes the pre- routed nets to be walked when writing the RC delay file. All of this lets qrouter save and reload partially routed designs. Also added a flag "-abort" to the "read_def" command to force an error condition when a fatal error is encountered while reading a DEF file. This is very minimally implemented and is mainly there to catch undefined components.
- posted: October 3, 2018 at 3:00am version: 1.4 revision: 31
Update at Tue Oct 2 08:05:40 EDT 2018 by tim
Finally tracked down a few errors that had been seen recently that cause various types of route failures and failures to walk the route when writing the delay file. In particular, one was showing up in the example "map9v3" when used with the distributed osu018 technology, resulting in a missing via at one terminal, causing an open circuit on a net and LVS failure.
- posted: September 29, 2018 at 3:00am version: 1.4 revision: 30
Update at Fri Sep 28 20:15:40 EDT 2018 by tim
Modified delays to handle an error case. The error case should not happen and needs to be debugged. However, the modified output prevents qrouter from writing syntactically incorrect output in the RC delay file.
- posted: September 27, 2018 at 3:00am version: 1.4 revision: 29
Update at Wed Sep 26 09:16:31 EDT 2018 by tim
Corrected error that can cause a segfault if a user obstruction layer (created by a command) exceeds the number of route layers.
- posted: September 22, 2018 at 3:00am version: 1.4 revision: 28
Update at Fri Sep 21 10:30:26 EDT 2018 by tim
Corrected error with printing information about routing 1-of-N tracks on layers with track separation larger than the minimum.
Also: Found and corrected another error in the diagnostic information about track pitches.
Also: Resolved issues with the way vias are organized into groups depending on the top and bottom orientation. This was having problems with gscl45nm due to the presence of both square and rectangular layers (and mixes thereof), and of vias defined on poly.
- posted: September 21, 2018 at 3:00am version: 1.4 revision: 27
Update at Thu Sep 20 09:57:32 EDT 2018 by tim
Corrected a bad error introduced with the previous commit that mishandled reading the layer pitches from the technology LEF file. Problems now appear to be resolved and qflow works properly with all the distributed technology files.
- posted: September 20, 2018 at 3:00am version: 1.4 revision: 26
Update at Wed Sep 19 12:45:04 EDT 2018 by tim
Abandoned the idea of having completely different grids for each metal layer, and changed to having PitchX, PitchY, NumChannelsX, and NumChannelsY each be a single value. Resolved errors stemming from the overly-complicated handling of X and Y route pitches. Corrected a long-standing error which generated obstruction areas around power/ground posts at twice the intended area. This undoubtedly caused problems with loading partially-routed designs as well, or anything with specialnets. Corrected an error that caused blockages due to setting of an offset that was not rounded down to zero.
Also: Added behavior to check if generated vias are violating minimum metal width on metal extensions, and to increase the metal width accordingly if needed.
Also: Fix to handling interactions in halo around taps: Was trying both orientations of vias but was disabling the node on the horizontal orientation, such that trying the vertical orientation didn't ever succeed because the position was already disabled. However, this solution is not catching all such errors, so there is something else going on as well.
- posted: September 19, 2018 at 3:00am version: 1.4 revision: 25
Update at Tue Sep 18 16:32:57 EDT 2018 by tim
Modified the output of the "-i" option (outputs a summary of information pulled from the technology LEF file) to add the scalefactor implied by the LEF manufacturing grid. This gets used throughout qflow to set the DEF file units.
- posted: September 18, 2018 at 3:00am version: 1.4 revision: 24
Update at Mon Sep 17 10:50:57 EDT 2018 by tim
Modified DEF file read and write so that VIAS and SPECIALNETS sections from the original input file are extended, instead of writing additional VIAS and SPECIALNETS sections for new records generated internally to qrouter. Writing multiple sections likely violates DEF file syntax rules. Also: Found yet another case in which the removing of a via to avoid adjacent vias results in an open net, and corrected it.
- posted: August 30, 2018 at 3:00am version: 1.4 revision: 23
Update at Wed Aug 29 08:47:03 EDT 2018 by tim
Applied patch by Sean Cross to fix an error introduced by a recent commit to correct the handling of filenames for the .rc file output.
- posted: August 25, 2018 at 3:00am version: 1.4 revision: 22
Update at Fri Aug 24 13:25:08 EDT 2018 by tim
Fixed an error that was caused by a bad attempt to fix another related error involving qflow passing the DEF filename with the extension to the standard_route script, which then uses that as the delay filename instead of changing the extension to .rc.
- posted: August 9, 2018 at 3:00am version: 1.4 revision: 21
Update at Wed Aug 8 11:47:18 EDT 2018 by tim
Applied patches from Sean Cross, folding the write_delays routine into the standard route script and correcting a couple of returned value errors in the C code.
- posted: July 24, 2018 at 3:00am version: 1.4 revision: 20
Update at Mon Jul 23 13:57:04 EDT 2018 by tim
Corrected the position of apply_drc_blocks to be after post_config, or else the pitch values can be zero. Then the routine works only if technology and macro LEF files are separate.
Also: Discovered that route_set_connections() was using only the presence of a non-NULL Nodeinfo record to determine the presence of a node, which is in conflict with the new method of creating a Nodeinfo record without a node to make use of the flags.
- posted: July 22, 2018 at 3:00am version: 1.4 revision: 19
Update at Sat Jul 21 20:20:26 EDT 2018 by tim
Corrected an error in the output due to a segfault when checking for antenna violations. This error ultimately goes back to a source that is modifying the end of a route segment without updating the record indicating what the end is attached to, leaving a bad record. This still needs to be tracked down and fixed.
- posted: July 19, 2018 at 3:00am version: 1.4 revision: 18
Update at Wed Jul 18 20:38:41 EDT 2018 by tim
Added consideration of via rotations when calculating at what track spacing qrouter should switch to routing only on every other track. This was causing problems where track spacing is tight and vias are rectangular, since routing every other track severely reduces routability and in some cases makes routing impossible.
- posted: July 18, 2018 at 3:00am version: 1.4 revision: 17
Update at Tue Jul 17 16:06:16 EDT 2018 by tim
A few corrections; additional parameter to pathto() needed to be set to zero for specialnets routes. And added logic to adjust via offsets when the neighboring via is a tap that already has a tap offset applied.
Also: Corrected an error that causes serious routability issues with 1-of-N track route layers (e.g., wider top level metals) due to the change of a few commits back adding a reference count to DRC blockage around these routes. The reference count was preventing one part of the code from recognizing the position as a DRC blockage, preventing it from being routed over during stage 2 (route with collisions).
- posted: July 17, 2018 at 3:00am version: 1.4 revision: 16
Update at Mon Jul 16 16:30:01 EDT 2018 by tim
Corrected several output DRC errors, including routes offset to match a via offset (only one of two cases was considered previously), and a couple of typos in recent code for handling rotated vias. Also corrected the antenna output generating routine, as the wrong node was often identified when clearing arrays for the next route, resulting in antenna taps being used for more than one route, shorting them together.
- posted: July 15, 2018 at 3:00am version: 1.4 revision: 15
Update at Sat Jul 14 21:10:38 EDT 2018 by tim
Found an error in the antenna violation solving that only saves the grid point on the antenna tap that was the end of the route but clears any other grid points on the same tap, allowing the antenna cell to be used more than once (which shorts nets).
- posted: July 14, 2018 at 3:00am version: 1.4 revision: 14
Update at Fri Jul 13 12:47:20 EDT 2018 by tim
Corrected an error that removes pin flags when writing back a segment with route blockage information (very rare, but it happens).
Also: Additional corrections fix the problems of routes which are not modified to be offset along with an offset via (in the direction of the route, so the route gets longer or shorter), and the problem of routes that force blockage of the tracks next to them having the blockage removed because it is shared by more than one route (fixed by using net number field to add a reference count for the blockage).
- posted: July 13, 2018 at 3:00am version: 1.4 revision: 13
Update at Thu Jul 12 12:47:54 EDT 2018 by tim
Updates consolidate the two places where the output generation of vias was checking for rotations and offsets. In addition to avoiding redundancy, more proper checks have been made, leading to elimination of DRC errors resulting from unnecessary offsets or inadvisable via rotations. This generally helps with techfiles that compress the grid spacing beyond what can normally accomodate a via next to a route, although in such cases three vias in a row will have DRC issues.
Also: Update to support hard macros which may have pins that have no port geometry and no port connections. Basically these are unused pins in the verilog that are optimized out of the layout but show up in the LEF file, causing qrouter to segfault. Qrouter now correctly ignores these pins completely.
- posted: July 6, 2018 at 3:00am version: 1.4 revision: 12
Update at Thu Jul 5 16:27:23 EDT 2018 by tim
A couple of fixes for errors introduced with a bit of via-reducing code that caught a missing use-case that was previously ignored. One error was simply putting the replacement segment on the wrong layer; the other was an instance in which the quick check to see if there is a via at the endpoint fails in a bad way by finding the space occupied by a minimum-area stub directly over a pin. Because this is not actually a via and does not belong to another route, and removing the via removes the only contact to the pin.
- posted: July 3, 2018 at 3:00am version: 1.4 revision: 11
Update at Mon Jul 2 15:26:16 EDT 2018 by tim
Corrected an error from the last round of updates that was limiting routability of outside nodes (when it was supposed to be increasing the routability). Also, found a missing case where vias can be on adjacent tracks that was not being checked by cleanup_net(), and added it.
Also: Corrected the delay (.rc file) output so that nets for which a driver is not found do not generate an incorrect output (instead the net will not be output at all).
Also: Corrected error from a couple of commits back that segfaults after removing a leading via on a segment when merging it into the segment it attaches to.
- posted: June 29, 2018 at 3:00am version: 1.4 revision: 10
Update at Thu Jun 28 19:10:06 EDT 2018 by tim
Major update with completed support for rotated vias generated using the LEF file VIARULE statements. However, several other important changes were made to the geometry analyzing code that avoids making DRC errors in several common cases. In particular, the new code avoids making notch violations and does not get confused by inside corners on pins. Via position offsets have been eliminated in most cases by relying on checkerboard patterning of the vias. This is now automatic and the command option "via pattern" is deprecated. Most technologies will now route with few or no DRC errors. However, "high density" styles where vias cannot be rotated at all without causing a DRC error are still troublesome, and should be considered "not supported" (although you can go clean up the DRC errors by hand like before).
- posted: June 22, 2018 at 3:00am version: 1.4 revision: 9
Update at Thu Jun 21 16:16:41 EDT 2018 by tim
Much improved handling of contacts, making use of the VIARULE statements and always aligning vias to the best orientation. Most remaining problems have to do with code that does not yet check against all via orientations.
- posted: May 23, 2018 at 3:00am version: 1.4 revision: 8
Update at Tue May 22 20:58:01 EDT 2018 by tim
Corrections to the antenna violation finding algorithm for tracing routes from a gate to all the antenna metal. However, there is still a known issue where route optimizing at the time of output generation can create new antenna violations, so the optimizing needs to be done before the antenna violation search.
Also: Corrected the problem mentioned in the last commit, in which cleanup of adjacent vias must be performed between the last route stage and any output (antenna searches, delay calculations, and DEF output).
Also: Removed file that was not supposed to be part of the distribution.
Also: Added the executable qrouternullg to the gitignore file, where it needs to be.
- posted: May 16, 2018 at 3:00am version: 1.4 revision: 7
Update at Tue May 15 17:15:39 EDT 2018 by tim
Corrected several errors, one a crash condition and one an infinite loop. Both the antenna corrections and the minimum-area metal generation appear to be working on microprocessor-size designs. Added a text file output for antenna corrections, for back- annotation, and antenna errors, in case any are not resolved.
- posted: May 12, 2018 at 3:00am version: 1.4 revision: 6
Update at Fri May 11 17:40:38 EDT 2018 by tim
Finished implementing the antenna violation resolver routing method. If issued a "antenna init" statement with the name of an antenna cell prior to routing, qrouter will now ensure that all antenna violations are fixed automatically.
- posted: May 11, 2018 at 3:00am version: 1.4 revision: 5
Update at Thu May 10 21:58:34 EDT 2018 by tim
Continuing work in progress. Created new method for analyzing antenna violations. Thus far the code identifies antenna violations but does not attempt to correct them.
- posted: May 8, 2018 at 3:00am version: 1.4 revision: 4
Update at Mon May 7 13:09:01 EDT 2018 by tim
Updated everything from qrouter-1.3 in preparation for new development.
- posted: August 11, 2017 at 3:00am version: 1.4 revision: 3
Update at Thu Aug 10 22:41:12 EDT 2017 by tim
- posted: August 10, 2017 at 3:00am version: 1.4 revision: 2
Update at Wed Aug 9 09:04:44 EDT 2017 by tim
- posted: April 26, 2017 at 3:00am version: 1.4 revision: 1
First commit of qrouter development version 1.4
- posted: March 3, 2019 at 3:00am version: 1.3 revision: 109
Update at Sat Mar 2 14:56:37 EST 2019 by tim
Changed README to fix incorrect "--with-prefix=", which should instead be "--prefix=".
- posted: December 29, 2018 at 3:00am version: 1.3 revision: 108
Update at Fri Dec 28 10:48:15 EST 2018 by tim
Corrected bad logic in the string list appending in the non-Tcl configuration file reading code, and corrected an error in the LEF file reader that had been fixed in 1.4 but not back-ported to the stable version 1.3. Thanks to Martin Devera for the bug fixes.
- posted: November 15, 2018 at 3:00am version: 1.3 revision: 107
Update at Wed Nov 14 08:22:27 EST 2018 by tim
Corrected an error in the print_node_name function that may try to write more bytes than allocated to the string. Thanks to Thomas Parry for tracking down this bug. Same correction as made to qrouter-1.4.
- posted: September 20, 2018 at 3:00am version: 1.3 revision: 106
Update at Wed Sep 19 17:02:23 EDT 2018 by tim
Corrected the obstruction geometry generated from vias in the input DEF file (needed to account for 2x size used by via records, same correction as made to qrouter-1.4).
- posted: September 14, 2018 at 3:00am version: 1.3 revision: 105
Update at Thu Sep 13 10:29:35 EDT 2018 by tim
Updated with the same changes made recently to verion 1.4, to write the delay file from inside the standard_route script.
- posted: July 26, 2018 at 3:00am version: 1.3 revision: 104
Update at Wed Jul 25 19:41:30 EDT 2018 by tim
Made a correction previously applied to qrouter-1.4 which prevents clearing DRC blockages from accidentally clearing other flags, which can result in stub routes going missing.
- posted: May 18, 2018 at 3:00am version: 1.3 revision: 103
Update at Thu May 17 08:54:14 EDT 2018 by tim
Corrected third stage routing so that it does not remove the failed route list and then report missing routes as successes.
- posted: March 10, 2018 at 3:00am version: 1.3 revision: 102
Update at Fri Mar 9 08:47:14 EST 2018 by tim
Added simple optimization to speed up third stage routing, which is to avoid rerouting nets that appear to be optimal already as determined by their having four or fewer segments on every route.
- posted: March 9, 2018 at 3:00am version: 1.3 revision: 101
Update at Thu Mar 8 23:04:43 EST 2018 by tim
Added code to avoid a segfault condition, although why the condition occurs is yet unknown. May be fairly benign.
- posted: March 8, 2018 at 3:00am version: 1.3 revision: 100
Update at Wed Mar 7 16:03:18 EST 2018 by tim
Identified why the delay output routine sometimes fails to walk route branches, which is because the DEF output routine rewires some connection to optimize out redundant vias, causing the net connectivity to differ from what was calculated during the routing. This is easily fixed by calling route_set_connections() again on the routes of any net that is modified during the output.
Also: Additional fix for a hidden error that got revealed by the previous fix: Routes made of only one via were incorrectly tagged with the attached node on both start and end, missing the other route that the via was attached to.
- posted: March 7, 2018 at 3:00am version: 1.3 revision: 99
Update at Tue Mar 6 12:27:04 EST 2018 by tim
Corrected the recursive source tagging routine, which had been fixed in qrouter version 1.4 but got missed when back-porting changes to version 1.3. In short, the recursive routine was not recursive. This caused routed nets to be reported as unrouted. Generally, the effect of the error was relatively benign, as the nets would be pushed onto the fail list and routed again later. However, this increases routing time as well as producing numerous error messages.
Also: Added method to retain an existing route structure while doing a net rip-up, allowing the previously good route to be restored if the new route fails. This is mainly a measure to cope with the fact that stage 3 routing is based on the assumption that every routed net has a solution, and that solution can only get better by ripping up the net and rerouting it. However, some ad hoc methods like removing stacked vias can cause a stage 3 route to fail. Since stage 3 is only meant to clean up the routes, there is no great harm in simply falling back on the original solution.
- posted: February 3, 2018 at 3:00am version: 1.3 revision: 98
Update at Fri Feb 2 14:12:42 EST 2018 by tim
Enhanced LEF file reads to handle many more keywords than it was doing previously. This allows it to read its own bundled tech files without raising error messages.
Also: Updated the load command in Tcl to behave more like v1.4 where the "-lazy" option was removed. Now uses catch {} to try it both ways.
- posted: January 24, 2018 at 5:30pm version: 1.3 revision: 97
Update at Wed Dec 6 11:50:55 EST 2017 by tim
Also: Two corrections: (1) def file read was not correctly handling multiple pitches, and could end up giving the lowest metal layer the same pitch as the highest metal layer's original pitch; and (2) changed the orientation passed to get via width for checking if routes need more than one track, which was backwards.
Update at Wed Aug 23 11:08:14 EDT 2017 by tim
Also: Merge branch 'master' into work
- posted: October 27, 2017 at 3:00am version: 1.3 revision: 96
Added handling to check if the script file passed in the "-s" command exists, and to print an error message and exit with an error if so. Also, does not hang waiting for input on a batch process if the file does not exist or if an error occurs in the script before reaching a "quit" command.
- posted: October 20, 2017 at 3:00am version: 1.3 revision: 95
Modified output so that values in DEF file are all integer, as required by the DEF format. This also fixes an error in which large values would be output in mantissa+exponent notation, often cutting off a digit of precision in the process.
- posted: October 17, 2017 at 3:00am version: 1.3 revision: 94
Updated qrouter.tcl with "load -lazy" to match other tools (e.g., magic); this may be necessary when running as qrouterexec or qrouternullg where the executable is not linked against the Tcl and Tk stubs libraries, but especially for qrouternullg where the Tk routines are not defined. Note that "-lazy" may not work on all platforms.
Also: Added missing definitions for USE_TCL_STUBS and USE_TK_STUBS, which was preventing the stubs libraries from being compiled in correctly.
Also: Additional fixes to make Tcl/Tk stubs libraries work correctly.
Also: Changed tkSimple so that it no longer has the "-use" option, which was depending on an internal Tk routine that is not handled by the stubs library linker function. The "-use" option was not being used (copied from another application), so it could be removed.
- posted: October 13, 2017 at 3:00am version: 1.3 revision: 93
Properly implemented Tcl/Tk stub libraries, pulling all Tk routines out of the null graphics version. Also: Used the secondary via (two per metal layer are kept) to check for an alternative way to connect to a pad when the primary via won't fit.
- posted: September 19, 2017 at 3:00am version: 1.3 revision: 92
Found a minor error that is probably ignoring one of the two L-shaped paths possible for a 2-port route mask.
Also: Removed an unnecessary restriction blocking vias that is properly handled in other code by generating an offset on the via.
Also: Added different colors for displaying more than 4 routes, so that those routes aren't all represented in green.
- posted: September 5, 2017 at 3:00am version: 1.3 revision: 91
Corrected error in mask generation which would have a potentially large impact on solutions for smaller mask values.
- posted: August 28, 2017 at 3:00am version: 1.3 revision: 90
Updated the via handling with a "via use" command option in the Tcl commands. This allows specific via names to be given to force the router to use them, instead of trying to guess which vias are oriented which way. It is better if qrouter can keep information on all vias and determine when one or another is appropriate in a given geometrical context, but the code support for that is only partially written. Explicit naming of vias is a reasonable stop-gap measure.
- posted: August 26, 2017 at 3:00am version: 1.3 revision: 89
Corrected LEF read to accomodate the syntax "PITCH" in which pitch is specified in both directions instead of just the preferred direction. Currently the code does not take advantage of this syntax, which better fits the PitchX and PitchY arrays, but continues to work from the preferred direction to fill in the arrays.
Also: Corrected an error in the last commit that fails to correctly parse the line after the PITCH line in the input.
- posted: August 24, 2017 at 3:00am version: 1.3 revision: 88
Found an error with the delay path walking that incorrectly swapped start and end nodes when the driver is a route of only one segment, causing all downstream branches to be missed.
- posted: August 23, 2017 at 3:00am version: 1.3 revision: 87
Corrected problem in which "-noc" acts like "-nog" because the program does not wait for the window to be created and ends before it comes up. Now "-noc" specifically supresses the console and "-nog" supresses all graphics (including the console). Also got rid of the improper warning messages that appear when the script mode is used or the no console/no graphics modes are used.
- posted: August 18, 2017 at 3:00am version: 1.3 revision: 86
A few corrections to avoid a crash condition if a DEF file is read that contains routes outside the limit setting, and to avoid a crash condition in the writing of the delay file if nets failed to route.
Also: Update at Thu Aug 17 11:11:48 EDT 2017 by tim
Also: Merge branch 'master' into work
- posted: August 15, 2017 at 3:00am version: 1.3 revision: 85
Corrected a few errors in the R-C delay file generation. Mostly, branching paths were not being correctly found and followed, leaving some nets with incomplete timing information. Unrouted nets were leaving incomplete lines of output (now they are ignored, as they should be).
Also: Update at Mon Aug 14 22:07:32 EDT 2017 by tim
Also: Merge branch 'master' into work
- posted: August 11, 2017 at 3:00am version: 1.3 revision: 84
Update at Thu Aug 10 22:41:12 EDT 2017 by tim
- posted: August 10, 2017 at 3:00am version: 1.3 revision: 83
Update at Wed Aug 9 09:04:44 EDT 2017 by tim
- posted: August 8, 2017 at 3:00am version: 1.3 revision: 82
Corrected problem with qrouter not advancing to the next net when a net is unroutable because there are no taps. Modified the standard route script so that it can make a few additional stage2 routes at the very end, to avoid having one or two failures because the cleanup routine generated an unusual arrangement that cannot be re-routed in one pass.
Also: Update at Mon Aug 7 14:18:51 EDT 2017 by tim
Also: Merge branch 'master' into work
Also: One more modification to the standard route script to finish stage 2 routing (if not completed yet) with a couple of runs of "mask none" at increasing effort. If that doesn't work, then the design probably needs to decrease density.
Also: Corrected error in the non-interpreter version call to dosecondstage(), which gained an extra argument.
- posted: August 2, 2017 at 3:00am version: 1.3 revision: 81
Removed option "break" from secondary stage2 runs in the standard route script, since "break" has so far proven to make routing more difficult, not less.
Also: Update at Tue Aug 1 13:24:41 EDT 2017 by tim
Also: Merge branch 'master' into work
- posted: July 13, 2017 at 3:00am version: 1.3 revision: 80
Revised standard route script to remove the "break" option, which has proved to generate worse results than without the option, as it tends to produce more local minima for qrouter to get stuck in.
Also: Update at Wed Jul 12 22:22:36 EDT 2017 by tim
Also: Merge branch 'master' into work
- posted: July 2, 2017 at 3:00am version: 1.3 revision: 79
Added diagnostic analysis of rare case where two nets get shorted, hopefully will help with debugging. Allows qrouter to recover from the failing case and complete routing.
Also: Update at Sat Jul 1 09:41:09 EDT 2017 by tim
Also: Merge branch 'master' into work
- posted: June 20, 2017 at 3:00am version: 1.3 revision: 78
Additional small improvement by giving extented tap positions a lower priority.
Also: Update at Mon Jun 19 10:45:22 EDT 2017 by tim
Also: Merge branch 'master' into work
- posted: June 19, 2017 at 3:00am version: 1.3 revision: 77
Corrected error in removing route segments in the rip-up stage.
Also: Update at Sun Jun 18 14:48:24 EDT 2017 by tim
Also: Merge branch 'master' into work
Also: Final corrections for now.
- posted: June 17, 2017 at 3:00am version: 1.3 revision: 76
Revised source and target tagging algorithms to be correct for the single-route removal process used by the stage 2/3 "break" option. Otherwise the "break" option can cause incorrect results when a net is broken into two partially-routed sections.
Also: Update at Fri Jun 16 11:04:44 EDT 2017 by tim
Also: Merge branch 'master' into work
Also: Figured out a way to restore the original route direction priority while still maintaining the low memory overhead, which had subverted the directionality; the new method is in fact better than the original at searching along the preferred path first.
Also: Removed a crash condition from addcollidingnet().
- posted: June 15, 2017 at 3:00am version: 1.3 revision: 75
Update to make use of the newest changes in the route scripts, preferring net breaking over complete rip-up, and removing the old check for progress with the new one. Code reorganized with two new source files "mask.c" for the mask-generation functions and "output.c" for the DEF file writing functions and other general-purpose output. This takes a lot of code out of the ever-growing qrouter.c file.
Also: Update at Wed Jun 14 14:39:36 EDT 2017 by tim
Also: Merge branch 'master' into work
- posted: June 14, 2017 at 3:00am version: 1.3 revision: 74
Corrections to stage3 routing (which finally works right), plus new stage2 option "break" to remove only the part of a complete net route that collides, leaving the rest in place. Also discovered an error in the node handling that occasionally left a node with NULL pointers, which was not particularly harmful but did remove occasional grid points from consideration for routing.
Also: Update at Tue Jun 13 21:46:07 EDT 2017 by tim
Also: Merge branch 'master' into work
- posted: June 11, 2017 at 3:00am version: 1.3 revision: 73
Corrected an error in specialnet read-in that (1) failed to add a spacing distance around vias, and (2) added the wrong value around specialnet wires (equal to the wire width, not the layer spacing). This made routing around pre-defined specialnets problematic.
Also: Update at Sat Jun 10 20:13:25 EDT 2017 by tim
Also: Merge branch 'master' into work
Also: Fixed the same problem (again!) with reading obstructions from specialnets (the problem had been that it was adding width on all sides, but needed to add half width plus spacing in one direction and spacing only in the other direction).
- posted: June 9, 2017 at 3:00am version: 1.3 revision: 72
Corrected a fairly egregious error that prevented pre-defined routes and specialnets entries from being correctly parsed as obstructions. The coordinates were reversed, and all of the qrouter code assumes that x1 < x2 and y1 < y2 by definition, so the geometry was consequently ignored.
Also: Update at Thu Jun 8 20:01:02 EDT 2017 by tim
Also: Merge branch 'master' into work
- posted: April 25, 2017 at 3:00am version: 1.3 revision: 71
Created option for "high memory overhead" to be able to use the algorithm that generates multiple entries per point on the stack but then has a stack in (presumably) a better arrangement for an efficient search to the target. This option is mainly for testing the impact of the arbitrary arrangement of the stack order.
Also: Update at Mon Apr 24 17:10:45 EDT 2017 by tim
Also: Merge branch 'master' into work
- posted: April 18, 2017 at 3:00am version: 1.3 revision: 70
Implemented point allocation for point stack using mmap() and a free stack, basically copied from the same implementation used by magic for tile allocation.
Also: Update at Mon Apr 17 10:53:18 EDT 2017 by tim
Also: Merge branch 'master' into work
- posted: March 21, 2017 at 3:00am version: 1.3 revision: 69
Corrected a missing array index as kindly pointed out by Simon Gornall.
Also: Update at Mon Mar 20 19:40:02 EDT 2017 by tim
Also: Merge branch 'master' into work
- posted: March 18, 2017 at 3:00am version: 1.3 revision: 68
Finished implementing the delay output file (first version, anyway) and moved all of the delay code into a new source file.
Also: Update at Fri Mar 17 11:07:51 EDT 2017 by tim
Also: Merge branch 'master' into work
- posted: March 17, 2017 at 3:00am version: 1.3 revision: 67
Corrected an error in determining coverage of stub routes by other port geometry, that is used to avoid generating stubs to part of a port where other parts of the port intervene. This check-in also includes part of a command to generate a delay file from the routed result that is not completed.
Also: Update at Thu Mar 16 09:53:41 EDT 2017 by tim
Also: Merge branch 'master' into work
- posted: February 15, 2017 at 3:00am version: 1.3 revision: 66
Added missing variable declaration that prevents clean compile in non-Tcl configuration.
Also: Update at Tue Feb 14 22:39:58 EST 2017 by tim
Also: Merge branch 'master' into work
- posted: February 14, 2017 at 3:00am version: 1.3 revision: 65
Implemented a flag check for items on the stack of pending points to evaluate. This avoids a potentially huge amount of memory overhead in creating redundant entries for points to be checked.
Also: Update at Mon Feb 13 12:12:36 EST 2017 by tim
Also: Merge branch 'master' into work
Also: (Re-)implemented a flag to prevent generating duplicate entries in the stack of positions to evaluate.
- posted: February 13, 2017 at 3:00am version: 1.3 revision: 64
Corrected code that realigns non-manhattan segments to the grid, as pointed out by Stephen Whiteley.
Also: Update at Sun Feb 12 11:13:14 EST 2017 by tim
Also: Merge branch 'master' into work
- posted: February 5, 2017 at 3:00am version: 1.3 revision: 63
Corrected memory leak pointed out by Stephen Whiteley.
Also: Update at Sat Feb 4 08:21:39 EST 2017 by tim
Also: Merge branch 'master' into work
Also: On advice from Steve Whiteley, corrected the last commit.
- posted: January 20, 2017 at 3:00am version: 1.3 revision: 62
Added bounds checks when attempting to break up stacked contacts to avoid attempting to check or place a via outside of the route grid.
Also: Update at Thu Jan 19 20:16:58 EST 2017 by tim
Also: Merge branch 'master' into work
- posted: January 5, 2017 at 3:00am version: 1.3 revision: 61
Fixed reference to lnode1 that did not check if lnode1 is NULL.
Also: Update at Wed Jan 4 09:19:51 EST 2017 by tim
Also: Merge branch 'master' into work
- posted: December 24, 2016 at 3:00am version: 1.3 revision: 60
Corrected the basic problem of out-of-bounds tap grid points by working through all of the nodes after reading in the def file and removing all of those that are out-of-bounds, rather than attempting to check boundary conditions during routing. Also fixed a bad allocation error that has never been known to cause a segfault but certainly had the potential to.
Also: Update at Fri Dec 23 09:19:31 EST 2016 by tim
Also: Merge branch 'master' into work
- posted: December 23, 2016 at 3:00am version: 1.3 revision: 59
Fixed a stupid typo in the previous commit.
Also: Update at Thu Dec 22 08:06:47 EST 2016 by tim
Also: Merge branch 'master' into work
- posted: December 16, 2016 at 3:00am version: 1.3 revision: 58
Corrected an error where out-of-bounds values on tap extensions were not checked, leading to a potential segfault.
Also: Update at Thu Dec 15 10:18:09 EST 2016 by tim
Also: Merge branch 'master' into work
- posted: October 4, 2016 at 3:00am version: 1.3 revision: 57
Eliminated three more situations causing DRC errors. One was a simple round-off error issue. Of the other two, (1) offset + stubroute was missing the obvious choice of putting the offset away from the obstruction to satisfy DRC spacing instead of closing up the gap, if the former is a smaller offset. This prevents offsets that are so large that they start to interfere with objects in the track in front of the offset; and (2) handled cases where stub routes were put in places they were not needed, due to conservative rules. Used an error box check to find out if tap geometry covers the whole stub route, and eliminated those that are.
Also: Update at Mon Oct 3 15:45:45 EDT 2016 by tim
Also: Merge branch 'master' into work
- posted: October 3, 2016 at 3:00am version: 1.3 revision: 56
Set a limit check on the number of pins on a LEF macro. Needs to be allocated so that limits are not required.
Also: Update at Sun Oct 2 17:51:35 EDT 2016 by tim
Also: Merge branch 'master' into work
Also: Removed the artificial constraint of 64 pins per macro set by fixed arrays, replacing them with dynamically allocated arrays.
- posted: September 2, 2016 at 3:00am version: 1.3 revision: 55
Update to the way that qrouter handles via offsets for processes whose track pitch is so tight that vias cannot be placed on adjacent tracks without causing a DRC violation. The previous code did not properly track via-to-via spacing on all layers for all interacting via combinations. The new code is much longer but more straightforward and easier to read.
Also: Update at Thu Sep 1 11:44:12 EDT 2016 by tim
Also: Merge branch 'master' into work
- posted: September 1, 2016 at 3:00am version: 1.3 revision: 54
Major update to separate the tap offset and stub route distances so that they can be applied separately. No functional change, only change is to the database structure.
Also: Update at Wed Aug 31 07:35:21 EDT 2016 by tim
Also: Merge branch 'master' into work
- posted: August 31, 2016 at 3:00am version: 1.3 revision: 53
Corrected problems caused by introducing the non-Tk qrouternullg, which caused the options and arguments processing to get screwed up. Replaced the optarg mechanism with a coded argument processing routine.
Also: Update at Tue Aug 30 10:03:31 EDT 2016 by tim
Also: Merge branch 'master' into work
Also: Corrected a very obscure error that caused stub routes to get confused by a nearby node on the same net and flip directions, causing the stub to be unconnected and probably cause a DRC error as well. Very rare occurrence, but fixed now anyway.
- posted: August 29, 2016 at 3:00am version: 1.3 revision: 52
Removed two more sources of DRC errors, where track-to-track via spacing violations on the same net (causing metal notch errors) were being ignored due to trivial errors in the code.
Also: Update at Sun Aug 28 21:56:25 EDT 2016 by tim
Also: Merge branch 'master' into work
- posted: August 27, 2016 at 3:00am version: 1.3 revision: 51
Corrected the segment write-back and net rip-up routines, both of which failed to preserve specific directional blocking information at a grid point when placing or removing a routed net.
Also: Update at Fri Aug 26 20:50:00 EDT 2016 by tim
Also: Merge branch 'master' into work
- posted: August 24, 2016 at 3:00am version: 1.3 revision: 50
Added new executable "qrouternullg" that does not invoke Tk or bring up a graphics window. Only lightly tested, but appears to work. Invoke with "qrouter -nog" (-nographics).
Also: Update at Tue Aug 23 11:12:20 EDT 2016 by tim
Also: Merge branch 'master' into work
Also: Minor correction to supress tkcon in -nog mode; in other words, the -nog mode implies -noc, since the console is Tk-based.
- posted: July 27, 2016 at 3:00am version: 1.3 revision: 49
Discovered that a recent change to the startup sequence causes the graphics initialization to be skipped if qrouter is started with no arguments. This is unnecessary and merely prevents the graphic display in the fully interactive mode. The problem is now fixed.
Also: Update at Tue Jul 26 22:31:37 EDT 2016 by tim
Also: Merge branch 'master' into work
- posted: July 22, 2016 at 3:00am version: 1.3 revision: 48
Updated configure script to extract paths for Tcl/Tk lib and include files from the strings passed to the compiler and linker, so that the file checks are not disjoint from the contents of tclConfig.sh and tkConfig.sh.
Also: Update at Thu Jul 21 11:12:18 EDT 2016 by tim
Also: Merge branch 'master' into work
- posted: July 13, 2016 at 3:00am version: 1.3 revision: 47
Changed the non-Tcl version to print the same version message at the top of the run as the Tcl version does.
Also: Update at Tue Jul 12 09:09:17 EDT 2016 by tim
Also: Merge branch 'master' into work
Also: Corrected an error found by Ting-Ru Lin in which FIXED nets in the NETS section are treated like those in SPECIALNETS, but since the syntax of NETS and SPECIALNETS is different, this results in a parsing error.
- posted: April 27, 2016 at 3:00am version: 1.3 revision: 46
Corrected an out-of-bounds error in the congestion computation routine, and also corrected an out-of-bounds error in node tap grid points.
Also: Update at Tue Apr 26 11:48:04 EDT 2016 by tim
Also: Merge branch 'master' into work
- posted: April 25, 2016 at 3:00am version: 1.3 revision: 45
Corrected two errors, one which incorrectly assigns pitch to the largest pitch among all the route layers (this may be harmless, and is possibly overwritten later, but the code is clearly wrong, so I fixed it). The other error allows pre-routed nets from the SPECIALNETS section to be ripped up during 2nd stage routing, and since these nets can't be routed, they vanish from the layout (except that they are dumped to the final DEF file, which almost guarantees that there will be shorts).
Also: Update at Sun Apr 24 21:39:22 EDT 2016 by tim
Also: Merge branch 'master' into work
- posted: April 23, 2016 at 3:00am version: 1.3 revision: 44
Made a few modifications so that qrouter is happier about running with input that didn't come from qflow.
Also: Update at Fri Apr 22 12:36:50 EDT 2016 by tim
Also: Merge branch 'master' into work
- posted: April 16, 2016 at 3:00am version: 1.3 revision: 43
Revised routine cleanup_net(), which had several known errors and is suspected of causing a crash condition. Rewrote it to better track which layer of a via is on the endpoint of a route; the method previously used was error-prone.
Also: Update at Fri Apr 15 17:27:08 EDT 2016 by tim
Also: Merge branch 'master' into work
- posted: February 28, 2016 at 3:00am version: 1.3 revision: 42
Corrected problem with offset vias causing offset route segments. Also started an implementation of stage3 (cleanup) routing, not finished yet.
Also: Update at Sat Feb 27 11:23:32 EST 2016 by tim
Also: Merge branch 'master' into work
Also: Changed behavior of output scaling so that it uses the values of the manufacturing grid taken from one or more LEF files, so that precisions greater than centimicrons are handled automatically rather than requiring a command-line option supplied by the user.
- posted: February 25, 2016 at 3:00am version: 1.3 revision: 41
Uncovered a major error that was causing some routes not to reach a terminal because it was attempting to define an offset on a via outside of the geometry defining the pin, where it would need a stub route to reach the tap. Since the flags are set up to make stub routes and offset routes mutually exclusive, the stub route got lost.
Also: Update at Wed Feb 24 09:03:20 EST 2016 by tim
Also: Merge branch 'master' into work
- posted: February 22, 2016 at 3:00am version: 1.3 revision: 40
Revised some of the core costing functions so that use of the "force" option for routing will manage to reach otherwise unreachable taps by giving an extremely high (but not infinite) cost to following blocked paths. "force" will then result in DRC errors but not an incomplete route.
Also: Update at Sun Feb 21 14:51:47 EST 2016 by tim
Also: Merge branch 'master' into work
- posted: February 20, 2016 at 3:00am version: 1.3 revision: 39
Corrected some problems with filling structures with pre-existing routes. Also, added additional capability to define tap points with offsets in tight locations.
Also: Update at Fri Feb 19 10:25:44 EST 2016 by tim
Also: Merge branch 'master' into work
Also: Modified tkcon and rewrote the exit routine to make sure that tkcon writes the history file before it quits, and that the history file is unique to qrouter.
Also: Made a number of definitions to avoid repeated calls to OGRID() in the code, making the code a bit easier to read.
Also: Additional definitions to get rid of OGRID entirely from the program except as a partial definition in the header file.
- posted: February 13, 2016 at 3:00am version: 1.3 revision: 38
Corrected the "cleanup_net" routine, properly this time. Fix has been tested. Should no longer leave unconnected nets where neighboring vias have been reduced to one to avoid DRC errors.
Also: Update at Fri Feb 12 20:59:06 EST 2016 by tim
Also: Merge branch 'master' into work
Also: Corrected handling of LEF files that define a layer with zero pitch and/or width, which should be handled by eliminating that layer from routing use. Such layers will not be output in the info file when using qrouter -i (although this previously caused a crash condition).
- posted: February 7, 2016 at 3:00am version: 1.3 revision: 37
Corrected layer extension in cleanup_net; when via at end of route attached to the layer below, then the segment layer has to be changed.
Also: Update at Sat Feb 6 22:03:03 EST 2016 by tim
Also: Merge branch 'master' into work
- posted: January 30, 2016 at 3:00am version: 1.3 revision: 36
Partially reverted some code handling the removal of neighboring vias where such vias generate DRC spacing errors. After removing the via, one of the routes is supposed to close the space between the removed via and the remaining via. The code was preventing this from happening. However, that code appears to have been added to prevent exactly the error that it is causing. The original example that caused the error that code was supposed to fix no longer generates such an error. This could mean that the error condition is now avoided by other code changes, or more likely that the compiler has changed and no longer produces the geometry that creates the error.
Also: Update at Fri Jan 29 10:39:54 EST 2016 by tim
Also: Merge branch 'master' into work
- posted: January 22, 2016 at 3:00am version: 1.3 revision: 35
Added two missing function declarations in maze.h, but also removed the switch to treat warnings as compile errors, since that should only be used for development cleanup.
Also: Update at Thu Jan 21 20:20:46 EST 2016 by tim
Also: Merge branch 'master' into work
- posted: January 19, 2016 at 3:00am version: 1.3 revision: 34
Wholesale update with changes from Staf Verhaegen's branch on gitlab.com. Only difference from that version is a change to the nesting of the statement in maze.c annotated with FIXME by Staf.
Also: Update at Mon Jan 18 19:51:59 EST 2016 by tim
Also: Merge branch 'master' into work
Also: Forgot to run autoconf before the last update, to capture the single change made to compile options in configure.in.
- posted: November 28, 2015 at 3:00am version: 1.3 revision: 33
Missed checking the noripup list during a route position evaluation (eval_pt()) when the position is blocked by DRC requirements from another net. Otherwise the "noripup" list doesn't work at all and qrouter can fall into an infinite loop of rip-ups and re-routes. Unfortunately, because multiple nets can place such a blockage in the same place, every such position has to check on all four sides to see if there is one or more colliding net, and check each one against the no-ripup list.
Also: Update at Fri Nov 27 10:54:13 EST 2015 by tim
Also: Merge branch 'master' into work
- posted: November 26, 2015 at 3:00am version: 1.3 revision: 32
Modified the main() routine used by the non-interpreter version of qrouter, so that the (effective) route script used matches the "standard_route" script that seems to work best in the interpreter version.
Also: Update at Wed Nov 25 09:09:57 EST 2015 by tim
Also: Merge branch 'master' into work
Also: Added an additional check on stage2 for positions specifically marked as unroutable due to DRC problems with nearby nets. These are then treated as collisions with the net rather than unroutable. Otherwise, such blocks placed directly over taps can make a tap point completely unroutable.
- posted: November 25, 2015 at 3:00am version: 1.3 revision: 31
Corrected a bad error in which abandoned nets don't have their routes removed, resulting in having those positions overwritten by other routes, followed by writing those routes to the output and thereby causing shorts. Also, the list of "noripup" nets and the net status flags are not cleared at the beginning of the stage2 routing, so that abandoned routes can never be re-tried, no matter how many times stage2 is run.
Also: Update at Tue Nov 24 15:08:17 EST 2015 by tim
Also: Merge branch 'master' into work
Also: Added a method by which the rip-up stage can limit the number of allowed collisions to a specific number. This prevents stage 2 (with some applied mask) from ripping up huge numbers of nets just because the route doesn't fit within the mask. When that happens, the number of failed nets can remain static or increase over time, causing qrouter to declare that it has become stuck.
- posted: November 24, 2015 at 3:00am version: 1.3 revision: 30
Added first of several Euclidean-measurement checks. This one avoids problems with standard cell pins that are outside the Euclidean measurement limit but inside the Manhattan measurement limit with respect to neighboring obstructions.
Also: Update at Mon Nov 23 07:32:12 EST 2015 by tim
Also: Merge branch 'master' into work
Also: Finished the implementation of euclidean geometry checks.
Also: Corrected the Euclidean measurement equations. Also, changed the double-for-loop to a single for loop when running through an entire 2-D array. This avoids running equations to find the array index from the (X, Y) values, and greatly speeds up the stage 1 routing (previously dominated by the Obs-to-Obs2 copy).
- posted: November 22, 2015 at 3:00am version: 1.3 revision: 29
Update at Sat Nov 21 21:00:33 EST 2015 by tim
Also: Added a routine at the end of tap point analysis to make sure that every node has at least one tap; in particular, this checks for positions that already have metal in an area large enough to accomodate a via. This is meant to take care of obvious situations without resorting to the use of the "force" option during routing.
Also: Added diagnostic information to track down node names, which will make it much easier to pinpoint where errors occur when a tap cannot be reached, which is a common error type.
- posted: November 19, 2015 at 3:00am version: 1.3 revision: 28
Corrected unhandled roundoff on adjacent-via offsets.
Also: Update at Wed Nov 18 08:38:03 EST 2015 by tim
Also: Merge branch 'master' into work
- posted: November 16, 2015 at 3:00am version: 1.3 revision: 27
Corrected calls to first and second stage routines from the non- interpreter "main" entrypoint.
Also: Update at Sun Nov 15 16:54:28 EST 2015 by tim
Also: Merge branch 'master' into work
- posted: November 14, 2015 at 3:00am version: 1.3 revision: 26
Corrected a really bad error that I don't know how long has been there; second stage routes a net but never commits that route back to the obstruction array, so subsequent nets will not see it and route over top it.
Also: Update at Fri Nov 13 08:59:54 EST 2015 by tim
Also: Merge branch 'master' into work
Also: Removed temporary file that got copied to the repository.
- posted: November 13, 2015 at 3:00am version: 1.3 revision: 25
Added checks in emit_routed_net() for a layer change between two wires. This situation is caused by cleanup_net() and should be treated as the start of a new route.
Also: Update at Thu Nov 12 09:08:38 EST 2015 by tim
Also: Merge branch 'master' into work
Also: Minor correction to last change.
Also: Corrected a bad error where a call to writeback_segment got moved outside an "if" block and thereby caused the whole net collision mechanism to be undermined, allowing nets to collide at will. Ugh.
- posted: November 11, 2015 at 3:00am version: 1.3 revision: 24
Split the search for route obstructions into two passes, so that all route positions that are inside grid points are marked prior to the second pass. This prevents the routine from missing a blockage because it wasn't processed yet. Also added additional checks when creating an offset tap position, to find obstructions on the layer above in the direction of the offset that would make it impossible to place a via without causing a DRC error.
Also: Update at Tue Nov 10 10:36:55 EST 2015 by tim
Also: Merge branch 'master' into work
Also: Corrected writeback_segment so that offset taps marked unroutable are done along the length of a route, not just on the sides of a via terminal; plus, the direction of the offset is calculated correctly.
- posted: November 6, 2015 at 3:00am version: 1.3 revision: 23
Change to blockage generation for variable pitch route layers: Pins cannot be marked blocked because they're on an odd numbered route track.
Also: Update at Thu Nov 5 08:28:38 EST 2015 by tim
Also: Merge branch 'master' into work
Also: Rearranged some code for processing the config file. The -i option now checks for N-spaced tracks and dumps this information to the info file so that a placement tool can use it to make sure that any pins on a double-spaced route layer are also double- spaced.
- posted: October 31, 2015 at 3:00am version: 1.3 revision: 22
Corrected configuration to properly handle "prefix" in the configure line.
Also: Update at Fri Oct 30 09:18:15 EDT 2015 by tim
Also: Merge branch 'master' into work
- posted: October 19, 2015 at 3:00am version: 1.3 revision: 21
Updated the configure script with a few more common locations for finding tclConfig.sh and tkConfig.sh.
Also: Update at Sun Oct 18 17:49:36 EDT 2015 by tim
Also: Merge branch 'master' into work
- posted: October 15, 2015 at 3:00am version: 1.3 revision: 20
Reverted one change involving the $prefix set by configure; still figuring out how to specify QROUTER_LIB_DIR, which needs to be dealt with another way.
Also: Update at Wed Oct 14 23:16:40 EDT 2015 by tim
Also: Merge branch 'master' into work
- posted: October 14, 2015 at 3:00am version: 1.3 revision: 19
Changed prefix in configure file per Staf Verhaegen's patch. Also fixed the qrouter.h declaration of fillMask() per Staf's patch.
Also: Update at Tue Oct 13 14:27:30 EDT 2015 by tim
Also: Merge branch 'master' into work
Also: Modified the startup script so that it will not exit simply because a DISPLAY variable is not set; Tk_Init() does not force an exit on an error return code. This allows qrouter to continue to process in a non-graphics environment.
Also: Revised the "-k" command switch so that it takes a number which indicated the number of additional attempts after things start looking bad. This option is mirrored in the command option "stage2 tries".
Also: Minor corrections to the last check-in, which prevented the toplevel command from working correctly.
- posted: October 12, 2015 at 3:00am version: 1.3 revision: 18
Corrected a problem when a layer's width prevents routing on adjacent tracks, but that layer is used for pins. A pin can end up being blocked on all sides when every other track is marked unroutable. Fixed by searching for adjacent pins and allowing routes in the direction of that pin.
Also: Update at Sun Oct 11 13:48:53 EDT 2015 by tim
Also: Merge branch 'master' into work
- posted: October 10, 2015 at 3:00am version: 1.3 revision: 17
Updated configure for cygwin compile.
Also: Update at Fri Oct 9 12:39:08 EDT 2015 by tim
Also: Merge branch 'master' into work
- posted: September 15, 2015 at 3:00am version: 1.3 revision: 16
Corrected an apparent missing semicolon on a "for" statement which was supposed to be self-contained. Other changes are minor re-arrangements of the order of code execution during the ripup- and-reroute stage, and are transparent to the operation of qrouter.
Also: Update at Mon Sep 14 09:27:49 EDT 2015 by tim
Also: Merge branch 'master' into work
- posted: September 9, 2015 at 3:00am version: 1.3 revision: 15
Added additional capability to handle processes where vias cannot be placed in adjacent tracks without causing DRC errors. Previous code handled vias in different nets, and vias on the same route. New code handles vias on different routes of the same net.
Also: Update at Tue Sep 8 08:43:17 EDT 2015 by tim
Also: Merge branch 'master' into work
Also: Removed diagnostic output print statements.
- posted: September 8, 2015 at 3:00am version: 1.3 revision: 14
Corrected error in which placement of stub route information obliterated the bits marking specific directional blockages. This would cause vias to be placed on taps too close to obstructions, resulting in DRC errors.
Also: Update at Mon Sep 7 10:13:46 EDT 2015 by tim
Also: Merge branch 'master' into work
Also: Corrected special net width where two vias on adjacent routes cause notch DRC errors if the standard route width is used.
- posted: September 7, 2015 at 3:00am version: 1.3 revision: 13
Corrected a roundoff error in via obstruction calculations.
Also: Update at Sun Sep 6 14:00:16 EDT 2015 by tim
Also: Merge branch 'master' into work
Also: Changed behavior of STUBROUTE_X so that the net number is kept, as it would be for other STUBROUTEs, but the Nodeloc is set to NULL; this prevents the tap from being passed over when checking for tap-to-tap spacing violations (because it has no node number and is believed to be a fixed obstruction, not a tap).
Also: Corrected an apparently untested section which offsets vias to account for small problems with vias not being allowed to occupy adjacent route tracks. Missing parentheses were causing the logic to be always false, and the code was never being used.
- posted: August 4, 2015 at 3:00am version: 1.3 revision: 12
Implemented specific blocks on searches up and down for grid positions that are blocked for vias but not for normal routes. This allows routing in some critical cases that were previously being marked unroutable.
Also: Update at Mon Aug 3 10:04:00 EDT 2015 by tim
Also: Merge branch 'master' into work
Also: Additions to handle pins diagonally offset from (and close to) other pins. Checks for position offset are no longer either/or. If a via to a pin can potentially be placed further away either vertically or horizontally, both offsets are checked. If one solution is blocked but the other isn't, the valid one is used. If both solutions are valid, then the last one to be checked is used.
- posted: June 10, 2015 at 3:00am version: 1.3 revision: 11
Discovered that the reason I keep needing to add OFFSET lines to route layer descriptions in LEF files is due to an obscure statement in the LEF/DEF reference which states that OFFSET, if not specified, defaults to 1/2 the pitch.
Also: Update at Tue Jun 9 11:27:41 EDT 2015 by tim
Also: Merge branch 'master' into work
- posted: May 18, 2015 at 3:00am version: 1.3 revision: 10
Modified the standard and congestion route scripts slightly to avoid giving up too early, which seems to happen a bit too often with the previous scripts.
Also: Update at Sun May 17 21:39:41 EDT 2015 by tim
Also: Merge branch 'master' into work
- posted: May 9, 2015 at 3:00am version: 1.3 revision: 9
Tweaked the "standard_route" script to make a second stage2 attempt if fewer than 5 routes remain. There is no sense in abandoning the routing if it is so close to completion.
Also: Update at Fri May 8 09:09:33 EDT 2015 by tim
Also: Merge branch 'master' into work
Also: Updated tkcon.tcl to resolve the known problem of not being able to use the up and down arrow keys to move through the command history.
- posted: March 7, 2015 at 3:00am version: 1.3 revision: 8
Corrected a segfault caused by the recent change to save memory by removing blocks of pointers that aren't used. Two lines of code continued to access those removed blocks.
Also: Update at Fri Mar 6 14:43:13 EST 2015 by tim
Also: Merge branch 'master' into work
- posted: February 16, 2015 at 3:00am version: 1.3 revision: 7
.gitignore is now working
Also: Update at Sat Feb 14 11:56:58 EST 2015 by tim
Also: Merge branch 'master' into work
- posted: February 15, 2015 at 3:00am version: 1.3 revision: 6
Implemented some memory savings by tracking the number of layers that have pins defined, and using that value to restrict the number of layers allocated for the Nodeloc, Nodesav, and Stub arrays. Also some searches are restricted to those layers only, leading to a small amount of speedup (but probably not significant).
Also: Update at Fri Oct 24 12:41:57 EDT 2014 by tim
Also: Merge branch 'master' into work
Also: Corrections to restore the ability to handle an already-routed input net (in which case it basically verifies the routing).
- posted: October 25, 2014 at 3:00am version: 1.3 revision: 6
Apparently non-functional update. Repeated messages from previous update.
- posted: October 22, 2014 at 3:00am version: 1.3 revision: 5
Corrected a problem for large layouts where the starting value was set too low in a search for a maximum distance.
Also: Update at Tue Oct 21 09:43:48 EDT 2014 by tim
Also: Merge branch 'master' into work
- posted: October 21, 2014 at 3:00am version: 1.3 revision: 4
Corrected an error in the net cleanup routine where the ends of nets are modified where vias on the same net are placed on adjacent route tracks, but the spacing rules do not allow this. The existing code was not tracking the last routing layer used, and so could end up extending the wrong route layer after removing the via.
Also: Update at Mon Oct 20 11:16:33 EDT 2014 by tim
Also: Merge branch 'master' into work
- posted: October 12, 2014 at 3:00am version: 1.3 revision: 3
Applied patches from Ruben Undheim. Corrects compile and install problems on systems requiring -fPIC on all source compiles. Fixed an error preventing Tcl/Tk from finding the "lowerconsole" procedure, and changed console.tcl so that exiting the console exits the program, which is correct behavior for something that is not running a GUI.
Also: Update at Sat Oct 11 10:41:17 EDT 2014 by tim
Also: Merge branch 'master' into work
- posted: October 3, 2014 at 3:00am version: 1.3 revision: 2
Ran autoconf. . . no major changes here.
Also: Update at Thu Oct 2 20:16:03 EDT 2014 by tim
Also: Merge branch 'master' into work
- posted: September 18, 2014 at 8:29am version: 1.3 revision: 1
Attempting to fix website problem caused by not initializing the git tag.
- posted: September 17, 2014 at 3:00am version: 1.3 revision: 0
Initial check-in of development version 1.3, unchanged since the last revision of stable version 1.2.
- posted: July 22, 2016 at 3:00am version: 1.2 revision: 36
Updated configure script to extract paths for Tcl/Tk lib and include files from the strings passed to the compiler and linker, so that the file checks are not disjoint from the contents of tclConfig.sh and tkConfig.sh.
Also: Update at Thu Jul 21 11:12:06 EDT 2016 by tim
Also: Merge branch 'master' into work
- posted: November 14, 2015 at 3:00am version: 1.2 revision: 35
Corrected an error also found in qrouter-1.3 in which the route write-back to the obstruction array was missing in the second stage route routine, leading to potentially many shorted routes.
Also: Update at Fri Nov 13 09:01:53 EST 2015 by tim
Also: Merge branch 'master' into work
- posted: October 22, 2014 at 3:00am version: 1.2 revision: 34
Corrected a problem for large layouts where the starting value was set too low in a search for a maximum distance.
Also: Update at Tue Oct 21 09:43:34 EDT 2014 by tim
Also: Merge branch 'master' into work
- posted: October 21, 2014 at 3:00am version: 1.2 revision: 33
Corrected an error in the net cleanup routine where the ends of nets are modified where vias on the same net are placed on adjacent route tracks, but the spacing rules do not allow this. The existing code was not tracking the last routing layer used, and so could end up extending the wrong route layer after removing the via.
Also: Update at Mon Oct 20 11:16:19 EDT 2014 by tim
Also: Merge branch 'master' into work
- Thursday, November 14, 2013
This is a first draft.- November 15, 2013 at 3:00am
Several corrections for errors found when the system was run from the standard install location.
Also: Made a correction to the backward-compatibility of version 1.2, in particular to restore the use of "-c" and "-i" switches.
Also: A few more changes, allowing the "-c" option to operate in a completely backward-compatibility mode by running a simple script roughly equivalent to qrouter version 1.1 (but a lot faster).
- November 16, 2013 at 3:00am
Added some more commands to the qrouter command set to complete the overlap with OS command-line switches and statements in the configuration file. Everything can now be done from the interpreter prompt.
Also: Update at Fri Nov 15 11:24:23 EST 2013 by tim
Also: Merge branch 'master' into work
Also: Corrected handling of the script file switch, some DEF read modifications for reading pre-routed nets (not completed).
Also: Cleaned up the problems with reinitialization; qrouter can now re-read a DEF file or read a routed DEF file and proceed normally.
Also: Cleaned up the use of "verbose", so that "verbose 0" is truly quiet (only reports failed routes at the end of each stage, and other major errors). "verbose 3" is the level of the original output, and is the default. "verbose 0" will significantly speed up the routing process, as there is a rather large overhead associated with flushing output to the tkcon console window.
Also: Thought better of the catch-all "config" command, and broke it up into individual commands like "verbose", "layers", etc. Otherwise the distinction between commands and sub-commands of "config" is pretty arbitrary.
Also: Modified the configuration file reader to accept the new Tcl command syntax as well as the older syntax.
Also: Modified routines dofirststage and dosecondstage so that they return the number of failed routes. The Tcl commands "stage1" and "stage2" then return the number of failed routes to the interpreter. This allows for a simple test of success on the command line or in the route script. The default route script has been updated to take advantage of this feature.
- November 23, 2013 at 3:00am
Renamed "config.h" to "qconfig.h" to prevent confusion with all the "config" files used by autoconf.
Also: Update at Fri Nov 22 11:35:36 EST 2013 by tim
Also: Merge branch 'master' into work
Also: Added INC_SPECS to Makefile.in so that Tcl/Tk header files in places other than /usr/include/ will be handled properly. Corrected a typo for the redefinition of "Flush" for the non-Tcl compile, as kindly pointed out by Stefan Thiede.
Also: Fixed a crash condition that occurs when a pin extends outside of the defined track area, potentially giving it a track position of -1, which was not handled one place in the DEF read routine.
- November 24, 2013 at 3:00am
Changed the behavior of "qrouter -h" when querying the version number such that (1) "qrouter -v 0 -h" prints only the version information, and (2) the Tcl/Tk version prints ".T" at the end of the version string so that querying tools (like qflow) can determine the capabilities of qrouter and can be made aware when scripting is and is not available.
Also: Update at Sat Nov 23 10:10:38 EST 2013 by tim
Also: Merge branch 'master' into work
Also: Modification to the qrouter.tcl script so that having a local "route.cfg" file is equivalent to having "-c" on the command line, in making qrouter run the "autoroute" script. This adds a little more consistency to the different ways qrouter runs, depending on the setup.
Also: Added a line to the top of the output file when using "qrouter -i" to query LEF files for information; this line includes version information about qrouter.
Also: Removed the compiled "qrouter" from the distribution (should not have been there), and changed Makefile.in to fix a few errors in the "make clean" sequence.
- November 27, 2013 at 3:00am
Correction of the code supporting output of congestion analysis; corrected a few other errors, and greatly increased the vector used as a temporary hold space for net names read from files, which at 64 bytes was far too short for some names generated by yosys.
Also: Update at Tue Nov 26 19:20:56 EST 2013 by tim
Also: Merge branch 'master' into work
- November 28, 2013 at 3:00am
Corrected an error in counting when writing back the order in which to route nets; count was off by one and the last net to be routed would be pushed up to the front. Also, got rid of the pointless output statement about "TotalRoutes", which is meaningless, and instead replaced it with "Nets remaining", which is a metric of interest. Arguably the most important metric of interest.
Also: Update at Wed Nov 27 20:35:43 EST 2013 by tim
Also: Merge branch 'master' into work
- November 29, 2013 at 3:00am
Changed the output of "congested" so that the values are normalized to the number of routing layers. A value of 1 would indicate full occupation of all routing grids covering a cell.
Also: Update at Thu Nov 28 12:00:44 EST 2013 by tim
Also: Merge branch 'master' into work
- December 2, 2013 at 3:00am
Modified the SPECIALNETS section on advice from Stefan Thiede to use the net name for the stub routes instead of making a new, fake net name. Otherwise some tools treat the stubs as different nets and complain about the nets overlapping. Removed most instances where empty stub routes were being written to the output. Also, modified the NETS structure from a linked list to an array. The array is passed directly to qsort() for sorting, and then the nets are in order of route priority. The qsort compare routines were modified to include handling critical nets, instead of having them sorted separately. The getnettoroute() routine then just retrieves the indexed net, and doesn't have to go searching for it.
Also: Update at Sun Dec 1 17:13:56 EST 2013 by tim
Also: Merge branch 'master' into work
Also: Made several key modifications; changed instance record to have a pointer to the macro record instead of having a copy of the macro name, avoiding having to search over the macro list. But mainly, for the Tcl version, the instance records are hashed in addition to the linked list, greatly improving the time to read in a DEF file with many nets.
- December 4, 2013 at 3:00am
Corrected an error where a net with no routable terminal points would cause a crash when computing a route mask area.
Also: Update at Tue Dec 3 15:37:36 EST 2013 by tim
Also: Merge branch 'master' into work
Also: Some corrections to allow compiling without Tcl support.
- December 6, 2013 at 3:00am
Cleaned up the stupidity with regard to the use of Nlnets[0]. The net numbers are ordered from 1, not the array. The netorder record is unnecessary, since nets are ordered by qsort(), but the record is kept for the convenience of marking critical nets and having them handled by qsort(). There are no longer any NULL records in Nlnets[]. There is still some ambiguity when SPECIALNETS are declared in the DEF file, especially if the nets are partially routed with fixed routes. This needs to be dealt with properly.
Also: Update at Thu Dec 5 15:43:47 EST 2013 by tim
Also: Merge branch 'master' into work
Also: Restored the "failing all" command, which had not been rewritten for the revised Nlnets array.
- December 21, 2013 at 3:00am
A few changes to deal with problems stemming from lower-case in either macro names or the tech directory name.
Also: Update at Fri Dec 20 13:04:37 EST 2013 by tim
Also: Merge branch 'master' into work
Also: Corrected an error where non-square vias caused the wrong dimension to be used when drawing a stem from the last via to the terminal.
- January 8, 2014 at 3:00am
Corrected an error in which a position marked as a stub route to a terminal would be missed when checking for net collisions on the second stage, resulting in a shorted net in the output.
Also: Update at Tue Jan 7 15:57:14 EST 2014 by tim
Also: Merge branch 'master' into work
- January 12, 2014 at 3:00am
A number of corrections to the code determining how to make the final connections to a terminal without generating DRC errors. Also tracked down and corrected an error that allowed routes with collisions to route on positions that are too close to other terminal positions to be allowed; sometimes this error would show up as a missing final connection to a terminal.
Also: Update at Sat Jan 11 20:56:53 EST 2014 by tim
Also: Merge branch 'master' into work
- January 19, 2014 at 3:00am
Removed temporary files. Corrected an error in the "expand taps" subroutine that was improperly ignoring what layer geometry was on, and thereby growing tap geometry into areas where the tap did not exist.
Also: Update at Sat Jan 18 14:46:58 EST 2014 by tim
Also: Merge branch 'master' into work
Also: Modified the handling of route layers with pitches too narrow and vias too wide to be placed in adjacent tracks. Handling is not ideal, yet, but this fix reduces the majority of errors coming from routes on these kind of layers. More fixes to come.
Also: Corrected an error with route writeback that would fail to preserve the stub routing information if it was on the "wrong" layer of a via.
- January 20, 2014 at 3:00am
Added code to deal with DRC spacing violations between a via on an offset terminal position and a neighboring via or bend in a metal route. Discovered that offset measurements were being double-counted, so fixed that.
Also: Update at Sun Jan 19 13:04:02 EST 2014 by tim
Also: Merge branch 'master' into work
Also: Removed some diagnostic print statements.
- January 23, 2014 at 3:00am
Several enhancements to take care of route layers with vias that are large enough to cause DRC spacing violations with vias on adjacent tracks.
Also: Update at Wed Jan 22 09:55:30 EST 2014 by tim
Also: Merge branch 'master' into work
Also: Corrected an error which was calculating the wrong edge of non-square vias and therefore could determine that track spacing was too small for placing vias, force the track spacing to double, and thereby make the layout mostly unroutable.
Also: Fixed an incorrect handling of roundoff error for negative values. This can happen on the left and bottom edge of a layout if the routing area extends beyond the layout zero coordinate axes in X or Y. The old problem that (int)(x + 1/2) does not work when x < 0!
- February 4, 2014 at 3:00am
Corrected one error with oversized route layers that can allow a placement of a via in the track next to a route where such an arrangement will cause a DRC error. Relaxed the constraint on taps with nearby obstructions such that the tap position will be allowed for routing using a tap position offset, if and only if the next track over in the direction of the offset is empty. This helps to prevent having a tap be unroutable because there is too much nearby obstruction geometry, without resorting to a full geometry search that would require a lot of additional coding.
Also: Update at Mon Feb 3 14:00:13 EST 2014 by tim
Also: Merge branch 'master' into work
- February 6, 2014 at 3:00am
Corrected two errors---one is a small change to the stub adjustment routine, requiring the error box to not only touch the neighboring geometry but to touch it in a non-trivial way (not just corner points touching). The other is a more serious error that can reassign a tap position as an available route position where one tap crosses over another tap.
Also: Update at Wed Feb 5 10:11:37 EST 2014 by tim
Also: Merge branch 'master' into work
Also: Corrected a secondary problem caused by allowing additional offset taps. Solution is to block positions around an offset tap if an offset tap is placed, and to block the position at an offset tap if a route is placed in front of the offset. These are temporary blocks that could prevent routing to the tap on the first pass but will not interfere with the second stage rip-up and reroute.
- February 8, 2014 at 3:00am
Update of config files and Makefile that really should have been in gitignore. . . this is a nonfunctional update. . .
Also: Update at Fri Feb 7 12:37:16 EST 2014 by tim
Also: Merge branch 'master' into work
- February 9, 2014 at 3:00am
Implemented a workaround for nodes that are boxed in by obstruction layers which are spaced properly for euclidean distance measurement but not for manhattan distance measurement. Any tap for which the metal area completely covers a via centered on the route grid point will be made unconditionally routable. It may be necessary to flag such an unconditionally routable point to make sure that it does not get removed by the tap_to_tap interaction routine. Also removed an improper check for VDD and GND nets left over from much earlier code; it was causing power and ground nets to be invisible to the router under some circumstances.
Also: Update at Sat Feb 8 21:07:22 EST 2014 by tim
Also: Merge branch 'master' into work
- February 10, 2014 at 3:00am
Modifications to the LEF reader to allow metal layers that are not numeric (like "topmet" instead of "met4") to be parsed. They are *assumed* to be in order from bottom to top, such that "topmet" followed by "met2" would cause a real screw-up. But it's doubtful that there's any better way to parse a LEF file, unless it's to look at all the via layers and arrange them accordingly. If any LEF file is so badly written that it comes to that, then I'll revisit the code then. And not until.
Also: Update at Sun Feb 9 15:04:20 EST 2014 by tim
Also: Merge branch 'master' into work
Also: Correction to cleanup_net; can only do a simple rerouting of a segment end if the two neighboring contacts are the same type. This fix removes a potential to create shorted nets, but also allows the DRC error that the cleanup_net code was trying to eliminate. The DRC errors will have to be handled elsewhere by generating specialnets to connect across the two vias.
Also: Corrected an error with cleanup_net (another one)---forgot to ignore route endpoints that are taps to cell ports; otherwise removing the via and connecting the route somewhere else will disconnect the net from the port, and can also screw up the route layers in the output.
- April 8, 2014 at 3:00am
Prevented a segfault when a pin in the DEF file is not attached to anything else in the netlist.
Also: Update at Mon Apr 7 15:40:02 EDT 2014 by tim
Also: Merge branch 'master' into work
- May 27, 2014 at 3:00am
Update at Mon May 26 09:55:11 EDT 2014 by tim
- May 28, 2014 at 3:00am
Update at Tue May 27 19:10:20 EDT 2014 by tim
- May 30, 2014 at 3:00am
Update at Thu May 29 10:52:51 EDT 2014 by tim
- May 31, 2014 at 3:00am
Update at Fri May 30 14:41:25 EDT 2014 by tim
- June 1, 2014 at 3:00am
Update at Sat May 31 14:50:58 EDT 2014 by tim
- July 13, 2014 at 3:00am
Changed the handling of route area masks, moving the position of net trunks into the net record and branch positions into the node records. This will facilitate the initial determination of best potential net placement.
Also: Update at Sat Jul 12 14:17:42 EDT 2014 by tim
Also: Merge branch 'master' into work
- July 18, 2014 at 3:00am
Added a catch-all routine for "node has no taps" message. This makes it easier to debug common problems by allowing a single entry point for declaring breaks.
Also: Update at Thu Jul 17 08:32:38 EDT 2014 by tim
Also: Merge branch 'master' into work
Also: Removed files from the build that were not supposed to have been added to the repository.
Also: Modified the gitignore file so that no extraneous files from the build will end up in the repository.
- September 8, 2014 at 3:00am
Ran "git rm --cached" to prevent config.log and config.status from being tracked in spite of being in the .gitignore file.
Also: Update at Sun Sep 7 10:16:02 EDT 2014 by tim
Also: Merge branch 'master' into work
Also: Applied patches from Ruben Undheim needed for a clean build of the debian package.
- September 10, 2014 at 3:00am
Modified some headers to make them more purely GPL, with authorization from Steve Beccue, whose copyright line was being removed.
Also: Update at Tue Sep 9 16:21:56 EDT 2014 by tim
Also: Merge branch 'master' into work
- September 13, 2014 at 3:00am
Applied two patches for things that should have been corrected in the Makefile long ago for portability. Thanks to Ruben Undheim for forwarding the patch files to me.
Also: Update at Fri Sep 12 17:02:47 EDT 2014 by tim
Also: Merge branch 'master' into work
- December 24, 2012 at 2:45pm
First commit of development version 1.1
- December 29, 2012 at 3:00am
Rewrote the stack-contact removal algorithm. New method is not elegant but does the job, more or less. Does not look further than one step away from the solution, so is unable to find solutions requiring additional rerouting.
Also: Update at Fri Dec 28 11:47:24 EST 2012 by tim
Also: Merge branch 'master' into work
- December 31, 2012 at 3:00am
Increased PRindMAX, which is now large enough to handle designs that are 8192 x 8192 tracks x 4 layers, although I may try to change this to a type long, move the flags elsewhere, and avoid all potential size limitations.
Also: Update at Sun Dec 30 12:34:18 EST 2012 by tim
Also: Merge branch 'master' into work
- January 19, 2013 at 3:00am
Corrected an error where a copy was copying flag bits for the Obs[] vector into the Obs2[] vector, where overlapping bit fields were making the router confuse pin obstructions with source nodes.
Also: Update at Fri Jan 18 11:27:13 EST 2013 by tim
Also: Merge branch 'master' into work
- March 30, 2013 at 3:00am
Added the capability to handle upper-level metals with larger spacing and pitch requirements. Added the capability to handle technologies that don't allow arbitrary via stacking. Some preliminary work in route search optimization.
Also: Update at Fri Mar 29 17:41:50 EDT 2013 by tim
Also: Merge branch 'master' into work
- March 31, 2013 at 3:00am
Corrected an error with the search order optimization, although it doesn't make a lot of difference because the route order optimization does not speed things up noticeably in this simple form.
Also: Update at Sat Mar 30 09:24:44 EDT 2013 by tim
Also: Merge branch 'master' into work
- April 9, 2013 at 3:00am
Reworked the DEF file read-in using a proper parser pulled from magic, which significantly improves the ability of qrouter to read DEF files generated by tools other than the place2def2 tool from the digital flow toolchain on opencircuitdesign.
Also: Update at Mon Apr 8 09:58:12 EDT 2013 by tim
Also: Merge branch 'master' into work
Also: One correction to replace a cleanup routine that was improperly carried over from magic, which has a different memory allocation scheme (one-delayed).
- April 11, 2013 at 3:00am
Corrected a typo that prevents qrouter from expanding the number of route layers if the input contains more layers than are declared for routing in the config file.
Also: Update at Wed Apr 10 10:45:21 EDT 2013 by tim
Also: Merge branch 'master' into work
Also: Corrected correctly, this time.
Also: Removed deprecated routines for DEF file reading from qrouter.c. These are superceded by the routines in def.c.
- April 12, 2013 at 3:00am
Corrected output for different scalefactors in the DEF file. Originally it was assumed that the DEF file was written by the open-source digital flow, and was always in centimicrons. Now the UNITS line is parsed for the correct scaling.
Also: Update at Thu Apr 11 15:22:56 EDT 2013 by tim
Also: Merge branch 'master' into work
- April 13, 2013 at 3:00am
Corrected an error in stubroute generation that caused some stubroutes to be improperly connected in the DEF file to the previous stubroute.
Also: Update at Fri Apr 12 17:10:19 EDT 2013 by tim
Also: Merge branch 'master' into work
- April 16, 2013 at 3:00am
Changed the static allocation of Pr[] into a dynamic one. This prevents all sorts of trouble with the linker and execution on various platforms. Also, put the whole system under autoconf.
Also: Update at Mon Apr 15 09:40:06 EDT 2013 by tim
Also: Merge branch 'master' into work
Also: Changed the README file to give instructions for the autconf compile and install.
- April 17, 2013 at 3:00am
A major code overhaul. Even though dynamic allocation of the Pr[] array fixed compile-time problems, the array is so huge that systems without enough memory just keel over when it runs. Given that earlier changes made the Pr[] array contents reflect the array position of that route point, the only useful information kept in Pr[] was the cost, plus a few flags. So the code was modified to make Obs2[] an array of structures holding a cost (u_int) and flags (u_char), that is, five bytes per point, and it is allocated per layer, not all at once, so unlikely to cause paging errors. Also removed a few unnecessary references to global variables.
Also: Update at Tue Apr 16 19:12:11 EDT 2013 by tim
Also: Merge branch 'master' into work
- April 18, 2013 at 3:00am
Corrected an error in the second-stage rip-up and reroute.
Also: Update at Wed Apr 17 10:00:53 EDT 2013 by tim
Also: Merge branch 'master' into work
Also: Another correction to the rip-up and re-route stage. Areas around the perimeter of a port were being ignored during the re-routing stage, leading to a low incidence of successful re-routes.
- April 19, 2013 at 3:00am
Added some additional handling of off-grid terminals, so now most terminals can be reached no matter how badly the placement is aligned to the routing grid.
Also: Update at Thu Apr 18 19:14:10 EDT 2013 by tim
Also: Merge branch 'master' into work
- April 20, 2013 at 3:00am
Update for handling terminals that are offset from the route grid.
Also: Update at Fri Apr 19 13:24:17 EDT 2013 by tim
Also: Merge branch 'master' into work
- April 23, 2013 at 3:00am
Qrouter additions for handling offset port positions; these are not yet working and were not meant to be checked in, although the new code should not cause any additional problems with the router.
Also: Update at Mon Apr 22 09:12:33 EDT 2013 by tim
Also: Merge branch 'master' into work
Also: Some backtracking on the last set of changes. Reverting to the most recent code that produces correct routes, even if there are a few DRC errors. Will make a second attempt to identify route position offsets at off-grid pins.
- April 24, 2013 at 3:00am
This version eliminates the majority of DRC errors. Still working on an assortment of additional DRC violations.
Also: Update at Tue Apr 23 12:20:59 EDT 2013 by tim
Also: Merge branch 'master' into work
- April 27, 2013 at 3:00am
More detailed analysis of port geometry added, to eliminate DRC errors at port connections. Not quite finished yet, but resolves many more DRC errors than before.
Also: Update at Fri Apr 26 09:32:46 EDT 2013 by tim
Also: Merge branch 'master' into work
Also: More corrections/additions for finding and eliminating DRC errors at terminal points. The list of DRC errors is getting very small. . .
- April 30, 2013 at 3:00am
Latest changes to the router to handle various geometries at a port connection. This set of changes eliminates nearly all DRC errors produced by the detailed route.
Also: Update at Mon Apr 29 17:45:00 EDT 2013 by tim
Also: Merge branch 'master' into work
- May 1, 2013 at 3:00am
Added another bit of code to avoid DRC errors generated when two routes on the same net approach to within a short distance of each other from different directions.
Also: Update at Tue Apr 30 17:51:47 EDT 2013 by tim
Also: Merge branch 'master' into work
- May 2, 2013 at 3:00am
Continuing to solve all DRC issues; test case is now down to 3 errors in 10000+ routes, all errors of the same type. Last error requires a bit more coding than the others, so I am checking in now before tackling it.
Also: Update at Wed May 1 15:35:21 EDT 2013 by tim
Also: Merge branch 'master' into work
- May 3, 2013 at 3:00am
First version of qrouter to finish routing the 3000+ gate, 10000+ routes test circuit with no route errors, no DRC errors, and no stacked contact errors.
Also: Update at Thu May 2 15:51:08 EDT 2013 by tim
Also: Merge branch 'master' into work
- May 4, 2013 at 3:00am
Corrected a minor but fatal error in which the routine that sets a node and all its connected routes to "source" or "target" does not process the point of the top connection of a via. This is a rare occurrence, but can happen if a pin or port is declared on a layer above metal1, and there is room on the metal1 route layer below it to connect to the pin by a via down, putting the route endpoint at the top of the via.
Also: Update at Fri May 3 12:25:10 EDT 2013 by tim
Also: Merge branch 'master' into work
Also: Correction to minor typo in last update.
- May 8, 2013 at 3:00am
Major code overhaul: simplified internal structures, putting the route information under the net instead of the node, and removing the independent list of nodes in favor of having nodes listed only under their assigned nets. Added code to read in the geometry of existing routed nets from a DEF file, so that qrouter can start from a partially-routed solution. "Fixed" or "cover" nets, as well as nets in the "specialnets" section, are treated as obstructions.
Also: Update at Tue May 7 16:17:34 EDT 2013 by tim
Also: Merge branch 'master' into work
- May 9, 2013 at 3:00am
Additional code to handle routing of pins directly to power and ground. Note that this does not connect together rows of power busses; it just finds the nearest bus and connects to it from any pin that is marked as connecting to power or ground.
Also: Update at Wed May 8 19:44:21 EDT 2013 by tim
Also: Merge branch 'master' into work
- May 10, 2013 at 3:00am
Corrected an error that would overwrite array bounds if the physical Y lower bound of the array was less than zero.
Also: Update at Thu May 9 15:44:57 EDT 2013 by tim
Also: Merge branch 'master' into work
- May 11, 2013 at 3:00am
Corrected an error in the recently added power/ground route handling, that fails to route the last connection.
Also: Update at Fri May 10 14:05:57 EDT 2013 by tim
Also: Merge branch 'master' into work
- May 17, 2013 at 3:00am
Correction of a bug referencing an uninitialized variable.
Also: Update at Thu May 16 10:52:54 EDT 2013 by tim
Also: Merge branch 'master' into work
- May 25, 2013 at 3:00am
Corrected an error in which obstructions from a single direction would be specified by a tap position offset but fail to mark the point with the node number, making the tap point unroutable. Corrected another error in which the track offset was incorrectly read from the DIEAREA lower corner rather than from the TRACKS statement.
Also: Update at Fri May 24 11:04:53 EDT 2013 by tim
Also: Merge branch 'master' into work
Also: Corrected another error that would prevent qrouter from seeing that it had already completed a route, if that route was forced to connect to the tap to avoid an irrational blocking obstruction.
- May 29, 2013 at 3:00am
Corrected another couple of places where set_node_to_net would succeed on an unroutable terminal and cause an infinite loop.
Also: Update at Tue May 28 14:24:50 EDT 2013 by tim
Also: Merge branch 'master' into work
Also: Changed a diagnostic message to be printed only if "verbose" mode is set.
- May 30, 2013 at 3:00am
Corrected yet another instance where an obstructed tap would put qrouter into an infinite loop.
Also: Update at Wed May 29 18:04:29 EDT 2013 by tim
Also: Merge branch 'master' into work
Also: Fixed an issue with qrouter where it would always pick up spacing from a RANGE statement if it came last, and therefore assume worst-case spacing always. The fix reverts to the intended behavior of ignoring worst-case spacing, which is a limitation that will one day need to be addressed.
- May 31, 2013 at 3:00am
Correction to yesterday's update; improper to call LefEndStatement() if the semicolon ending the statement has already been read. LEF parser had been fixed for SPACING statements with a RANGE component but became broken for plain SPACING statements. Fixed now.
Also: Update at Thu May 30 17:54:19 EDT 2013 by tim
Also: Merge branch 'master' into work
- June 1, 2013 at 3:00am
Found that the last patch showed up a previously hidden DRC violating condition where an offset on one tap to avoid an obstruction creates a spacing violation with a tap on the other side. Added a completely new set of checks for this one condition, because it is difficult to integrate into create_obstructions_from_nodes(). Also, found an incorrect calculation for how much a via should be offset in addition to the calculated offset, to prevent a DRC error. The original caculation was 2x too large, sometimes leading to a DRC spacing violation on the other side.
Also: Update at Fri May 31 17:26:45 EDT 2013 by tim
Also: Merge branch 'master' into work
- July 31, 2013 at 3:00am
Corrected an issue where power net positions would be ignored unless they were routable with no offsets or other hazards.
Also: Update at Tue Jul 30 10:11:12 EDT 2013 by tim
Also: Merge branch 'master' into work
- August 21, 2013 at 3:00am
Modified handling of stacked contacts to fail a route rather than accept it if a solution cannot be found that avoids stacking contacts beyond what is specified as allowable. In stage 2, a stacked contact solution will always be found, by overrouting existing nets and moving those nets to the rip-up list.
Also: Update at Tue Aug 20 17:46:26 EDT 2013 by tim
Also: Merge branch 'master' into work
- August 22, 2013 at 3:00am
Corrected a segfault error in the second stage routing, and relaxed the conditions for abandoning the second stage routing, which were too restrictive (and still may need to be revisited).
Also: Update at Wed Aug 21 09:34:16 EDT 2013 by tim
Also: Merge branch 'master' into work
Also: Corrected an error in which a rare set of conditions involving a via as the initial route segment connecting to a pin by only a stub route would not output the stub route, causing the pin to be disconnected in the final output.
- August 26, 2013 at 3:00am
Small change to ensure that the "-i" result does not print null lines, if the number of layers defined in the .cfg file is erroneously larger than the number of layers defined by the LEF file.
Also: Update at Sun Aug 25 14:16:50 EDT 2013 by tim
Also: Merge branch 'master' into work
- August 30, 2013 at 3:00am
A number of modifications and updates, dealing with round-off errors and handling more geometry cases for checking DRC interactions.
Also: Update at Thu Aug 29 13:41:40 EDT 2013 by tim
Also: Merge branch 'master' into work
Also: Correction for cases involving (in particular) terminals on metal2, where the obstruction generator looks at a point over a terminal, and seeing that it has a valid node, decides not to block it, ignoring the fact that it is the same node, not a different one.
- August 31, 2013 at 3:00am
Finished corrections and additions to DRC error detection and handling, especially for terminals on metals above the lowest layer.
Also: Update at Fri Aug 30 17:34:04 EDT 2013 by tim
Also: Merge branch 'master' into work
- September 2, 2013 at 3:00am
Some experimenting with ways to get around problems caused by failure to avoid a stacked via. There is something wrong here, and I have not found it yet.
Also: Update at Sun Sep 1 19:52:50 EDT 2013 by tim
Also: Merge branch 'master' into work
- September 8, 2013 at 3:00am
Added a switch to prevent qrouter from giving up. . . qrouter is abandoning routing attempts too early, and it needs a better metric for determining when it is stuck.
Also: Update at Sat Sep 7 14:37:01 EDT 2013 by tim
Also: Merge branch 'master' into work
Also: Changed the output of "qrouter -h" to provide the entire x.y.z version number; this will allow qflow to detect the version number and file a complaint if it needs a qrouter version number higher than the one installed.
Also: Correction to the LEF read routine to properly parse quoted material.
- September 10, 2013 at 3:00am
Added code that adjusts via position by an offset if vias on adjacent routing tracks are close enough together to cause a DRC spacing rule violation. This also covers via-to-metal spacing violations.
Also: Update at Mon Sep 9 16:29:57 EDT 2013 by tim
Also: Merge branch 'master' into work
- September 11, 2013 at 3:00am
Corrected an error where an unroutable tap position under a metal layer would remain unmarked as source or dest, causing qrouter to infinite loop trying to route to it.
Also: Update at Tue Sep 10 16:18:32 EDT 2013 by tim
Also: Merge branch 'master' into work
Also: Corrected an error that can prevent a local power supply network (e.g., vdd or gnd) from being connected to the global power supply, if all the local pins get connected together first.
Also: A correction to the correction for power and ground connections to buses. The original correction simply didn't work right. This commit has been tested and confirmed working.
Also: Corrected a coding error in maze.c; variable "i" copied up from another section and not replaced, so it was being used uninitialized.
- September 12, 2013 at 3:00am
Corrected an error in reading pre-routed layers that would crash on and invalid pointer.
Also: Update at Wed Sep 11 08:09:44 EDT 2013 by tim
Also: Merge branch 'master' into work
Also: Added additional handling to parse SPACING ... RANGE lines from a technology LEF file, and handle the extra wide-spacing requirements. This is not thorough, because it only looks at one obstruction rectangle at a time, so can miss additional widths caused by concatenating geometry.
- September 13, 2013 at 3:00am
Corrected an error in which, where the last change introduced via offsets to avoid via-to-via DRC errors, the code reacts to points on double-spaced tracks (e.g., metal4 on osu035) that have been dynamically obstructed by setting NO_NET along with ROUTED_NET. Also: Introduced a command-line switch "-r" that sets the resolution of the output. "-r 1" is default, and routed points are always integer (scale is always centimicrons). "-r 2" yields twice the resolution, so output may be in units of 5 nanometers (scale is still in centimicrons, so values are 1/2-integer).
Also: Update at Thu Sep 12 13:14:42 EDT 2013 by tim
Also: Merge branch 'master' into work
- September 14, 2013 at 3:00am
Added an experimental switch to force a route point on a node that fails due to having no valid tap points.
Also: Update at Fri Sep 13 20:43:46 EDT 2013 by tim
Also: Merge branch 'master' into work
- September 16, 2013 at 3:00am
Modified via placement so that it follows a checkerboard pattern of X, Y when the metal rectangles forming the via are not square. This appears to be the way to deal with tight pitches in some processes with metal overhang requirements on vias.
Also: Update at Sun Sep 15 16:25:35 EDT 2013 by tim
Also: Merge branch 'master' into work
Also: Slight change to the previous addition, to require a line in the config file before using the patterned vias.
- September 17, 2013 at 3:00am
Fixed a couple of minor format errors in config.c
Also: Update at Mon Sep 16 20:29:45 EDT 2013 by tim
Also: Merge branch 'master' into work
- September 24, 2013 at 3:00am
Update at Mon Sep 23 22:18:33 EDT 2013 by tim
- November 7, 2013 at 3:00am
Corrected missing initialization values for the LEF macro read-in. Likely to cause crashes on systems that do not explicitly zero memory on malloc().
Also: Update at Wed Nov 6 14:25:49 EST 2013 by tim
Also: Merge branch 'master' into work
- May 27, 2014 at 3:00am
Update at Mon May 26 09:55:10 EDT 2014 by tim
- May 28, 2014 at 3:00am
Update at Tue May 27 19:10:20 EDT 2014 by tim
- May 30, 2014 at 3:00am
Update at Thu May 29 10:52:50 EDT 2014 by tim
- May 31, 2014 at 3:00am
Update at Fri May 30 14:41:24 EDT 2014 by tim
- June 1, 2014 at 3:00am
Update at Sat May 31 14:50:57 EDT 2014 by tim
- Thursday, June 16, 2011
This is a first draft.- June 17, 2011 at 6:14am
Added "make distclean" to the makefile.
- June 18, 2011 at 2:40am
Corrected the stub routing, which was being applied only to the start of a route but not the end.
Also: Added the .gitignore file to avoid committing modifications to object and executable files.
Also: Corrected the configuration file so that the LEF filename is case-sensitive. Also modified the parser so that initial whitespace is ignored.
- June 20, 2011 at 2:40am
Added the ability to specify extra obstruction areas in the configuration file.
Also: Update at Sun Jun 19 10:32:07 PDT 2011 by tim
Also: Merge branch 'master' into work
- June 21, 2011 at 2:40am
Corrected stub routing, which was missing a terminating path point.
Also: Update at Mon Jun 20 07:47:13 PDT 2011 by tim
Also: Merge branch 'master' into work
Also: Changed the code so that no warning is generated on any power/ ground node following the convention "vdd*", "gnd*", or "vss*".
Also: Update at Mon Jun 20 12:55:01 PDT 2011 by tim
Also: Merge branch 'master' into work
Also: Corrected a few segfaults related to having bad route tracks that completely disallow access to one or more nodes.
Also: Made a alternate invocation of "qrouter -i" that will read the configuration file, print information about the route layers to the given filename, then exit. This is useful for preprocessing scripts to get the route layer information without having to parse the LEF file themselves.
- June 22, 2011 at 2:40am
Modified qrouter to reduce the maximum cost for the first pass to be much lower than before. Otherwise, very large designs take forever to route.
Also: Update at Tue Jun 21 06:46:10 PDT 2011 by tim
Also: Merge branch 'master' into work
Also: Trivial change to prevent the config file reader from claiming, incorrectly, that it has not understood the "obstruction" lines.
- June 23, 2011 at 2:40am
Corrected the loop over maxcost. The algorithm now shuffles points that exceed the maximum cost onto a separate stack, so that if no route is found less than the first maximum cost setpoint, the algorithm can pick up on the next pass from where it left off, with no overhead. Algorithm just successfully routed the vast majority of a large design with > 3000 components and > 3000 nets, and is now ready for implementation of a rip-up and re-route algorithm.
Also: Update at Wed Jun 22 11:56:46 PDT 2011 by tim
Also: Merge branch 'master' into work
Also: Fixed on segfault on verbose output, and one potential infinite loop situation. Still there is an infinite loop situation in the code, which should be fixed in the next update.
- June 24, 2011 at 2:40am
Found and fixed an error where a grid location close to a pin could overwrite an existing node location of another pin on another cell, not only erasing that pin, but causing the nets of the two pins to become confused, ending up with a infinite loop situation.
Also: Update at Thu Jun 23 07:15:35 PDT 2011 by tim
Also: Merge branch 'master' into work
Also: Corrected a few more errors related to pins on higher-level metals whose extended pin positions were allowed to exist over top, and to block, other nearby pins on lower metal layers.
Also: More corrections to the same problem.
Also: Corrected an error that was causing all stub route paths to be eliminated from the routing. Current version draws stub routes but the code to write the stub routes again as specialnets using a wider route width needs fixing.
Also: And, as promised, corrections to the specialnets section for wide stub routes. Result now routes well on all examples, with no crashes or hangs.
- July 5, 2011 at 2:40am
Completed the second-stage routing algorithm for rip-up and re-route of nets that were not routed in the first stage.
Also: Update at Mon Jul 4 06:32:49 PDT 2011 by tim
Also: Merge branch 'master' into work
Also: Correction to a bad typo in the code.
Also: And this time, fixing it the right way. . .
- July 6, 2011 at 2:40am
Corrected a badly-thought-out procedure that bypasses the anti-looping check and therefore allows infinite loops.
Also: Update at Tue Jul 5 13:53:50 PDT 2011 by tim
Also: Merge branch 'master' into work
- October 21, 2011 at 3:00am
Minor fix to the header file submitted by Niels Moseley.
Also: Update at Thu Oct 20 12:58:10 PDT 2011 by tim
Also: Merge branch 'master' into work
- September 10, 2012 at 3:00am
Update at Sun Sep 9 15:44:11 EDT 2012 by tim
- November 16, 2012 at 3:00am
Update at Tue Mar 6 12:30:35 PST 2012 by tim
Also: Merge branch 'master' into work
Also: Corrected an error which allowed vias defined with MASTERSLICE layers to issue a warning but then default to a layer number of zero, effectively making them metal1 contacts. Now, the warning is issued but the contact geometry is kept, along with the negative layer number, preventing it from being incorrectly parsed later on.
Also: Update at Thu Nov 15 12:32:30 EST 2012 by tim
Also: Merge branch 'master' into work
Also: Another correction for the same purpose of correcting via read-in from a LEF file.
Also: More corrections, with incorrect offset calculations when cells have a non-zero origin, and offset needed to be added to all of the layer geometry.
Also: More fixes, these to account for pins that are between two route grid lines such that routes can only reach the pin from an "extended" area grid point (from which a stub route takes it to the pin).
- December 7, 2012 at 3:00am
Added track offset to the information dumped by qrouter for use by the placement-to-DEF file conversion. The track offset gives the distance from a cell origin to the first routing track. Previously, an offset of 1/2 pitch was used. This is still the default value.
Also: Update at Thu Dec 6 11:12:38 EST 2012 by tim
Also: Merge branch 'master' into work
Also: Also added route width to the mixture, so as not to force it to be the same as route pitch.
- December 21, 2012 at 3:00am
An edit for testing caused the file to be marked as changed, but no changes were made.
Also: Update at Thu Dec 20 17:14:33 EST 2012 by tim
Also: Merge branch 'master' into work
- December 22, 2012 at 3:00am
Implemented a configuration option "no stacked contacts" that will prevent the router from generating paths with stacked contacts. This is a very simple implementation that merely prevents moving between three layers at the same grid point. It does not consider the possibility that contacts can be staggered by placing them between grid points. There should be more refined options. . .
Also: Update at Fri Dec 21 10:04:07 EST 2012 by tim
Also: Merge branch 'master' into work
- December 24, 2012 at 3:00am
Changes reverted, no significant code changes in this revision.
Also: Update at Sun Dec 23 17:08:38 EST 2012 by tim
Also: Merge branch 'master' into work
- April 9, 2013 at 3:00am
Corrected an error that caused some stubroutes to write the first path as "NEW ..." rather than "+ ROUTED ...", resulting in illegal syntax in the DEF output file.
Also: Update at Mon Apr 8 09:55:32 EDT 2013 by tim
Also: Merge branch 'master' into work
- May 4, 2013 at 3:00am
Correction to minor typo in last update.
Also: Update at Fri May 3 12:36:04 EDT 2013 by tim
Also: Merge branch 'master' into work
- September 24, 2013 at 3:00am
Update at Mon Sep 23 22:18:33 EDT 2013 by tim
email: |
Last updated: October 2, 2024 at 2:00am