507 lines
28 KiB
Plaintext
507 lines
28 KiB
Plaintext
Autorouting with the A* Algorithm
|
|
|
|
|
|
1. Introduction
|
|
|
|
A few years ago, a friend of mine designed an adapter board for the IBM PC.
|
|
The tools he used were blue and red strips of tape, a sharp knife, large
|
|
sheets of clear plastic, and a generous amount of patience. It took him
|
|
several weeks, and after the first board was tested he discovered that some of
|
|
the traces were incorrect, and had to be cut with the knife and rerouted with
|
|
solder and wires. This caused me to start thinking about ways to use the
|
|
power of the computer to simplify this tedious, error-prone job.
|
|
|
|
What you want to do when designing a printed circuit board is implement an
|
|
electronic circuit. First you will create a schematic which represents the
|
|
circuit. From this, you will derive a list of TTL chips and other components
|
|
that implement the needed functions, and a list of the pins that need to be
|
|
connected. Together, these lists are referred to as the netlist. As long as
|
|
the connections are made correctly, you usually don't care where the traces
|
|
(the wires that will be embedded in the board) are placed. Autorouters are
|
|
computer programs that do this task for you.
|
|
|
|
As we will see, the autorouting problem is really a search problem, and there
|
|
are algorithms from the field of artificial intelligence we can use to solve
|
|
it. We will look at two of these, the breadth-first and A* search algorithms.
|
|
The C source code for a freely-copyable implementation of an autorouter using
|
|
the A* search algorithm accompanies this article, and programs to view the
|
|
routed printed circuit board and print it on a laser printer are also
|
|
available.
|
|
|
|
|
|
2. Autorouters
|
|
|
|
Autorouting can be viewed as a global optimization problem, which are very
|
|
difficult problems to solve. To produce a good circuit you want to minimize
|
|
some things (trace length, board size, number of routing holes (holes created
|
|
by the autorouter to transfer a trace from one side of the board to the other,
|
|
also called vias), signal crosstalk, number of layers, cost to manufacture)
|
|
while maximizing others (signal strength, reliability, ease of debugging).
|
|
The measure of the overall value of a circuit will be a function of all of
|
|
these often conflicting variables (assuming the circuit behaves correctly,
|
|
otherwise its value is zero). Usually it is acceptable to find a solution
|
|
which satisfies a set of constraints, because finding the globally optimal
|
|
solution is infeasible for all but the most trivial problems.
|
|
|
|
Autorouting can also be viewed as a collection of search problems. The
|
|
individual search problems deal with finding a route, and laying down a trace,
|
|
between two locations on a printed circuit board. There are many algorithms
|
|
for solving search problems, each with different running time characteristics
|
|
and data space requirements. The two search algorithms we will be discussing
|
|
are breadth-first and A*.
|
|
|
|
|
|
3. Autorouting by Searching
|
|
|
|
When search algorithms are used to solve the autorouting problem, they
|
|
typically operate in two phases (reference [1]), and treat the board as a
|
|
matrix of cells. The first phase starts at the source cell and searches for
|
|
the target cell, usually by going in several directions at the same time.
|
|
While searching, an auxiliary data structure will be built which keeps track
|
|
of how each cell was reached (this is referred to as Pred in the algorithms in
|
|
figures 1 and 2). Once the target cell has been found, the first phase is
|
|
finished, and the second phase is started. However, if the first phase
|
|
exhausts all possibilities without reaching the target cell, then no route
|
|
exists between them, and there is no reason to do the second phase.
|
|
|
|
In the second phase, the auxiliary data structure is used to trace the route
|
|
from the target cell back to the source cell, actually laying down the
|
|
electrical connections. The second phase is identical for the breadth-first
|
|
and A* search algorithms. But the first phase is different, and it is what
|
|
gives these algorithms different behaviors.
|
|
|
|
The main data structures used in the first phase are the Open queue and the
|
|
Closed set, and are used to hold cell coordinates. Since a cell's coordinates
|
|
uniquely identify that cell, we'll say that the Open queue and Closed set
|
|
contain cells. Cell coordinates will be represented as r2c3s1 for the cell at
|
|
row 2, column 3, side 1, or as r2c3 when it is understood that all cells are
|
|
on the same side of the board. To remind ourselves that Open is a queue and
|
|
Closed is a set, when we talk about adding cells to them, we will put the
|
|
cells "on" the queue, and "in" the set. Initially, the Open queue contains
|
|
the source cell and the Closed set is empty. The first phase is a loop which
|
|
removes an element from the head of the Open queue, puts it in the Closed set
|
|
(which indicates that it has been searched), and checks to see if it is the
|
|
target cell. If it is, the first phase is done. Otherwise, the neighbors of
|
|
the cell (the cells that are adjacent to it) are placed on the Open queue, and
|
|
the loop continues. As we will see below, the essential difference in the
|
|
breadth-first and A* search algorithms is the order in which the neighbors are
|
|
placed on the Open queue.
|
|
|
|
|
|
4. Breadth-First Search
|
|
|
|
The breadth-first search algorithm (figure 1) works by processing a
|
|
first-in-first-out (FIFO) queue of open cells (cells that have been reached,
|
|
but not yet searched). Initially, the open queue contains only the source
|
|
cell. A cell is removed from the head of the open queue, placed in the set of
|
|
closed cells (cells that have been searched), checked to see if it is the
|
|
target cell, and if it is not, its neighboring cells are placed at the tail of
|
|
the open queue. Neighboring cells which have already been reached are
|
|
ignored. (If a cell's coordinates are on the open queue or in the closed set,
|
|
then it has been reached. Otherwise, it has not been reached.) This
|
|
continues until the target cell has been found, or the open queue is empty, in
|
|
which case the target cell cannot be reached from the source cell.
|
|
|
|
A version of breadth-first search known as Lee's algorithm (reference [2]) was
|
|
applied to the autorouting problem in the early 1960's, and is still the basis
|
|
of some autorouters. (In the original algorithm, cells diagonally adjacent to
|
|
each other were not considered to be neighbors. Consequently, the
|
|
backtracking phase could only create horizontal and vertical traces. We will
|
|
enhance the algorithm so that diagonally adjacent cells are neighbors, thus
|
|
diagonal traces can also be produced.) Unfortunately, Lee's algorithm suffers
|
|
from a behavior inherent in the breadth-first search technique which limits
|
|
its application to problems of relatively small size. As the distance between
|
|
the source and target cells increases by a factor of N, the number of cells
|
|
processed by Lee's algorithm (and therefore the processing time) increases by
|
|
the square of N.
|
|
|
|
The behavior of Lee's algorithm while searching for a path between the source
|
|
cell S (r5c5) and the target cell T (r8c8) is shown in figure 2. Lee's
|
|
algorithm does not specify the order in which neighboring cells are placed on
|
|
the open queue, but we will use the compass directions north, east, south, and
|
|
west, followed by northeast, southeast, southwest, and northwest. This order
|
|
tends to produce traces with a minimal number of turns.
|
|
|
|
In figure 2a, the source cell (r5c5) has been searched, and its eight
|
|
neighbors have been placed on the open queue. The arrows indicate the
|
|
direction from which each cell was reached, and correspond to the Pred data
|
|
structure. After the first eight cells on the open queue have been reached
|
|
and moved to the closed set, the configuration in figure 2b is searched, where
|
|
there are 16 cells on the open queue. Once these 16 cells have been searched,
|
|
the configuration in figure 2c is reached. Now the target cell (r8c8) is
|
|
fourth from the end on the open queue, and a solution is imminent. When r8c8
|
|
is searched, it will be recognized as the target cell, and the Pred data
|
|
structure will be used to construct a trace back to the source cell.
|
|
|
|
You can see that the search progresses outward from the source cell in all
|
|
directions, like the ripples in a pond when you throw a pebble into the water.
|
|
If we double the size of the problem (S and T are six cells apart), the number
|
|
of cells searched (and therefore the processing time) will be roughly four
|
|
times as large, and if we triple the size of the problem, the number of cells
|
|
searched will be roughly nine times as large. Thus, the behavior of Lee's
|
|
algorithm is quadratic in the size of the problem, which makes it infeasible
|
|
for large problems.
|
|
|
|
|
|
5. A* Search
|
|
|
|
The A* search algorithm (figure 3) also works by processing a queue of open
|
|
cells, which initially contains only the source cell. But this is a priority
|
|
queue, which means cells are inserted according to the estimated distance to
|
|
the target cell (reference [3]), not just at the end. Cells that are on the
|
|
shortest estimated path from source to target are placed at the head of the
|
|
queue. Cells are still removed from the head of the open queue, then they are
|
|
checked to see if they are the target cell, and if they are not, their
|
|
neighboring cells are put on the open queue at the proper position.
|
|
Neighboring cells which have already been searched are checked to see if the
|
|
new path between them and the source cell is better (shorter) than the
|
|
previous one. If it is, they are repositioned on the open queue according to
|
|
the new estimated path length from source to target. As in breadth-first
|
|
search, this continues until the target cell has been found or the open queue
|
|
is empty.
|
|
|
|
A* depends on being able to estimate the distance between a cell and the
|
|
target cell. In the case of autorouting, a simple measure of this distance is
|
|
available, and this helps A* to concentrate the search in the direction most
|
|
likely to succeed. The more accurate the estimate is, the faster the search
|
|
will be.
|
|
|
|
In practice, A* does not suffer from the quadratic behavior of Lee's
|
|
algorithm, so it solves the same problems faster, and can be applied to the
|
|
larger problems that Lee's algorithm performs so poorly on. As the distance
|
|
between the source and target cells increases, the number of cells processed
|
|
by A* will increase, but not as dramatically as with Lee's algorithm.
|
|
|
|
The behavior of the A* search algorithm is shown in figure 4. The A*
|
|
algorithm does not specify whether new cells are placed in front of or behind
|
|
cells already on the open queue which evaluate to identical estimated path
|
|
lengths. We will use the convention that they are placed in front of cells of
|
|
the same distance. This will minimize the amount of time to insert a cell on
|
|
the open queue.
|
|
|
|
In figure 4a, the source cell (r3c3) has been searched, and its eight
|
|
neighbors have been placed on the open queue. Each cell on the open queue
|
|
also includes the estimated length of the shortest path from S to T that goes
|
|
through that cell. After the first cell on the open queue (r4c4) has been
|
|
searched and moved to the closed set, the configuration in figure 4b is
|
|
reached, where there are 12 cells on the open queue. Once the next cell
|
|
(r5c5) has been searched, the configuration in figure 4c is reached. Now the
|
|
target cell (r6c6) is at the head of the open queue, and a solution will be
|
|
found on the next iteration of the loop. When r6c6 is searched, it will be
|
|
recognized as the target cell, and the Pred data structure will be used to
|
|
construct a trace back to the source cell.
|
|
|
|
You can see that the search progresses more directly toward the target cell.
|
|
The search is drawn toward the target just as the earth's gravity pulls
|
|
objects toward the center of mass. If we double the size of the problem, the
|
|
search will search roughly twice as many cells, and if we triple the size of
|
|
the problem, the search will search roughly three times as many cells. This
|
|
linear behavior makes A* more attractive for autorouting than the quadratic
|
|
Lee's algorithm. With the incorporation of the heuristic (the rule which
|
|
guides the search in the direction most likely to succeed), it is more
|
|
difficult to specify a worst case behavior. However, A* will never take more
|
|
time than Lee's algorithm, and will never search any cells that Lee's
|
|
algorithm could avoid.
|
|
|
|
|
|
6. Optimizations and Generalizations
|
|
|
|
The algorithms in figures 1 and 3 solve the general search problem. When we
|
|
implement these algorithms and customize them to a particular application,
|
|
there are a few things we can do to speed them up.
|
|
|
|
The A* algorithm as presented in figure 3 recomputes the heuristic H(y) when
|
|
it discovers a better way to reach a cell. Depending on how difficult this
|
|
heuristic is to compute, we can probably save some work at the expense of
|
|
complicating the algorithm. When lines 20 and 21 of figure 3 are executed,
|
|
the previous values of G[y] and F[y] are destroyed. But F[y] = G[y] + H(y),
|
|
so we could save F[y] - G[y] (which is H(y)) in a temporary variable, and use
|
|
that variable instead of recomputing H(y) on line 21. Also, the common
|
|
subexpression G[x] + Distance(x,y) should be placed in a temporary variable,
|
|
instead of being computed twice (lines 18 and 20).
|
|
|
|
Often, rather than searching for a path between two individual cells, what is
|
|
really desired is a path between one of a set of source cells and one of a set
|
|
of target cells (as when connecting power and ground pins). Both algorithms
|
|
can be modified by adding the entire set of source cells to the initial open
|
|
queue, and checking for a member of the set of target cells on each iteration.
|
|
When this is done, the heuristic that the A* algorithm uses becomes more
|
|
complicated. It must estimate the minimum distance from the current cell to
|
|
any one of the target cells.
|
|
|
|
For breadth-first search, once the target cell is placed on the open queue, it
|
|
is pointless to add any more cells to the open queue. In fact, once this
|
|
happens the problem has been solved. An appropriate shortcut would be to
|
|
insert a check before line 13 in figure 1 to see if y is the target cell. If
|
|
it is, immediately use Pred[y] to construct the trace back to the source cell,
|
|
and return.
|
|
|
|
|
|
Distance Calculations [sidebar topic, with figures 5, 6, and 7]
|
|
|
|
The A* search algorithm depends on a heuristic to estimate the distance
|
|
between the current cell and the target cell. As implemented in the
|
|
accompanying program, the heuristic is a simple geometric distance
|
|
approximation.
|
|
|
|
Figure 5 illustrates all of the possible cell types used to construct a trace,
|
|
grouped by type. For each group, the distance of that cell type is also
|
|
given. These distances are calculated based on a cell size of 50 mils by 50
|
|
mils. A mil is a thousandth of an inch, so the autorouter uses 20 cells per
|
|
inch. A typical full-length adapter board for an IBM PC is 4 inches high and
|
|
13 inches long, or 80 cell rowss by 260 cell columns.
|
|
|
|
The traces of groups B and C can coexist in the same cell, so that a hole can
|
|
have up to 16 traces connecting it with other cells (8 on each side of the
|
|
board). Also, the parallel traces of group F can coexist in the same cell (on
|
|
the same side of the board), as shown by group J. This allows the routing of
|
|
two traces through the same cell, providing the higher density required by
|
|
some circuits (memory arrays, for example). Aside from these exceptions,
|
|
cells can only contain one type of trace (on each side of the board).
|
|
|
|
In figure 6, we want to know the approximate distance of a trace that will
|
|
connect the two holes. Viewing the board as a matrix, the differences in cell
|
|
coordinates are three rows and five columns. The shortest path between them
|
|
will use a diagonal trace across three cells and a horizontal trace across two
|
|
cells, as shown. Using the cell types in figure 5, the length of the trace
|
|
will be 23 + (2 * 71) + 60 + 50 + 12 = 287 mils.
|
|
|
|
A trace that uses a routing hole to go from one side of the board to the other
|
|
covers a greater distance than one that goes diagonally across a cell (group E
|
|
in figure 5) and stays on the same side of the board. This is because part of
|
|
its path goes around the edge of a circle.
|
|
|
|
A hole is 25 mils in diameter, and is at the center of a cell. To calculate
|
|
the distance of a trace through a routing hole, we measure the section of the
|
|
hole between the two connecting traces. Figure 7 shows an entering trace
|
|
connecting to a hole at point A, and possible exiting traces on the opposite
|
|
side of the board at points B, C, D, and E. The distances between A and each
|
|
of these points are 10, 20, 29, and 39 mils, respectively. To calculate
|
|
these, we use the geometric formula Circumference = PI * Diameter
|
|
(approximately 78.5 mils) and divide by eight (a one-eighth section of a hole
|
|
is approximately 9.8 mils), then add one, two, three, and four of these
|
|
sections, and round off to an integer.
|
|
|
|
The heuristic in the accompanying program includes a penalty when a trace
|
|
takes a turn or switches to the other side of the board through a routing
|
|
hole. This is because turns are often the weak points in a circuit, and
|
|
traces are more likely to break at a turn than in a straight part. Including
|
|
a penalty encourages A* to use straight lines, and even allows a slightly
|
|
longer trace to be selected over one with too many turns. The amount of
|
|
penalty depends on the kind of turn; sharper turns are assessed a larger
|
|
penalty. Routing holes incur a significant penalty, since overusing them
|
|
early in the routing process can make later traces more difficult or even
|
|
impossible to construct. This is because a routing hole dedicates a cell
|
|
exclusively to a single trace, for both sides of the board. Such a cell is
|
|
not available to later routing, thus reducing the total number of cells that
|
|
can be used.
|
|
|
|
|
|
7. Memory Requirements
|
|
|
|
Both of the search algorithms require quite a bit of memory in order to solve
|
|
problems of non-trivial size. The breadth-first search algorithm needs memory
|
|
to represent the board, the predecessor structure, and the closed set. The A*
|
|
search algorithm needs these too, plus structures for F[x] and G[x]. In
|
|
addition, both algorithms need to dynamically allocate memory for the open
|
|
cell queue.
|
|
|
|
In this program, the board is represented as a pair of two-dimensional arrays
|
|
(one for the front side of the printed circuit board, and one for the back
|
|
side), where the dimensions are the number of rows and columns of cells. Not
|
|
counting holes and traces relating to holes (figure 5, groups A, B, and C),
|
|
there are 30 possible cell contents, which can be represented with five bits
|
|
per cell. The hole-related cells are more difficult to enumerate, since they
|
|
can be combined in many ways. If we simply assign one bit to each of the
|
|
eight traces in groups B and C, and add one more bit to indicate a hole, 14
|
|
bits will be sufficient to represent any cell. On a board of N rows and M
|
|
columns, we'll need N*M*28 bits total.
|
|
|
|
The predecessor structure will also be a pair of two-dimensional arrays, where
|
|
an entry must be able to represent one of the eight compass directions or an
|
|
indication for the opposite side of the board. This will take four bits per
|
|
cell, or N*M*8 bits total.
|
|
|
|
The closed set can be represented by a pair of two-dimensional single-bit
|
|
arrays, where a bit is one if the corresponding cell has been searched, and
|
|
zero otherwise. This will take N*M*2 bits total.
|
|
|
|
F[x] and G[x] will be similar to the board arrays, but they must contain a
|
|
16-bit integer for each cell. This will take N*M*64 bits total. Note that if
|
|
memory usage needs to be minimized at the cost of increased processing time,
|
|
we could omit the F[x] arrays, and calculate the F values as they are needed
|
|
from the G[x] arrays and the heuristic function, H(x).
|
|
|
|
Breadth-first search will require N*M*38 bits and A* will require N*M*102 bits
|
|
of static memory. For a printed circuit board that is 4 inches by 13 inches
|
|
(80 cells by 260 cells), breadth-first search will need 98800 bytes and A*
|
|
will need 265200 bytes. It is often the case that different algorithms to
|
|
solve the same problem trade off memory against processing time to achieve
|
|
different behaviors. This is the case with breadth-first search and A*.
|
|
|
|
|
|
8. Locality of Reference
|
|
|
|
Despite the fact that A* requires more memory than breadth-first search, A*
|
|
exhibits better memory usage patterns. This is because it shows better
|
|
locality of reference than breadth-first search. Locality of reference deals
|
|
with the sequence in which memory locations are used, and consists of two
|
|
rules of thumb: (1) the memory location currently being referenced is likely
|
|
to be referenced again in the near future, and (2) memory locations near the
|
|
one currently being referenced are likely to be referenced in the near future.
|
|
|
|
When the first rule holds true for a given program, that program can probably
|
|
benefit from a memory cache. When the second rule holds true, the program can
|
|
probably benefit from a virtual memory environment with a least-recently-used
|
|
page preemption policy. Most computer systems with virtual memory and caches
|
|
apply them to both code and data, so programs that exhibit good locality of
|
|
reference should benefit from both rules.
|
|
|
|
This becomes a factor when solving large problems (say, routing a printed
|
|
circuit board that is 10 inches in both dimensions). In a virtual memory
|
|
environment, improved locality of reference can minimize swapping. In an
|
|
environment with cache memory, improved locality of reference can increase the
|
|
cache hit rate. Both of these tend to decrease the total running time.
|
|
|
|
The memory references in the breadth-first search algorithm go around and
|
|
around in circles of constantly increasing size, and do not reflect a common
|
|
locality of reference. Thus, the breadth-first search algorithm is not able
|
|
to take good advantage of virtual memory or a memory cache. However, the
|
|
memory references of A* tend to be from the same area of the printed circuit
|
|
board for extended periods of time, taking better advantage of these
|
|
mechanisms. On a large problem, this helps to offset the extra memory that A*
|
|
requires by adding speed beyond that provided by the basic algorithm.
|
|
Improved locality of reference by itself may not be a sufficient reason to
|
|
select A* over breadth-first search, but it is icing on the cake.
|
|
|
|
|
|
9. Input and Output Formats
|
|
|
|
Figure 8 contains an example input file; it defines a circuit to calculate a
|
|
parity bit for a 16-bit word using exclusive-or gates. There are statements
|
|
for defining the size of the printed circuit board, the locations of holes and
|
|
components, and the connections between them.
|
|
|
|
The autorouter sorts the connections by approximate trace distance (see the
|
|
section on distance calculations, above); the shortest connections are
|
|
processed first, and the longest are processed last. However, connections
|
|
which include the "priority" keyword are processed before any of the other
|
|
connections. This allows the designer to have control over the order in which
|
|
traces are constructed.
|
|
|
|
In addition, there are statements for defining chip templates, and associating
|
|
position-independent labels to each component and pin. This makes it easy to
|
|
move components from one location to another without having to edit each
|
|
connection. Chips can be rotated in any of four directions.
|
|
|
|
Figure 9 shows the traces created by the autorouter while processing the
|
|
example input file in figure 8. On an 8 Mhz IBM PC-AT compatible computer,
|
|
this board took 37 seconds of processing time to route.
|
|
|
|
The output from the autorouter is a copy of the printed circuit board as it is
|
|
represented in memory. This consists of the dimensions of the board (number
|
|
of rows and columns), followed by a pair of two-dimensional arrays (one for
|
|
the front side, and one for the back). The elements of the arrays are double
|
|
words (32 bits) containing bits which encode the contents of each cell. For
|
|
example, if a particular bit is set, there is a horizontal line running across
|
|
the cell, and if a different bit is set, there is a hole in the cell.
|
|
|
|
|
|
10. Viewing and Printing the Board
|
|
|
|
A program to view the routed printed circuit board on an IBM PC equipped with
|
|
an enhanced graphics adapter (EGA) is provided with the autorouter. The
|
|
viewing program provides four levels of detail (zooming), panning, and viewing
|
|
of the front and back sides of the printed circuit board separately.
|
|
|
|
Another program prints the routed printed circuit board on a laser printer.
|
|
This program allows the user to specify four levels of detail and resolution
|
|
ranging from 75 to 300 dots per inch (dpi). Figure 9 was produced with this
|
|
program using the maximum zoom level and 300 dpi.
|
|
|
|
|
|
11. Future Enhancements
|
|
|
|
The autorouter presented here provides the basics of a personal computer CAD
|
|
system, but could be enhanced in many ways. A few of these are:
|
|
|
|
* Use Lotus-Intel-Microsoft (LIM) 4.0 expanded memory to provide access to
|
|
more memory.
|
|
|
|
* Incrementally save the board after each connection is routed, so that a
|
|
large problem can be solved in several short sessions, rather than requiring
|
|
a computer to be dedicated for an extended period of time.
|
|
|
|
* Automatically compress the output (which often consists of many repeated
|
|
bytes) to save disk space.
|
|
|
|
* Wide traces for power and ground.
|
|
|
|
* Calculate how close the solution of each connection is to the optimal
|
|
solution.
|
|
|
|
* Add symbolic support for components such as capacitors, resistors, and
|
|
diodes.
|
|
|
|
* Support surface mount technology (a pad, rather than a hole).
|
|
|
|
* Display a "rat's nest" of direct routes (use a straight lines for each
|
|
connection, without regard for whether traces cross). This would help the
|
|
designer decide how the components should be arranged. It may also be
|
|
possible to do an analysis, and suggest in which direction each component
|
|
should be moved. Reducing the total distance of the traces that must be
|
|
routed can significantly reduce the processing time of any autorouter.
|
|
|
|
* Provide support for printed circuit boards with more than two routing
|
|
layers.
|
|
|
|
* A program the designer can use to edit the routed printed circuit board.
|
|
|
|
* Allow multiple priority levels for connections.
|
|
|
|
* Visually distinguish holes from routing holes by displaying them in a
|
|
different color.
|
|
|
|
* Increase the size of the TTL library (chip definitions).
|
|
|
|
* A program to translate the output into Gerber format (a standard language
|
|
for describing trace and hole placement, used for board fabrication) and
|
|
Excellon format (a standard language for describing hole placement, used to
|
|
drill the holes).
|
|
|
|
|
|
12. Conclusion
|
|
|
|
When autorouting is viewed as a special kind of search problem, there are
|
|
several search algorithms from the field of artificial intelligence that can
|
|
be used to solve it. An autorouting program can be easily implemented on a
|
|
microcomputer, such as the IBM PC family of computers, and can greatly reduce
|
|
the amount of work required to route a printed circuit board by hand. When
|
|
combined with other tools, such as the viewing and printing programs,
|
|
high-resolution output devices (laser printers), and high performance
|
|
386-based microcomputers, a complete design system can be built which makes
|
|
tape-ups obsolete. Just a few years ago, such a system would have required an
|
|
expensive workstation.
|
|
|
|
|
|
13. Author Biography
|
|
|
|
Randy Nevin received a BS in computer science from Oregon State University in
|
|
1983 and an MS in computer science from the University of Washington in 1988.
|
|
He has worked for Microsoft since 1983 on various programming language and
|
|
networking products.
|
|
|
|
|
|
14. References
|
|
|
|
[1] Stephen E. Belter, Computer-aided Routing of Printed Circuit Boards: an
|
|
Examination of Lee's Algorithm and Possible Enhancements, BYTE, June 1987,
|
|
pp. 199-208.
|
|
|
|
[2] C. Y. Lee, An Algorithm for Path Connections and Its Applications, IRE
|
|
Transactions on Electronic Computers, September 1961, pp. 346-365.
|
|
|
|
[3] Steven L. Tanimoto, The Elements of Artificial Intelligence, 1987,
|
|
Rockville, Maryland: Computer Science Press, pp. 148-164. This covers the
|
|
breadth-first and A* search algorithms.
|