• 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. Custom IC SKILL
  3. How to save different checklimitfile for multiple parallel...

Stats

  • Locked Locked
  • Replies 8
  • Subscribers 143
  • Views 16085
  • 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

How to save different checklimitfile for multiple parallel runs in Device Checking?

oyayla
oyayla over 6 years ago

Hi,

I am running Device checking in ADEXL for PVT and want to save checklimitfiles separately for each run. If I put a file name to checklimitfile, later runs will overwrite. Is there a way to pass a variable or some other way to have different device check output files?

Thanks

yayla

Version Info:

ICADV12.3 64b 500.21

spectre -W =>

Tool 'cadenceMMSIM' Current project version '16.10.479'
sub-version  16.1.0.479.isr9

  • Cancel
  • Andrew Beckett
    Andrew Beckett over 6 years ago

    Two suggestions:

    1. If you give a path for the checklimitfile which isn't a full path (i.e. has no "/" in the path), then it will be saved as a file in the netlist directory (I think) in each point. Or you could save it as "../psf/checklimit.txt" and it would be in the psf dir for each point. Then they won't overlap
    2. Or you could use the capability introduced in IC617/ICADV122 to view the checks/asserts view of the results after the run. The results are saved in an SQL database and you can then set up queries across the results. There's a Rapid Adoption Kit on this on support.cadence.com - Check & Assertions (there's also a newer one for Assembler too: Checks & Assertions flow in ADE)

    Andrew

    • Cancel
    • Vote Up +1 Vote Down
    • Cancel
  • oyayla
    oyayla over 6 years ago in reply to Andrew Beckett

    Thanks Andrew. Relative path works as you mentioned.

    I have looked at the Customize Violation filter. It looks very useful.

    One question slightly related to that: I want to know peak value of violation during violation window. Both checklimit file and ADEXL GUI don't report peak value. I tried to attach the ADEXL picture below. For instance, it shows Vgs voltage in message but peakvalue is missing, but I know that that Vgs goes to all the way 1.2V during that violation window, which I don't see from Checks/Asserts results

    Also, below is the checklimit file output for that which doesn't have any violating voltage level


    Warning from spectre at time = 17.6696 ps during transient analysis `tran'.
        WARNING (SPECTRE-4056): assert_pch_ulvt_vgs, Instance X0.MP0: PMOS Vgs
            voltage exceeded beyond +/-1.05V. Expression `abs(V(g,s))>1.05' is
            getting true.
        WARNING (SPECTRE-4056): assert_nch_ulvt_vgs, Instance X0.MN0: NMOS Vgs
            voltage exceeded beyond +/-1.05V. Expression `abs(V(g,s))>1.05' is
            getting true.
    Warning from spectre at time = 18.9306 ps during transient analysis `tran'.
        WARNING (SPECTRE-4056): assert_pch_ulvt_vgd, Instance X0.MP0: PMOS Vgd
            voltage exceeded beyond +/-1.05V. Expression `abs(V(g,d))>1.05' is
            getting true.
        WARNING (SPECTRE-4056): assert_nch_ulvt_vgd, Instance X0.MN0: NMOS Vgd
            voltage exceeded beyond +/-1.05V. Expression `abs(V(g,d))>1.05' is
            getting true.

    I have searched support cadence and found "checklimit_full_duration=yes" option but it seems that it doesn't change what is reported after simulation ends. That may be version issue I am using.

    Andrew, is there a way to report max violation voltage as well?

    Thanks

    yayla

    • Cancel
    • Vote Up 0 Vote Down
    • Cancel
  • oyayla
    oyayla over 6 years ago in reply to oyayla

    This is transient waveform for the above data

    • Cancel
    • Vote Up 0 Vote Down
    • Cancel
  • Frank Wiedmann
    Frank Wiedmann over 6 years ago in reply to oyayla

    Maybe this will help: https://support.cadence.com/apex/ArticleAttachmentPortal?id=a1Od0000000vh9VEAQ

    • Cancel
    • Vote Up 0 Vote Down
    • Cancel
  • Andrew Beckett
    Andrew Beckett over 6 years ago in reply to Frank Wiedmann

    The issue is because of how the assert is formulated. It's formulated as a boolean expression (like the second below) and so there's no "peak" because the expression is either 1 or 0. If it was implemented like either of the first or the third, then you get a peak shown:

    //
    
    assert_nch_1 assert mod=gpdk090_nmos1v param=vgs max=0.8
    assert_nch_2 assert mod=gpdk090_nmos1v expr="V(g,s)>0.8"
    assert_nch_3 assert mod=gpdk090_nmos1v expr="abs(V(g,s))" max=0.8

    Here's what the checks and assert view looks like:

    Regards,

    Andrew.

    • Cancel
    • Vote Up 0 Vote Down
    • Cancel
  • oyayla
    oyayla over 6 years ago in reply to Andrew Beckett

    Thanks Frank and Andrew for the replies.

    Frank, I will try the margin setting.

    Andrew, below are my assert statements which I believe are similar to 2nd except abs(). Is using abs() causing an issue?

    // Core ulvt voltage assertions
    assert_pch_ulvt_vgs assert mod=pch_ulvt expr="abs(V(g,s))>1.05" check_windows=[tstart_assert tend_assert] duration=tduration_assert message="PMOS Vgs voltage exceeded beyond +/-1.05V"
    assert_pch_ulvt_vgd assert mod=pch_ulvt expr="abs(V(g,d))>1.05" check_windows=[tstart_assert tend_assert] duration=tduration_assert message="PMOS Vgd voltage exceeded beyond +/-1.05V"

    Thanks

    yayla

    • Cancel
    • Vote Up 0 Vote Down
    • Cancel
  • Andrew Beckett
    Andrew Beckett over 6 years ago in reply to oyayla

    Hi Yayla,

    Just noticed a mistake in my previous post (I got the order wrong - the first and the third show a peak, the second doesn't) - I've corrected the post. 

    Anyway, the issue is not with the abs() (maybe my typo had confused things as I got the order wrong). The issue is that you have  an expression with >1.05. This means that the expression is a boolean expression and thus returns 1 or 0. If you use:

    // Core ulvt voltage assertions
    assert_pch_ulvt_vgs assert mod=pch_ulvt expr="abs(V(g,s))" max=1.05 check_windows=[tstart_assert tend_assert] duration=tduration_assert message="PMOS Vgs voltage exceeded beyond +/-1.05V"
    assert_pch_ulvt_vgd assert mod=pch_ulvt expr="abs(V(g,d))" max=1.05 check_windows=[tstart_assert tend_assert] duration=tduration_assert message="PMOS Vgd voltage exceeded beyond +/-1.05V"

    Then it should give you the peak, as the expression is then the voltage (or the absolute voltage).

    Regards,

    Andrew.

    • Cancel
    • Vote Up +1 Vote Down
    • Cancel
  • oyayla
    oyayla over 6 years ago in reply to Andrew Beckett

    Thanks Andrew. I have changed the rules and everything works now. And I got it what you mean by "boolean expression" .

    Thanks,

    yayla

    • 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