You certainly can’t improve something unless you measure it. So, how do you know if the functionality of your design has been verified completely? One metric that helps answer this question is coverage. Coverage is a guide for directing verification completeness by identifying covered and uncovered portions of the design.
Coverage can be broadly classified into two categories - Functional and Code coverage. Functional coverage complements Code coverage to handle the exponential increase in complexity and state space of the designs. Functional coverage gets interesting when two or more cover-points are crossed, leading to a variety of possibilities covering interesting combinations of important parameters.
Most of the today’s well-designed constrained random environments will easily take you to around 60 to 70 % of the functional coverage. So, how do you take it from here to get to the magic figure of 100% functional coverage?
The answer lies in following the few steps outlined below. Also added as a ready reckoner, is a flowchart that summarizes these steps.