Alternative view for the spectre switches

Discussion in 'Cadence' started by svenn.are, Oct 7, 2003.

  1. svenn.are

    svenn.are Guest

    Hi,

    in spectre there is an entity switch which can be used to change input
    sources between simulations. It is a very practical thing as one can
    set position depending on what simulation (ac dc tran etc.) The symbol
    itself is ok enough, but I have a serious problem that the throw is
    always in the same position. I guess it is the position 1. When I
    debug a simulation I insert loads of sources and use the switch to
    switch among them, now is there a way to attach different alternative
    views to the switch so that one will show it open and one will show it
    closed or in whatever position actually fits the "position" property.
    It doesn't nescesary need to be a connection between the symbol and
    the property, just the possibility to change the graphical outline of
    the symbol in order to have a quick visual understanding of the
    connection. This is useful when viewing other things than the
    parameter annotation.
     
    svenn.are, Oct 7, 2003
    #1
  2. Hi Svenn,

    One possibility is to build your own switch component, based on those
    in analogLib. I'd create two views of the symbol, one with the switch
    drawn as open, and one as closed.

    Then you can create a pcell for the main symbol, as I've done in the
    past for 3/4 terminal mosfets. The code below demonstrates
    doing precisely that - and you could easily adapt this to the switch
    example. In the code below, I have two symbols, with view
    symbol1 and symbol2. I started from the pmos in analogLib, copied
    the symbol view to symbol1, and then copied the pmos4/symbol
    to pmos/symbol2. I added a parameter called "Type" which
    had values "3" or "4" (as a cyclic), and then the pcell took
    care of the rest.

    Don't have time right now to put together a full example of the
    switch, but hopefully you can fathom it out from this?

    Regards,

    Andrew.

    pcDefinePCell(
    ; target cellView
    list(ddGetObj("sympcells") "pmos" "symbol" "schematicSymbol")

    ; formal parameters
    (
    (Type "3")
    )

    ; code itself
    let((instId master)
    viewName=
    case(Type
    ("3" "symbol1")
    ("4" "symbol2")
    (t "symbol1")
    )
    master=dbOpenCellViewByType("sympcells" "pmos" viewName)
    instId=dbCreateInst(pcCellView master "" 0:0 "R0")
    ; Copy the instance box - this vanishes during the flatten
    foreach(shape
    car(exists(lpp master~>lpps lpp~>layerName=="instance"))~>shapes
    dbCopyFig(shape pcCellView)
    )
    ; flatten the instance, preserving the pins
    dbFlattenInst(instId 1 t t)
    )
    )
     
    Andrew Beckett, Oct 13, 2003
    #2
  3. svenn.are

    svenn.are Guest

    somehow I get only the message that pcDefinePCell function is not
    defined. I have found that there is a pcell.cxt and guess that I have
    to load an environment. And I fear that this is either the skill
    development package or the layout package to which I do not have a
    lisence. Comment?
     
    svenn.are, Oct 14, 2003
    #3
  4. Hi Svenn,

    It doesn't require the SKILL development package, or indeed any license. You
    do however need to run one of the executables with layout capability to
    get this context to auto-load. So if you run layout, layoutPlus, msfb or icfb
    it should work. The pcDefinePCell is only needed at the time you build your
    new component; once defined, it should work fine in icde, icds, icms etc.

    Regards,

    Andrew.
     
    Andrew Beckett, Oct 15, 2003
    #4
  5. svenn.are

    svenn.are Guest

    of course, you are right. I spent some time looking for the way the
    executables load their contexts after I posted my question, and after
    a search on 'context' in the manual, the skill comand 'loadContext'
    came to my eyes.

    loadContext "/opt/cds/ic500/tools.sun4v/dfII/etc/context/pCellGen.cxt"
    callInitProc "pCellGen"
    load "switch.il"

    and all that complained was a call to 'le*whatever*' but the pcell
    functionallity that you described works as you described. I attach my
    switch.il in order to give fellow unskilled programmers something to
    chew on.

    In your description you attached a 'Type' label that can (in my code)
    be set to 0 or 1 in order to describe the position of the switch. Now,
    the simulation switches in analogLib already have the parameter
    position available, so I thought, why not just replace 'Type' with
    'position', needless to say, it works.
    It is a pure joy to edit the symbol position in the object data and
    watch how the switch moves when pushing the 'apply' button.

    I am already dreaming of the mux symbol that turns itself due to the
    select input value.

    As usual I have lispified my code to give a brain teaser. (Although I
    have to admit that some of the 'instant look' understanding of the ~>
    operator is inevitable lost with all those 'get' statements.)

    As usual comments are most welcome.

    'switch.il'

    (pcDefinePCell
    ; target cellView
    (list (ddGetObj "sympcells") "switch" "symbol" "schematicSymbol")

    ; formal parameters
    ((position "0"))

    ; code itself
    (let (instId master)
    (setq viewName
    (case position
    ("0" "symbol0")
    ("1" "symbol1")
    (t "symbol1")))
    (setq master (dbOpenCellViewByType "sympcells" "switch" viewName))
    (setq instId (dbCreateInst pcCellView master "" 0:0 "R0"))

    ; Copy the instance box - this vanishes during the flatten
    (foreach shape
    (get (car (exists lpp (get master lpps) (equal (get lpp
    layerName) "instance")) shapes)
    (dbCopyFig shape pcCellView))
    ; flatten the instance, preserving the pins
    (dbFlattenInst instId 1 t t))))
     
    svenn.are, Oct 16, 2003
    #5
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.