pin align

Discussion in 'Cadence' started by rick, Nov 2, 2009.

  1. rick

    rick Guest

    This message was posted 9 years ago and had no response. I have the
    same need, does anyone have a method to align the pins by the
    flightlines.


    I am looking for some sort of automatic method to place pins on their
    correxponding nets with virtuoso-XL. These pins are used to connect
    between different levels in the hierarchy. Sometimes in one layout we
    have hundreds of pins. In Virtuoso-XL, a flightline is drawn from the
    pin to the net it should be connected to. Is there a way to
    automatically move the pin so that it will be placed anywhere on the
    net (preferably towards the edge of the layout)? a routine/function
    that would place the pin at the spot where the flightline starts would
    be good. From there, it would be much easier to align the pin to
    exactly the right spot, if needed.
     
    rick, Nov 2, 2009
    #1
  2. rick wrote, on 11/02/09 18:49:
    VirtuosoXL has a function Place->Pin Placement which allows you to place pins
    along edges, and so on (in IC5141). In IC613 it's even more powerful, because
    you can also place pins in sub-blocks. You can also use alignment of pins to
    pins in sub-blocks and so on (and indeed alignment of pins in soft blocks to top
    level pins) - as part of the floorplanning capabilities in VLS-GXL.

    I don't think your requirements entirely made sense - moving the pin to place
    the pin where the "flightline starts" - surely that's where it is anyway, since
    the flightline will be drawn from the pin to connected objects?


    Regards,

    Andrew.
     
    Andrew Beckett, Nov 2, 2009
    #2
  3. rick

    rick Guest

    Actually it does have alot of value, think of the case at the block
    level you have a couple of hundred
    pins and a handful of blocks. After gen-from-source, the pins are
    scattered and scrabbled. In many
    cases especially at the top level chip integration level, the bulk of
    the connections will be a direct
    connection from block to pin. Wouldnt be nice to have a function
    that would "snap" the pin to to its
    connection. Pin placement is a big time overhead but is highly
    valuable especially in block abutment
    type of designs.

    Rick
     
    rick, Nov 3, 2009
    #3
  4. rick wrote, on 11/03/09 15:26:
    I now understand what you mean. You want the pin to be directly over the pin on
    the instance to which it is connected.

    There are two ends of the flightline - you meant the opposite end of the
    flightline from the pin (sorry, I didn't twig).

    I still think the pin placement stuff helps. There are also alignment options in
    IC613 which can do just want you want (I believe - I don't have time right now
    to try it out, but I'm pretty sure you could use the pin alignment to place the
    pins directly on top).

    Regards,

    Andrew.
     
    Andrew Beckett, Nov 3, 2009
    #4
  5. rick

    vlsidesign Guest

    <snip>

    Yes, this is possible to do. I did this via Skill programming. It took
    me quite a few lines of code.

    I don't know your familiarity with software programming. Personally, I
    am a Physical Design Engineer, and not a programmer, but it is
    possible to do some scripting even as a layout guy.

    Skill is pretty powerful and it seems to me it is similar to the Lisp
    language but with a C syntax (Cadence manuals mention something like
    this). If you are not able to program, then you may want to start out
    with a forgiving syntax language like Perl, or maybe even dive into a
    more strict language like C. That is what I did. I then picked up a
    Lisp book, because the Skill was a little strange to me. After
    perusing a Intro Lisp book, Skill made a lot of sense. From there, I
    just started messing with Skill programming. I don't have that much
    time to program, because I do layout, but once a year I get a slow
    period, and I can try of think of things to automate, and then I'll
    write a script.

    If you do decide to write a Skill script, then you will find tons of
    information here and especially with the Cadence manuals.. Good
    Luck!
     
    vlsidesign, Nov 6, 2009
    #5
  6. rick

    rick Guest

    Perhaps you could share your routine, Im sure others would love to
    have this also

    thanks
     
    rick, Nov 6, 2009
    #6
  7. rick

    vlsidesign Guest

    I am not the owner of the program, the company is.

    If you study and become an expert, then you will learn the whole
    paradigm and all the technical language, concepts, etc (I'm not
    there). But here are some pointers and tips for the layman and noob.

    Roughly speaking, your layout window and all the parts are objects
    that have various properties/values.
    For instance, go to your Cadence Virtuoso window, and open up and edit
    a XL compliant layout window, then
    1. select a path
    2. go to the CIW and type:
    myPath = css()
    3. go to the CIW and type:
    myPath~>??

    Now look at the output in the CIW. You can see from this, that the
    object has certain properties/values associated with them (somewhat
    similar to the Edit~>Properties GUI that you can change by hand). It
    has an objType, it should have a net. Now:

    4. go to CIW and type:
    myPath~>net~>??

    Now look at the net object, it also has properties, one of them is a
    name. Try doing this to instances and see what you get.
    -----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
    Here is roughly the thinking behind the program I created.

    a. Your layout has to be XL compliant because it uses pin and net
    information to work.
    b. You then generate your hundreds of pins in XL and see them along
    the bottom.

    c. Then you run the script.
    1. The script looks at the pins (top level pins along the bottom) to
    see what nets they are connected to.
    2. then it checks what instance pins (lower level pins that the
    instantiated cells have) are connected to the net.
    3. you then can get the instance's pins X/Y information to determine
    where to move the pin.
    4. It then calculates the top level pins current XY position and
    calculates the difference to where the pins on the instance are at,
    and moves them accordingly.

    That is roughly it in a nutshell. I added some additional operations
    like checking to see the layer purpose pair of the instance's pins and
    I automatically change the top level pin to that, and some other
    things like that. There are some other technical aspects that you will
    find it or get help on once you've started working on this. I've found
    a lot of answers in the manuals, and here. Andrew Beckett and others
    have posted quite a bit of stuff here.
     
    vlsidesign, Nov 6, 2009
    #7
  8. rick

    sg Guest

    Hi Rick,

    In Pin Placement GUI, if u select edge as "none", it should place pins
    as u expected.

    Thanks,
     
    sg, Nov 8, 2009
    #8
  9. rick

    cadman Guest

    Initially pins at the lower hierarchy are placed manually. However
    once there is a redundancy with pins up the hierarchy there can be a
    large advantage to having pins automatically generated and placed. IE:
    Padrings. We had a script developed by out PDK group that generates
    pins from instance pins at the lower level and will match the pin
    layer and font. If you have a CAD Engineer on your staff you can have
    that person generate that script. You just have to make sure you do
    not generate the pins from the schematic when involking Virtuoso -XL.
    Hop this helps !!
     
    cadman, Nov 24, 2009
    #9
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.