Andrew B. Kahng,
Igor Markov, and
Last updated: Sun Oct 9, 2005 by royj
Capo is a fast and high-quality routability-driven placer for standard-cell ASICs developed at UCLA and the University of Michigan. Global placement is performed with recursive bisection using leading-edge multi-level partitioner. Detailed placement is performed with optimal branch-and-bound partitioner and placer. Capo reads the industry-standard LEF/DEF format (and also a simplified format for academic researchers, see more ) and works in the fixed-die context. Capo favorably compares with commercial tools and is available, with all support libraries, under a liberal open-source license.
Complete source code for Capo in C++ is distributed as a part of UCLA/UMich PD tools release. Currently, the installation scripts target Unix systems (Linux and Solaris) and require PERL 5.002 or higher. The code requires g++ 2.95.2 or higher (configured to use GNU linker) or SunPro CC 5.1 or higher (Workshop 5.0 and earlier are not supported) that come with Sun Forte C++ (formerly Workshop). In order to use Sun compilers, you must have Solaris 2.7 or higher. The code can also be compiled with MSVC++ 7.0, but installation can be non-trivial without the .NET environment.
Executables are provided for the following systems:
(Sun Solaris) (Intel Linux) (Win95/98/NT)
These executables are of "MetaPlacer" that includes Capo, orientation optimizer and "row ironing" that improves wirelength by applying a branch-and-bound placer in sliding windows. By default neither orientation improver nor row ironing are invoked.
RowBasedPlacement : test.nodes test.nets test.wts test.scl test.plor
LEFDEF : file.lef file.defor
LEFDEFq : file.lef file.defthese correspond to the input in the "bookshelf" format and the industry-standard LEF/DEF format (LEFDEFq will turn on Cadence's LEFDEF parsers). Multiple LEF files are now supported.
Additionally, the following options may be useful:
-save --- causes the output to be saved into files with base out,
-plotNodes basefilename --- saves a gnuplot script that plots cells and macros,
-verb X_Y_Z --- where X, Y and Z are integers, controls the verbosity of diagnostic output (-verb silent is equivalent to -verb 0_0_0),
-faster N and -tryHarder N --- control the quality/runtime tradeoff in Capo; N is an integer, but can be skipped. -unifWS --- distribute whitespace (approximately) uniformly; this option currently leads to best results by routed wirelength.
Numerous other options are available (and listed when Capo/MetaPlacer is launched with -help). Also see recent options.
See the Placement Slot and follow links to "old"
(i.e., no-XML) formats. Alternatively, follow these links:
1 and 2.
As Capo is a Floorplacer, it can also natively read the blocks/pl/nets format of floorplanning.
For more information on using Capo as a floorplanner, read the following FAQ.
Recommendation: browse a sample benchmark before reading formal descriptions.
Capo can run on many recent industrial circuits with movable cells of potentially variying widths, pre-routed power and ground nets, fixed and movable macros, etc. A 64-bit version of Capo placed netlists with over 4 million movable objects.
Recent performance results are available in this up-coming paper
Here's our documentation and support advisory.
User groups, mailing lists and FAQs are maintained at http://www.gigascale.org/bk_placement and http://www.gigascale.org/bk_partitioning.
Algorithms used in Capo are described in a series of publications (please cite some of them if you are using Capo in your work).