Chapter

Section

Use

loop_buf_loon -l lax_file input_file output_file

Description

Script can replace LOON. It will loop LOON synthesis until the fastest netlist has been found, and perform fanin reduction if requested. The lax_file sets the input resistance and output load used for synthesis. The value of opt level set in the LAX file is ignored as the script will try all values when searching for the fastest netlist.

The looping of the LOON synthesis uses the script buf_loon. This means that it will try to reduce fanin below

  • a value of 4 unless
  • a different value has been written to .buf_loon.

The results of the synthesis sequence are written to standard output. The result of the last LOON run is written to loop_buf_loon.log.

Arguments

-l lax_file

lax_file.lax sets the values of input resistance and output capacitance. The value of opt level is ignored.

input_file

The structural VHDL netlist input_file.vst to synthesise.

output_file

The result of the LOON synthesis, structural VHDL netlist output_file.vst and XSCH timing file output_file.xsc.

.buf_loon

File .buf_loon (the dot makes it a hidden file) is read to get values of max_fanin and time_limit. Default values of 4 and 30s can be overidden here. Setting max_fanin to 0 disables fanin reduction.

Depends on

Alliance programs loon, flatlo, x2y; scripts ./buf_loon, ./find_fanin and ./find_rin; and the value of environment variables $MBK_TARGET_LIB and $MBK_CATA_LIB.

Note that scripts buf_loon, find_fanin and find_rin are assumed to be in the working directory and are called with the prefix "./".

Bugs

A number of unwanted extra files could be left.

Operation

Script loop_buf_loon is structured to accept the same arguments as LOON with additional parameters defined in hidden file .buf_loon.

1 $ more .buf_loon  
rin 6860
rin 7419
max_fanin 2
time_limit 60

Input resistance and output capacitance are defined in the LAX file. The opt level is ignored since loop_buf_loon will test all opt levels as it loops LOON to find the fastest netlist.

Starting with the input netlist, the script loops loon to find the fastest netlist. The fanin is measured with script ./find_fanin and if

  • the max_fanin parameter is greater than 0 and
  • the measured fanin is greater than max_fanin

then the script ./find_rin is run to give the value of rin to use inside script ./buf_loon for fanin reduction.

Script ./buf_loon is looped three deep inside a loop that continues until there is no further improvement in the delay. BOOG provides the starting netlist, and subsequent netlists are taken from the first synthesis loop which gives the fastest result at the end of three loops. Each synthesis loop then requires 84 LOON commands instead of 1, as is shown by the pseudo-code below.

min_delay=100000; old_min_delay=100001
while [ "$old_min_delay" -gt "$min_delay" ]; do
 old_min_delay=$min_delay
 for opt1 in 0 1 2 4; do
  ./buf_loon cct0 cct1                   #4 times 
  for opt2 in 0 1 2 4; do
   ./buf_loon cct1 cct2                  #16 times 
   for opt3 in 0 1 2 4; do
    ./buf_loon cct2 cct3 > buf_loon.log  #64 times 
    delay=$(grep '^Critical ' buf_loon.log | cut)
    if [ "$min_delay" -gt "$delay" ]; then
      min_delay=$delay
      cct0=cct1
    fi

Download loop_buf_loon
Example
1 $ echo "max_fanin 10" >> .buf_loon
2 $ echo "time_limit 60" >> .buf_loon
3 $ ./loop_buf_loon -l loon_1500_300_0 multi8_4 multi8 
Thu Jul  3 11:16:36 BST 2008
#multi8_4_0... Delay 29572, Area 1665972, Gates 2204
#multi8_4_1... Delay 29335, Area 1667988, Gates 2206
#multi8_4_2... crashed
#multi8_4_4... Delay 23245, Area 1738548, Gates 2300
#multi8_4_12.. Delay 23038, Area 1728468, Gates 2286
#multi8_4_42.. Delay 22551, Area 1749384, Gates 2314
#multi8_4_422. Delay 22492, Area 1750896, Gates 2316
# elapsed time 240s
#multi8_4_40... Delay 23245, Area 1738548, Gates 2300
#multi8_4_41... Delay 23160, Area 1738800, Gates 2300
#multi8_4_42... Delay 22551, Area 1749384, Gates 2314
#multi8_4_422.. Delay 22492, Area 1750896, Gates 2316
# elapsed time 165s
#multi8_4_4220.. Delay 22492, Area 1750896, Gates 2316
Thu Jul  3 11:23:22 BST 2008

  • The max fanin for the output netlist is 10.
  • The time limit for any LOON synthesis is 60s.
  • The script is in the working directory and run by prefixing it with ./ .
  • The LAX file is loon_1500_300_0. With this paper's naming convention, it means that the input resistance is 1.5kΩ, output load 300fF and opt level 0. The opt level is not used.
  • The file to be optimised is multi8_4.vst.
  • The optimised netlist is written to multi8.vst.
  • An XSCH timing file is written to multi8.xsc.
  • Standard output shows the synthesis progress with the opt level of each synthesis that shows an improvement with its delay, area and gate count.
  • The loon sequence is
    loon -l loon_1500_300_4 multi8_4 multi8_4_4
    loon -l loon_1500_300_2 multi8_4_4 multi8_4_42
    loon -l loon_1500_300_2 multi8_4_42 multi8_4_4_422
    loon -l loon_1500_300_0 multi8_4_422 multi8

The LOON sequence of different opt levels which gives the fastest netlist varies from design to design. Running LOON interactively to find the best sequence is time consuming. This script automates all of that.