Skip to content
DenseChip
Learn
PracticeCode labInterview

DenseChip

Navigate

Menu

LearnPracticeCode labInterview

Tools

All toolsSV editorCode repoResume
DenseChip

Practice, courses, and chip-design tools in one focused workspace.

LearnPracticeCode labInterviewToolsLearning paths

© 2026 DenseChip

AboutContactPrivacyTerms
Skip to lesson

Course contents

  • How to Use This Course
  • Reading Paths
  • Concept Map
  • Meet DCRouter
  • Glossary
  • Part 0: What Verification Is8
  • Part 1: What Can Go Wrong11
  • Part 2: Specifications as Checkable Rules8
  • Part 3: Observability and Controllability7
  • Part 4: Stimulus11
  • Part 5: Checking11
  • Part 6: Coverage10
    • What Coverage Measures
    • Code Coverage
    • Functional Coverage Models
    • Crosses and the Combinatorial Explosion
    • Closure Curves
    • Holes and Unreachable Bins
    • Coverage-Driven Stimulus
    • Mutation Testing
    • A Coverage Model for DCRouter
    • Drills: Coverage
  • Part 7: Formal and Simulation10
  • Part 8: Verification Levels and Reuse8
  • Part 9: Planning and Risk9
  • Part 10: Emulation and Prototyping8
  • Part 11: Post-Silicon Validation8
  • Part 12: Bug Economics8
  • Part 13: Debug7
  • Part 14: Sign-Off7
  • Part 15: Verification in Context8
  • Part 16: Case Studies5
  • Part 17: Capstones5
  • Part 18: Interview Preparation6
Loading lesson

‹Part 6: Coverage
  1. Topics
  2. First Principles of Verification Strategy
  3. Part 6: Coverage
  4. What Coverage Measures

Part 6 · Coverage · Working (W)

What Coverage Measures

Coverage measures what the stimulus exercised, not what the checks verified. It answers the question no pass/fail result can: what did the tests never do? What code, functional and assertion coverage each measure, what 100% does and does not prove, and how coverage would have exposed the two DCRouter bugs that escaped every test in Parts 4 and 5.

On this page

    Note

    Level: Working (W) · Answers: How do we know we have tested enough?

    Before this: Part 6 overview, False Passes

    After Part 5, DCRouter's testbenches catch 22 of the 24 Bug Zoo bugs. The other two, BUG_16 (PKT_CNT3 not cleared) and BUG_23 (a disabled port still accepts traffic), escaped every test, and nothing in any log hinted at them. Every test passed. A pass/fail result cannot say what a test never did; something has to record what happened, so that what did not happen becomes visible.

    What does coverage measure, and what does it prove?

    The obvious answer, and why it breaks

    The obvious reading of a coverage number is "how much of the design is verified": 100% coverage, done. Coverage measures something narrower: whether certain events happened during simulation. It says nothing about whether a check looked at the result (lesson 3.3), or whether the events measured are the ones that matter. A coverage report is a list of what the stimulus did, and, more usefully, of what it did not.

    The idea: exercised, not verified

    Kind

    Measures

    Written by

    Code coverage

    Which lines, branches, conditions, toggles and FSM states of the RTL were executed

    The simulator, automatically (lesson 6.2)

    Functional coverage

    Which situations from the verification plan occurred: values, combinations, sequences

    Verification engineers, from the plan (lesson 6.3)

    Assertion coverage

    Which assertions were triggered (non-vacuously) and which cover properties occurred

    Alongside the assertions (lesson 5.8)

    All three record activity. None of them records that a check compared the result. Coverage and checking answer two different questions: checks ask "was what happened right?", coverage asks "what happened?"

    What 100% proves, and what it does not

    100% coverage of this

    Proves

    Does not prove

    Code

    Every line and branch executed at least once

    That any check saw the result; that the right values or combinations reached it

    A functional model

    Every situation in the model occurred

    That the model lists the situations that matter; that checks were active

    Assertions

    Every assertion was triggered

    That the assertions express the whole specification

    How coverage would have exposed DCRouter's escapes

    Escape

    What no test did

    A coverage bin that stays empty

    BUG_23

    Disable a port

    "CTRL port k disabled"

    BUG_16

    Clear PKT_CNT3

    "PKT_CNT3 cleared"

    BUG_23, again

    Trigger the R1 assertion (lesson 5.3)

    A cover on R1's condition, "a port is disabled": empty, so the assertion was never tested

    Both bugs live behind actions the stimulus never took. A coverage model listing those actions shows two empty bins after every run. Lesson 6.9 builds that model and uses its holes to write the test that catches both.

    Using coverage well

    • Read holes, not percentages: the list of what never happened is the useful output.

    • Pair every covered situation with a check: coverage without checking is activity, not evidence.

    • Write functional coverage from the plan, not from the RTL: it should describe what matters, not what exists.

    • Merge across seeds and tests: closure is a property of the whole regression (lesson 4.9).

    How real teams use coverage

    Practice

    Purpose

    Coverage goals in the verification plan

    Agreed measure of what must be exercised (Part 9)

    Merged regression coverage reviewed weekly

    Holes drive new tests and constraint changes

    Coverage as one sign-off criterion among several

    With pass rates, bug trends and reviews (Part 14)

    What breaks

    A team (illustrative) reached 100% functional coverage and signed off. Later a bug was found in a covered situation: the coverage point sampled the input request, but the response check for that request type had been disabled during debug and never re-enabled. Coverage proved the situation happened; nothing proved it was checked. Pairing coverage with assertion coverage on the checks themselves, or a mutation run, would have shown it.

    Why this matters

    Senior lens. Treat coverage as the regression's memory of what it did. Its value is the holes: every empty bin is a question the tests never asked. Never read a coverage number as "verified"; read it as "exercised", and ask separately what checked the results.

    Interview

    Asked: "What does 100% coverage prove?"

    Weak answer: That the design is fully verified.

    Strong answer: Only that everything the coverage model measures happened at least once during simulation. It doesn't prove a check looked at the result, which is why I pair coverage with checks and sometimes mutation testing; it doesn't prove the model lists the situations that matter, which depends on writing it from the verification plan; and code coverage says nothing about values or combinations. Coverage is most useful for its holes: on DCRouter, the two bugs that escaped every test both sat behind empty bins, a port never disabled and a counter never cleared.

    Follow-ups: (1) What's the difference between code and functional coverage? (2) How do you know a covered situation was checked?

    Check yourself Why did no pass/fail result hint at BUG_16 or BUG_23?

    No test ever cleared PKT_CNT3 or disabled a port, so the bugs were never activated; a test can only fail on something it did.

    Check yourself A situation is covered 10,000 times but its check is disabled. What does coverage report?

    Fully covered; coverage measures that it happened, not that anything checked it.

    Key takeaways

    • Coverage measures what was exercised, never what was verified.

    • Its most useful output is the list of holes: what the tests never did.

    • Pair coverage with checking, and write functional coverage from the plan.

    Keep going

    Next: Lesson 6.2, Code Coverage. Line, branch, condition, toggle and FSM coverage, and what each misses.

    Related topics

    • Part 6 overview: Coverage

    Previous

    62 / 160

    Next: Code Coverage

    Up next

    Up nextCode Coverage

    Sign in to save progress

    Practice this lessonReport an error

    See also

    • Functional Coverage Models
    • Crosses and the Combinatorial Explosion
    • Closure Curves