| vlsitechnology.org /2LM sclib /synthesis /boog optimisation |
BOOG Optimisation |
Chapter
Section
The user can vary the characteristics of the structural netlist produced by BOOG by changing some parameters. The ones used here are:
The optimisation level can be set on the command line or in a LAX file. A LAX file is preferred because it can set more parameters, and once it is used the command line parameter is ignored, even if present.
The naming convention used here for LAX files is
loon_{ip_resistance}_{op_load}_{opt_level}.lax |
The optimisation level can vary between 0 (0% speed, 100% area) and 4 (100% speed, 0% area). Running BOOG with these 5 optimisation levels, with input impedance and output load set to zero, gives netlists with the following characteristics.
As a point of interest, BOOG synthesis is run on the BOOM netlists produced after a single BOOM synthesis step, and after four steps.
Although both area and speed are important, the more usual design problem to solve is the speed one, so we will focus here on the flow to generate the fastest netlist.
A full flow involves looping VASY, BOOM, BOOG and LOON through their various options and selecting the best netlist at the end.
Instead here we will use an existing netlist from BOOM and focus on one BOOG and looping LOON with a script to give the best (ie fastest) netlist. The main additions to a "standard" Alliance flow are wireloads and macros.
The script loop_buf_loon45 loops LOON through its opt levels until the fastest netlist has been found. It actually loops a script buf_loon which has its own LOON iteration to try to bring the fanin below 4.
The script buf_loon is quite complex because LOON can crash and even "hang up". Detecting and handling these cases is one of the tasks of buf_loon.
1 $ OLD_ALLIANCE=/home/cad/alliance-4.0.6 2 $ MBK_TARGET_LIB=$OLD_ALLIANCE/share/cells/sclib 3 $ boog -l loon_0000_000_0 multi8 multi8_0 4 $ boog -l loon_0000_000_1 multi8 multi8_1 5 $ boog -l loon_0000_000_2 multi8 multi8_2 6 $ boog -l loon_0000_000_3 multi8 multi8_3 7 $ boog -l loon_0000_000_4 multi8 multi8_4 |
Running BOOG on the optimised multiplier from BOOM using the sclib as supplied gives the results in the table below.
| Optimisation level | 0 | 1 | 2 | 3 | 4 |
|---|---|---|---|---|---|
| Cells | 804 | 829 | 829 | 829 | 1006 |
| Gates | 1619 | 1634 | 1636 | 1636 | 1909 |
| Delay (ps) | 29510 | 28806 | 29198 | 29198 | 29255 |
| Max fanin | 10 | 8 | 8 | 8 | 26 |
1 $ OLD_ALLIANCE=/home/cad/alliance-4.0.6 2 $ MBK_TARGET_LIB=$OLD_ALLIANCE/share/cells/sclib 3 $ boog -l loon_0000_000_0 multi8_boom multi8_0 4 $ boog -l loon_0000_000_1 multi8_boom multi8_1 5 $ boog -l loon_0000_000_2 multi8_boom multi8_2 6 $ boog -l loon_0000_000_3 multi8_boom multi8_3 7 $ boog -l loon_0000_000_4 multi8_boom multi8_4 |
Running BOOG on the multiplier from a single BOOM pass using the sclib as supplied gives the results in the table below.
| Optimisation level | 0 | 1 | 2 | 3 | 4 |
|---|---|---|---|---|---|
| Cells | 876 | 905 | 905 | 905 | 1082 |
| Gates | 1764 | 1785 | 1787 | 1787 | 2050 |
| Delay (ps) | 31237 | 30792 | 31184 | 31184 | 31925 |
| Max fanin | 12 | 12 | 12 | 12 | 27 |
We can make some observations about these results.
1 $ OLD_ALLIANCE=/home/cad/alliance-4.0.6 2 $ MBK_TARGET_LIB=$OLD_ALLIANCE/share/cells/sclib 3 $ boog -l loon_0000_000_0 multi8 multi8_0 4 $ loon -l loon_0000_000_0 multi8_0 multi8_0_0 |