feng shui 5.0: Placement Engine

Feng Shui supports two main placement approaches: a recursive bisection method, and a new "beacon" technique that is optimized for circuits with a great deal of structure. The bisection based tool is stable, and is suitable for most standard cell designs; the beacon technique is being actively developed, and currently only performs well on the PEKO benchmarks produced at UCLA. Details of the placement approaches can be found in our technical papers.


To perform placement using the GUI version of the tool, simply load in a design (using the buttons in the I/O toolbox), then apply the type of placement approach desired using the buttons in the placement toolbox. While the placement tool is running, details are logged to a scrolling window. Cell movement can be observed by selecting the features you wish to display, and periodically refreshing the display window. Feng Shui is multi-threaded; thus, the display is "live," and you can track cell motion while the tool runs. For some machines (particularly slower ones), it's possible for the display to freeze. There appears to be an issue with X11 events getting handled correctly, especially when the machine is heavily loaded. The command line version supports a larger range of options. Commonly used ones are as follows.

Post Processing Tools

Feng Shui can be used as a stand-alone placement legalizer and detailed placement engine. Two main legalization techniques are currently supported. For historical reasons, the string used to legalize both types of placements is "M,-1,1". The capitalization, commas, and so on, are significant. Our detailed placement engine parses this string, and uses the letters to select specific algorithms to apply. Feng Shui also supports single and multi-row branch-and-bound window based optimization. A small sliding window passes over the design, performing brute force local optimization for wire length minimization. For historical reasons, the string used to perform detail placement improvement is "r,#,#." The first number indicates the total number of cells within an optimization window, while the second indicates the number of rows to consider in the window. To legalize or improve a placement in the file sample.pl, one could apply the following: