Debugging Functional Coverage Models: Get the Most Out of Your Cover Crosses
Functional coverage models have grown in complexity to account for the increasing demands of designs today. Traditional and even advanced analysis techniques have yet to evolve to provide the verification engineer with actionable insights on how to debug their functional coverage model. In this paper, we generalize advanced hole analysis techniques to be able to get the most out of cover groups containing multiple cover crosses.
Functional coverage paired with constrained random testing is a critical, invaluable methodology in a verification engineer’s tool-set. The verification engineer has to capture the correct, important design aspects within the coverage model. Since this is an iterative process due to the increasing complexity of the design under verification and the often ambiguous, evolving functional specifications, the coverage model itself can end up containing bugs. That requires the engineer to go through a time-consuming debugging process. Conventionally, coverage model debugging is performed by the manual inspection of the coverage reports generated by EDA coverage tools. The end goal is to extract actionable insights that can aid in adjusting the coverage model, or perhaps adjusting the constraints in the random test generator to reach coverage holes. Those conclusions are incredibly hard to extract from the influx of information available in the traditional coverage reports. Applying advanced analysis techniques to get the most out the available information would save verification engineers precious, critical time and aid in reaching faster coverage closure.
In this paper, we adopt and generalize the hole analysis technique proposed in , reaping the benefits of concise representation of the vast information present in complex functional coverage models. Our focus is on covergroups with a number of cover crosses. A Covergroup is composed of a set of coverpoints and an optional set of cover crosses modeling the combination of the various coverpoints. Verification engineers use cross coverage to define expected valid combination of signals or variables in the design under verification. To help with the analysis of complex designs, verification engineers leverage SystemVerilog syntax to perform semantic grouping of valid expected combinations. That in terms helps with the analysis as well as trimming down the number of bins in the coverage model. On the other hand, that can result in a large number of possibly related cover crosses which poses an additional burden of having to analyze them all in order to debug/understand any issue in the coverage model. It is common to find multiple crosses sharing common coverpoints as shown in the examples in this paper. Most probably the coverage model captures the combinations of a group of common coverpoints with one or two unique coverpoints. In other cases, multiple crosses share exactly the same coverpoints where the differentiating metric for each cross can be one of the following:
- Some combinations are marked illegal/ignored in one cross
- The coverpoint itself is used to bank a part of a bus/memory using enable signal (ex. read/write signal)
- The bins of each cross are grouped in a different way
In these cases, analyzing the holes of each cross individually may be tricky as the ignored or illegal bins can mislead the results since similar combinations are excluded from coverage calculations. Multi-cross hole analysis on such overlapping crosses gives more precise results.
Applying hole analysis techniques on multiple crosses sharing common coverpoints can identify larger holes and help in guiding further analysis of selected crosses. The combined analysis leads to more accurate results on the selected coverpoints and is much more efficient than analyzing each cross independently. Additionally, we define a new metric, hole effect, that gives the user insight into the optimistic ripple effect on the coverage if the identified hole is covered.