• 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 Design
  3. Re: Extracting device Vgb,Vsb,Vdb info from 'tranOp ??

Stats

  • Locked Locked
  • Replies 8
  • Subscribers 125
  • Views 3880
  • 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

Re: Extracting device Vgb,Vsb,Vdb info from 'tranOp ??

npamd
npamd over 5 years ago

Hi all, 

Couple of questions:

1. What I am trying to do is extract Vgb,Vdb,Vsb info for all devices in my design at the end of a transient.

It seems like 'tranOp has   info on (Vgs,Vds,Vgd,Vt) etc.  so I am easily able to write them out to a txt file through report command by doing something like this:

report(?output outPort ?param '("vgs" "vds" "vth" "vgd" ) ?format 'spice ?maxLineWidth 1000)
t

However, it seems to miss bulk-referenced voltages. Any way to capture this info ?

2. If I want to iterate through every FET in my design and capture its (g,d,s,b) voltages, and maybe try to find the absolute max a device sees on its Vdb,Vgb etc. throughout the duration of a transient sim, can that be done via a SKILL code ? 

Can someone please help me with this ? 

  • Cancel
  • npamd
    npamd over 5 years ago

    Hi all, 

    Couple of questions:

    1. What I am trying to do is extract Vgb,Vdb,Vsb info for all devices in my design at the end of a transient.

    It seems like 'tranOp has   info on (Vgs,Vds,Vgd,Vt) etc.  so I am easily able to write them out to a txt file through report command by doing something like this:

    report(?output outPort ?param '("vgs" "vds" "vth" "vgd" ) ?format 'spice ?maxLineWidth 1000)
    t

    However, it seems to miss bulk-referenced voltages. Any way to capture this info ?

    2. If I want to iterate through every FET in my design and capture its (g,d,s,b) voltages, and maybe try to find the absolute max a device sees on its Vdb,Vgb etc. throughout the duration of a transient sim, can that be done via a SKILL code ? 

    Can someone please help me with this ? 

    • Cancel
    • Vote Up 0 Vote Down
    • Cancel
  • Andrew Beckett
    Andrew Beckett over 5 years ago

    For the first question, this works for me. For example:

    report(?param '("vgb" "vdb" ) ?format 'spice ?maxLineWidth 80)

    gives:

    Name            /I0/M4B         /I0/M22         /I0/M7D         /I0/I2/M3       /I0/I3/M4       
                    /I0/M10A        /I0/I3/M1       /I0/I4/M3       /I0/I4/M1       /I0/I2/M5       
                    /I0/I2/M7       /I0/I1/M7       /I0/I2/M2       /I0/I3/M7       /I0/M2A         
                    /I0/M3A         /I0/I1/M1       /I0/I4/M6       /I0/I1/M8       /I0/M13C        
                    /I0/I4/M2       /I0/I1/M6       /I0/M8B         /I0/I4/M7       /I0/I2/M8       
                    /I0/M5B         /I0/I3/M2       /I0/M10B        /I0/I3/M6       /I0/I1/M2       
                    /I0/I1/M5       /I0/M3B         /I0/M2B         /I0/I2/M6       /I0/M7B         
                    /I0/M5A         /I0/M21         /I0/M11B        /I0/I3/M3       /I0/M6A         
                    /I0/I2/M1       /I0/M1A         /I0/M25         /I0/M1B         /I0/I1/M3       
                    /I0/M6B         /I0/I4/M5       /I0/M23         /I0/M30         /I0/M31         
                    /I0/M11C        /I0/M13A        /I0/M29         /I0/I4/M4       /I0/M28         
                    /I0/M7C         /I0/M8A         /I0/I3/M5       /I0/M27         /I0/I1/M4       
                    /I0/M11A        /I0/M7A         /I0/I3/M8       /I0/M26         /I0/M4A         
                    /I0/M13B        /I0/I2/M4       /I0/I4/M8       /I0/M24         
    vgb             -371.734m       -371.734m       664.431m        -424.126m       -424.126m       
                    -371.734m       -371.734m       -424.126m       -371.734m       483.776m        
                    457.975m        457.975m        -371.734m       457.975m        457.975m        
                    1.87604         -371.734m       483.776m        457.975m        457.975m        
                    -371.734m       483.776m        -1.53173        457.975m        457.975m        
                    -1.17869        -371.734m       -371.734m       483.776m        -371.734m       
                    483.776m        1.5062          457.975m        483.776m        412.314m        
                    -1.10273        -371.734m       560.687m        -424.126m       -371.734m       
                    -371.734m       -1.11907        483.776m        -1.09466        -424.126m       
                    -371.734m       483.776m        -371.734m       339.545m        339.545m        
                    1               457.975m        483.776m        -424.126m       457.975m        
                    412.314m        -1.36003        483.776m        483.776m        -424.126m       
                    1.01186         412.314m        457.975m        457.975m        -371.734m       
                    457.975m        -424.126m       457.975m        -424.126m       
    vdb             -707.134m       -1.54203        664.431m        -1.54203        -1.10273        
                    -929.096m       -636.465m       -1.54203        -707.134m       545.389m        
                    545.389m        993.975m        -93.2632m       125.561m        993.975m        
                    1.01186         -96.6516m       821.309m        73.3421m        639.972m        
                    -116.144m       1.87604         -1.33557        125.561m        72.5474m        
                    -1.43931        -115.295m       -929.096m       897.274m        -63.6493m       
                    993.975m        560.687m        545.389m        1.5062          545.389m        
                    -988.139m       -371.734m       2               -1.54203        -505.06m        
                    -96.6516m       -1.00603        457.975m        -1.45461        -1.54203        
                    -505.06m        457.975m        -1.51622        1.62827         339.545m        
                    2               614.282m        483.776m        -1.17869        139.473m        
                    412.314m        -1.58769        457.975m        1.57587         -123.959m       
                    2               993.975m        131.135m        125.561m        -636.465m       
                    322.643m        -493.798m       130.193m        -424.126m       

    This does however depend on what model your devices are using. With bsim3v3 or bsim4, it certainly does contain these parameters. For simpler models (e.g. mos1) then they're not present ("spectre -h mos1" in the terminal window would tell you that).

    For the second question, you can do this by creating a file, mychecks.scs with the contents like this:

    vdbAssert assert primitive=bsim3v3 expr=max(vdb) info=yes level=notice

    Then in the Simulation->Options->Analog in ADE, on the Checks tab, set dochecklimit to yes, checklimitfile to the file you want to write to, and checklimitdest to file. The results (making sure that you have the model type in the primitive above, and your devices do actually output vdb as an operating point parameter - see "spectre -h mos1" or "spectre -h bsim4" etc to see available operating point parameters), you'll get something like this:

    Notice from spectre during transient analysis `tran'.
        vdbAssert, instance I0.I1.M1: Expression `max(vdb)' has value
            -88.8143e-03.
        vdbAssert, instance I0.I1.M2: Expression `max(vdb)' has value
            -23.8492e-03.
        vdbAssert, instance I0.I1.M3: Expression `max(vdb)' has value -1.54203.
        vdbAssert, instance I0.I1.M4: Expression `max(vdb)' has value -41.317e-03.
        vdbAssert, instance I0.I2.M1: Expression `max(vdb)' has value
            -88.8143e-03.
        vdbAssert, instance I0.I2.M2: Expression `max(vdb)' has value
            -85.3369e-03.
        vdbAssert, instance I0.I2.M3: Expression `max(vdb)' has value -1.54203.
        vdbAssert, instance I0.I2.M4: Expression `max(vdb)' has value
            -243.725e-03.
        vdbAssert, instance I0.I3.M1: Expression `max(vdb)' has value
            -629.679e-03.
        vdbAssert, instance I0.I3.M2: Expression `max(vdb)' has value
            -105.834e-03.
        vdbAssert, instance I0.I3.M3: Expression `max(vdb)' has value -1.54203.
        vdbAssert, instance I0.I3.M4: Expression `max(vdb)' has value -1.09505.
        vdbAssert, instance I0.I4.M1: Expression `max(vdb)' has value
            -670.459e-03.
        vdbAssert, instance I0.I4.M2: Expression `max(vdb)' has value
            -106.639e-03.

    I'm investigating the line wrapping - the options I thought controlled this don't seem to work.

    Andrew.

    • Cancel
    • Vote Up +1 Vote Down
    • Cancel
  • npamd
    npamd over 5 years ago in reply to Andrew Beckett

    Hi Andrew, 

    Thanks for your response.I tried to check the model I am working with. This is what I got back when I ran a query:

    However, the primitive associated with all these is "tmibsimcmg". The bsim in the name here suggests that the underlying model one of the bsim ones, I am guessing ?

    The "spectre -h tmibsimcmg"  isn't working for me as expected. However, I'll try the 2nd approach and update tom.

    • Cancel
    • Vote Up 0 Vote Down
    • Cancel
  • Andrew Beckett
    Andrew Beckett over 5 years ago in reply to npamd

    spectre -h bsimcmg will tell you the info you need. The "tmi" flavour of it is an extension. As you can see from the help for bsimcmg, it doesn't output bulk-related operating point data (this is in the original compact model from the Berkeley BSIM model too).

    The only bulk-related Operating Point parameter is ves - the "bulk" terminal is called "e" in bsimcmg (as can be seen at the top of "spectre -h bsimcmg"), and in the BSIM group's Verilog-A compact model.

    Andrew.

    • Cancel
    • Vote Up +1 Vote Down
    • Cancel
  • npamd
    npamd over 5 years ago in reply to Andrew Beckett

    Yup, just checked. So only Vsb can be extracted from this model.

    Also, coming to approach 2 to find max voltage (lets say Vgs with this model), where does  mychecks.scs (i/p file which has the the checks to perform) go ? 

    You mentioned the checklimitfile area is where i give pointer to the o/p file I want to write to. How the the flow pick this input file ?

    • Cancel
    • Vote Up 0 Vote Down
    • Cancel
  • Andrew Beckett
    Andrew Beckett over 5 years ago in reply to npamd

    For the second approach, you could also write the asserts like this:

    vdbAssert assert primitive=bsimcmg expr=max(v(d)-v(e)) info=yes level=notice
    vgbAssert assert primitive=bsimcmg expr=max(v(g)-v(e)) info=yes level=notice

    which would give you what you want. The d, g and e are in terms of the terminal names for the primitive device.

    The mychecks.scs file can be placed anywhere - you simply need to ensure it's included in the simulation. I originally wrote how to do this, but my first attempt at a reply discarded what I said, and I omitted it the second time by mistake. Use Setup->Model Libraries or Setup->Simulation Files and use the Definition Files field to reference the file (the second is better if you have corners set up in ADE XL/Explorer/Assembler).

    I assume your second question is just repeating the first? Otherwise I don't understand what you're asking.

    Andrew.

    • Cancel
    • Vote Up +1 Vote Down
    • Cancel
  • npamd
    npamd over 5 years ago in reply to Andrew Beckett

    Andrew, Thanks for your response..! However there are cpl of things I wanted to check upon:

    1. The checks seem to not do the intended thing (see highlighted below). This PFET experienced a VGS of ~1.98 V during a tran sim (annotated). However, the check told me that the max Vgs the same PFET saw during the sim period was ~723 m. 

    My check : 

    vgsAssert assert primitive=tmibsimcmg expr=max(mag(v(g)-v(s))) info=yes level=notice

     

    Assuming I get this part right, next questions:

    2. How can I only report devices in violation ? Lets say, my design targets are:

    Vgs, Vds, Vgd: 1.5V 

    Vdb,Vsb,Vgb: 2V

    How can I apply filters to report devices that violate these limits, at any instant in the tran simulation window ?

    3. The checks seem to be missing FETs in my design. There is a block in my TB of which I instantiating 10 copies. However, the checks are completely missing 8/10 instances (and all devices in them). Why would this be ?

    This is what my setup looks like currently:

    • Cancel
    • Vote Up 0 Vote Down
    • Cancel
  • Andrew Beckett
    Andrew Beckett over 5 years ago in reply to npamd

    I would suggest you contact customer support - I'm sure this is explainable, but almost certainly we need to see the data to understand. Otherwise it would need a lot of guess work.

    Some quick answers though:

    1. Not sure why this would be. Hence the need to contact customer support
    2. This is the primary purpose of assert statements. In this case we're using max to give the maximum overall, but if you omitted the max()  and used the min and max parameters of assert, you can get it to flag when anything goes out of bounds. See "spectre -h assert" or look at the spectre asserts RAK on support.cadence.com
    3. This may be because you're running Spectre APS? This will combine parallel devices into an m-factor, and hence reduce the number of actual devices in the circuit (which is good for speed). That's a guess though - again, needs customer support input.

    Andrew

    • Cancel
    • Vote Up +1 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