I will first introduce the necessary concepts and tools of verification,
then I'll describe a process for planning and carrying out an
effective functional verification of a design. I will also introduce
the concept of coverage models that can be used in a coveragedriven
verification process.
It will be necessary to cover some VHDL and Verilog language
semantics that are often overlooked or oversimplified in textbooks
intent on describing the synthesizeable subset. These unfamiliar
semantics become important in understanding what makes a wellimplemented
and robust testbench and in providing the necessary
control and monitor features. Once these new semantics are understood
in a familiar language, the same semantics are presented in
new verification-oriented languages.
I will also present techniques for applying stimulus and monitoring
the response of a design, by abstracting the physical-level transac-tions into high-level procedures using bus-functional models. The
architecture of testbenches built around these bus-functional models
is important to create a layer of abstraction relevant to the function
being verified and to minimize development and maintenance
effort. I also show some strategies for making testbenches selfchecking.
Creating random testbenches involves more than calling the random()
function in whatever language is used to implement them. I
will show how random stimulus generators, built on top of busfunctional
models, can be architected and designed to be able to
produce the desired stimulus patterns. Random generators must be
easily externally constrained to increase the likelihood that a set of
interesting patterns will be generated.
Behavioral modeling is another important concept presented in this
book. It is used to parallelize the implementation and verification of
a design and to perform more efficient simulations. For many,
behavioral modeling is synonymous with synthesizeable or RTL
modeling. In this book, the term "behavioral" is used to
1