• 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. Skill code For designing layout for five different metal...

Stats

  • Locked Locked
  • Replies 6
  • Subscribers 149
  • Views 11577
  • 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

Skill code For designing layout for five different metal layers vias arranged in both X and Y axis.

atiwari
atiwari over 3 years ago

Hello: 

I am new to skill Programming. I want to design a layout using skill in which i want to use five different metals in both direction following a certain distance. I am able to do it with single metal layers but how can i do it with five different metal layers?

  • Cancel
Parents
  • mbracht
    mbracht over 3 years ago

    Hi,

    I'am not exactly sure what you mean with "use five different metals in both direction" but maybe you can share you code for the single metal layers so as I better understand what you want to achieve...

    Max

    • Cancel
    • Vote Up 0 Vote Down
    • Cancel
Reply
  • mbracht
    mbracht over 3 years ago

    Hi,

    I'am not exactly sure what you mean with "use five different metals in both direction" but maybe you can share you code for the single metal layers so as I better understand what you want to achieve...

    Max

    • Cancel
    • Vote Up 0 Vote Down
    • Cancel
Children
  • atiwari
    atiwari over 3 years ago in reply to mbracht

    rc = rodFillBBoxWithRects(
    ?cvId cv
    ?layer "M1"
    ?fillBBox list( 1:1 12:6 )
    ?width 2.0
    ?length 1.0
    ?gap "minimum"
    ?spaceX 0.7
    ?spaceY 0.7
    ?returnBoolean t
    ) ; end rodFillBBoxWithRects

    Here i am using just one metal layer but how can change the layers to 4 different layers like M1, M2, LB, LV for each boxes following a certain distance of 500nm and dimension of each metal box should be .1*.1

    • Cancel
    • Vote Up 0 Vote Down
    • Cancel
  • mbracht
    mbracht over 3 years ago in reply to atiwari

    oh I see - you are using rodFillBBoxWithRects(). Well rodFillBBoxWithRects() doesn't provide that functionality. So in a second step you'd have to iterate over all (only just created...) rectangles and then change the layers to whatever you like. Identifying these rectangles would be easy - you can assign a user defined property to them in rodFillBBoxWithRects() with the keyword argument ?prop, for example ?prop list("myProp" t):
    (setof shape cv->shapes shape->myProp)

    Moreover make sure you iterate over the rectangles in the right order - row by row and column by column. For example you could sort the rectangles by the coordinates of the lower left point of their bounding boxes.
    (sort (setof shape cv->shapes shape->myProp)
       (lambda (s1 s2)
          (let  ( (x1 (xCoord (car s1->bBox)))
                   (x2 (xCoord (car s2->bBox)))
                   (y1 (yCoord (car s1->bBox)))
                   (y2 (yCoord (car s2->bBox))))
             (cond
                (y1==y2
                   (if x1<=x2 t nil))
                (y1<=y2 t nil)))))

    Since I don't know what rows/cols should you want on which layer I cannot provide the remaining code which is essentially a loop that iterates over the list returned by the above sort() function.

    Max

    • Cancel
    • Vote Up 0 Vote Down
    • Cancel
  • atiwari
    atiwari over 3 years ago in reply to mbracht

    Hey Max: Thank you for the response. I want  M1, M2 , M3, M4 ,M5  in one ROW  following by 500nm distance  in both rows and columns. I want 3 row and 5 columns. 

    • Cancel
    • Vote Up 0 Vote Down
    • Cancel
  • mbracht
    mbracht over 3 years ago in reply to atiwari

    shapes = (sort (setof shape cv->shapes shape->myProp)
       (lambda (s1 s2)
          (let  ( (x1 (xCoord (car s1->bBox)))
                   (x2 (xCoord (car s2->bBox)))
                   (y1 (yCoord (car s1->bBox)))
                   (y2 (yCoord (car s2->bBox))))
             (cond
                (y1==y2
                   (if x1<=x2 t nil))
                (y1<=y2 t nil)))))

    (while shapes
       (foreach layerName '("M1" "M2" "M3" "M4" "M5))
          shape=(car shapes)
          shape->layerName = layerName
          shapes = (cdr shapes)))

    The above code works only under the condition that you have in fact 3 rows and 5 columns - so it is up to you to take care of this in the rodFillBBoxWithRects(..) function.

    • Cancel
    • Vote Up 0 Vote Down
    • Cancel
  • atiwari
    atiwari over 3 years ago in reply to mbracht

    Thank you

    • 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