vlsitechnology.org /2LM sclib /synthesis /alliance synthesis |
Alliance Synthesis Flow |
Chapter
Section
Alliance synthesis in the example script for the multiplier uses the simplest BOOG and LOON commands. Starting from an optimised behavioural description multi8.vbe, the commands to transform multi8.vbe to a structural netlist multi8.vst are:
1 $ OLD_ALLIANCE=/home/cad/alliance-4.0.6 2 $ MBK_TARGET_LIB=$OLD_ALLIANCE/share/cells/sclib 3 $ boog multi8 multi8_o 4 $ loon multi8_o multi8 |
In this simple scenario no optimisation parameters are given to BOOG and LOON. The default optimisation level is 2, and no input resistance or output capacitance is set. Using our LAX naming convention, these commands are the same as:
1 $ OLD_ALLIANCE=/home/cad/alliance-4.0.6 2 $ MBK_TARGET_LIB=$OLD_ALLIANCE/share/cells/sclib 3 $ boog -l loon_0000_000_2 multi8 multi8_o 4 $ loon -l loon_0000_000_2 multi8_o multi8 |
The timing result is also rather unrealistic as it takes no account of the delay introduced by wire capacitances. A more normal approach is to include an estimate of the wire capacitance into the netlist timing (later).
LOON has the same opt level options as BOOG which can be set on the command line, or put into a LAX file along with other options like input resistance and output capacitance.
Using the sclib as supplied we can check the area and timing for each optimisation level combination of BOOG and LOON (except level 3 because it gives the same results as level 2).
Critical Path Delay (ps) | ||||
---|---|---|---|---|
Opt level | BOOG | |||
LOON | 0 | 1 | 2 | 4 |
0 | 29261 | 28806 | 29198 | 29276 |
1 | 28460 | 27372 | 28020 | 28657 |
2 | 24216 | 23517 | 23873 | 20592 |
4 | 24129 | 24092 | 23802 | 20924 |
Multiplier Area in Gates | ||||
---|---|---|---|---|
Opt level | BOOG | |||
LOON | 0 | 1 | 2 | 4 |
0 | 1619 | 1634 | 1636 | 1909 |
1 | 1620 | 1634 | 1638 | 1910 |
2 | 1659 | 1671 | 1674 | 1961 |
4 | 1662 | 1664 | 1674 | 1970 |
The command sequence which gives the fastest critical path for this netlist is:
1 $ boog -l loon_0000_000_4 multi8 multi8_o 2 $ loon -l loon_0000_000_2 multi8_o multi8 |
Using the default optimisation level of 2 for BOOG as well as LOON is not a good choice for this netlist. Using instead optimisation levels of BOOG=4 and LOON=2 gives a critical path delay of 20593, down from 23873, although at the cost of a larger netlist.
In general, the exact sequence of optimisation levels for BOOG and LOON which gives the fastest netlist varies with different netlists. For a sequence of 1 BOOG and 1 LOON run, then LOON will normally need to have its opt level equal to 2 or 4. Only at these levels will buffers be inserted to decouple the critical path from the non-critical ones.
Better results can be obtained by running LOON more than once in sequence. We will use a script loop_buf_loon which loops LOON until the fastest netlist has been synthesised. For this multiplier, the fastest netlist always uses BOOG with opt level=4, but the first LOON opt level can be any value from 0 to 4.
The largest inverter ndrvp_y is the only cell used which has the correct area value. In the other cells, the area parameter is 100X too large. This makes the largest inverter appear to the synthesis tools as the smallest.
For BOOG this means that the synthesised netlist uses the ndrvp_y in preference to the other inverters. For LOON this means that it will never choose a smaller inverter when doing an area optimisation (opt level 0).
In order to keep the results consistent with those from the corrected sclib, the LOON synthesis uses a version of the sclib which corrects the cells' area values.
1 $ OLD_ALLIANCE=/home/cad/alliance-4.0.6 2 $ MBK_TARGET_LIB=$OLD_ALLIANCE/share/cells/sclib 3 $ boog -l loon_0000_000_2 multi8 multi8_o 4 $ MBK_TARGET_LIB=$ALLIANCE_MOS/vbe/sclib100_0_syn03 5 $ loon -l loon_0000_000_2 multi8_o multi8 |
This extra step isn't shown in the command sequences in order to keep them simple.