Charles Alpert(IBM Austin Research Laboratory); C. N. Sze and Jiang Hu(Texas A&M University) | |
I. | Introduction | |
II. | The Algorithm | |
III. | I/O Data Formats | |
IV. | Sample Instances | |
V. | C-tree Executable | |
VI. | References |
I. Introduction
This entry is about the problem of single interconnection steiner tree construction with buffer insertion. We focus on the ``difficult instances'' [1] which are characterized by a large number of sinks, large variation in sink criticalities nonuniform sink distribution, and varying polarity requirements.
In this page, you can find the details of our C-tree implementation, the executables, our data format for a single interconnection tree description and a set of test-case files which is based on some difficult nets from industry.
Important Notes: International Business Machines Corporation (IBM) holds the patent (#6591411) of the C-tree techniques. Please refer to the patent page.
II. The Algorithm
The C-tree algorithm is briefly introduced here. If you need more information about the algorithm, please see [1].
C-tree algorithm consists of two main parts:
We use the K-center heuristic for sink clustering, which aims to minimize the maximum cluster radius (distance to the cluster center). Here, the distance function is a linear combination of the spatial, temporal and polarity distance which is shown in the following.
In the equation, the sum first two terms are less than or equal to 1, and they are weighed by a parameter ``\beta''. The last term itself is a value which is either one (when two sinks are of difference polarity) or zero (when their polarity are the same) which represents the importance of putting two sinks with the same polarity in the same cluster.
sDist() is just the Manhattan distance between the two sinks and ``Diameter of net'' is the maximum sDist() between every pair of sinks in the net.
crit() is a value showing the criticality difference of two sinks. AS() is a good indicator of the criticality of a sink and the equations are shown as follows.
Note that in the equation of crit(), we use a parameter ``\alpha'' to control that how much amount of sinks will be treated as critical and all other non-critical sinks would have a similar value of crit().
In the K-center heuristic, first we need to find the total number of cluster seeds, K. This is can be controlled by a parameter ``D'' -- we keep adding a new seed which is furthest from all other old seeds until the minimum distance from the new seed to all other old seeds is less than or equal to D.
The timing driven Steiner tree is constructed by the Prim-Dijkstra tradeoff method [2]. The algorithm trades off between the minimum spanning tree and the shortest path tree via a parameter c. However, c is not a parameter in our implementation since we try c=0,0.25,0.5,0.75,1.0 and pick the best one according to the maximum slack of the trees.
III. I/O Data Formats
Input file format
C-tree implementation takes these types of files as input:
| contains all the information about the net, which includes pins locations, properties of source and sink nodes, etc. |
| contains all the information about the buffer library, which is used by the final step: van Ginnekin style buffer insertion. |
|
|
|
|