( 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.



 Sign up for the DeepChip newsletter.
Email
 Read what EDA tool users really think.


Feedback About Wiretaps ESNUGs SIGN UP! Downloads Trip Reports Advertise

"Relax. This is a discussion. Anything said here is just one engineer's opinion. Email in your dissenting letter and it'll be published, too."
This Web Site Is Modified Every 2-3 Days
Copyright 1991-2024 John Cooley.  All Rights Reserved.
| Contact John Cooley | Webmaster | Legal | Feedback Form |

   !!!     "It's not a BUG,
  /o o\  /  it's a FEATURE!"
 (  >  )
  \ - / 
  _] [_     (jcooley 1991)