I use the phrase “Escape the Lab Trap” a lot in my presentations. It means that you don’t have to sit in the lab for a hundred years trying to debug a block of silicon if you simulate the RTL first.
Yet, the other day I was giving a presentation and one of the engineers presented me with a new concept: The Simulation Trap.
This phrase captures an objection to simulation that I hadn’t considered. The objection sounds like this, “You could just sit there and simulate that thing forever, but eventually you’ll have to go into the lab. Why not just go to the lab.”
An interesting viewpoint. It points out that we can waste time by simulating too much, and if we don’t have a simulation goal then it is correct.
Fortunately we do have a goal, and it is provided by code coverage and functional coverage.
The code coverage goal has two parts. You are finished simulating when you have the following:
- A list of reviewed exceptions—This is a list of things everyone agrees does not need to be covered. For example the transitions from states in a state machine to the reset state.
- 100% Code Coverage—Once you have a list of what you won’t cover, you then make sure you cover the rest.
Functional coverage has a simpler goal. Before you start you make a list of all the functionality that needs to be covered, such as touching all the locations in a lookup table, then you make sure you covered them.
Having an end goal for simulation is essential to success. It allows you to place a “Simulation Complete” milestone on your schedule, and that gets you out of the Simuation Trap.