K
KJ
Ideally, your final test
should be a black box test, with a self checking testbench. It worries
me when I see designers stare at waveforms all day and using this for
their verification. They should be using output data as the test - no
waveforms needed.
Just to be clear, I'm not talking about using waveforms for
verification. What they are used for is investigation when the
verification assertion fails...after all, one does not intentionally
write bad code in the first place so the fact that an assertion has
failed implies there is a problem somewhere that needs investigating.
If the root cause of the problem (which you do not know a priori)
happens to have occurred at the same time as the assertion (which is a
symptom, not the problem itself), then one will have access to the
*current* state of all signals and variables. Maybe that's enough to
solve the problem, but many times one needs to see some history in
addition to the current state of signals and variables in order to
make the definitive diagnosis.
By Andy's own admission he does not solve the current problem but
typically can wait for the problem to occur again after the first time
- "just catch it again on the next time around"
- "and insert a few breakpoints and monitors if necessary" (implies
running the sim s'more)
Sometimes (maybe many times) that is sufficient. But it is just as
likely that whatever the original problem that caused the first
assertion, if you continue running the sim, has now caused a second
downstream problem that just makes it more difficult because the
symptoms of this secondary problem is less directly related to the
original problem.
Even the software guys write out a trace log file which captures
important (to them) information about events that happen. They don't
simply capture the current state of everything at the point of the
failure...the history of what leads up to the problem is generally the
key to solving the problem. The fact that this history gets stored in
a file that is viewable as signals in a sim tool and not as a list of
statement executions is not relevant and has nothing to do with
'source code debugging'. It means you're making use of the tools that
are available. Not using the history that is available to you is a
choice and has a cost, but that choice is not about 'source code
debugging' versus 'waveform debugging'
Kevin Jennings