Know what your tests reached, and what they never touched.
Coverage is collected by Lumina Sim during the run and written to a database that merges across runs, so a regression of a thousand seeds gives one answer. Functional, assertion and code coverage come out of the same simulation, with a report of everything not covered.
Commands from the coverage guide
- Functional
- covergroups and crosses
- Line · branch · toggle
- code coverage
- Merged
- across runs
- IEEE 1800 clause 40
- coverage control from the testbench
What is measured
Functional coverage
Covergroups, coverpoints and crosses, with value, transition, wildcard, ignore and illegal bins, options and per-instance merging. $get_coverage gives the same numbers during the run.
Assertion coverage
For every concurrent assertion, assumption and cover: attempts, passes, vacuous passes, failures and cover hits.
Line and branch
Statements and every arm of every if and case, with an arm for "none taken" where there is no else or default.
Toggle
Every bit of every variable and net, covered when it rose and fell. Glitches inside one time step are not counted as toggles.
Merged across runs
Runs of the same design sum into one database. The report lists what is covered and, with details, everything that is not.
Control from the testbench
$coverage_control, $coverage_get and $coverage_get_max start, stop, reset and read coverage by scope.
Expression and condition coverage
Each term of a decision shown to change the outcome both ways on its own: the measure safety flows ask for.
FSM coverage and test ranking
States reached and transitions taken for every state machine found in the design, and tests ranked by the coverage they add.
Coverage kinds
- FunctionalAvailable
Covergroups, coverpoints, crosses and every kind of bin
- AssertionAvailable
Attempts, passes, vacuous passes, failures, cover hits
- LineAvailable
Statements, their lines, and every branch arm
- ToggleAvailable
Every bit of every variable and net, rising and falling
- Expression · conditionPlanned
Each term of a decision, alone and as the one that decides it
- FSMPlanned
States reached and transitions taken
- RankingPlanned
Which tests add the most coverage
Frequently asked
What is the difference between functional and code coverage?
Code coverage measures which parts of the RTL were exercised: lines, branches, toggles. Functional coverage measures whether the scenarios in your verification plan happened, as written in covergroups. A design needs both: code coverage finds RTL nothing reached, functional coverage finds features nobody tested.
Can I merge coverage from many simulation runs?
Yes. Each run writes a database; merge sums the counts of runs of the same design, and report prints the summary and everything still not covered.
Is MC/DC-style coverage supported?
Expression coverage, where each term of a decision must be shown to decide the outcome both as 0 and as 1, is planned. It is the coverage measure safety flows such as DO-254 and ISO 26262 projects ask for.
Is encrypted IP measured?
No. The statements and signals of IEEE 1735 protected IP are not measured, so nothing inside it is revealed.
Run your own design on Lumina first.
We are working with a small group of design teams before release. You run your real designs; we fix what you find, and your cases become part of the tests every build must pass.