Home > Community > Forums > Custom IC SKILL > dbCreateVia() questions: justification and other examples

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: *

 dbCreateVia() questions: justification and other examples 

Last post Fri, Nov 4 2011 5:23 PM by Tsien. 7 replies.
Started by TrevorB 30 Nov 2009 02:51 PM. Topic has 7 replies and 5230 views
Page 1 of 1 (8 items)
Sort Posts:
  • Mon, Nov 30 2009 2:51 PM

    • TrevorB
    • Not Ranked
    • Joined on Mon, Nov 30 2009
    • Huntsville, AL
    • Posts 14
    • Points 250
    dbCreateVia() questions: justification and other examples Reply

    I am migrating my pcells to IC6, and I am wrestling with the new via model.  Our PDK uses "standard vias", so I understand that I need to use the dbCreateVia function.

    Apparently, I can override paramaters, even for standard vias, so I can use the following syntax:

    dbCreateVia(cvId viaId list(x y) list(list("cutRows" 2) list("cutColumns" 3)))

    However, I need to alter the justification to "lowerLeft".  This leads me to a few questions:
    1. How do I specify the justification using dbCreateVia?
    2. Does anybody have a "fully involved" dbCreateVia example that uses all possible options?  The manual is a little weak, methinks.
    3. How do I change the justification after I have created the via?  I cannot find it any where in the returned viaId, its header, its viaDef, or the header's master.

    Thanks!

    Trevor

    • Post Points: 20
  • Tue, Dec 1 2009 6:15 PM

    • kbhow
    • Top 50 Contributor
    • Joined on Thu, May 7 2009
    • Penang, Pulau Pinang
    • Posts 120
    • Points 2,045
    Re: dbCreateVia() questions: justification and other examples Reply

    Hi Trevor,

    There is several unique stuff in creating via compare to other instances. As what i know, there is no pption to specify the justification if you using SKILL function -dbCreateVia to create via rather than the GUI.

    Fortunately, the justification can be specific by doing some manual calculation and input the value as an option - "originOffset". The full syntax of dbCreateVia will be:

        dbCreateVia(  d_cvId d_viaDefId l_origin t_orientation l_paramlist)

        eg: dbCreateVia( cvId vidDefId list(x y) "R0" 

                                                 list( list("cutRows" 2)             ;row

                                                 list("cutColumns" 4)               ;column

                                                 list("cutSpacing" list(x y))       ; cut spacing for x and y

                                                 list("layer1Enc" list(x y))         ; enclosure for layer1

                                                 list("layer2Enc" list(x y))         ; enclosure for layer2

                                                 list("cutWidth" 0.2)                 ; cut width

                                                 list("cutHeight" 0.4)                ;cut height

                                                 list("originOffset" list(x y)))      ; justification

    You can change the justification by changing the option -"originOffset". The input must be in l_point which specify the x and y offset from center of the via. A mathematic calculation is needed to measure the distance from the origin point to the center of the via.

     

    How 

    • Post Points: 20
  • Wed, Dec 2 2009 1:39 PM

    • TrevorB
    • Not Ranked
    • Joined on Mon, Nov 30 2009
    • Huntsville, AL
    • Posts 14
    • Points 250
    Re: dbCreateVia() questions: justification and other examples Reply

    Thanks, How!

    Let's say, I wanted to specify the  x-cutSpacing, but I did not know the y-cutSpacing, and I wanted to leave the y-cutSpacing at the default value.

    How would I do this inside the pcell's SKILL environment?  Surely, there is something more elegant than lxComputeViaParams.  Does it even work in the pcell environment?

    • Post Points: 20
  • Fri, Dec 4 2009 5:14 AM

    Re: dbCreateVia() questions: justification and other examples Reply

    Please create a service request at Cadence Customer Support. lx functions are not legal in pcells, so that's not an option; I'm not aware of a convenient way of doing this within a pcell, so it would be best to ask via customer support and  then  an enhancement request can be filed, and maybe R&D can come up with a workaround.

    Regards,

    Andrew.

     

    • Post Points: 20
  • Fri, Dec 4 2009 7:32 AM

    • TrevorB
    • Not Ranked
    • Joined on Mon, Nov 30 2009
    • Huntsville, AL
    • Posts 14
    • Points 250
    Re: dbCreateVia() questions: justification and other examples Reply

    Thanks, Andrew!  I filed a SR.  Hopefully, R&D can come up with something.

    • Post Points: 20
  • Tue, Nov 1 2011 1:15 PM

    • Tsien
    • Not Ranked
    • Joined on Thu, Oct 27 2011
    • Posts 2
    • Points 25
    Re: dbCreateVia() questions: justification and other examples Reply

    Just wondering if you were able to come up with a solution to your problem?  I would also like to write some skill code to convert one via type to another.  But it seems like the only way possible in IC6 is to delete the old via and recreate a new one.  But to create an identical via to the original, I would need to set the parameters such as justification.

     Thanks.

    • Post Points: 20
  • Thu, Nov 3 2011 12:07 PM

    • TrevorB
    • Not Ranked
    • Joined on Mon, Nov 30 2009
    • Huntsville, AL
    • Posts 14
    • Points 250
    Re: dbCreateVia() questions: justification and other examples Reply

    I never found or was given a clean solution.  I wrote some bimodal code to consistently place a contact in either IC5.1 or IC6.1, like below.

    HTH,

    Trevor

     

    procedure(apcCreateContact(@key                   ;_Oct  7 11 tbowen 528
                                cv
                                master
                                origin
                                rotation
                                width
                                height
                                rows
                                columns
                                xPitch
                                yPitch
                                xBias
                                yBias
                                viaEdgeCenter
              )
    
      let((inst params)
        unless(origin
           origin = 0:0
        )
        unless(rotation
           rotation = "R0"
        )
        if(isOA()
           then
           when(rows
              params = append1(params list("cutRows" rows))
           )
           when(columns
              params = append1(params list("cutColumns" columns))
           )
           when(xPitch && yPitch && width && height
              params = append1(params list("cutSpacing" list(xPitch-width yPitch-height)))
           )
           when(width
              params = append1(params list("cutWidth" width))
           )
           when(height
              params = append1(params list("cutHeight" height))
           )
           inst = dbCreateVia(cv master origin rotation params)
           when((stringp(xBias) && rexMatchp("[lLrR][eEiI][fFgG][tThH]" xBias) && columns > 1) ||
              (stringp(yBias) && rexMatchp("[lLuU][oOpP][wWpP][eE][rR]" yBias) && rows > 1)
              if(numberp(viaEdgeCenter)
                 then
                 xOffset = yOffset = 0.0
                 bBox = inst~>bBox
                 when(stringp(xBias) && !rexMatchp("[cC]enter" xBias) && columns > 1
                    cond(
                       (rexMatchp("[rR]ight" xBias)
                        xOffset = viaEdgeCenter - width(bBox)/2.0
                       )
                       (rexMatchp("[lL]eft" xBias)
                        xOffset = width(bBox)/2.0 - viaEdgeCenter
                       )
                    ) ; ** cond rexMatchp **
                 ) ; ** when xBias **
                 when(stringp(yBias) && !rexMatchp("[cC]enter" yBias) && rows > 1
                    cond(
                       (rexMatchp("[uU]pper" xBias)
                        yOffset = viaEdgeCenter - height(bBox)/2.0
                       )
                       (rexMatchp("[lL]ower" xBias)
                        yOffset = height(bBox)/2.0 - viaEdgeCenter
                       )
                    ) ; ** cond rexMatchp **
                 ) ; ** when yBias **
                 inst~>originOffset = xOffset:yOffset
              else
                 fprintf(stdout "(E) apcCreateContact:  Offset bias ignored, because viaEdgeCenter was not a number (xBias=%L, yBias=%L\n" xBias yBias)
              ) ; ** if numberp **
           ) ; ** when xBias **
        else
           inst = dbCreateInst(cv master nil origin rotation)
           when(width
              inst~>l = width
           )
           when(height
              inst~>w = height
           )
           when(rows
              inst~>row = rows
           )
           when(columns
              inst~>column = columns
           )
           when(xPitch
              inst~>xPitch = xPitch
           )
           when(yPitch
              inst~>yPitch = yPitch
           )
           when(xBias
              inst~>xBias = xBias
           )
           when(yBias
              inst~>yBias = yBias
           )
        ) ; ** if isOA **
        inst    
      ) ; ** let **
    ) ; ** procedure apcCreateContact **
    Filed under: , ,
    • Post Points: 20
  • Fri, Nov 4 2011 5:23 PM

    • Tsien
    • Not Ranked
    • Joined on Thu, Oct 27 2011
    • Posts 2
    • Points 25
    Re: dbCreateVia() questions: justification and other examples Reply

    Yes, that definitely helps.   Thanks for the reply.

     Its too bad that cadence doesn't improve the via accessibility through SKILL in OA.

     Tsien

    • Post Points: 5
Page 1 of 1 (8 items)
Sort Posts:
Started by TrevorB at 30 Nov 2009 02:51 PM. Topic has 7 replies.