Weird SKILL association table behaviour.

Discussion in 'Cadence' started by I-F AB, Feb 11, 2010.

  1. I-F AB

    I-F AB Guest

    Hi,

    I've got some weird results when creating a pcell.
    When using rodCreatePath(), I used the ?size option as below:
    -------------------------------------------------------------------------------------------------------------------------------------
    ?size ;B spacing + 1/2 width
    max(techInfo[M1]->minSpa -techInfo[M1]->encOD + techInfo[NP]-
    techInfo[NP]->encOD - techInfo[M1]->encOD) +
    (RING + 1/2.0)*M1Ring +
    ;C spacing + 1/2 width
    RING*( max(techInfo[M1]->minSpa -techInfo[M1]->encOD +
    techInfo[PP]->spaOD + techInfo[PP]->encOD -
    techInfo[M1]->encOD) )
    -------------------------------------------------------------------------------------------------------------------------------------

    This resulted in the error below:

    *Error* eval: not a function - max((techInfo[M1]->minSpa) ((-& + (&-

    So what I did was to create a variable to do the max() operation
    outside the rodCreatePath() function, and use this variable instead,
    i.e. :
    -------------------------------------------------------------------------------------------------------------------------------------
    BSpacing = max(techInfo[M1]->minSpa -techInfo[M1]->encOD +
    techInfo[NP]->spaOD + techInfo[NP]->encOD -
    techInfo[M1]->encOD)
    C_BSpacing = max(techInfo[M1]->minSpa -techInfo[M1]->encOD +
    techInfo[PP]->spaOD +techInfo[PP]->encOD -
    techInfo[M1]->encOD)

    for( RING 0 1 ;C ;B
    Ring = rodCreatePath(
    .......
    .......
    ?size ;B spacing + 1/2 width
    BSpacing + (RING + 1/2.0)*M1Ring +
    ;C spacing + 1/2 width
    RING*C_BSpacing
    -------------------------------------------------------------------------------------------------------------------------------------

    Could anyone explain why my information became read in as an ampersand
    (&) sign?
    I'm assuming that ROD creation commands don't handle certain functions
    internally well.
    Conditional commands such as if() works fine so far.

    Thanks in advance.

    I-FAB
     
    I-F AB, Feb 11, 2010
    #1
  2. I-F AB wrote, on 02/11/10 07:55:
    This bit is the problem (I think - I didn't test it fully):

    For example:

    RING*(max(1 2 3))

    Causes the same kind of problem. The issue is that you have duplicate matching
    parentheses - in essence this is the same as RING*((max 1 2 3)) - duplicate
    parentheses cause trouble in SKILL (due it trying to handle both C syntax and
    LISP syntax), so consequently you should never have multiple matched parentheses.

    If you were to remove the ( immediately after the RING* and the one at the end
    of the line above, it would work.

    The & is just a truncation used in the tracing output. You can stop that by doing:

    tracelevel=50
    tracelength=50 (this stops ... appearing in tracing when you have lots of arguments)

    Regards,

    Andrew.
     
    Andrew Beckett, Feb 11, 2010
    #2
  3. I-F AB

    I-F AB Guest

    Hi Andrew,

    Thanks for the analysis.
    I didn't notice that the problem stemmed from
    "RING*( max() )" (defined as C_BSpacing).

    I was focused on the previous part right after the ?size option
    (defined as BSpacing) & this one doesn't have extra parentheses.

    I rarely use the tracelength because I'm not really good at filtering
    the tons of data which it can produce (must be because I'm not aware
    of tracelevel!) but I'll definitely try to learn how.

    Thanks again! :)

    Best regards,
    I-FAB
     
    I-F AB, Feb 12, 2010
    #3
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.