Skill: Multipart shape ?

Discussion in 'Cadence' started by bedoune, Mar 6, 2008.

  1. bedoune

    bedoune Guest

    hi,

    I have a small question, in skill, again !

    do you think possible to create a kind of multipart shape ?

    For example, i would like to create a multipart shape which:
    -add automatically implant, diff, contacts and metal (like a multipart
    path)

    -can be "stretchable" (i don't know if this term is correct,
    gomennasai) in X and Y

    -and after a strech, it will automatically re-calculate the number of
    contacts to fit the new size.


    so ... am i dreaming or is it possible ? If possible, may someone give
    me the main idea on how to ?

    Thanks and regards,

    b.
     
    bedoune, Mar 6, 2008
    #1
  2. rodCreatePath() or rodCreateRect().

    Please check the Relative Object Design manual...

    Regards,

    Andrew.
     
    Andrew Beckett, Mar 6, 2008
    #2
  3. bedoune

    bedoune Guest

    Hi,

    Thank you for your answer.
    I found the documentation on Rod objects.

    So i try to make a multipart rectangle, with 3 rectangles of
    differents layers ( Implant + Active + Metal 1 ) and contacts.

    I have defined Metal 1 as "main" rectangle, the others are defined as
    "subrectangles".
    I don't have any issues with contacts, but i got an error message in
    CIW for the others layers

    *Error* cadr: argument #1 should be a list (type template = "1") - 0.

    This error appears if i don't use the ?spaceX and ?spaceY options.

    But i need to overlay my differents layers. Putting a spacing is a
    problem for me in case of stretch ...

    so i defined: ?spaceX = 0 and ?spaceY = 0 , but i got the same error
    in CIW.


    How to solve this problem ? If someone have any idea, please let me
    know !

    Thanks and regards,

    b.
     
    bedoune, Mar 10, 2008
    #3
  4. bedoune

    S. Badel Guest

    b.,

    the error appears with *and* without the ?spaceX and ?spaceY arguments. So it mustn't be related to
    them, right ?

    it's most probably a typo or misuse of the function. the first thing to do is carefully check your
    function call, verify values of the arguments etc. ; i can't help finding you are relying very much
    on this newsgroup to solve your problems instead of you.

    if you really can't find the answer by yourself, or can't figure what you're doing wrong, *at least
    paste the faulty part of your code into your post*. how do you expect someone to figure the error
    based solely on the very generic error message ?


    regards,
    Stéphane
     
    S. Badel, Mar 10, 2008
    #4
  5. bedoune

    bedoune Guest

    Stephane,


    Indeed, maybe the description of my problem was a little bit succinct.
    I apologize ...

    Actually, if ?spaceX or ?spaceY are missing or values equal to 0, i
    get an error message in CIW.
    If ?spaceX or ?spaceY are different from 0 (for example 0.005) my code
    works.


    so i guess my code is correct... but if you have any idea ...

    Here a cut/paste of a part of my code. I call this part from
    rodCreateRect, in option ?subRectArray

    LayerMet = list(
    ?layer list(Met Purpose)
    ?width ShapeWidth
    ?length ShapeLength
    ?lowerLeftOffsetX 0
    ?lowerLeftOffsetY 0
    ?upperRightOffsetX 0
    ?upperRightOffsetY 0
    ?gap "distribute" <--- I want to remove this line
    ?spaceX 0.005 <--- I want to remove this line
    ?spaceY 0.005 <--- I want to remove this line
    )


    Last point: I'm sorry to nag so much people in this newsgroup. but i'm
    a beginner in skill programming. I don't know how to use the functions
    described in the documentation. For example, option ?bBox l_bbox.
    what kind of list is l_bbox ?? In my docs, i don't have anything
    about it . But if you have some interesting links to helpful docs ...

    Regards,

    b.
     
    bedoune, Mar 10, 2008
    #5
  6. bedoune

    S. Badel Guest

    Actually, if ?spaceX or ?spaceY are missing or values equal to 0, i
    Actually, the documentation specifies that spaceX and spaceY should be *positive* integer or
    floating point, meaning zero is not an option. If you omit them, default values are taken from the
    technology data (minSpacing for the specified layer). Seems that's where the error comes from,
    though it's not obvious at first sight.

    The idea is, subrectangles are supposed to be replicated in x and y direction within the shape, what
    you're trying to do is have multiple shapes on top of each other, right ?

    I suppose there's no way to obtain that with a single rod rectangle ; however what you can do is
    create multiple rectangle and align them, i.e.

    rect1 = rodCreateRect( ?layer "MET1" ... )
    rect2 = rodCreateRect( ?layer "MET2" ?fromObj rect1 )
    rodAlign( ?alignObj rect2 ?refObj rect1 )

    That will allow the two shapes to stay aligned. It's not bulletproof, however ; one can still be
    resized without the other.

    Another option is to go for a pcell, but pcells have their own drawbacks.

    No misunderstanding. That's what this place is for, I suppose, so... you don't have to be sorry.
    I'm merely suggesting that a little hands-on would probably lead you to find most solutions by
    yourself, and the first one to benefit is yourself.


    Cheers,
    Stéphane
     
    S. Badel, Mar 10, 2008
    #6
  7. bedoune

    rickm Guest


    Yes it is possible and the code is below. It does have some
    limitations but should be a good starting point. You
    will need to change your target library and correct layer names.

    Good Luck!

    Rick



    pcDefinePCell(list(ddGetObj("<target_lib>") "pSubStretch" "layout")

    (
    (xDistance 7.0)
    (yDistance 7.0)
    (layer "<pImp>")
    )


    ; Create the rectangle.
    theRect = rodCreateRect(
    ?cvId pcCellView
    ?layer list(layer "drawing")
    ?width xDistance
    ?length yDistance
    ?subRectArray
    list(
    list(?layer "m1"
    ?spaceX 0.2
    ?spaceY 0.2
    ?width xDistance-0.2
    ?length yDistance-0.2

    )
    list(?layer "diff"
    ?spaceX 0.9
    ?spaceY 0.9
    ?width xDistance-0.2
    ?length yDistance-0.2
    )
    list(?layer "cont"
    ?lowerLeftOffsetX 0.4
    ?lowerLeftOffsetY 0.4
    ?upperRightOffsetX -0.4
    ?upperRightOffsetY -0.4
    )

    )

    )
    rodAssignHandleToParameter(
    ?moveOrigin t
    ?stretchType "relative"
    ?parameter "xDistance"
    ?rodObj theRect
    ?stretchDir "X"
    ?handleName "centerRight"
    ?displayName "xDistance"
    )
    rodAssignHandleToParameter(
    ?moveOrigin t
    ?stretchType "relative"

    ?parameter "yDistance"
    ?rodObj theRect
    ?stretchDir "Y"
    ?handleName "upperCenter"
    ?displayName "yDistance"
    )
    rodAssignHandleToParameter(
    ?moveOrigin t
    ?stretchType "relative"

    ?parameter "xDistance"
    ?rodObj theRect
    ?stretchDir "X"
    ?handleName "centerLeft"
    ?displayName "xDistance"
    )
    rodAssignHandleToParameter(
    ?moveOrigin t
    ?stretchType "relative"

    ?parameter "yDistance"
    ?rodObj theRect
    ?stretchDir "Y"
    ?handleName "lowerCenter"
    ?displayName "yDistance"
    )

    )
     
    rickm, Mar 10, 2008
    #7
  8. S. Badel wrote, on 03/10/08 13:29:
    Stephane's right. You don't have enclosure rectangles, only sub-rectangles (to
    use the equivalent MPP terminology). You just have to create multiple rectangles.

    Regards,

    Andrew.
     
    Andrew Beckett, Mar 10, 2008
    #8
  9. bedoune

    bedoune Guest

    Hi,

    Thank you all for your answers.

    Actually, i found on another website that 'my' cadence needs some
    patches to make skills working properly.


    rodCreateRect does not work if ?spaceX and ?spaceY are not specified

    Error Message:
    Error message in CIW:

    *Error* cadr: argument #1 should be a list (type template = "l") - 0

    Solution:
    When ?spaceX and ?spaceY are not specified, ROD command is supposed to
    get the
    minSpacing rule form the techfile. In IC61, the minSpacing rule for
    METAL1 is found
    in the spacing rule table section. There was a problem whereby the
    command was not
    looking in the correct section of the techfile for the minSpacing
    rule. This problem
    has been fixed in IC6.1.1.500.20 and up. It is no longer necessary to
    specify
    ?spaceX and ?spaceY for creating MPR.


    But Andrew, Stephane, do you mean, even with the bug fixes, i won't
    be able to create 2 resizables metals layers with subrect. (with
    rodCreateRect) ?? Too bad (;_;)

    thank you Rick for your code. I'm going to study it and try it.

    thank you all for your precious help ^^

    regards,

    b.
     
    bedoune, Mar 13, 2008
    #9
  10. Actually, thinking about it, you can have just one big rectangle - you just need
    to specify the size big enough, I think...

    Regards,

    Andrew.
     
    Andrew Beckett, Mar 13, 2008
    #10
Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments (here). After that, you can post your question and our members will help you out.