| vlsitechnology.org /2LM sclib /synthesis /est wireload |
Estimated Wireload |
Chapter
Section
Cells are connected by wires which have capacitance which contributes to the circuit delay. Prior to the layout, we estimate this capacitance and hope that it is close to the final value or we will have performance problems. A good and simple estimate is to set the wire cap to each input pin equal to the cap of a standard sized gate input.
In the sclib, which is 42λ tall, we have
| function | cell | pin cap | tr width |
|---|---|---|---|
| inverter | n1_y | 28 | 18 |
| inverter | np1_y | 47 | 35 |
| 2-NAND | na2_y | 35 | 24 |
| 2-NAND | na2p_y | 60 | 46 |
A good value for the wire capacitance for each fanout would be 45fF.
We would like the synthesis process to include the delays due to this wireload because
The Alliance synthesis does not handle the concept of a wireload, so we have to add it into the input pin cap of each cell. We do this by copying the VBE library cells to a new directory, adding 45fF to the cin parameter as we do so.
We have a script called makecell which converts a single cell. An entire directory of files can be made by:
$ ls -1 ../sclib100_0/*.vbe | \ sed 's|^\(.*\)/\(.*\)\.vbe|./makecell \2|' | \ bash |
Note the delimeter '|' used in the sed command which allows an easy use of './' in the replacement expression. To check the difference for the 2-AND gate:
$ diff ../sclib100/a2_y.vbe a2_y.vbe < CONSTANT cin_i1 : NATURAL := 23; -- cin_i1 < CONSTANT cin_i0 : NATURAL := 22; -- cin_i0 --- > CONSTANT cin_i1 : NATURAL := 68; > CONSTANT cin_i0 : NATURAL := 67; |
A common problem in general with synthesis is underbuffered gates. By using BOOG and LOON with VBE files that have higher pin capacitances, we try to ensure that the gates are sufficiently buffered.
We repeat the multiplier netlist synthesis with all values of BOOG and LOON, and compare three options for including the 45fF wireload.
The first synthesis sequence is the previous example with an extra LOON step with opt level=0 to retime with a 45fF wireload.
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_0 5 $ loon -l loon_1500_300_2 multi8_o multi8_1 6 $ MBK_TARGET_LIB=$ALLIANCE_VBE/sclib100_45 7 $ loon -l loon_1500_300_0 multi8_1 multi8 |
The second sequence mimics the previous example but uses a 45fF wireload for the LOON step.
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 $ loon -l loon_1500_300_4 multi8_o multi8 |
The third sequence uses 45fF wireloads for BOOG and LOON.
1 $ ALLIANCE_VBE=$ALLIANCE_MOS/vbe 2 $ MBK_TARGET_LIB=$ALLIANCE_VBE/sclib100_45_min_x8 3 $ boog -l loon_0000_300_4 multi8 multi8_o 4 $ MBK_TARGET_LIB=$ALLIANCE_VBE/sclib100_45 5 $ loon -l loon_1500_300_4 multi8_o multi8 |
Note that the BOOG library can vary. The fastest netlist uses the min library with the ndrvp inverter for the first option. The other two options use the ndrv inverter.
The full results are on a separate web page.
When we look at the full set of results then we can see that generally the fastest results occur with
The synthesis results so far are summarised below.
| 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 0fF |
18119 | 2260 | 20 | 23881 | ||
| LOON macros. wireload BOOG 0fF, LOON 45fF |
17984 | 22522 | 2301 | 19 | ||
| LOON macros. wireload BOOG 45fF, LOON 45fF |
18193 | 23122 | 2229 | 53 | ||