finding nodes and instances in skill

Discussion in 'Cadence' started by Mark Summers, Mar 13, 2005.

  1. Mark Summers

    Mark Summers Guest

    my ultimate goal is to generate a skill routine that will extract timing
    information from a spectre(most likely run through ocean) to allow for
    digital timing verification on custom digital blocks. I want to get setup
    and hold margin.

    In order to accomplish this I need to find the clock and data inputs of all
    flip-flops in the schematic. I need a function that will search through the
    hierarchy for instances that are flip-flops and then return the nodes
    connected to the data and clock inputs. These nodes that are returned need
    to be correct with respect to the simulation schematic hierarchy. IE if a
    flip-flop is two levels down, function should return
    ILEVEL1/ILEVE2/NODENAME.

    If anyone has any suggestions on methods to search a simulation schematic
    and return all nodes connected to each flip-flop instance I would
    appreciate it.

    Also if anyone knows of the location of scripts that have already solved the
    digital timing verification problem, I would appreciate that.

    Thanks
    Mark
     
    Mark Summers, Mar 13, 2005
    #1
  2. Mark Summers

    Keith S. Guest

    Your best bet is to use OSS to flatten the schematic to a new view
    (simFlattenWithArgs is the function to look at). Then check each
    instance in this view, and if it's a flop, look at its instTerms
    and find the nets connected to the inputs you're interested in.
    The flattener will take take of the hierarchical net naming for
    you.

    - Keith
     
    Keith S., Mar 14, 2005
    #2
  3. Mark Summers wrote:
    [snip]
    I've taken a stab at this before. The code pretty much recursively
    decends the design hierarchy, building the hierarchy path one instance
    at a time. Where I became stuck was on signals whose local nets are
    connected to something further up the design hierarchy or at the
    top-level.

    On these cases the node name I would build was "/DUT/I34/I35/VDD".
    Trying to get the voltage using Ocean would fail:

    v( "/DUT/I34/I35/VDD". ?results 'tran)

    because this is actually connected to the top level "VDD" node. In
    these cases the following would work:

    v( "/VDD" ?results 'tran)

    Does anyone know if there is a public function that can used to map the
    local node name to the one at the highest level of hierarchy?

    Jason
     
    jason.dot.jacobs, Mar 16, 2005
    #3
  4. Mark Summers

    Mark Summers Guest

    I have the same problem that you are describing. Any help would be good
     
    Mark Summers, Mar 17, 2005
    #4
  5. Personally I wouldn't do this by flattening the schematic - unless you really
    need to. If you can gather the information whilst traversing the hierarchy
    (using some kind of recursive function) that will generally be more efficient
    than producing a flattened database.

    Sometimes you need a persistent flattened database (often for floorplanning
    type reasons) - but for this type of usage, I'd probably not go about it by
    flattening the hierarchy.

    If however you're likely to need the flattened hierarchy information several
    times for different purposes, then it may be worth doing. Also, if the design
    size is small, it doesn't really matter.

    A few years back one of my colleagues used a flattening type approach
    (although he didn't do it with OSS) - and once I'd made some suggestions about
    doing it recursively, and we'd optimised the code, a run with a very large
    database went from several hours down to something like 90 seconds...

    Of course, your mileage may vary.

    Andrew.
     
    Andrew Beckett, Mar 17, 2005
    #5
  6. OSS, not OOS. Open Simulation System. Look for it in cdsdoc.
    Nothing like reading the manual to learn how to do something ;-)

    Mind you, consider my previous post - this may be the simplest method, but not
    necessarily the most efficient (depending on your needs).

    Andrew.
     
    Andrew Beckett, Mar 17, 2005
    #6
  7. good

    Hi Mark,

    I've been in touch with Cadence support (very helpful) and have
    something that should work.

    geGetAdjustedPath() is the procedure we are looking for. However it
    requires a windowId as the first argument. Providing a cellView as the
    third argument returns the path relative to that instance, so passing
    the top-level cellview as this argument is the same as omitting it. In
    these cases I'm not sure why the window argument would still be
    required, but the function fails if a valid windowId is not passed.

    If you already have a window with the design open you can use
    hiGetCurrentWindow() to get the window ID. If not, you can just create
    a new window like so:

    myWindow=hiCreateWindow('default "graphics" "t")

    This new window will not get displayed. Be sure to close it with
    hiCloseWindow() afterward. Unfortunately, there is something wrong
    with my installation and doing this causes ICFB to crash, but the
    support person tested it successfully.

    Let us know if you have success with this.

    Jason
     
    jason.dot.jacobs, Mar 31, 2005
    #7
  8. good

    Hi Mark,

    I've been in touch with Cadence support (very helpful) and have
    something that should work.

    geGetAdjustedPath() is the procedure we are looking for. However it
    requires a windowId as the first argument. Providing a cellView as the
    third argument returns the path relative to that instance, so passing
    the top-level cellview as this argument is the same as omitting it. In
    these cases I'm not sure why the window argument would still be
    required, but the function fails if a valid windowId is not passed.

    If you already have a window with the design open you can use
    hiGetCurrentWindow() to get the window ID. If not, you can just create
    a new window like so:

    myWindow=hiCreateWindow('default "graphics" "t")

    This new window will not get displayed. Be sure to close it with
    hiCloseWindow() afterward. Unfortunately, there is something wrong
    with my installation and doing this causes ICFB to crash, but the
    support person tested it successfully.

    Let us know if you have success with this.

    Jason
     
    jason.dot.jacobs, Mar 31, 2005
    #8
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.