Home > Community > Forums > Custom IC SKILL > "Hidden" parameters in Pcell

Email

* Required Fields

Recipients email * (separate multiple addresses with commas)

Your name *

Your email *

Message *

Contact Us

* Required Fields
First Name *

Last Name *

Email *

Company / Institution *

Comments: *

 "Hidden" parameters in Pcell 

Last post Wed, Mar 13 2013 4:15 PM by Andrew Beckett. 6 replies.
Started by RVERP 05 Mar 2013 11:28 PM. Topic has 6 replies and 972 views
Page 1 of 1 (7 items)
Sort Posts:
  • Tue, Mar 5 2013 11:28 PM

    • RVERP
    • Top 500 Contributor
    • Joined on Mon, Oct 24 2011
    • Posts 27
    • Points 465
    "Hidden" parameters in Pcell Reply

    Hello,

     When I generate a Pcell using a function and it's arguments, my pcells do not generate correctly.

     I understand why, once the pcell is compiled, he has unknown variables, the one that where passed by the function.  IfI replace this variables with a parameter of the pcell, the functions arguments are stored and the pcell compiles.

    I don't want to use variables for this to prevent having a long list.

    Is there another way of doing this, some sort of hidden parameter or property?

     

    So this doesn't work:

    procedure( makeAcell(arg1 arg2)

    pcDefinePcell(
     ...
     ...
    w = arg1*arg2

    ))

     

    This does work, but it's not what I want:

    procedure( makeAcell(arg1 arg2)
     ...
    ;PCELL PARAMETERS
    ((Arg1 int arg1) (Arg2 int arg2))
     ...
    ))

     

    Filed under:
    • Post Points: 20
  • Wed, Mar 6 2013 2:34 AM

    Re: "Hidden" parameters in Pcell Reply

    The problem is that the variables arg1 and arg2 are out of scope when the body of the pcell is evaluated. You might think that you could solve this with SKILL++ (which has lexical scoping), but pcDefinePCell is not supported in SKILL++ (it can call SKILL++ functions, but can't be used in SKILL++ - mainly because the pcell wouldn't be able to store information about the lexical environment in which it was called). One way is to store the arguments on the cellView somewhere (as properties say), but another might just be to do:

    procedure(makeACell(arg1 arg2)
    eval(`pcDefinePCell(
      ...
      ...
      w=,arg1*,arg2
    ) ;pcDefinePCell
    ) ; eval
    ) ; procedure

    The quote before the pcDefinePCell is a backquote. This means that the code is not evaluated - but a list of the code - but rather than a normal quote, backquote allows selective evaluation. You precede the variable with a comma to selectively evaluate it.

    To illustrate what I mean:

    val1=20
    val2=30
    lst=`(a b ,val1 c ,val2)

    then lst will contain (a b 20 c 30)

    Regards,

    Andrew.

    • Post Points: 20
  • Wed, Mar 13 2013 2:07 AM

    • RVERP
    • Top 500 Contributor
    • Joined on Mon, Oct 24 2011
    • Posts 27
    • Points 465
    Re: "Hidden" parameters in Pcell Reply

    Ok, thanks, this seems to work, with one exception.  If I use backquotes in a for loop, this doesn't seem to work.

     example:

     procedure(makeACell(arg1 arg2)
    eval(`pcDefinePCell(
      ...
      ...
      w=,arg1*,arg2
    for( n 1 ,arg1
    do something
    ) ;for
    ) ;pcDefinePCell
    ) ; eval
    ) ; procedure

    It looks like that he still needs the arg1 in the for loop.

    • Post Points: 5
  • Wed, Mar 13 2013 2:27 AM

    • RVERP
    • Top 500 Contributor
    • Joined on Mon, Oct 24 2011
    • Posts 27
    • Points 465
    Re: "Hidden" parameters in Pcell Reply

     I tried something in the ciw, if I enter:

    y=1

    and then:

     '(x ,y z)

    I still get:

    (x y z)            I expected (x 1 z)

    What's wrong here??

    • Post Points: 20
  • Wed, Mar 13 2013 3:16 AM

    • berndfi
    • Top 100 Contributor
    • Joined on Tue, Sep 11 2012
    • Neubiberg, Bavaria
    • Posts 67
    • Points 1,255
    Re: "Hidden" parameters in Pcell Reply

     The way you build your list is worng if you want y to be evaluated do it that way

    list(y)

    • Post Points: 20
  • Wed, Mar 13 2013 3:29 AM

    • RVERP
    • Top 500 Contributor
    • Joined on Mon, Oct 24 2011
    • Posts 27
    • Points 465
    Re: "Hidden" parameters in Pcell Reply

     In the example I want to build a list with x y z, where only y is evaluated.  This should be the way to do it (it's exactly the same example as in the cadence manual, only I have a different outcome as in the manual.)

    • Post Points: 20
  • Wed, Mar 13 2013 4:15 PM

    Re: "Hidden" parameters in Pcell Reply

    In your first example, this code worked perfectly:

    procedure(makeACell(arg1 arg2)
    eval(`pcDefinePCell(
      list(ddGetObj("BBDlib") "mypcell" "layout")
      (
        (myp 1)
      )
      w=,arg1*,arg2
      for( n 1 ,arg1
        fprintf(stderr "w is %L, n is %L\n" w n)
      ) ;for
     ) ;pcDefinePCell
    ) ; eval
    ) ; procedure

    It output this when the pcell evaluated:

    makeACell(3 4)
    Generating Pcell for 'mypcell layout'.
    w is 12, n is 1
    w is 12, n is 2
    w is 12, n is 3

    As for the second case, it's because you have the wrong quotation mark. It should be a backquote not a normal single quote. So ` not '

    Check your pcell code in case you've used the wrong quote. Normal single quote prevents evaluation completely, whereas backquote allows selective evaluation when expressions are preceded by comma.

    Andrew.

    • Post Points: 5
Page 1 of 1 (7 items)
Sort Posts:
Started by RVERP at 05 Mar 2013 11:28 PM. Topic has 6 replies.