[1] Functional verification attempts to answer the question "Does this proposed design do what is intended?
[1] Functional verification is very difficult because of the sheer volume of possible test-cases that exist in even a simple design.
Frequently there are more than 10^80 possible tests to comprehensively verify a design – a number that is impossible to achieve in a lifetime.
This effort is equivalent to program verification, and is NP-hard or even worse – and no solution has been found that works well in all cases.
A simulation environment is typically composed of several types of components: Different coverage metrics are defined to assess that the design has been adequately exercised.