moving via pcells to the topmost level

Discussion in 'Cadence' started by SS, Dec 5, 2008.

  1. SS

    SS Guest

    I want to move all the via pcells from every level of the cell
    hierarchy to the topmost level .

    How can I do this.

    Thanks,
    Srriram
     
    SS, Dec 5, 2008
    #1
  2. SS wrote, on 12/05/08 14:44:
    Why do you want to do this? It's not going to be that easy, as you'd have to
    modify each cell down in the hierarchy and remove the vias, and re-instantiate
    them at the top level.

    Andrew.
     
    Andrew Beckett, Dec 24, 2008
    #2
  3. SS

    jimka Guest

    hi andrew, you're right, it is pretty difficult, but with the right
    tools it is easier.
    I also wonder why Srriram would like this, but perhaps the following
    simple
    solution will help????

    (1) you need a skill function (Srriram_getTransform) that takes an
    instance list such as a list of which is returned
    from dbGetOverlaps and returns the transform to be used with
    dbMoveFig. Srriram_getTransform has to work
    on mosaics.
    if there were no mosaics the function would look something like the
    following...

    (defun Srriram_getTransform (path) ;; untested
    (if (atom path)
    '((0 0) "R0")
    (dbConcatTransform (car path)~>transform
    (Srriram_getTransform (cadr
    path)))))

    However to work with mosaics the function must be quite a bit more
    complicated and different
    for CDBA and OpenAccess.

    (2) you need a skill function (Srriram_isViaPcell?) which will match
    "via pcells"; the customer will have to decide
    a necessary and sufficient condition for being a "via pcell".

    (3) a function (Srriram_bottomObj) which takes an instance path and
    returns the bottom object. this function basically keeps calling cadr
    until it finds an atom.

    (defun Srriram_bottomObj (obj) ;; untested
    (if (atom obj)
    obj
    (Srriram_bottomObj (cadr obj))))

    (4) the following loop will do the moves

    (defun Srriram_moveup_via_pcells (cv) ;; untested
    (foreach path (dbGetOverlaps cv cv~>bBox t 1:32)
    (when (Srriram_isViaPcell? (Srriram_bottomObj path))
    (dbReopen cv "a")
    (dbMoveFig (Srriram_bottomObj path) cv (Srriram_getTransform
    path)))))




    Of these function, Srriram_getTransform, is quite tricky to write
    correctly.
    but maybe the example above is helpful.

    -jim
     
    jimka, Jan 15, 2009
    #3
  4. jimka wrote, on 01/15/09 23:48:
    Jim,

    Generating the transform itself is not too difficult (although mosaics as you
    say complicate matters a bit). The trouble is that you can't just do a dbMoveFig
    (as you've done) because you may well have multiple instances of the same cell
    (at some various levels of hierarchy), and so you need to create a copy in the
    top cell for each and every occurrence of the via, before deleting it in the
    leaf cell.

    Then you'd end up with the case that you have some other design which references
    the same leaf cells, and now the vias have gone.

    So it just struck me as a rather bizarre requirement...

    Andrew.
     
    Andrew Beckett, Jan 16, 2009
    #4
  5. SS

    SS Guest

    Hi Andrew/Jimka,

    Sorry havent been checking this forum for quite sometime. I was able
    to use dbMoveFig with translated coordinates. however it was time
    consuming.

    Thanks,
    Sriram
     
    SS, Jan 19, 2009
    #5
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.