• Skip to main content
  • Skip to search
  • Skip to footer
Cadence Home
  • This search text may be transcribed, used, stored, or accessed by our third-party service providers per our Cookie Policy and Privacy Policy.

  1. Community Forums
  2. Custom IC Design
  3. How to create templates for vdd/vss nets in Virtuoso

Stats

  • Locked Locked
  • Replies 4
  • Subscribers 126
  • Views 4549
  • Members are here 0
This discussion has been locked.
You can no longer post new replies to this discussion. If you have a question you can start a new discussion

How to create templates for vdd/vss nets in Virtuoso

akbhide
akbhide over 15 years ago

I am working on the layout of a full custom digital design in Virtuoso. I have now fixed my pitch for the vdd and vss nets. Can anyone tell me as to how i can create templates of some sort of a ruler/guide for these nets which can help me to see where my vdd vss nets/tracks would lie in the layout .It will make my life easier so that i will know how exactly i want to shield or route my critical nets and also ensure that i do not route anything else over the tracks meant for vdd/vss. This will help to reduce the risk of shorts as well.

 Any help, pointers would be really helpful.

  • Cancel
  • dmay
    dmay over 15 years ago

    The way we handle this on our designs is with a pcell. We have a pcell that we place down that contains our power rails and parts of unclosed guardrings. You can change the pcell width to be as wide as you need for the area where you are working. Below I have included a very quick hack of a pcell that contains a rectangle for vss and a rectangle for vdd, as well as a rectangle for the boundary of the cell. I put a stretch handle on the cell boundary that will allow you to stretch the width of the pcell.

    Things to note:
    I used both rodCreateRect and dbCreateRect. The dbCreateRect is much more efficient for designs with lots of pcells. The rodCreateRect allowed me to create the stretch handle for the width parameter.
    I only added three parameters, one for the height of vss, one for the height of vdd and one for the width of the template. The offset locations for the rails were hard coded.
    I used layers y0 and y1 since they are Cadence system layers and will exist in your design. You should use your actual metal layer for vss and vdd. If you are working in 6.1.x, you should use the Cadence dbCreatePRBoundary command. If you are in 5.1.x, you should use the lpp "prBoundary" "boundary".
    I did not create a CDF, so the parameters will appear on the Edit Properites form as "w", "vssH" and "vddH". For cleaner control of your parameters and how they are displayed to your users, you'll want to create a CDF.

    procedure(myCreateTemplatePcell(@optional (myLib "myLib") (dev "template"))
      pcDefinePCell(
      list(ddGetObj(myLib) dev "layout")
       ((w       "float" 10.0)
        (vddH    "float"  5.0)
        (vssH    "float"  5.0)
       )
        let((cv y)
            cv = pcCellView
            vddYOffset = 2.0
            dbCreateRect(cv list("y0" "drawing") list(0:vddYOffset w:vddH+vddYOffset))
            dbCreateLabel(cv list("text" "drawing") 0:vddYOffset "vdd" "lowerLeft" "R0" "roman" 2.0)

            vssYOffset = 2.0
            dbCreateRect(cv list("y0" "drawing") list(0:-vssYOffset w:-vssH-vssYOffset))
            dbCreateLabel(cv list("text" "drawing") 0:-vssYOffset "vss" "upperLeft" "R0" "roman" 2.0)

            boxId = rodCreateRect(
                ?name       "width"
                ?layer      list("y1" "drawing")
                ?origin     0:-vssH-vssYOffset
                ?width      w
                ?length     vddH + vssH + vddYOffset + vssYOffset
            )
            rodAssignHandleToParameter(
                ?parameter          'w
                ?rodObj             boxId
                ?handleName         "centerRight"
                ?displayName        "width"
                ?displayExpression  'w
                ?stretchDir         'x
                ?stretchType        "relative"
                ?moveOrigin         nil
                ?updateIncrement    1.0
            )

           
        )
      ); pcell
    ); proc

    To create the pcell, first load this code in your CIW. Then run the following command, replacing "myLib" with the name of a Cadence library where you would like this pcell created:

    myCreateTemplatePcell("myLib")

    The default pcell name is "template", or you can pass in a different string as the second argument. Now you can place the pcell in your layout. You can either specify the width of the pcell when you place it, or by querying it, or by using the stretch handle.

    If you are unfamiliar with pcells, please take a look at the Cadence documentation.

    Hopefully this is a good start for what you are looking for. 

    Derek

    • Cancel
    • Vote Up 0 Vote Down
    • Cancel
  • Andrew Beckett
    Andrew Beckett over 15 years ago

    In IC61X you can also use the "Load Physical View" command to load data from a template cellView.

    Regards,

    Andrew.

    • Cancel
    • Vote Up 0 Vote Down
    • Cancel
  • akbhide
    akbhide over 15 years ago

     @Derek : Thanks for the script. Havent tried it yet due to other deadlines.

    @Andrew: Unfortunately, have an older version. of IC. Any other way to load a template in older versions? Your way sounds very easy and intuitive. I have to still try the script from Derek though.

    • Cancel
    • Vote Up 0 Vote Down
    • Cancel
  • Andrew Beckett
    Andrew Beckett over 15 years ago

    In IC5141, you can use (in Layout XL) Design->Save to Template from an existing view, and save info about the I/O pin locations or constraints.

    This template file can be referenced at the bottom of the Design->Generate from Source form. Also, if you use Place->Pin Placement, you can choose to place pins as in a Template File. You can create (for example) the pins how you want (including using the Hrail/Vrail options) from this same Pin Placement form.

    IC61X has a similar (but with further enhancements) pin placement UI.

    Regards,

    Andrew.

    • Cancel
    • Vote Up 0 Vote Down
    • Cancel

Community Guidelines

The Cadence Design Communities support Cadence users and technologists interacting to exchange ideas, news, technical information, and best practices to solve problems and get the most from Cadence technology. The community is open to everyone, and to provide the most value, we require participants to follow our Community Guidelines that facilitate a quality exchange of ideas and information. By accessing, contributing, using or downloading any materials from the site, you agree to be bound by the full Community Guidelines.

© 2025 Cadence Design Systems, Inc. All Rights Reserved.

  • Terms of Use
  • Privacy
  • Cookie Policy
  • US Trademarks
  • Do Not Sell or Share My Personal Information