( ESNUG 211 Item 5 ) ---------------------------------------------- [3/2/95]
From: danj@mpd.tandem.com (Dan Joyce)
Subject: Use set_max_fanout With Much Caution!
John,
USE CAUTION WITH SET_MAX_FANOUT ON THE ENTIRE DESIGN! Our methodology used
to have as part of the process a "set_max_fanout = 10" on the entire design.
This caused timing problems on our modules which drove the outputs of the
ASIC. (For those modules, we had very large loads applied on the outputs to
get large drivers - since the outputs of these modules were going to drive
across the die and needed to be as fast as possible.)
We were trying to drive 4 outputs with the same logical value.
Synopsys Design Compiler correctly used the largest buffers available
(BUFF3 - which had a fanin of 3 inputs attributed to their inputs). The
set_max_fanout caused Synopsys to only drive 3 BUFF3's with a single BUFF3,
and the worst path for these outputs was a string of three BUFF3's in a row.
Since these buffers were actualy able to drive about 100 loads, a single
BUFF3 could have driven 15 or 20 second level BUFF3's to give a tree with a
worst case delay of only 2 BUFF3's. This would have worked with 15 - 20
outputs.
Synopsys Design Compiler gave this:
__|\_____
| |/
|
___|\____|\__|__|\_____ delay of 3 - BUFF3's
|/ | |/ |/
|
|_|\___________
| |/
|
|_|\___________
|/
Where this would have been more than sufficient:
_|\________
| |/
|
___|\__|_|\________ delay of 2 - BUFF3's
|/ | |/
|
|_|\________
| |/
|
|_|\________
|/
We later found that set_max_transition, used correctly was the command that
made more sence for this logic. set_max_transition made sure that all of
the nets were sufficiently driven according to the load and the drive
strength of the output.
- Dan Joyce
Tandem Computers Inc.
|
|