While a lot of information is produced to introduce and support individual verification techniques, methods for applying a variety of verification techniques in a complementary way are harder to come by. What’s here is a push in that direction; a rough guideline covering multiple techniques with suggestions for where each is most effective and how they integrate to verify a complete SoC.
The idea of building a verification flow isn’t at all new, but the possibilities for and constraints of such flows naturally change as new ideas emerge. The event that instigated this particular article was the release of the Early Adopter Portable Stimulus Standard. Long story short: with all the excitement around portable stimulus, I haven’t seen anyone paint a clear picture of how portable stimulus (a) integrates with or (b) replaces existing verification flows. To fill that void, I’ve mapped a set of possibilities for a generalized verification flow – one that includes portable stimulus – as a reference point.
I’ve included several techniques. Directed testing, constrained random and integrated HW/SW testing are already mainstream; unit testing is used on a much smaller scale; portable stimulus is newly introduced. You’ll see the focus is on test techniques; specific frameworks and tools are ignored.
I estimate the effectiveness and relative position of each verification technique as a function of scope and design abstraction. An abstraction is the granularity at which tests are written and interact with a design. I identify wires, methods, transactions, scenarios and use cases as possible abstractions. Scope is a set of logical design partitions of increasing size/complexity that include details, functions, features, feature sets and solutions. As a guideline, I suggest a technique is effective when applied using the suggested design abstraction within the suggested scope; verifying fine details requires low abstraction techniques to be effective, verifying product level solutions requires high abstraction techniques.
To be clear, this post is a friendly (but direct) challenge to the verification community at large. With the emergence of portable stimulus, we collectively need to replace the uncertainty around where it’s best applied with debate around where it’s best applied. As part of the debate, we should be discussing the merits of other verification techniques and how their value changes with the introduction of portable stimulus.
This is a debate that absolutely needs to happen. To that end, I cordially invite everyone that has anything to do with SoC development to participate in said debate. As long as you promise to use it within the bounds of reason – it’s hard to generalize the effectiveness of verification techniques in a way that suits everyone, feel free to use what I have here as a baseline. Agree and/or disagree as you see fit.