• Skip to main content
  • Skip to search
  • Skip to footer
Cadence Home
  • This search text may be transcribed, used, stored, or accessed by our third-party service providers per our Cookie Policy and Privacy Policy.

  1. Community Forums
  2. Digital Implementation
  3. Large difference between post-route and signoff timing despite...

Stats

  • Locked Locked
  • Replies 2
  • Subscribers 91
  • Views 7791
  • Members are here 0
This discussion has been locked.
You can no longer post new replies to this discussion. If you have a question you can start a new discussion

Large difference between post-route and signoff timing despite up-to-date RC scaling factors

Domi Hammerfall
Domi Hammerfall over 2 years ago

Dear Community

I have a design whose timing is fulfilled at the post-rouote stage. If I run

setExtractRCMode -engine postRoute -effortLevel high
timeDesign -postRoute -setup -hold

I get the following result.

+--------------------+---------+---------+---------+---------+
|     Setup mode     |   all   | reg2reg |reg2cgate| default |
+--------------------+---------+---------+---------+---------+
|           WNS (ns):|  0.000  |  0.000  | 18.512  |  0.164  |
|           TNS (ns):|  0.000  |  0.000  |  0.000  |  0.000  |
|    Violating Paths:|    0    |    0    |    0    |    0    |
|          All Paths:|  20636  |  20141  |   32    |  6271   |
+--------------------+---------+---------+---------+---------+

+--------------------+---------+---------+---------+---------+
|     Hold mode      |   all   | reg2reg |reg2cgate| default |
+--------------------+---------+---------+---------+---------+
|           WNS (ns):|  0.046  |  0.046  |  0.648  |  3.356  |
|           TNS (ns):|  0.000  |  0.000  |  0.000  |  0.000  |
|    Violating Paths:|    0    |    0    |    0    |    0    |
|          All Paths:|  20636  |  20141  |   32    |  6271   |
+--------------------+---------+---------+---------+---------+


However, If I run

timeDesign -signoff -setup -hold

I get a much worse result:

+--------------------+---------+---------+---------+---------+
|     Setup mode     |   all   | reg2reg |reg2cgate| default |
+--------------------+---------+---------+---------+---------+
|           WNS (ns):| -9.366  | -9.366  | 18.545  |  0.223  |
|           TNS (ns):| -27.222 | -27.222 |  0.000  |  0.000  |
|    Violating Paths:|   31    |   31    |    0    |    0    |
|          All Paths:|  20638  |  20143  |   32    |  6271   |
+--------------------+---------+---------+---------+---------+

+--------------------+---------+---------+---------+---------+
|     Hold mode      |   all   | reg2reg |reg2cgate| default |
+--------------------+---------+---------+---------+---------+
|           WNS (ns):|  0.002  |  0.002  |  0.644  |  3.374  |
|           TNS (ns):|  0.000  |  0.000  |  0.000  |  0.000  |
|    Violating Paths:|    0    |    0    |    0    |    0    |
|          All Paths:|  20636  |  20141  |   32    |  6271   |
+--------------------+---------+---------+---------+---------+

According to the manual, this can happen due to bad correlation between the post-route RC scaling factors and the signoff extractor. Thus, I updated the RC factors with

generateRCFactor -preroute true -reference signoff -outputFile update_preRoute_RC_scale_factors.tcl
generateRCFactor -preroute false -postroute medium -reference signoff -outputFile update_postRoute_RC_scale_factors.tcl
source update_preRoute_RC_scale_factors.tcl   # At the beginning of the flow
source update_postRoute_RC_scale_factors.tcl  # After routing

and restarted the flow, but the result is almost the same.

At the sign-off stage, only two paths have a much worse timing. The other 29 violating paths have a very small negative slack of a few ps. To further debug the proble, I compared the worst path (according to the signoff timing) to the same path with post-route timing. Here is the output of said path in the signoff stage:

