• 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. How to get rectilinear core coordinates

Stats

  • Locked Locked
  • Replies 10
  • Subscribers 94
  • Views 19469
  • 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 get rectilinear core coordinates

Nataraja G
Nataraja G over 14 years ago

 we got die coordinates using

dbGet top.fPlan.boxes 

 

but how to get core boxes  ? 

 

thx

  • Cancel
  • BobD
    BobD over 14 years ago

    These boxes aren't stored in the db directly so I can't show you an easy way to get the core boxes for a rectilinear design unfortunately.

    If you could share some information about what you're trying to accomplish maybe we could suggest another way to get you the data you're looking for.  For example you might want to query the standard cell row boxes instead of the overall core boxes with:

    dbGet top.fplan.rows

    Thanks,
    Bob

     

    • Cancel
    • Vote Up 0 Vote Down
    • Cancel
  • bharat kurra
    bharat kurra over 14 years ago

     

    Not exactly our intention is to draw a shield metal around our tile,we could draw it for rectangular tile by having the core coordinates...if we can get the core cooridinates for a rectilineartile also....our job is done

    Thanx

    Bharat kurra

    • Cancel
    • Vote Up 0 Vote Down
    • Cancel
  • jgentry
    jgentry over 14 years ago

    If having the points associated with the polygon that surrounds the core box would be helpful, you could process the coordinates that come back from 'dbGet top.fplan.rows.box'.  For instance:

    unset -nocomplain polys points
    foreach rect [dbGet top.fplan.rows.box] {
      foreach {llx lly urx ury} $rect {break}
      foreach x [list $llx $urx] {
        foreach y [list $lly $ury] {
          if {! [info exists points($x,$y)]} {
            set points($x,$y) 0
          } else {
            incr points($x,$y)
          }
        }
      }
    }
    foreach xy [array names points] {
      if {$points($xy) == 0} {
        lappend polys [split $xy ,]
      }
    }


    ...Now the 'polys' list contains the points corresponding to the core polygon. 

    Jason

    • Cancel
    • Vote Up 0 Vote Down
    • Cancel
  • BobD
    BobD over 14 years ago

    In our 10.1 release, we'll have a multi-purpose geometric shape processing command which would be helpful in this scenario.  Until then, I hope a scripted approach like JasonG's will get you the information you're seeking.

    10.1 is due out later this year.

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

    Hello,

    Oddly enough I have a need for getting the same list of coordinates and was able to use this script to generate them. But ... of course there is always a but.

    But now that I have the list of points that are returned in $polys I was trying to pass this list to create a rectilinear partition using something like this:

    setObjFPlanPolygon Module MODULENAME $polys

    but the setObj* cmd does not like the list I passed it. I think part of the problem is that the list that is returned in $polys is not in rectilinear order going around the shape; it has the list of points basically but they may not be sorted rectilinearly.

    BobD, you mentioned some commands in 10.1 that might help with multi-purpose shape processing. Can you shed more light on what these commands are and if they might possibly help here?

    Tom 

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

    Hi Tom,

    Thanks for giving us all a reason to come back and revisit this issue after some time has passed and the tool has improved.

    dbShape is the command that debuted in 10.1 that makes this easier. Here's how you could use it to define a rectilnear partition that is coincident with the rectilinear shape that makes up all of the rows in the design. Say I have an "L" shaped design and the core to left/right/top/bottom is 5 microns. The rows get snapped (depending on preferences) to something like the M2 pitch horizontally and the standard cell rows vertically. If we want to get the box of each row:

    encounter 1> dbGet top.fplan.rows.box
    {5.28 5.04 94.38 10.08} {5.28 10.08 94.38 15.12} {5.28 15.12 94.38 20.16} {5.28 20.16 94.38 25.2} {5.28 25.2 94.38 30.24} {5.28 30.24 94.38 35.28} {5.28 35.28 94.38 40.32} {5.28 40.32 44.88 45.36} {5.28 45.36 44.88 50.4} {5.28 50.4 44.88 55.44} {5.28 55.44 44.88 60.48} {5.28 60.48 44.88 65.52} {5.28 65.52 44.88 70.56} {5.28 70.56 44.88 75.6} {5.28 75.6 44.88 80.64} {5.28 80.64 44.88 85.68} {5.28 85.68 44.88 90.72}

    Then we can merge these shapes with dbShape:

    encounter 11> dbShape [dbGet top.fplan.rows.box]
    {44.88 5.04 94.38 40.32} {5.28 5.04 44.88 90.72}

    dbShape has a lot of other functionality but when called here it can find a simple list of boxes that represent a list of shapes. It can also output polygons instead, but there's a dbSetObjFPlanBoxList command that can accept a list of rectangles to create a rectilinear shape so I'll use that.

    Notice this problem that comes up however:

    encounter 15> setObjFPlanBoxList Module i_a [dbShape [dbGet top.fplan.rows.box]]           
    No help is available for 'rdaGetBoxList'.
          You might have typed the command name incorrectly
          (command names are case sensitive), or this is an
          unknown or unsupported command.

    **ERROR: (ENCSYC-194):  Incorrect usage for command 'rdaGetBoxList'.

    What's happening is that setObjFPlanBoxList expects a flat list of coordinates rather than lists. If we flatten the list with "join", setObjFPlanBoxList successfully 

    encounter 16> setObjFPlanBoxList Module i_a [join [dbShape [dbGet top.fplan.rows.box]]]

    Looks like we need to improve setObjFPlanBoxLists's tolerance to accept list of lists and in the mean time improve the error messaging. Longer term it might also make sense to allow dbSet to set the "boxes" value directly. I'll check with our developers and push for improvements.

    Let us know if you have any comments or questions on this.

    Thanks!
    -Bob

    • Cancel
    • Vote Up 0 Vote Down
    • Cancel
  • Kevin P Thomas
    Kevin P Thomas over 13 years ago

    dbGet top.fPlan.corebox will give the core box coordinates.

    But this can be used for block level implementation.

    In Chip sometimes the core box will be overlapping with the IO cells. 

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

    Hi Bob,

    Thank you very much for your quick response and sorry I did not reply back sooner. This forum thread has been very helpful to provide a means for setting a rectilinear shape on a partition module in our design.

    Your response to my bump to the thread showing the use of dbShape and the subtle error you got with setObjFplanBoxList and the related use of join gave me exactly what I needed to try and it worked.

    One side comment. So in your response you used setObjFplanBoxList rather than the setObjFplanPolygon I had showed in my post but I did not catch this detail despite you mentioning that you chose *BoxList since "can accept a list of rectangles". I typed in your example cmds in my real design understanding them individually and then the final one, etc. and it all worked. But then I went to my TCL code where I had my previous *Polygon and did not change that but instead just passed everything else after that; I didn't really notice you had used a different function and of course it did not work. I quickly noticed the difference and now have it working in our TCL code.

    It makes me wonder if there are any good useful primers on the differences in how polygons or lists or lists of list can be used in FE TCL in difference cases, I suppose with a focus on physical shapes and coordinates and if not it might be a potential blog post idea. Even the subtle join thing I still have not fully tried to appreciate.

    One other observation is that this post thread just like others often originates back in time from earlier versions of EDI and as I look at other useful blog/forum posts on use of dbGet, etc. sometimes will see "this proc had an issue with this aspect and we are planning improvements in upcoming release. Maybe some of those posts will get bumped in a similar way in case the newer EDI versions have been enhanced to do things better than before.

    Thanks again everyone for this thread and your suggestions!

    Regards,

    Tom

    • Cancel
    • Vote Up 0 Vote Down
    • Cancel
  • Nataraja G
    Nataraja G over 13 years ago
    polys is having the END coordinates but the order is not correct because the order in polys depends on the order of the list [array names points] !! Can you check this ?
    • Cancel
    • Vote Up 0 Vote Down
    • Cancel
  • Nataraja G
    Nataraja G over 13 years ago
    The above comment is inline with Jason's message "If having the points associated with the polygon that surrounds the core box would be helpful, you could process the coordinates that come back from 'dbGet top.fplan.rows.box'. For instance: unset -nocomplain polys points foreach rect [dbGet top.fplan.rows.box] { foreach {llx lly urx ury} $rect {break} foreach x [list $llx $urx] { foreach y [list $lly $ury] { if {! [info exists points($x,$y)]} { set points($x,$y) 0 } else { incr points($x,$y) } } } } foreach xy [array names points] { if {$points($xy) == 0} { lappend polys [split $xy ,] } } ...Now the 'polys' list contains the points corresponding to the core polygon. Jason "
    • 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