Assura RCX and blackBoxing

Discussion in 'Cadence' started by rickm, Mar 10, 2008.

  1. rickm

    rickm Guest

    This is a solution from sourcelink, has anyone gotten it to work? Im
    trying to run blackBox RCX . There are cell dependencies so an
    extract BB will fail LVS.

    Thanks

    Rick


    http://sourcelink.cadence.com/en/se...sing Black box for <b>RCX</b> extracted views.

    Using Black box for RCX extracted views.

    Error Message:
    None

    Problem statement:
    I create a black box extracted view and the black box cell became a
    layout view
    which does not work in the hierarchy editor.

    How do I use Black box and create an extracted view which will allow
    me to switch in the
    schematic for the black boxed item?

    How do I switch in a schematic view inside an extracted view using
    RCX?

    Solution:
    There are 3 modes you can use for RCX extraction:

    a) flat
    b) hrcx
    c) blackbox

    However, if you want to be able to use the hierarchy editor for
    switching in a level of the
    circuit below the topcell, neither flat or HRCX will work. Flat of
    course will have
    transistor representations for the particular block and HRCX, while
    hierarchical is
    the hierarchy defined by choice of the RCX tool and not necessarily
    matching the
    symbol you want to switch in.

    The following skill code has been used to allow you to use LVS/RCX
    blackboxing for the
    lower level cell. The default returned instance for that cell in RCX
    is a layout
    view.

    This is because RCX does not have reference to the symbol and its
    busses nor does it have
    visibility into the netSets (or inheritance) that is used.

    This skill routine tries to figure out what symbols busses and netSets
    are available and
    attempts to match those with the instance reference created by the RCX
    extraction.

    To use this procedure read about the ?callProc command of the
    rcxParameters section.
    Call this procedure using that method. The procedure will report
    netSets and bus
    connections as part of its output. Review that and review the
    extracted view for
    valid connectivity to the symbols.

    Make sure the cds.lib file has visibility into your topcell schematic
    and the symbol to
    be inducted to the extracted view.

    procedure( avExtractedCellViewCallProc( cvID )
    ;provided without warranty, you must validate its use yourself

    schID = dbOpenCellViewByType(cvID~>libName cvID~>cellName
    "schematic")

    foreach( inst cvID~>instances
    if(inst~>viewName == "layout" then
    printf("Beginning Cell Replacement for %s\n" inst~>name)
    conn_list = nil
    xy=inst~>xy
    ll = car(inst~>bBox)
    ur = cadr(inst~>bBox)
    xy=list( xCoord(ll) + (xCoord(ur) - xCoord(ll)) / 2.0
    yCoord(ll) + (yCoord(ur) - yCoord(ll)) / 2.0 )
    instName = inst~>name
    cellName = inst~>cellName
    libName = inst~>master~>libName
    foreach(conn inst~>instTerms
    conn_list=append1(conn_list list(conn~>name
    conn~>net~>name))
    )
    dbDeleteObject(inst)
    newInst = dbCreateInstByMasterName(cvID libName cellName
    "symbol"
    instName xy "R0")

    dbSymbol = dbOpenCellViewByType(libName cellName
    "symbol")

    dupstop = nil
    foreach(instRef dbSymbol~>instRefs
    foreach(prop instRef~>prop
    if(prop~>valueType == "netSet" && setof(item
    dupstop
    item==prop~>name) == nil then
    dupstop = append1(dupstop prop~>name)
    dbCreateProp(newInst prop~>name
    prop~>valueType prop~>value)

    printf("copy prop from %s named %s with value %s
    \n"
    instRef~>name prop~>name prop~>value)
    )
    )
    )
    foreach(term dbSymbol~>terminals
    splitBus = parseString(term~>name "<:>")
    if(length(splitBus) == 1 then
    conn_pair = setof(item conn_list
    car(item)==term~>name)
    netName = cadar(conn_pair)
    printf(" Connect a scalar net %s to " term~>name)
    print(
    netName) printf("\n")
    net = dbMakeNet(cvID netName)
    xx=dbCreateConnByName(net newInst term~>name)

    else
    printf(" Gather and connect a bus %s\n" term~>name)
    primeNet = car(splitBus)
    left = evalstring(cadr(splitBus))
    right = evalstring(caddr(splitBus))
    if(left > right then inc=-1 else inc=1)
    inx=left-inc
    conn_string=""
    while(inc == 1 && inx < right || inc!=1 && inx >
    right
    inx=inx+inc
    subNet=sprintf(x "%s<%d>" primeNet inx)
    conn_pair = setof(item conn_list
    car(item)==subNet)
    if(conn_pair == nil then
    netname = "nil"
    else
    netName = cadar(conn_pair)
    )
    conn_string=sprintf(x "%s,%s" conn_string
    netName )
    )
    conn_string = substring(conn_string 2)
    printf(" connect in order of %s\n" conn_string)
    netList = dbMakeNet(cvID, conn_string)
    ConnByName = dbCreateConnByName(netList newInst
    term~>name)

    )
    )
    dbClose(dbSymbol)
    printf("\n")
    )
    )
    dbClose(schID)
    )
     
    rickm, Mar 10, 2008
    #1
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.