Anyone tried creating automatic substrate ring

Discussion in 'Cadence' started by lokeshraje, Jun 2, 2009.

  1. lokeshraje

    lokeshraje Guest

    Hi ,
    Has anyone tried creating a substrate ring(I mean substrate contact's
    for a transistor) automatically.
    By the above statement i mean, if you have an instance you click on it
    and run a procedure.Then a substrate contact gets created
    automatically which fits nicely to the width or length of the
    instance...

    Currently,with the help of Andrew and other Folks in previous posts, I
    have done the following..
    I created a substrate contact(using my own template) separately and
    then i have the instance..
    And I have written a procedure which automatically aligns the two
    (instance and the substrate contact,eventually resulting in a
    substrate contact that fits the length of the instance boundary)..
    I don't know how to create the substrate ring automatically(for
    eg.,here we need to enter two points with a mouse to create a
    multipart path.Is it possible for specifying a "list"/set of co-
    ordinates that we already now and the mPP gets created automatically)
    Any comments/help regarding this(I don't need a code ,i just need to
    know how to do it or some commands that might be helpful in doing
    it)....

    Regards,
    Lokesh rajendran.
     
    lokeshraje, Jun 2, 2009
    #1
  2. lokeshraje

    lokeshraje Guest

    Wow people!!! I found what i wanted ...The option that i discussed
    above is available in Virtuoso Layout Turbo...
    I accidentally passed through the document and found it(Virtuoso
    Layout Editor Turbo User Guide).
    Cool..However i have to modify the feature in such a way that i need
    the mPP on only one edge of the instance instead of enclosing it(i
    feel enclosing occupies more space)..

    Regards,
    Lokesh rajendran.
     
    lokeshraje, Jun 2, 2009
    #2
  3. lokeshraje

    lokeshraje Guest

    Hey i would highly appreciate if some people experienced( in the above
    case),comments on it.
    Regards,
    Lokesh rajendran.
     
    lokeshraje, Jun 2, 2009
    #3
  4. lokeshraje

    Tim Guest

    In VXL mode you can use the Create Gaurdring command from the Create
    pulldown. On the GUI you specify the MPP you want and the spacing
    around the selected component(s).

    It works good.

    Tim
     
    Tim, Jun 2, 2009
    #4
  5. lokeshraje

    lokeshraje Guest

    Hi Tim,
    Thanks for your reply.
    But I'm not looking for any GUI mode for creation of guard ring.I'm
    just trying to do it in skill.(In my second post I have mentioned
    about the GUI mode of creation of guard ring...)
    Hi...Andrew and Riad,
    I would highly appreciate your comments for this post..
    Regards,
    Lokesh rajendran.
     
    lokeshraje, Jun 4, 2009
    #5
  6. You could use rodCreatePath() - you'd need to determine where you want to put
    the ring though.

    Also, if you have an existing MPP template for the guard ring, you could use my
    function CCSdrawMPPUsingTemplate from sourcelink.cadence.com solution number
    11323850 . You'd still need to figure out the location for the guard ring though.

    Regards,

    Andrew.
     
    Andrew Beckett, Jun 8, 2009
    #6
  7. lokeshraje

    noreply Guest

    Hi andrew,
    could you please post the code here.(I dont have an access to
    sourcelink..since i dont have any corporate mail id)
    Thanks and regards,
    Lokesh
     
    noreply, Jun 11, 2009
    #7
  8. noreply wrote, on 06/11/09 09:28:
    Here it is:


    /* CCSdrawMPPUsingTemplate.ils

    Language SKILL
    Date Mar 30, 2007
    SKILL Lint 100%

    Draw a multipart path given a template. For example:

    CCSdrawMPPUsingTemplate("mytemplate" ?cvId cvId
    ?pts list(0:0 10:0 10:10)
    )

    This code uses SKILL++ semantics, so the file suffix ".ils" must
    be retained.

    As the code is SKILL++, in order to get 100% use:
    skIgnoreMessage('STRICT)
    and then "draw", "rod" and "CCS" as package prefixes

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

    SCCS Info: @(#) CCSdrawMPPUsingTemplate.ils 03/30/07.13:40:48 1.1

    */
    /*******************************************************************************
    * DISCLAIMER: The following code is provided for Cadence customers to use at *
    * their own risk. The code may require modification to satisfy the *
    * requirements of any user. The code and any modifications to the code may *
    * not be compatible with current or future versions of Cadence products. *
    * THE CODE IS PROVIDED "AS IS" AND WITH NO WARRANTIES, INCLUDING WITHOUT *
    * LIMITATION ANY EXPRESS WARRANTIES OR IMPLIED WARRANTIES OF MERCHANTABILITY *
    * OR FITNESS FOR A PARTICULAR USE. *
    *******************************************************************************/

    (define CCSdrawMPPUsingTemplate nil)

    (let (templateMapping)
    ;----------------------------------------------------------------------
    ; Define the MPP position to keyword mapping data
    ;----------------------------------------------------------------------
    (setq templateMapping (makeTable 'templateMapping nil))
    (setarray templateMapping
    'main
    '(?layer ?width ?choppable ?endType ?beginExt ?endExt
    ?justification ?offset connectivity)
    )
    (setarray templateMapping
    'offset
    '(?layer ?width ?choppable ?sep ?justification ?beginOffset
    ?endOffset connectivity)
    )
    (setarray templateMapping
    'connectivity
    '(?termIOType ?pin ?pinAccessDir ?pinLabel ?pinLabelHeight
    ?pinLabelLayer ?pinLabelJust ?pinLabelFont
    ?pinLabelDrafting ?pinLabelOrient
    ?pinLabelRefHandle ?pinLabelOffsetPoint)
    )
    (setarray templateMapping
    'enclosure
    '(?layer ?enclosure ?choppable ?beginOffset ?endOffset
    connectivity)
    )
    (setarray templateMapping
    'subrect
    '(?layer ?width ?length ?choppable ?sep ?justification ?space
    ?beginOffset ?endOffset ?gap connectivity
    ?beginSegOffset ?endSegOffset ?diagonal)
    )

    /***************************************************************
    * *
    * (mapUsingTemplate lst templateList) *
    * *
    * PRIVATE function to map a positional list to a list of *
    * keyword arguments - given the list of values and the *
    * list of keywords. The keyword list can also contain *
    * references to other template maps (e.g. connectivity) *
    * *
    ***************************************************************/
    (defun mapUsingTemplate (lst templateList)
    (let (subTemplate)
    (foreach mapcan (item keyArg) lst templateList
    (setq subTemplate (arrayref templateMapping keyArg))
    ;---------------------------------------------------------
    ; If there's a sub template (e.g. connectivity) map over
    ; that recursively, otherwise return the value with the
    ; keyword argument
    ;---------------------------------------------------------
    (if subTemplate
    (mapUsingTemplate item subTemplate)
    (list keyArg item)
    )
    )
    )
    )

    /***************************************************************
    * *
    * (templateToArgs template) *
    * *
    * PRIVATE function to map a complete MPP template to *
    * the corresponding argument list for (rodCreatePath). *
    * *
    ***************************************************************/
    (defun templateToArgs (template)
    (let (templateList)
    (foreach mapcan (entry templateMap)
    template '(main (?offsetSubPath offset)
    (?encSubPath enclosure)
    (?subRect subrect))
    (if (listp templateMap)
    ;-------------------------------------------------------
    ; lists indicate that there is a list of lists to be mapped
    ;-------------------------------------------------------
    (progn
    (setq templateList
    (arrayref templateMapping (cadr templateMap)))
    (list
    (car templateMap)
    (foreach mapcar subEntry entry
    (mapUsingTemplate subEntry templateList))
    )
    )
    ;-------------------------------------------------------
    ; other entries indicate that there is a single list
    ;-------------------------------------------------------
    (progn
    (setq templateList
    (arrayref templateMapping templateMap))
    (mapUsingTemplate entry templateList)
    )
    )
    )
    )
    )

    /*********************************************************************
    * *
    * (drawMPPUsingTemplate templateName @key (cvId (geGetEditCellView)) *
    * @rest args "tg") *
    * *
    * PUBLIC function (exported as CCSdrawMPPUsingTemplate) to *
    * draw a multi-part path using a named template. Need to *
    * provide ?cvId and ?pts arguments in general *
    * *
    *********************************************************************/
    (defun drawMPPUsingTemplate (templateName @key (cvId (geGetEditCellView))
    @rest args "tg")
    (let (tfId template mappedTemplate)
    (setq tfId (techGetTechFile cvId))
    (setq template (techGetMPPTemplateByName tfId templateName))
    (if template
    (progn
    (setq mappedTemplate (templateToArgs template))
    (apply rodCreatePath
    `(
    ?cvId ,cvId
    ,@args
    ,@mappedTemplate
    ))
    )
    (error "MPP template %s cannot be found in technology library %s"
    templateName (getSGq tfId libName))
    )
    )
    )

    ;----------------------------------------------------------------------
    ; Export the one public function
    ;----------------------------------------------------------------------
    (setq CCSdrawMPPUsingTemplate drawMPPUsingTemplate)
    )
     
    Andrew Beckett, Jun 11, 2009
    #8
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.