• Skip to main content
  • Skip to search
  • Skip to footer
Cadence Home
  • This search text may be transcribed, used, stored, or accessed by our third-party service providers per our Cookie Policy and Privacy Policy.

  1. Community Forums
  2. Custom IC SKILL
  3. How to automate simulation of testbench, cycling schematic...

Stats

  • Locked Locked
  • Replies 7
  • Subscribers 144
  • Views 18528
  • Members are here 0
This discussion has been locked.
You can no longer post new replies to this discussion. If you have a question you can start a new discussion

How to automate simulation of testbench, cycling schematic DUT in it.

JanH
JanH over 15 years ago

 Hi,

 I'd like to automate the process of simulating a testbench (always the same toplevel testbench) in which the DUT's schematic view gets replaced automatically. 

We have a library with lots of DUT's (we don't know how many at this point but probably a lot, that's why we want to automate this), all with the same symbol but different topology in it. 

We would like to simulate all these DUT's with the same testbench using the same set of stimuli and post process the results afterwards. This is a very time consuming and repetitive action which we'd like to automate.

The problem I'm facing however is that I have no idea on how to automate this:

Taking care that for each DUT present in a library we can force the recreation of a netlist (using a config view as we intend to use extracted views for some of the cells instantiated in those DUT's), start the simulation on this recreated netlist, post-process the results (store it and/or merge it with the previous results) and when finished start over again with a new DUT.

 Any advise on how to accomplish this would be great!

Thank you.

 

Jan.

  • Cancel
  • Riad KACED
    Riad KACED over 15 years ago

    Hi Jan,

    1. You first need to create your testbench. I have posted an example on how to create a schematic by Skill at the following location: 

    2. Then you need to create an ocean script for your design, something that roughly contains the following (Assuming Spectre as your simulator):

    ; Ocean file starts here

    simulator('spectre)

    design("libName" "cellName" "schematic")

    ; Or design("PATH_TO_YOUR_DESIGN")

    ; any other options

    createNetlist()

    run()

    ;

    You better manually create your ocean script from ADE the first time to have an idea what to put in there.

    3. Load your ocean script to get it executed, i.e. get Spectre to run.

    4. Post process your results. Well, I can;t say anything for this one as you are the one who knows what to do ...

    Hope these snippets are helpful for you to start with. Look at http://groups.google.com/group/comp.cad.cadence/ where thousands of skill codes are available.

     

    Cheers, Riad.

    PS: My initial post from Google Chrome did not show any formating option, I may need to report this to Cadence ...

    • Cancel
    • Vote Up 0 Vote Down
    • Cancel
  • Andrew Beckett
    Andrew Beckett over 15 years ago

    If all your device under tests have equivalent symbols (i.e. same pin out, same positions), then something like the following would do the trick:

    duts='("mycell1" "mycell2" "mycell3")
    tbCV=dbOpenCellView("myLib" "testbench" "schematic")
    ; assume the DUT instance has an instance name of "DUT"
    simulator('spectre)
    design("myLib" "testbench" "schematic")
    ; set up common simulation setup
    analysis(...)
    desVar(...)
    foreach(dut duts
      ; replace the instance with the new symbol, then check and save
      dutInst=dbFindAnyInstByName(tbCV "DUT")
      dutMaster=dbOpenCellViewByType("myLib" dut "symbol")
      dutInst~>master=dutMaster
      schCheck(tbCV)
      dbSave(tbCV)
      ; assume you want to keep the results for each DUT separate
      resultsDir(strcat("/path/to/somewhere/" dut))
      ; this will renetlist, because the top cellView changed
      run()
      ; post processing here
    )

    Regards,

    Andrew.

    • Cancel
    • Vote Up 0 Vote Down
    • Cancel
  • JanH
    JanH over 15 years ago

     Hi Riad,

    Thanks for your reply. This one, combined with Andrew's feedback will certainly help me. I can use your advise on the backend part: Getting the stuff simulated and postprocessed. 

    On the frontend part I think Andrew's advise helps a lot as we indeed have uniform symbols for every DUT. So I should be able to apply his code for that.

    • Cancel
    • Vote Up 0 Vote Down
    • Cancel
  • JanH
    JanH over 15 years ago

     Hi Andrew,

    Thanks for your solution on how to solve the frontend part (swapping the schematic views of the DUT's). There is one thing still not sorted out for me though:

    We are indeed dealing with several DUT's which all have the same symbol (so there is no need for rewiring at the toplevel!) but the testbench itself uses a config view via which we make sure that the correct (extracted) netlists will be used for the instantiated logic gate-cells inside the DUT's. Do I need to trigger some special HED skill procedures in order to get the correct netlist?

     Thanks,

    Jan.

    • Cancel
    • Vote Up 0 Vote Down
    • Cancel
  • Andrew Beckett
    Andrew Beckett over 15 years ago

    Jan,

    It depends on what exactly you want to configure. You could set the binding on the DUT instance, rather than a "cell" binding. You could use the inherited view list on the instance to alter the preferred view order.

    If you need to have different bindings for different DUTs, you'd need to use the hdb SKILL functions to create a config, potentially. But hopefully that wouldn't be needed?

    Regards,

    Andrew.

    • Cancel
    • Vote Up 0 Vote Down
    • Cancel
  • JanH
    JanH over 15 years ago

    Hi Andrew,

     As for now the DUT's are one level deep (on top of a PDK). The in-between level is a logic library for which we have created extracted views for every logic cell in it. It is these views we want to use i.s.o. the normal "schematic" views. That's the only motivation for us to use a config view for the testbench.

    • Cancel
    • Vote Up 0 Vote Down
    • Cancel
  • Andrew Beckett
    Andrew Beckett over 15 years ago

    Hi Jan,

    OK. So the way to do that would be to use the tree view in the HED, and specify for instance DUT that you want the view to use to be "schematic", but the inherited view list to be "extracted ..." (i.e. extracted at the beginning). This means that it will pick up schematic for the DUT itself, but any instantiated cells will prefer extracted over schematic.

    And because you used the tree view, which is an instance binding, your config would not need to change from one DUT to the next.

    You'd set the design() in your OCEAN script to be design("myLib" "testbench" "config")

    Does that help?

    Regards,

    Andrew.

    • Cancel
    • Vote Up 0 Vote Down
    • Cancel

Community Guidelines

The Cadence Design Communities support Cadence users and technologists interacting to exchange ideas, news, technical information, and best practices to solve problems and get the most from Cadence technology. The community is open to everyone, and to provide the most value, we require participants to follow our Community Guidelines that facilitate a quality exchange of ideas and information. By accessing, contributing, using or downloading any materials from the site, you agree to be bound by the full Community Guidelines.

© 2025 Cadence Design Systems, Inc. All Rights Reserved.

  • Terms of Use
  • Privacy
  • Cookie Policy
  • US Trademarks
  • Do Not Sell or Share My Personal Information