• 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. dbLayerTile need help

Stats

  • Locked Locked
  • Replies 12
  • Subscribers 127
  • Views 17443
  • 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

dbLayerTile need help

lrl1skdev
lrl1skdev over 16 years ago

Hi everyone,

 I am writing a code where i needed to fracture layers vertically and horiontally. I used dbLayerTile to fracture them vertically and I created my own version that fracture layers horiontally since I could not find anything in the documantation that do this job. My problem is I wanted to boost the performance of the code so my first thought is to rotate them by 90deg and then execute dbLayerTile a second time then bring them altogether to their original position. But how to write this in a code in a simplest way still puzzles me.

Any suggestions?

  • Cancel
  • Bernd
    Bernd over 16 years ago

    You probably could use 'leChopShape', if you are not going to use it within a PCell.

    leChopShape( d_shapeId l_points g_closed [ g_remove ] [ x_sides ] )
         => l_newShapes | nil


    Cuts the shape d_shapeId using the chop shape l_points.

    • Cancel
    • Vote Up 0 Vote Down
    • Cancel
  • lrl1skdev
    lrl1skdev over 16 years ago

    Thanks Bernd for the quick reply.

    Yes you were right, this is exactly what i have done in my code. Now I have already discarded to used dbLayerTile in my code, instead I made a sub routine that fractures a target dbobj both horizontal and vertical using leChopShape. now my code looks much simplier.

    by the way, we are both from unterhaching, I'm from fasanenpark.

    • Cancel
    • Vote Up 0 Vote Down
    • Cancel
  • prandi
    prandi over 12 years ago

     Is there any comamnd in skill which splits a polygon into max of 2 rectangles.

    I am writing a skill code which needs stretch  all the poly gates by fixed distance and hence entire layout should move accordingly maintaining others shapes like contacts lengts/widths as constant..can anyone help me of how to  go with this?

     Thanks & Regards,

    prani

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

    What's wrong with dbLayerTile? Obviously if the polygon is not rectangular or L-shaped, it can't be fractured into only two rectangles, but apart from that, surely that does what you want?

    Regards,

    Andrew.

    • Cancel
    • Vote Up 0 Vote Down
    • Cancel
  • prandi
    prandi over 12 years ago

     Andrew,

    In few cases, poly is getting fractured into more than two rectangles and all the polys(specially polys of "polygon" lpp) are not getting stretched by same length(say 0.015),I dont know how to overcome this and make my code work properly.

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

     It's not that clear to me why you need to fracture it or precisely what you're trying to do - maybe some pictures would help (you can upload a picture via the "Options" tab at the top). 

    Alternatively there are various easily found algorithms for fracturing or decomposing a polygon into rectangles - do a google search for "algorithm to tile polygon with rectangles". However, this is almost certainly overkill if it's an L-shaped polygon - you should be able to detect that reasonably easily and split it yourself. Off the top of my head, without thinking about it enough to be sure that this is correct, I'd say you could do something like this:

    1. Ensure that the polygon has 6 points and all angles are 90 degrees (i.e. each successive point only changes the x or y but not both from the last point)
    2. Find the bBox of the polygon (the database will return this for you via ~>bBox, but it's easy to compute)
    3. Look for a point that is not on one of the four corners of the bounding box, and then that's the point at which you chop the polygon into two (extend the line from the point you've found in the direction of the next point which is not on the bBox corners). That next point will also give you the start of the second rectangle.

    This is all relatively straightforward to solve.

    Regards,

    Andrew.

    • Cancel
    • Vote Up 0 Vote Down
    • Cancel
  • prandi
    prandi over 12 years ago

    Andrew,

    Finally,I am writing a skill code which increases poly length by 0.015 for the picture attached.

    I used

    polys=setof(sh cv~>shapes sh~>lpp==list("poly" "drawing"))

    dblayerTile(cv "active"  polys)

    but all the polys are getting increased by 0.015,in few cases there is an increase of 0.01(which is double)

    so,I dont know how to go about it. 

    • snapshot1.png
    • View
    • Hide
    • Cancel
    • Vote Up 0 Vote Down
    • Cancel
  • Andrew Beckett
    Andrew Beckett over 12 years ago

    Wouldn't it be easier to find the bBox of all the poly, widen that bBox a bit, use dbLayerSize to increase the size of the poly by a certain amount and then And it with the enlarged bBox (to chop off any oversizing at the top and bottom)?

    Something like that?

    Andrew.

    • Cancel
    • Vote Up 0 Vote Down
    • Cancel
  • prandi
    prandi over 12 years ago

     And using dbLayerAnd?..ilooks like dbLAyerAnd ts not working out/expected result..

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

    dbLayerAnd should work fine - that was what I meant by "And".

    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