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!
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
design("libName" "cellName" "schematic")
; Or design("PATH_TO_YOUR_DESIGN")
; any other options
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.
PS: My initial post from Google Chrome did not show any formating option, I may need to report this to Cadence ...
In reply to Riad KACED:
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 setupanalysis(...)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)
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.
In reply to Andrew Beckett:
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?
In reply to JanH:
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?
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.
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?