Path 1: VIOLATED Data To Data Setup Check with Pin i0_nv_
mem/i0_XNVR_2KX8P2016_VW01C/HS
Endpoint:   i0_nv_mem/i0_XNVR_2KX8P2016_VW01C/MEM_ALLC     
(^) checked with  leading edge of 'clk'
Beginpoint: i0_nv_mem_ctrl/i0_nv_mem_
access/mem_allc_cs_reg/Q (^) triggered by  leading edge of 'clk'
Path Groups: {clk}
Analysis View: slow_normal_mode_vtx
Other End Arrival Time          4.133
- Data Check Setup              5.000
+ Phase Shift                   0.000
+ CPPR Adjustment               1.221
- Uncertainty                   3.000
= Required Time                -2.646
- Arrival Time                  6.720
= Slack Time                   -9.366
     Clock Rise Edge                 0.000
     + Clock Network Latency (Prop)  0.830
     = Beginpoint Arrival Time       0.830

And when I use the same command (report_timing -from <startpoint> -to <endpoint>) at the post-route stage, I get:

No constrained timing paths with given description found.
Paths may be unconstrained (try '-unconstrained' option) or may not exist.

How can that be? According to this document, above's report can happen e.g. when timing checks are disabled, the path is constrained as static, etc., none of which is the case in our design (we only constrain top-level pins, no internal pins).

1. How can it happen that a path is unconstrained at the post-route stage, but constrained in the signoff stage?

2. I noticed that the RC scaling factors are quite close to 1 and even smaller than one in most cases. Intuitively, I would expect them to be larger than one. Might there be something wrong with how I generate them? Here are the generated post-route RC scaling factors:

update_rc_corner -name RC_typ_T25 -postRoute_cap {0.924 0.953 } -postRoute_res {0.997 0.969 } -postRoute_xcap {1.050 0.964 } -postRoute_clkcap {0.799 0.893 } -postRoute_clkres {0.996 0.978 }
update_rc_corner -name RC_min_Tm40 -postRoute_cap {0.925 0.969 } -postRoute_res {0.998 0.971 } -postRoute_xcap {1.032 0.966 } -postRoute_clkcap {0.800 0.909 } -postRoute_clkres {0.997 0.980 }
update_rc_corner -name RC_max_T125 -postRoute_cap {0.929 0.954 } -postRoute_res {1.006 0.964 } -postRoute_xcap {1.029 0.964 } -postRoute_clkcap {0.798 0.891 } -postRoute_clkres {0.999 0.974 }

Thank you for any suggestions.

  • Cancel
  • Michael11
    Michael11 over 2 years ago

    Did you find out anything more? I think I might have the same problem: The timing is clean util the signoff stage, then suddenly it's off by several ns. All the bad paths are data-to-data checks as in your case.

    It looks a lot like synthesis simply didn't see these paths. I checked in the database, that the cell is annotated correctly, but when I run `report_timing -to INST`, I get no results in innovus, while I do see the bad paths in tempus.

    • Cancel
    • Vote Up 0 Vote Down
    • Cancel
  • Domi Hammerfall
    Domi Hammerfall over 2 years ago in reply to Michael11

    Not really.

    I tried playing around with different parameters in setExtractRCMode, but the sign-off timing is always much worse.

    In the end, I went for a workaround by setting a positive target slack. That way, Innovus optimizes the timing more than necessary, resulting in a small safety margin. So for example:

    setOptMode -setupTargetSlack 0.5 -holdTargetSlack 0.1

    You can adjust the numbers to your need, of course. This does, however, not solve the problem where some paths are invisible to the tool up until the sign-off stage.

    • Cancel
    • Vote Up 0 Vote Down
    • Cancel

Community Guidelines

The Cadence Design Communities support Cadence users and technologists interacting to exchange ideas, news, technical information, and best practices to solve problems and get the most from Cadence technology. The community is open to everyone, and to provide the most value, we require participants to follow our Community Guidelines that facilitate a quality exchange of ideas and information. By accessing, contributing, using or downloading any materials from the site, you agree to be bound by the full Community Guidelines.

© 2025 Cadence Design Systems, Inc. All Rights Reserved.

  • Terms of Use
  • Privacy
  • Cookie Policy
  • US Trademarks
  • Do Not Sell or Share My Personal Information