Hardware Design Cycle
The hardware design cycle is the process by which hardware designs are described, verified, and prepared for implementation. Modern hardware designs may be represented in a hardware description language (HDL), simulated with commercial software tools, and automatically synthesized onto silicon.[1] Within this cycle, functional verification is widely recognized as a major bottleneck, particularly as demand increases for higher performance and faster time-to-market.[1]
Role of Functional Verification
Functional verification checks whether a hardware design behaves as intended according to its specification. In industrial practice, simulation-based verification has played the major role compared with formal methods.[1] In this approach, engineers simulate the HDL description of the design, drive stimuli into the simulation, and compare the simulated behavior with the expected behavior implied by the specification.[1]
Simulation-Based Verification Flow
A common functional verification process begins with a verification plan. This plan enumerates the behaviors to be checked, identifies major risk areas, and defines scenarios intended to isolate errors in those areas.[1]
Verification engineers then translate the scenarios in the verification plan into concrete simulation tests. This translation is difficult because verification plans are often written in natural language at a high level of abstraction, while executable tests must be precise and detailed enough for simulation.[1]
Directed Random Stimuli Generation
Because hardware bugs can be elusive and large amounts of stimuli may be required to cover the scenarios in a verification plan, directed random stimuli generation has become a common verification approach.[1] Under this method, pseudo-random stimuli generators automatically create many tests from a user request that outlines the desired scenario.[1]
A user request acts as a test template: it specifies constraints or conditions that should occur during simulation, while the generator fills in missing details with valid random values.[1] For example, a verification engineer may require that all generated Add instructions in a batch of tests have at least one operand greater than 9999.[1]
Test Validity and Rule Sources
Generated tests must satisfy several types of rules:
- User requests — scenario constraints provided by verification engineers, such as requiring a processor to issue repeated
Loadinstructions to consecutive addresses.[1] - Architectural validity rules — rules defined by the hardware architecture, including instruction syntax, instruction semantics, and constraints on how instructions may be combined into valid programs.[1]
- Expert knowledge rules — quality-oriented rules or hints that bias and stress scenarios so that bugs are more likely to be exposed.[1]
Architectural validity rules may include constraints such as computing a memory address from base-register data plus an offset, or defining when a Load-Word instruction is atomic based on memory alignment.[1] Expert knowledge rules may capture design-specific insights, such as a fixed-point-unit expert expecting bugs when the sum of an Add instruction is exactly zero.[1]
For a typical architecture, the combined set of validity and expert knowledge rules may reach a few thousand rules.[1]
Significance
The hardware design cycle relies heavily on verification to ensure that synthesized hardware behaves according to specification. As designs grow more complex and time-to-market pressure increases, functional verification—especially simulation-based verification using directed random test generation—remains a critical and challenging part of the cycle.[1]
References
[1]: Evidence [2].