Home > Community > Forums > Custom IC SKILL > Pcell symbol creation using SKILL

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

 Pcell symbol creation using SKILL 

Last post Mon, Dec 31 2012 4:32 AM by Andrew Beckett. 3 replies.
Started by greatqs 26 Dec 2012 06:09 AM. Topic has 3 replies and 1105 views
Page 1 of 1 (4 items)
Sort Posts:
  • Wed, Dec 26 2012 6:09 AM

    • greatqs
    • Top 500 Contributor
    • Joined on Tue, Feb 15 2011
    • Posts 26
    • Points 460
    Pcell symbol creation using SKILL Reply

    Hi,

     

    I'm using SKILL code as below to generate a Pcell symbol (i.e. number of symbol terminals depend on CDF parameter).

    However, every time when I load these code in CIW (i.e. IC615) into a library which attached to cdsDefaultTechLib, it will complain below warnings:

     *WARNING* (DB-270000): dbiSetCellViewDBUPerUU: The DBUPerUU attribute for viewType 'schematicSymbol' cannot be set to 1000 because it would introduce conflicts in the specified tech graph

     *WARNING* (DB-270000): dbSetCellViewUserUnitName: The UserUnits attribute for viewType 'schematicSymbol' cannot be set to 'micron' because it would introduce conflicts in the specified tech graph

     

    The generated symbol seems to have incorrect size and scaling. Anyone knows how to workaround this?

     

    =================================================================================

     pcDefinePCell(
        ; target cellView
        list(ddGetObj("test") "myparsubckt" "symbol" "schematicSymbol")

        ; formal parameters
        (
        (padNum 1)
        )

        let((dY justify1 labelId netId
            rectId s
            xEnd xLabel2 xLoc yLoc sc
            h xShape yShape
        )
        pcCellView~>DBUPerUU=1000.0
        pcCellView~>userUnits="micron"
        sc = 0.16
        h = padNum
        dY = (h - 1) * 0.125
        xLoc = 0.625
        ;----------------------------------------------------------------
        ; Create outline
        ;----------------------------------------------------------------
        dbCreateRect(pcCellView
            '("device" "drawing")
            list(0.125 * sc:-0.135 * sc
            0.5 * sc:(0.17 + dY) * sc
            )
        )
        dbCreateRect(pcCellView
            '("instance" "drawing")
            list(0 * sc:-0.25 * sc
            xLoc * sc:(0.17 + dY) * sc
            )
        )
        ;----------------------------------------------------------------
        ; Labels
        ;----------------------------------------------------------------
        sprintf(s "Parasitic Network")
        dbCreateLabel(pcCellView
            '("pin" "label")
            0.3125 * sc:(0.12 + dY) * sc s "centerCenter"
            "R0" "stick"
            0.05 * sc
        )
        labelId = dbCreateLabel(pcCellView
            '("annotate" "drawing7")
            xLoc * sc:(0.2275 + dY) * sc "cdsName()" "upperRight"
            "R0" "stick"
            0.05 * sc
            )
        labelId~>labelType="ILLabel"
        ;----------------------------------------------------------------
        ; Pins
        ;----------------------------------------------------------------
        for(i 1 padNum
            yLoc = (h - i) * 0.125
            xLoc = 0
            xEnd = 0.155
            justify1 = "lowerRight"
            xLabel2 = 0.15625
            xShape = 0.15625
            yShape = ((h - i) * 0.125)
            dbCreateRect(pcCellView
            '("device" "drawing")
            list(xShape * sc:(yShape - 0.05) * sc
                (xShape + 0.1) * sc:(yShape + 0.05) * sc
            )
            )
            dbCreateLine(pcCellView
            '("device" "drawing")
            list(xLoc * sc:yLoc * sc
                xEnd * sc:yLoc * sc
            )
            )
            rectId = dbCreateRect(pcCellView
                '("pin" "drawing")
                list((xLoc - 0.025) * sc:(yLoc - 0.025) * sc
                (xLoc + 0.025) * sc:(yLoc + 0.025) * sc
                )
            )
            sprintf(s "p%d" i)
            netId = dbCreateNet(pcCellView s)
            dbCreateTerm(netId s "inputOutput")
            dbCreatePin(netId rectId)
            sprintf(s "cdsTerm(p%d)" i)
            labelId = dbCreateLabel(pcCellView
                '("annotate" "drawing8")
                xLoc * sc:(yLoc + 0.0625) * sc s justify1
                "R0" "stick"
                0.05 * sc
            )
            labelId~>labelType="ILLabel"
        )
        for(i 1 padNum
            yLoc = (h - i) * 0.125
            xLoc = 0.625
            xEnd = 0.5
            justify1 = "centerLeft"
            xLabel2 = 0.29
            sprintf(s "b%d" i)
            dbCreateLabel(pcCellView
            '("pin" "drawing")
            xLabel2 * sc:yLoc * sc s justify1
            "R0" "stick"
            0.05 * sc
            )
        )
        t
        )
    )

     =================================================================================

     

    • Post Points: 20
  • Wed, Dec 26 2012 7:41 AM

    Re: Pcell symbol creation using SKILL Reply
    Why are you trying to set the DBUperUU and units in the cellView itself? The code:

        pcCellView~>DBUPerUU=1000.0

        pcCellView~>userUnits="micron"


    Seems unnecessary (based on the coordinate choices, my guess is that the defaults of 160 DBUperUU and "inches" would be appropriate). If you comment these two lines out, does it behave? I can't really see why it would cause a scaling problem if it was really ignoring these settings...

    (Note, I've not tried what you're trying because I'm nowhere near a computer to try it).

    Andrew
    • Post Points: 20
  • Wed, Dec 26 2012 5:22 PM

    • greatqs
    • Top 500 Contributor
    • Joined on Tue, Feb 15 2011
    • Posts 26
    • Points 460
    Re: Pcell symbol creation using SKILL Reply

    Andrew, 

    Thanks for your help!

    The code is copy paste from Cadence support link as below (Solution ID:    11013814)

     
    I'm not sure why these 2 lines are needed. But if the target library has tech file of which DBUPerUU / userUnits is 1000 / "micron", the code has no issue at all and the Pcell works perfectly. Only when the target library is process independent (i.e. cdsDefaultTechLib, 160/"inch"), those 2 warnings comes up.
     
    I tried to comment out these 2 lines, then there is no these 2 warning as the code is executed and Pcell is generated. However the size of the Pcell is much smaller and these is impossible to route wires over terminals. I attached a screenshot to show the difference (i.e. left is to create the Pcell in a library of which BUPerUU / userUnits is 1000 / "micron" and right side is to create the Pcell in a library of which BUPerUU / userUnits is 160 / "inch")
     

    • Post Points: 20
  • Mon, Dec 31 2012 4:32 AM

    Re: Pcell symbol creation using SKILL Reply

    I don't think those lines should have any effect any more - since the DBUPerUU can't be set per-cellView any more (in OA). It's a bit odd - it works fine for me (I wrote the original solution, and the DBUperUU lines are a bit archaic and dated from IC5141, I believe).

    I suggest you contact customer support.

    Andrew.

    • Post Points: 5
Page 1 of 1 (4 items)
Sort Posts:
Started by greatqs at 26 Dec 2012 06:09 AM. Topic has 3 replies.