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.