Chapter

Section

Use

find_rin [-l lax_file] input_file

Description

Script which calculates the resistance which will increase the input delay to match the critical path. By using LOON with this resistance on high fanin inputs, the input appears on the critical path and is buffered.

The resistance is written to standard output.

Arguments

-l lax_file

File with input resistance and output load which is ised for the normal LOON synthesis. Zero values are used if not given.

input_file

The structural VHDL netlist input_file.vst.

Depends on

Alliance programs loon, flatlo, x2y and the value of environment variables $MBK_TARGET_LIB and $MBK_TARGET_LIB.

Bugs

LOON does not always manage to buffer high fanin inputs on the critical path. Using the input resistance calculated by find_rin is just a best guess way of trying to achieve fanin reduction.

Operation

LOON measures the critical path delay of input_file.vst with opt level 0. Input resistance and output load are zero or as defined in the optional LAX file.

Then a 50kΩ resistor is placed on each input in turn in order to measure its critical path delay. The delay across this resistor puts the input on the critical path, and the true delay can be measured by removing the contribution of the 50kΩ resistor.

The input resistance needed for the input's delay to match the initial critical path can then be calculated. The largest value is written to standard output. The standard error output has the intermediate delay information for each input.

LOON is run once at the start to measure the critical path, and then once for each input.

Download find_rin
Example
1 $ MBK_TARGET_LIB=$ALLIANCE_MOS/vbe/sclib100_0_min_x4
2 $ boog -l loon_0000_300_4 multi8 multi8_4
3 $ MBK_TARGET_LIB=$ALLIANCE_MOS/vbe/sclib100_45_min_x4
4 $ rin=$(./find_rin -l loon_1500_300_0 multi8_4)
5 $ MBK_TARGET_LIB=$ALLIANCE_MOS/vbe/sclib100_45
6 $ ./buf_loon -l loon_1500_300_4 multi8_4 multi8_4_4 -r $rin >/dev/null
#Critical path (no warranty)...23038 ps from 'y 2' to 'r 15'
#y(0)=4 y(1)=2 y(2)=2 y(3)=2 y(4)=2 y(5)=2 y(6)=2 y(7)=25
# x(0)=2 x(1)=2 x(2)=2 x(3)=2 x(4)=2 x(5)=44 x(6)=44 x(7)=57 Max fanin is x(7)=57
#Critical path (no warranty)...23245 ps from 'y 0' to 'r 15'
#y(0)=2 y(1)=2 y(2)=2 y(3)=3 y(4)=2 y(5)=2 y(6)=2 y(7)=2
# x(0)=2 x(1)=2 x(2)=2 x(3)=2 x(4)=2 x(5)=2 x(6)=2 x(7)=2 Max fanin is y(3)=3
  • Event 1 sets the BOOG library and event 2 runs BOOG.
  • Event 3 sets the library for the calculation of rin. This should be the same as the BOOG library but using the same wireload that will be used by LOON.
  • Event 4 calculates rin using the same input resistance and output load as the subsequent LOON and assigns it to variable rin.
  • Event 5 sets the LOON library and event 6 runs buf_loon using the value of rin just calculated. The standard output has been removed to demonstrate the error output with the intermediate results.
  • The first LOON inside buf_loon failed to buffer inputs y(7) and x(5-7).
  • Script buf_loon then changes the input resistance on these inputs to rin (see LAX file below).
  • The second LOON run uses this LAX file and now all inputs are buffered.

Lax file from second LOON run in buf_loon
##loon_1500_300_4.lax
#M{4}
#L{5}
#I{
x(0):1500;
x(1):1500;
x(2):1500;
x(3):1500;
x(4):1500;
x(5):6087;
x(6):6087;
x(7):6087;
y(0):1500;
y(1):1500;
y(2):1500;
y(3):1500;
y(4):1500;
y(5):1500;
y(6):1500;
y(7):6087;
}
#C{
r(15):300;
r(14):300;
r(13):300;
r(12):300;
r(11):300;
r(10):300;
r(9):300;
r(8):300;
r(7):300;
r(6):300;
r(5):300;
r(4):300;
r(3):300;
r(2):300;
r(1):300;
r(0):300;
}