select via array

Discussion in 'Cadence' started by rick, Jan 27, 2010.

  1. rick

    rick Guest

    I need select via arrays of different column/rows so I can change the
    spacing and count due to a wide
    metal rule violation. The search that works is for via by name which
    wont allow me to select specific
    configurations. Does anyone have a skill routine or something so I
    can selective select the arrays?

    Thanks

    Rick
     
    rick, Jan 27, 2010
    #1
  2. rick wrote, on 01/27/10 22:39:
    Rick,

    Which version are you using? vias are represented very differently in IC5141 and
    IC61X, so it's important to know that before anyone may be able to help.

    Regards,

    Andrew.
     
    Andrew Beckett, Feb 3, 2010
    #2
  3. rick

    rick Guest

    HI Andrew - didnt know that.....Im still using IC51

    Rick
     
    rick, Feb 3, 2010
    #3
  4. rick

    I-F AB Guest

    Hi,

    I've got a code for ICFB5.141 to select only vias in the layout top
    cell:
    --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
    cvID = hiGetCurrentWindow()~>cellView
    tfID = techGetTechFile(cvID)
    CutDevs = techGetDeviceInClass(tfID "syContact"
    "symbolic") /*get list of contacts from techfile*/

    SEL =
    list() /
    *initialize*/
    foreach( INST
    cvID~>instances /
    *get list of instances*/
    when( member(INST~>cellName
    CutDevs) /*check which are
    vias*/
    SEL = cons( INST SEL )
    ) ;when
    ) ;foreach
    --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

    This code is quite laborious at it checks each instance in the layout.
    Mind you, the techfile has to have definition of symContactDevice() to
    work and the vias have to be those created using "Create > contact"
    command (or the 'o' default Virtuoso bindkey).

    Now, the next step is to differentiate between which vias have column/
    row properties greater than a certain value e.g. row > 4 or column >
    4.
    I'll get to that part in a while since the only way I can see is by
    accessing "INST ~> prop ~> value" and "INST ~> prop ~> name"
    which seems messy. I'll get to this later.

    Anyone got any other method?

    Best regards,
    I-FAB
     
    I-F AB, Feb 5, 2010
    #4
  5. rick

    I-F AB Guest


    OK, the next half of the code is as follows:
    --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
    RowCol_FLAG = 4
    SEL_2 = list()
    foreach( INST SEL
    CHECK_CR = nil
    when( member("row" INST~>prop~>name)
    RowPos = length(INST~>prop) - length(member("row"
    INST~>prop~>name))
    RowVal = nth(RowPos INST~>prop~>value)
    when( RowVal >= RowCol_FLAG
    CHECK_CR = 1
    ) ;when
    ) ;when
    when( member("column" INST~>prop~>name) && !CHECK_CR
    ColPos = length(INST~>prop) - length(member("column"
    INST~>prop~>name))
    ColVal = nth(ColPos INST~>prop~>value)
    when( ColVal >= RowCol_FLAG
    CHECK_CR = 1
    ) ;when
    ) ;when
    when(CHECK_CR SEL_2 = cons( INST SEL_2) ) ;when
    ) ;foreach
    --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

    Pretty messy, huh?
    But that's what I have at the moment.
    For the list of vias that was targeted, print variable SEL_2.
    Since my comments aren't put in properly, I'll explain here.

    RowCol_FLAG :- minimum no. of rows/columns accepted to select
    CHECK_CR :- marks if the current via needs to be selected or not
    RowPos/ColPos :- since position of properties "row" & "column" vary in
    the 'INST~>prop~>name' list, a marker is needed so that the value
    from 'INST~>prop~>value' is according to 'INST~>prop~>name'.
    RowVal/ColVal :- value for property "row" & "column" respectively

    Best regards,
    I-FAB
     
    I-F AB, Feb 5, 2010
    #5
  6. rick

    rick Guest

    WOW!!!! can I just append the top half with the second half?

    Thanks for all of your effort!!!!

    Rick
     
    rick, Feb 8, 2010
    #6
  7. rick

    I-F AB Guest

    Hi,

    The bottom code is a continuation of the top-half, so you can just
    append them together but you have to try it first to see if it works
    without errors.
    I'm trying to make the code technology independent but this is the
    most I can do for now.

    Best regards,
    I-FAB
     
    I-F AB, Feb 9, 2010
    #7
  8. rick wrote, on 02/03/10 15:52:
    I think this will do what you want. Apologies if it got line wrapped

    /* abFindContacts.il

    Author A.D.Beckett
    Group Custom IC (UK), Cadence Design Systems Ltd.
    Language SKILL
    Date Feb 09, 2010
    Modified
    By

    Written for IC5141. Simple function to search
    for contacts with a particular configuration.

    abFindContacts(?row 2 ?column 3)

    abFindContacts(?cellName "M1_M2" ?column 4)

    Can specify row, column, cellName - or any combination.

    Could select them by doing:

    foreach(fig abFindContacts(?row 2 ?column 2) geSelectFig(fig))

    ***************************************************

    SCCS Info: @(#) abFindContacts.il 02/09/10.11:09:09 1.1

    */

    procedure(abFindContacts(@key (cellView geGetEditCellView()) row column cellName)
    setof(inst cellView~>instances
    leIsContact(inst) &&
    (!row || (inst~>row || inst~>master~>superMaster~>parameters~>row)==row) &&
    (!column || (inst~>column ||
    inst~>master~>superMaster~>parameters~>column)==column) &&
    (!cellName || inst~>cellName==cellName)
    )
    )
     
    Andrew Beckett, Feb 9, 2010
    #8
  9. rick

    I-F AB Guest

    This is great!
    I wasn't aware of "leIsContact" - my code footprints can definitely be
    cut in half (memory & time)!
    :-D

    Best Regards,
    I-FAB
     
    I-F AB, Feb 10, 2010
    #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.