P a g e
, inelectronic design automation,is the task of verifying that thelogic
designconforms to specification. In everyday terms, functional verification attempts to answerthe question "Does this proposed design do what is intended?" This is a complex task, and takesthe majority of time and effort in most large electronic system design projects.Functional verification is very difficult - it is equivalent toprogram verification,and isNP-
hardor even worse - and no solution has been found that works well in all cases. However, itcan be attacked by many methods. None of them are perfect, but each can be helpful in certaincircumstances:
Simulation acceleration applies special purpose hardware to the logic simulationproblem.
Emulation builds a version of system using programmable logic. This is expensive, andstill much slower than the real hardware, but orders of magnitude faster than simulation. Itcan be used, for example, to boot the operating system on a processor.
Formal verificationattempts to prove mathematically that certain requirements (alsoexpressed formally) are met, or that certain undesired behaviors (such as deadlock) cannotoccur.
HDL-specific versions of lint,and other heuristics, are used to find common problems.Simulation based verification (also called'dynamic verification') is widely used to "simulate" thedesign, since this method scales up very easily. Stimulus is provided to exercise each line in theHDL code. A test-bench is built to functionally verify the design by providing meaningfulscenarios to check that given certain input, the design performs to specification.A simulation environment is typically composed of several types of components:
(or irritator) generates input vectors. Modern generatorsgenerate random, biased, and valid stimuli. The randomness is important to achieve a highdistribution over the huge space of the available input stimuli. To this end, users of thesegenerators intentionally under-specify the requirements for the generated tests. It is therole of the generator to randomly fill this gap. This mechanism allows the generator tocreate inputs that reveal bugs not being searched for directly by the user. Generators alsobias the stimuli toward design corner cases to further stress the logic. Biasing andrandomness serve different goals and there are tradeoffs between them, hence different