Home > Community > Forums > Custom IC SKILL > symbol PCELL extraction issue.

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

 symbol PCELL extraction issue. 

Last post Wed, Jul 27 2011 9:25 AM by Andrew Beckett. 18 replies.
Started by fishbulb15 22 Jul 2011 12:43 PM. Topic has 18 replies and 4892 views
Page 1 of 2 (19 items) 1 2 Next >
Sort Posts:
  • Fri, Jul 22 2011 12:43 PM

    symbol PCELL extraction issue. Reply
    I have created a symbol, schematic and layout pcell. Everything seemed to be working correctly until I wanted to start LVS-ing the the pcell. I first ran into an issue where it required that my schematic be extracted since last edit. So I followed the instructions here: ___Schematic PCell: Schematic cellviews modified since last extracted___ http://support.cadence.com/wps/myportal/cos/COSHome/viewsolution/!ut/p/c5/dY1NkoIwGAXPMgegvsDwu4wJhBgBRcXIJsWgqCigzGiJpxcPMP2WXa8achjXFo_Tofg7dW1xAQm5rXSDEV2YyEtI7CLu2rFIMx-NwObzsBX6B4xgC7nz8Yahu8hjwWqCOBF86jrfBhI2ZG3XN2NpBTIsO4d2-EAxXXBrM6cS04kWJcxbL2vBmTU3C90qQ1zOROWrn_s2VkVTmdeQ_S6fVj1oJEsvfE0W-7QnjD5I3Up-I0d_iJSjJap5yaTaERkFs9vOj9FZPO_9oFvT5ghx2DV7uJ7bV-DirzdaPke5/dl3/d3/L2dBISEvZ0FBIS9nQSEh/ ------->Which seemed to solve that issue. But now I am getting "ERROR: Netlister: symbol of instance modified, please re-extract cell ''." Is there something like : dbCreateProp(pcCellView "schGeometryLastRecorded" "time" getCurrentTime() ) dbCreateProp(pcCellView "lastSchematicExtraction" "time" getCurrentTime() ) to add to the symbol pcell?? How can I get this to work.. Thank you, Mitchell Cohen
    • Post Points: 20
  • Mon, Jul 25 2011 2:15 AM

    Re: symbol PCELL extraction issue. Reply

    Mitchell,

    Bit hard to read the above, but my guess is that you want to just add a call:

    dbSetConnCurrent(pcCellView)

    in your code (rather than the above). That will then work in both IC5141 and IC61X (which use different mechanisms for this) - you didn't say which version  you're using.

    Regards,

    Andrew.

    • Post Points: 20
  • Mon, Jul 25 2011 4:41 AM

    Re: symbol PCELL extraction issue. Reply
    Andrew, After writing it I noticed that all my formatting left for some reason... I am using IC5141. So, trying your suggestion of the new command did not help unfortunately. Let me try to describe the problem in a bit more detail. I have created three PCells one for a symbol view,a schematic view and a layout view. I have an instance of this PCell (instance call "data") instantiated in a containing schematic,lets call it "ROM". When I go to netlist the ROM schematic to the ROM layout using Calibre LVS (not for simulation) it errors out with the error: "Netlister: symbol of instance 'data' modified, please re-extract cell 'ROM'. Previous to this problem (which could be solved with your solution above and with the solution that I used before) I saw that the schematic of the PCell was not being seen as extracted, now that is not the problem any more. Your suggestion led me to probe a bit further and I determined that all three instance views returns true for dbIsConnCurrent(). Could there be something else I am missing? If you need more information, please let me know! Thank you!
    • Post Points: 20
  • Mon, Jul 25 2011 4:50 AM

    Re: symbol PCELL extraction issue. Reply

    For the formatting - maybe you're using Chrome - there's a known issue with formatting with the forums when using Chrome.

    Assuming that checking-and-saving the ROM schematic doesn't fix it, it may be a matter of ensuring that the last change dates do not change from previous builds. It's a bit surprising though...

    I suggest you log a service request so that this can be investigated more.

    Regards,

    Andrew.

    • Post Points: 20
  • Mon, Jul 25 2011 4:54 AM

    Re: symbol PCELL extraction issue. Reply
    Andrew, You are right...I am using Chrome. Could you elaborate on what you mean by this: "it may be a matter of ensuring that the last change dates do not change from previous builds". Thanks. Mitchell Cohen
    • Post Points: 20
  • Mon, Jul 25 2011 5:05 AM

    Re: symbol PCELL extraction issue. Reply

    In IC5141 it's a matter of setting cv~>instancesLastChanged to be an old date - so it appears that the symbol hasn't changed. That said, I've not normally had to do this with a pcell - so I'm a bit surprised...

    You'd do:

    dbDisableCellViewCounter(pcCellView)
    dbReplaceProp(cv "instancesLastChanged" 'time "Jun 27 18:00:00 1999")

    or similar. 

    In IC615, you'd just put dbDisableCellViewCounter(pcCellView) at the beginning of the pcell code.

    Regards,

    Andrew.

    • Post Points: 20
  • Mon, Jul 25 2011 8:49 AM

    Re: symbol PCELL extraction issue. Reply

    Andrew,

     After looking at the cells a bit more I noticed that the modifiedButNotSaved parameter was equal to "t".  How can I set this to "nil" using SKILL to see if that will solve my problems.

     Thank you,

    Mitchell Cohen

    • Post Points: 20
  • Mon, Jul 25 2011 9:16 AM

    Re: symbol PCELL extraction issue. Reply

    Mitchel,

    If you're talking about the pcell submaster having modifiedButNotSaved equal to t that's perfectly reasonable - it should do that. You can't change that (it can't be saved because it's a variant, and it is inevitably modified because of the fact that the pcell code builds the symbol or schematic or whatever).

    Andrew.

    • Post Points: 20
  • Mon, Jul 25 2011 9:51 AM

    Re: symbol PCELL extraction issue. Reply

    Andrew,

     Thank you for sticking with me on this...

    I have determined that the problem is with the OSSHNL (hierarchical netlister) not for a spectre netlist but for an auCdl netlist .  If you have any "far-out" reasons as to why it says:

    "ERROR: Netlister: symbol of instance 'data' modified, please re-extract 'ROM'.

    ERROR(OSSHNL): Error(s) found during netlisting. The netlist may be corrupt or may not be produced at all."

    Thank you,

    Mitchell Cohen

    • Post Points: 20
  • Mon, Jul 25 2011 10:11 AM

    Re: symbol PCELL extraction issue. Reply

    Hi Mitchell,

    I'll do some experiments on this tomorrow. I'm sure I've netlisted similar cases before - but I'll re-test - and maybe post an example for you to try and compare.

    BTW to everyone watching - we're trying to fix the multiple email notifiers on the forums (all being well, this email will only appear once!)

    Regards,

    Andrew.

    • Post Points: 5
  • Wed, Jul 27 2011 1:06 AM

    Re: symbol PCELL extraction issue. Reply

    Hi Mitchell,

    Try this code - it works for me in IC5141 - I can place an instance and CDL it out with no issues. You'll probably need to change the lib name near the top of the code, which is where it places the new "busset" pcell.

    Regards,

    Andrew.

    /* busset.il
    
    Author     A.D.Beckett
    Group      Custom IC, Cadence Design Systems Ltd.
    Machine    SUN
    Date       Jul 11, 2004 
    Modified   
    By         
    
    SKILL code for creating the "busset" pcell schematic, symbol,
    and the CDF as well.
    
    ***************************************************
    
    SCCS Info: @(#) busset.il 04/20/11.13:51:09 1.2
    
    */
    
    let( (library cell pcellId)
        library="training"
        cell="busset"
        unless(ddGetObj(library)
            error("Couldn't open library %L" library)
        )
    
        ;--------------------------------------------------------------------
        ; First the schematic
        ;--------------------------------------------------------------------
        pcellId=pcDefinePCell(
            list(ddGetObj(library) cell "schematic" "schematic")
    
            ;----------------------------------------------------------------
            ; Formal parameters
            ;----------------------------------------------------------------
            (
                (buswidth 6)
                (busvalue 0)
            )
    
            ;----------------------------------------------------------------
            ; Code itself
            ;----------------------------------------------------------------
            let(( cv master instId netH netL 
                busOut driveName driveNet)
    
            cv = pcCellView
            ;----------------------------------------------------------------
            ; Convert parameters, and figure out drive net name
            ;----------------------------------------------------------------
            when(buswidth<1 buswidth=1)
            for(bit 0 buswidth-1
                if(driveName then
                    driveName=strcat("," driveName)
                else
                    driveName=""
                ) ; if
                driveName=strcat(
                    if(busvalue<bit>==1 "hi" "lo")
                    driveName
                )
            ) ; for
    
            ;----------------------------------------------------------------
            ; open master cell view
            ;----------------------------------------------------------------
            master = dbOpenCellViewByType( "basic" "cds_thru" "symbol" nil "r" )
            ;----------------------------------------------------------------
            ; create the nets
            ;----------------------------------------------------------------
            netH=dbMakeNet(cv "hi")
            netL=dbMakeNet(cv "lo")
            busOut=dbMakeNet(cv sprintf(nil "bus<%d:0>" buswidth-1))
            driveNet=dbMakeNet(cv driveName)
            ;----------------------------------------------------------------
            ; create the terminals
            ;----------------------------------------------------------------
            dbCreateTerm(netH netH~>name "inputOutput")
            dbCreateTerm(netL netL~>name "inputOutput")
            dbCreateTerm(busOut busOut~>name "inputOutput")
            ;----------------------------------------------------------------
            ; create the instance of cds_thru
            ;----------------------------------------------------------------
            instId = 
                dbCreateInst(
                    cv master sprintf(nil "thru<%d:0>" buswidth-1)
                    0:0 "R0"
                )
            ;----------------------------------------------------------------
            ; Connect it up
            ;----------------------------------------------------------------
            dbCreateConnByName(busOut instId "dst");
            dbCreateConnByName(driveNet instId "src");
    
            ;----------------------------------------------------------------
            ; Make the connectivity look up to date - not always needed, but
            ; Assura needs this, for example.
            ;----------------------------------------------------------------
            dbSetConnCurrent(cv)
    
            dbClose( master )
            t
            ) ; let
        )
        dbSave(pcellId)
        dbClose(pcellId) 
    
        ;--------------------------------------------------------------------
        ; Now the symbol
        ;--------------------------------------------------------------------
        pcellId=pcDefinePCell(
            list(ddGetObj(library) cell "symbol" "schematicSymbol")
    
            ;----------------------------------------------------------------
            ; Formal parameters
            ;----------------------------------------------------------------
            (
                (buswidth 6)
                (busvalue 0)
            )
    
            ;----------------------------------------------------------------
            ; Code itself
            ;----------------------------------------------------------------
            let(( cv netH netL 
                busOut figH figL figBus hp ps pl bw lh
                pxc label)
    
            cv = pcCellView
    
            ;----------------------------------------------------------------
            ; Various dimensions
            ;----------------------------------------------------------------
            ; half pin size
            hp=0.025
            ; pin spacing
            ps=0.125
            ; pin length
            pl=0.250
            ; box width
            bw=1.4375
            ; label height
            lh=0.0625
            ; param label x coord
            pxc=0.5
    
            ;----------------------------------------------------------------
            ; create the shapes - first the pins
            ;----------------------------------------------------------------
            figH = dbCreateRect(cv list("pin" "drawing") list(-hp:-hp hp:hp)) 
            dbCreateLine(cv list("device" "drawing") list(0:0 pl:0))
            figL = dbCreateRect(cv list("pin" "drawing") list(-hp:-ps-hp hp:-ps+hp))
            dbCreateLine(cv list("device" "drawing") list(0:-ps pl:-ps))
            figBus = dbCreateRect(cv list("pin" "drawing")
                list(2*pl+bw-hp:-hp 2*pl+bw+hp:hp)
            ) ; dbCreateRect
            dbCreateLine(cv list("device" "drawing") list(pl+bw:0 2*pl+bw:0))
            ;----------------------------------------------------------------
            ; Then the boxes
            ;----------------------------------------------------------------
            dbCreateRect(cv list("device" "drawing") list(pl:-2*ps pl+bw:ps))
            dbCreateRect(cv list("instance" "drawing") list(0:-2*ps 2*pl+bw:ps))
    
            ;----------------------------------------------------------------
            ; create the nets
            ;----------------------------------------------------------------
            netH=dbMakeNet(cv "hi")
            netL=dbMakeNet(cv "lo")
            busOut=dbMakeNet(cv sprintf(nil "bus<%d:0>" buswidth-1))
            ;----------------------------------------------------------------
            ; create the terminals
            ;----------------------------------------------------------------
            dbCreateTerm(netH netH~>name "inputOutput")
            dbCreateTerm(netL netL~>name "inputOutput")
            dbCreateTerm(busOut busOut~>name "inputOutput")
            ;----------------------------------------------------------------
            ; create the pins
            ;----------------------------------------------------------------
            dbCreatePin(netH figH)
            dbCreatePin(netL figL)
            dbCreatePin(busOut figBus)
    
            ;----------------------------------------------------------------
            ; Put some labels for the pins
            ;----------------------------------------------------------------
            dbCreateLabel(cv list("pin" "drawing") pl+ps/2:0
                netH~>name "centerLeft" "R0" "stick" lh)
            dbCreateLabel(cv list("pin" "drawing") pl+ps/2:-ps
                netL~>name "centerLeft" "R0" "stick" lh)
            dbCreateLabel(cv list("pin" "drawing") bw+pl-ps/2:0
                busOut~>name "centerRight" "R0" "stick" lh)
    
            ;----------------------------------------------------------------
            ; And other symbol labels
            ;----------------------------------------------------------------
            label=dbCreateLabel(cv list("annotate" "drawing7") bw+pl-ps/2:ps*1.5
                "cdsName()" "centerRight" "R0" "stick" lh)
            label~>labelType="ILLabel"
            label=dbCreateLabel(cv list("annotate" "drawing") pxc:0
                "cdsParam(1)" "centerLeft" "R0" "stick" lh)
            label~>labelType="ILLabel"
            label=dbCreateLabel(cv list("annotate" "drawing") pxc:-ps
                "cdsParam(2)" "centerLeft" "R0" "stick" lh)
            label~>labelType="ILLabel"
    
            t
            ) ; let
        )
        dbSave(pcellId)
        dbClose(pcellId) 
    
    ;------------------------------------------------------------------------
    ; Now create the CDF
    ;------------------------------------------------------------------------
        let( (cellId cdfId )
            unless( cellId = ddGetObj( library cell )
                error( "Could not get cell %s." cell )
            )
            when( cdfId = cdfGetBaseCellCDF( cellId )
                cdfDeleteCDF( cdfId )
            )
            cdfId  = cdfCreateBaseCellCDF( cellId )
    
            ;;; Parameters
            cdfCreateParam( cdfId
                ?name           "buswidth"
                ?prompt         "Bus Width"
                ?defValue       6
                ?type           "int"
                ?display        "t"
            )
            cdfCreateParam( cdfId
                ?name           "busvalue"
                ?prompt         "Bus Value"
                ?defValue       0
                ?type           "int"
                ?display        "t"
            )
    
            ;;; Simulator Information
            cdfId->simInfo = list( nil )
            cdfId->simInfo->UltraSim = '( nil )
            cdfId->simInfo->ams = '( nil )
            cdfId->simInfo->auCdl = '( nil )
            cdfId->simInfo->auLvs = '( nil )
            cdfId->simInfo->cdsSpice = '( nil )
            cdfId->simInfo->hspiceD = '( nil )
            cdfId->simInfo->hspiceS = '( nil )
            cdfId->simInfo->spectre = '( nil )
            cdfId->simInfo->spectreS = '( nil )
    
            ;;; Properties
            cdfId->formInitProc            = ""
            cdfId->doneProc                = ""
            cdfId->buttonFieldWidth        = 340
            cdfId->fieldHeight             = 35
            cdfId->fieldWidth              = 350
            cdfId->promptWidth             = 175
            cdfId->paramLabelSet           = "buswidth busvalue"
            cdfId->paramDisplayMode        = "parameter"
            cdfId->paramEvaluate           = "t nil nil nil nil"
            cdfSaveCDF( cdfId )
        ) ; let
    ) ; let
    
    

     

    • Post Points: 20
  • Wed, Jul 27 2011 4:42 AM

    Re: symbol PCELL extraction issue. Reply

    Andrew,

     I loaded this PCell into my library and tried to netlist it with Virtuoso CDL Out tool (File->Export->CDL) and it fails in the same way stating that the instance was changed and need to re-extract the containing schematic.  It seems to me that this is some type of Cadence Wrapper software issue.

     If you might have some other tricks up your sleeve, it would be nice to try, but thank you for your help.

    Mitchell Cohen

    • Post Points: 20
  • Wed, Jul 27 2011 5:11 AM

    Re: symbol PCELL extraction issue. Reply

    Mitchell,

    I'm assuming you've placed an instance of busset in your schematic, checked-and-saved that schematic, and then tried to netlist your schematic (rather than netlisting busset itself)?

    If so, which subversion of IC5141 are you using (type getVersion(t) in the CIW to find out)?

    Thanks,

    Andrew.

    • Post Points: 20
  • Wed, Jul 27 2011 5:18 AM

    Re: symbol PCELL extraction issue. Reply

    Andrew,

    You are correct with the order of operations I took to try and netlist the schematic.

    sub-version 5.10.41.500.6.145

    Thanks

    Mitchell Cohen

    • Post Points: 20
  • Wed, Jul 27 2011 5:27 AM

    Re: symbol PCELL extraction issue. Reply

    Mitchell,

    That's recent enough (from October 2010), so I would expect it to be OK. Can you post the si.log file that you get from the busset example. I've tried various things to break it - and can't. Even loading "busset.il" after creating the schematic (assuming that I don't still have the schematic open) works. If I have the schematic open it prompts me to save it (and then it fails because it hasn't been check-and-saved, but that's reasonable).

    I assume you're only loading busset.il from the CIW, and not putting a load in a libInit.il, .simrc, or .cdsinit (which wouldn't work anyway, but would not cause this failure).

    Andrew.

    • Post Points: 20
Page 1 of 2 (19 items) 1 2 Next >
Sort Posts:
Started by fishbulb15 at 22 Jul 2011 12:43 PM. Topic has 18 replies.