( ESNUG 227 Item 3 ) ---------------------------------------------- [10/13/95]

 [ Editor's Warning: DON'T DRIVE CLOCKS (EVEN WITH INFINITE DRIVE!)  What
   follows is not a quasi-academic discussion of an obscure Synopsys bug,
   but something that was an independent confirmation of a nasty show-stopper
   I just got back from helping a client on.   To better understand what
   Steve is describing, here's a quickie Synopsys timing tutorial:

         Total Delay = Edge Delay + Intrinsic Delay +
                       Transition Delay + Connect Delay

   Edge Delay: The delay from an input pin to an output pin because of the
          slow rise or fall being applied at the input pin.
   Intrinsic Delay: The build-in delay from the input to an output of a gate
          (usually output resistance mulpitied by the sum of loads.) 
   Transition Delay: The delay due to capacitive loading on a gate's output.
   Connect Delay: the time it takes for a waveform to travel along a wire.

   NOTE: Setting infinite drives on clock pins, for some reason, doesn't get
   rid of the Transition Delay that Design Compiler sees.       - John ]


From: sgolson@trilobyte.com (Steve Golson)
Subject: (ESNUG 220 #5 221 #2) "Non-Linear Libs, Weird Delays & Clock Drives"

John,

Here's a follow-up on my weird timing problem as reported in ESNUG 221,
the problem appears as follows:

> Run report_timing and see a path with 20 ns delay, then put a
> non-inifinite drive on the clock pin with "set_driving_cell" and
> report_timing shows 210 ns delay.  A 10X delay gain!

According to Synopsys, here is what is going on:

1. Setting a drive on a clock port has problems.  With an "ideal" clock you
   get 0 ns propagation delay and thus the drive strength is ignored, however
   you *will* get a transition delay.  This transition delay will be *huge*
   because the load on the clock is large.

2. The non-linear delay model (NLDM) tables in the library are not
   characterized to handle such huge transition delays.  As a result you
   may end up with *negative* propagation delays.

3. Design Compiler uses the largest transition delay it can find, rather
   than the transition delay for the critical path.

The result is that you get calculated delays that are totally bogus.

Here are my comments on each item above:

1. Do not put a drive on a clock port (unless you plan to use
   "set_clock_skew -propagated"). Be careful using "all_inputs()" with
   "set_driving_cell". A STAR has been filed, so that Design Compiler will
   ignore the driving cell on ideal clocks.

2. If you have the library sources you can use report_delay_calculation to
   try and figure out what is going on.  Without access to the library
   sources, how can a user hope to know if the NLDM tables are being pushed
   past their characterized limits?

   Enhancement request: all library tables should have a characterization
   limit specified by the vendor, and if Design Compiler ever exceeds that
   limit, a warning is output.

This is a Design Compiler bug.  A STAR has been filed.  You can use
set_disable_timing in the v3.3b release to guide Design Compiler to pick
the correct transition value.

  - Steve Golson
    Trilobyte Systems



 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)