Home > Community > Forums > Custom IC Design > SKILL to modify layout parameter

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

 SKILL to modify layout parameter 

Last post Wed, Feb 27 2013 5:17 PM by theopaone. 6 replies.
Started by 40Ford 26 Feb 2013 12:47 PM. Topic has 6 replies and 1108 views
Page 1 of 1 (7 items)
Sort Posts:
  • Tue, Feb 26 2013 12:47 PM

    • 40Ford
    • Not Ranked
    • Joined on Thu, Feb 21 2013
    • Posts 5
    • Points 85
    SKILL to modify layout parameter Reply

    I have written SKILL functions to change or add parameters to a cellView. What I need to do now is grab the value of a parameter from a schematic and copy that value to the corresponding layout.

    The parameter is called "connectivity" and I only want to change the value in cell "option". Yes, "option" is the cellName.

    I know how to grab and instance and grab the property in SKILL but what I can't understand is how to know I'm getting the corresponding layout view for that instance.

     Any suggestions?

    • Post Points: 20
  • Wed, Feb 27 2013 10:47 AM

    • theopaone
    • Top 50 Contributor
    • Joined on Tue, Feb 12 2013
    • Cedar Park, TX
    • Posts 136
    • Points 2,050
    Re: SKILL to modify layout parameter Reply

    A parameter and a property are two distinct objects, a parameter is assigned to pcells as the interface to the pcell program. A property is a way to assign data to a database object like a cellView master or an instance.

    I am assuming you are assigning a property to a cellView master. When you find the instance, you are assigning/adding/getting the value of the property on the instance's master cellView. That cellView master in the schematic is a symbol view. The symbol view should have corresponding views in the same library for layout and schematic. If the layout is in another library or goes by another name, you have to follow your design group methodology to get the correct library/cell name. Once you have determined the name of the layout cellView, you can open that master using dbOpenCellViewByType with "a" for append. Then you can add the property using dbReplaceProp on the cellView ID.

     masterId = dbOpenCellViewByType( instId~>libName "option" "layout" nil "a" )

    dbReplaceProp( masterId  "connectivity" 'string "new value" )

    dbSave( masterId )

     I hope I understood what you needed to do.

    Ted

    • Post Points: 20
  • Wed, Feb 27 2013 11:30 AM

    • 40Ford
    • Not Ranked
    • Joined on Thu, Feb 21 2013
    • Posts 5
    • Points 85
    Re: SKILL to modify layout parameter Reply

     Hi Theopan,

     I appreciate your response. It is a parameter in a layout cell that I'm am trying to set.  However the value of the parameter comes from the corresponding schematic view property.

    The difficulty for me is not setting parameters. What I've been unable to figure out is how to extract that value from the same instance in the schematic.

     I have a cell with numerous instantiations of the 'option' cell. The instantiations in the schematic are using pPar("var") as value for the "connectivity" property. In the layout the connectivity parameter is hardcoded to an integer value. What I want to do is grab the value from the schematic instantiation and set it to the value for the corresponding layout instantiation.

     I can get the values of each schematic instantiation in a list but I haven't yet been able to get the values set is the correct layout instantiations.

     Hope that makes sense. This is one of those things that is really actually very simple to show but difficult to explain.

    Cheers,

     

    • Post Points: 20
  • Wed, Feb 27 2013 12:02 PM

    • theopaone
    • Top 50 Contributor
    • Joined on Tue, Feb 12 2013
    • Cedar Park, TX
    • Posts 136
    • Points 2,050
    Re: SKILL to modify layout parameter Reply

    OK, there is a difference in the use of certain terms here. When you speak of a view, it is assumed that you are refering to the master of the cellView. The property would be on the master and would be the same no matter how many times the cell was instantiated. In your case, you want to modify the parameter on a layout instance based on the corresponding schematic instance.

    If you are using the VXL layout methodology, each instance in the schematic has an instance name and the layout has a corresponding  instance name (based on the hierarchy which was flattened from the schematic). I don't know if there is an exposed API for finding the corresponding named instances but the names are hierarchical with a pipe (|) as a separator.

    If you are not using VXL, you have to use some extraction tool to find the correspondence between the schematic and master. You will have to get more help to figure that one out.

    Ted

    • Post Points: 20
  • Wed, Feb 27 2013 12:09 PM

    • 40Ford
    • Not Ranked
    • Joined on Thu, Feb 21 2013
    • Posts 5
    • Points 85
    Re: SKILL to modify layout parameter Reply

     It is tricky. For now I am assuming that the baseName (instance name in the views) are in line. I might be able to get something to work with that assumption. Definitely not a bullet proof method but that's my approach until someone with more skill than me comes across with a better suggestion.

     Thanks again,

    Cheers,

    • Post Points: 5
  • Wed, Feb 27 2013 5:01 PM

    • 40Ford
    • Not Ranked
    • Joined on Thu, Feb 21 2013
    • Posts 5
    • Points 85
    Re: SKILL to modify layout parameter Reply

     This may have worked. I haven't thoroughly verified it yet.

     procedure(reset_default_param()
        let((clv csv instList layInstList schInstList schInstName schParamValue numelem)
            clv = geGetEditCellView()
            csv = dbOpenCellViewByType(clv~>libName clv~>cellName "schematic" "schematic" "r")

            layInstList = clv~>instances
            schInstList = csv~>instances

            schInstName = setof(inst schInstList inst~>cellName == "option")~>baseName
            schParamValue = list()

            foreach(inst schInstList
                if(inst~>cellName == "option" then
                    schParamValue = append(schParamValue list( dbSearchPropByName(inst "connectivity")~>value))
                ) ; end if
            ) ; end foreach

            dbClose(csv)

            numelem = 1
            foreach(inst layInstList
                foreach(elem schInstName
                    if(inst~>baseName == strcat("|" elem) then
                        printf("\nmatch")
                        dbReplaceProp(inst "connectivity" 'string nthelem(numelem schParamValue))
                    ) ; end if
                ) ; foreach
                numelem = numelem + 1
            ) ; end foreach
        ) ; end let
    ) ; end procedure

     

    • Post Points: 20
  • Wed, Feb 27 2013 5:17 PM

    • theopaone
    • Top 50 Contributor
    • Joined on Tue, Feb 12 2013
    • Cedar Park, TX
    • Posts 136
    • Points 2,050
    Re: SKILL to modify layout parameter Reply

     Something to try is to search through the instHeaders instead of the instances. The instHeader defines the virtual memory master for the instances. It is much quicker becasue there are fewer instHeaders than instances.

    schIh = setof(  ih csv~>instHeaders ih~>cellName == "option" )
    schInsts = foreach( mapcan schIh schIh~>instances )

    ; Check the last line because I don't have Virtuoso access from home

    ; It should return a flattened list of the instances of the cell option

    layIh = setof( ih clv~>instHeaders ih~>cellName == "option" )
    layInsts = foreach( mapcan layIh layIh~>instances )

    I think mapcan is the right mappng function to use but read about them as they are very useful.

    It will greatly speed up your program as you are only sorting a few instHeaders.

     You can also make a DPL or a table which will map the schematic values using the schematic instance name. I would use a table:

    schParamValue = makeTable('values "" )

    ;; Add the pipe to the beginning of the name
    schParamValue[strcat( "|" inst~>name) ] =  dbSearchPropByName( inst "connectivity")~>value

    In the layout processing part you can then get the layout instance name and get the value from the  table directly:

    dbReplaceProp( inst "connectivity" 'string schParamValue[layoutInst~>name]

    Look up the table data structure for more info.

    Ted

     

    • Post Points: 5
Page 1 of 1 (7 items)
Sort Posts:
Started by 40Ford at 26 Feb 2013 12:47 PM. Topic has 6 replies.