Chapter

Section

The operation to determine the value of input resistance rin which will increase each input's delay to match the critical path is performed after BOOG and before LOON. Then LOON is run and for each input with a fanin greater than 4 the input resistance is changed to rin.

The synthesis sequence for BOOG with 0fF wireload and LOON with 45fF wireload is then:

1 $ ALLIANCE_VBE=$ALLIANCE_MOS/vbe
2 $ MBK_TARGET_LIB=$ALLIANCE_VBE/sclib100_0_min_x8 
3 $ boog -l loon_0000_300_4 multi8 multi8_o
4 $ MBK_TARGET_LIB=$ALLIANCE_VBE/sclib100_45
5 $ rin=$(./find_rin -l loon_1500_300_0 multi8_o)
6 $ echo "rin "$rin > .buf_loon
7 $ ./buf_loon -l loon_1500_300_4 multi8_o multi8  

 

find_rin script

The find_rin script runs LOON with opt level 0 once for each input and writes to standard output the highest input resistance found. It performs the work of the simple script on the previous page in a more sophisticated way, and also does the spreadsheet calculation. Some diagnostic information is written to error output as an aid to the designer.

The resistance value is written to file .buf_loon where it is read by script buf_loon

buf_loon script

The script buf_loon takes the same arguments as LOON and runs LOON synthesis on the input netlist using the opt level set in the LAX file. If this results in any of the inputs having a fanin greater than 4, and the opt level is 2 or 4, then the LAX file is edited to set rin equal to the value defined in .buf_loon (or to 10kΩ if rin is not defined in .buf_loon).

LOON synthesis is repeated with the edited LAX files until either

  • all inputs have a max fanin of 4 or
  • there is no change to the input fanin.

LOON synthesis with opt level 2 or 4 can lock up, so buf_loon runs LOON in the background and kills it if it runs for longer than 30s (or a user defined limit if set).

The delay and fanin of the best previous synthesis and the same sequence with loon replaced by buf_loon is shown below. The fastest netlist is slightly slower than before, but the max fanin meets our target of 4.

BOOG 0fF, LOON 45fF
BOOG 0 1 2 4
delay  29267   28484   28484   22522 
fanin  45   8   8   19 
BOOG 0fF, buf_loon 45fF
BOOG 0 1 2 4
delay  29266   28762   29061   22759 
fanin  2   2   3   4 

Synthesising BOOG with a 45fF wireload library gives as before a slower result. The fastest netlist is 23447. We will continue using BOOG with a 0fF wireload and LOON with a 45fF wireload.

The way to reduce the fanin is to ensure that the input is on the critical path by using a high input resistance. Its value is calculated from the netlist and applied selectively so that the inputs on the real critical path are buffered with the regular input resistance (1.5kΩ here) since this should give the fastest netlist.

A script find_rin finds the input resistance value. Another script buf_loon is used to loop loon until the inputs are buffered.

The synthesis results so far are summarised below. The use of scripts find_rin and buf_loon has reduced the fanin although the fastest netlist is slower by about 1%.

  wireload 0fF wireload 45fF
delay gates max
fanin
delay gates max
fanin
Original Alliance lib and synthesis 25042 1674 8 31429    
Original Alliance lib and best synthesis 22789 1961 26 30226    
Library corrections and carry cell 20014 2036 26 27036    
Min drive strength BOOG synthesis 19754 2021 63 28360    
BOOG
macros
18131 2259 20 23967    
LOON macros. wireload
BOOG 0fF, LOON 45fF
17984     22522 2301 19
find_rin, buf_loon scripts
BOOG 0fF, LOON 45fF
17909     22759 2282 4