Chapter

Section

The user can vary the characteristics of the structural netlist produced by BOOG by changing some parameters. The ones used here are:

  1. optimisation level
  2. input impedance
  3. output load

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. The area values of all cells except the 4 flops, the high drive inverter ndrvp_y and the vss supply connexion zero_y are wrong by a factor of 100. The presence of the ndrvp_y and zero_y cells means that the area and gate count cannot be obtained from the original sclib library. Instead the numbers above have been taken by passing the netlist thru a corrected library.
  2. The critical path delay given by BOOG is wrong. The netlist must be passed thru LOON to get a real value. LOON though will always try to optimise the netlist. Setting the optimisation level to 0 ensures at least that the cells won't get any bigger, but the netlist could be slightly different (eg swapped input pins).
    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
  3. Optimisation level 4 is the worst. The netlist also has the biggest fanin. I have found this to be generally true, at least for this type of netlist. But as we will see, the structure of this netlist will prove to be the fastest after optimising it with LOON synthesis.
  4. Optimisation level 3 gives the same results as level 2, so we don't need to use this level.
  5. Optimisation level 1 is the best here. This isn't always the case though, so it is always useful to test BOOG opt levels 012 and 4.
  6. Fanin is high and can't be controlled in BOOG.