|vlsitechnology.org /2LM sclib /synthesis /fanin reduction|
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
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
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
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 0fF, buf_loon 45fF|
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.
|wireload 0fF||wireload 45fF|
|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|
|LOON macros. wireload
BOOG 0fF, LOON 45fF
|find_rin, buf_loon scripts
BOOG 0fF, LOON 45fF