• 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 calculate area for a given schematic

Stats

  • Locked Locked
  • Replies 13
  • Subscribers 143
  • Views 22001
  • 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 calculate area for a given schematic

IC Layout
IC Layout over 16 years ago

 Hello! Every body, I am using cadence IC514 version and a 90nm PDK kit called "gpdk090".
My intention is to calculate area for a given schematic.
I wrote a procedure called "area()" which will calculate area in the current level (means for transistors, capacitors and resistors only).
Now I need to call this procedure for every instance which is not a transistor,cap or a resistor.
I wrote something like this........................
foreach( inst geGetEditCellView()~>instances
    when( inst~>purpose == "cell"
        if( inst~>libName == "gpdk090" then
            area()
        else
            label:
            cv1=dbOpenCellViewByType(inst~>libName inst~>cellName "schematic")
            foreach( inst1 cv1~>instances
                when( inst1~>purpose == "cell"
                    if( inst1~>libName == "gpdk090" then
                        area()
                    else
                        goto label
        ]
Can some body guide me in this way...
                Thanks in Advance...    
                                                                Prabhakar. K

  • Cancel
Parents
  • Andrew Beckett
    Andrew Beckett over 16 years ago

    Why are you using evalstring() all over the place, including with constants? For example, you are doing things like evalstring("0.56u") when you could just use 0.56u directly (engineering suffixes are understood in SKILL natively). In other places you're doing things like:

      evalstring(cdfFormatFloatString(dbGetq(inst "segL") "u"))

    I cannot fathom out why you're doing that. Reformatting a number to be in engineering suffixes, and then using evalstring on it? Why? If it's a string in the first place, just use:

      cdfParseFloatString(inst~>segL)

    Later on  you have:

      Ar=Ar+arear
      Ar1=atof(cdfFormatFloatString(artMakeString(Ar) "p"))

    You're converting to a string, reformatting to have a "p" suffix, and then using atof (which will ignore the suffix) back to a float again. Why?

    Anyway, your function area does not explicitly return anything - it will return the last thing computed in the fucntion, which will be the return value of the foreach. The return value of foreach will be the list it processed. Most likely I'd expect you to need to sum up the area of all the instances (including the return value of the recursive area() call within area()), and make that the return value. Look at what my pseudo code does - totalArea is the last statement in the function, and that will be the return value.

    Best Regards,

    Andrew.

    • Cancel
    • Vote Up 0 Vote Down
    • Cancel
Reply
  • Andrew Beckett
    Andrew Beckett over 16 years ago

    Why are you using evalstring() all over the place, including with constants? For example, you are doing things like evalstring("0.56u") when you could just use 0.56u directly (engineering suffixes are understood in SKILL natively). In other places you're doing things like:

      evalstring(cdfFormatFloatString(dbGetq(inst "segL") "u"))

    I cannot fathom out why you're doing that. Reformatting a number to be in engineering suffixes, and then using evalstring on it? Why? If it's a string in the first place, just use:

      cdfParseFloatString(inst~>segL)

    Later on  you have:

      Ar=Ar+arear
      Ar1=atof(cdfFormatFloatString(artMakeString(Ar) "p"))

    You're converting to a string, reformatting to have a "p" suffix, and then using atof (which will ignore the suffix) back to a float again. Why?

    Anyway, your function area does not explicitly return anything - it will return the last thing computed in the fucntion, which will be the return value of the foreach. The return value of foreach will be the list it processed. Most likely I'd expect you to need to sum up the area of all the instances (including the return value of the recursive area() call within area()), and make that the return value. Look at what my pseudo code does - totalArea is the last statement in the function, and that will be the return value.

    Best Regards,

    Andrew.

    • Cancel
    • Vote Up 0 Vote Down
    • Cancel
Children
No Data

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