Part 5 · Functional Coverage · Intermediate

Bins: Explicit, Auto, Illegal & Ignore

Hub — auto vs explicit bins, range and array bins, transition bins, illegal_bins and ignore_bins, wildcard and with filtering, and intent-driven bin design.

Overview

Bins are where coverage intent actually lives. A coverpoint only names what is watched; its bins decide which sampled values count as which scenario, which values are violations, and which values are out of scope. Every coverage percentage you will ever report is computed from bins: covered bins divided by bins in the goal . Get the bins wrong and the number is confidently meaningless.

This topic walks the full bin toolbox — automatic bins and their silent 64-bucket trap, explicit value/range/array bins, transition bins for sequences, illegal_bins and ignore_bins for violations and exclusions, wildcard and with-filtered bins for patterns and computed subsets — and finishes with the discipline of designing bins that encode verification intent.

Sub-topics

  1. Auto Bins vs Explicit Bins — auto-bin semantics, the auto_bin_max=64 trap, bins b[] vs bins b[4].

  2. Range, Array & Default Bins — range splitting math, default catch-alls, $ in ranges.

  3. Transition Bins — value-to-value sequences, repetition operators, FSM arc coverage.

  4. illegal_bins & ignore_bins — runtime errors vs goal exclusion, the percentage math, checker-vs-coverage debate.

  5. wildcard bins & with Filtering — pattern matching, computed subsets, combining with iff.

  6. Bin Design Strategy — intent-driven bins, explosion control, review checklist, a worked redesign.

diagram
BIN TOOLBOX — what each bin kind says

  bins name = {values}        "this scenario must happen"      in goal
  bins name[] = {...}         "EACH of these must happen"      in goal
  bins name = (A => B)        "this sequence must happen"      in goal
  bins other = default        "anything else" (bookkeeping)    NOT in goal
  ignore_bins  = {...}        "out of scope, don't count"      removed
  illegal_bins = {...}        "must NEVER happen"              runtime ERROR
  wildcard bins = {pattern}   "values matching this pattern"   in goal
  bins ... with (expr)        "values where expr holds"        in goal

  coverage % = hit goal-bins / total goal-bins

Key takeaways

  • Bins, not coverpoints, carry verification intent — each goal bin is a scenario the plan requires.

  • Coverage percentage counts only goal bins: default and ignore_bins are outside the denominator, illegal_bins are errors.

  • Auto bins are a convenience for narrow fields and a trap beyond 6 bits — know auto_bin_max.

  • Bin design is reviewed like code: boundary values, corner buckets, and error classes — never uniform splits.