• 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. Area calculation from layout in cadence 6.1.4

Stats

  • Locked Locked
  • Replies 14
  • Subscribers 128
  • Views 27397
  • 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

Area calculation from layout in cadence 6.1.4

kpkp
kpkp over 13 years ago

Hi all,

I have generated a layout in cadence virtuoso layout editor...but dont knw how to calculate the area of layout? please anybody can help me?
Thanx in advance...

  • Cancel
  • Andrew Beckett
    Andrew Beckett over 13 years ago

    Measure it (with the ruler, or just by reading coordinates off the banner) and multiply the width by the height.

    I presume you want something other than that (since that's rather obvious), but if so, you'll probably need to more clearly describe what you're after.

    Regards,

    Andrew.

     

    • Cancel
    • Vote Up 0 Vote Down
    • Cancel
  • kpkp
    kpkp over 13 years ago

    Thanks for your reply... Yes I have read the coordinates and they are 11*6. I think it is 11 lambda* 6 lambda = 66 (lamda)^2. But what is the value of lamda? How to know its value? Please reply me if you can bcoz I am having exams after three days...Thank you...

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

    How long is a piece of string? ;->

    If you're using a technology that uses "lambda rules", then the dimensions may well be in lambda - and you'd have to know what real technology that the design is being targetted for to know what the value of lambda is. 

    In most cases though your units are in microns though.

    If you're unsure, you should speak to your supervisor/tutor who will be more familiar with the specifics of what you're trying to do than somebody on a forum with little visibility of your project.

    Regards.,

    Andrew.

    • Cancel
    • Vote Up 0 Vote Down
    • Cancel
  • acom
    acom over 11 years ago

    HI Andrew,

    i have a related topic.

    we are going to caculare some layers' area.But you know, the shape of the layer is not  regular.i mean , the shape of them are not like rectangle or circle.so do we have any approximation method or function to caculte them?

    our cadence virtuoso version is 6.1.6.

    BTW, this is the most hilarous discussion i have read in the internet forum.That is also why i like this place.

    thanks for your patience. :)

     

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

    This function can be used. For a polygon it effectively "integrates over the boundary" (sort of).

    /***************************************************************
    *                                                              *
    *                       (abArea object)                        *
    *                                                              *
    *               Calculate the area of an object.               *
    *      Currently only works with polygons and rectangles.      *
    *                                                              *
    ***************************************************************/
    
    (procedure (abArea object)
      (let (sum crd lastPt firstPt crdList area corners ll ur dx dy objType)
            (setq objType (dbGetq object objType))
            (if (equal objType "polygon") 
                (progn
                 (setq crdList (dbGetq object points))
                 (setq sum 0)
                 (setq firstPt (setq lastPt (car crdList)))
                 (setq crdList (cdr crdList))
                 (foreach crd crdList
                          (setq dx (difference (xCoord crd) (xCoord lastPt)))
                          (setq sum (plus sum (times dx (plus (yCoord crd) (yCoord lastPt)))))
                          (setq lastPt crd))
                 (setq sum (plus sum
                                 (times (difference (xCoord firstPt) (xCoord lastPt))
                                        (plus (yCoord firstPt) (yCoord lastPt)))))
                 (setq area (times 0.5 (abs sum))))
                (when (equal objType "rect") 
                      (setq corners (dbGetq object bBox))
                      (setq ll (car corners))
                      (setq ur (cadr corners))
                      (setq dx (difference (xCoord ll) (xCoord ur)))
                      (setq dy (difference (yCoord ll) (yCoord ur)))
                      (setq area (abs (times dx dy))))
                )
           area))

     

    • Cancel
    • Vote Up 0 Vote Down
    • Cancel
  • acom
    acom over 11 years ago

    Hi Andrew, when i used the above script, there are some errors about format. so i tried to do some small changes about it. Thanks so much for you.

    procedure(LAYareaSize()
      let(
        (object objType
        )
       
        object = geGetSelectedSet()
        objT = car(object~>objType)
        println("s1")
        printf("objT is %s.\n" objT)
       
        if( objT == "polygon"
              then
         LAYpolyarea(object)
              else
                if( objT == "rect"
              then
         LAYrectarea(object)
       else
         printf("wrong shape.\n")
                     );;;**if**
              );;;**polygon**
          
           );;;
            
    );;;**procedure**
     
      
     
    procedure(LAYpolyarea(object)
       let(
         (object crdList sum firstPt lastPt dx sum
         )
         object=geGetSelectedSet()
         crdList = object~>points
         printf("the crdList is %L." crdList)
         sum = 0
         firstPt = lastPt = caar(crdList)
         crdList = cdar(crdList)
         printf("the firstPt is %L \n." firstPt)
         printf("the crdList is %L.\n" crdList)
           
         (foreach crd crdList
            dx = difference((xCoord crd) (xCoord lastPt))
            sum = (plus sum (times dx (plus (yCoord crd)(yCoord lastPt))))
            lastPt = crd
         );;;**foreach**  
                  
         sum = (plus sum (times (difference (xCoord firstPt) (xCoord lastPt))(plus (yCoord firstPt)(yCoord lastPt))))
         area = (times 0.5 (abs sum))
         printf("this polygon's area is %f.\n" area)
       );;;*let*
     );;;*procedure(LAYpolyarea)**
     
     
          
     procedure(LAYrectarea(object)
        let(
          (object ll ur dx corners     
          )
           object=geGetSelectedSet()
           corners = object~>bBox
           ll = caar(corners)
           ur = car(cdar(corners))
           dx = (difference (xCoord ll) (xCoord ur))
           dy = (difference (yCoord ll) (yCoord ur))
           area = (abs (times dx dy))
           printf("this rect's area is %f.\n" area)
         );;;**let**
      );;;**procedure(LAYrectarea)**
         

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

     Not sure why - I managed to cut and paste it just now and it worked perfectly...

    Andrew.

    • Cancel
    • Vote Up 0 Vote Down
    • Cancel
  • Guruprasad S
    Guruprasad S over 10 years ago
    Thank you very much Andrew & acom , it was much helpful for me :-)
    • Cancel
    • Vote Up 0 Vote Down
    • Cancel
  • seaurchin
    seaurchin over 10 years ago

    Hi, 

    Thank you for posting the code. 

    I was able to obtain the area of an object running the command Guruprasad posted. However, is there a way to return the total area of several geometries on a layout?

    Currently, if I select several geometries and run the command, it returns only the area of the first selected geometry.

    I appreciate any help I could get!

    Thank you and Regards,

    Helen

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

    Hi Helen,

    Maybe my code in this solution will help:

    Regards,

    Andrew.

    • 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