Use strict order for debug: monitor publish -> env connect graph -> scoreboard ingest -> correlate/compare -> coverage sample/report.
[ENV][UVM][CHECK] integration triage matrix
symptom: no compares, no coverage
-> monitor publish or connect graph break
symptom: compares active, coverage flat
-> coverage subscriber path break
symptom: coverage active, compares zero
-> scoreboard ingest/correlation break
symptom: compares active, random mismatches
-> normalization or correlation ID drifttask checking_smoke(env_top env_h);
if (env_h.sb.compare_hits == 0)
`uvm_fatal("CHK", "no compares observed")
if (env_h.cov.sample_hits == 0)
`uvm_fatal("CHK", "no coverage samples observed")
`uvm_info("CHK", "checking integration smoke passed", UVM_LOW)
endtaskOrdered triage eliminates guesswork in checker integration failures.
Counters are faster and more reliable than ad-hoc waveform hunts.
A smoke gate should validate checker and coverage liveness together.
Debugging compare logic before validating stream ingress.
Relying on one metric (coverage or compare) as full health proof.
Skipping negative tests for disconnected paths.
Emit one compact integration packet so failures from different seeds can be compared quickly.
[CHECK] integration packet
fields:
seed
testname
monitor publish counts
sb ingest counts by stream
compare/mismatch counts
coverage sample counts
timeout/dropped counts
objective:
identify first broken stage in under one minutefunction void print_check_packet();
`uvm_info("CHK_PKT",
$sformatf("seed=%0d cmp=%0d mis=%0d cov=%0d drop=%0d",
$get_initial_random_seed(),
sb.compare_hits,
sb.mismatch_hits,
cov.sample_hits,
sb.drop_hits),
UVM_LOW)
endfunctionPackets should be stable across branches for easy diffing.
Include stream-level counters, not only aggregate values.
Print packet once per test end to keep logs readable.
Maintain a fail-injection suite that breaks one stage per run and validates expected diagnostics.
[CHECK] fail-injection catalog
inject 1: disable monitor publish
inject 2: remove one scoreboard connect
inject 3: corrupt correlation ID
inject 4: disable coverage subscriber write
expected:
each injection emits unique primary errorFail-injection preserves debug quality as code evolves.
Allowing generic errors that hide the failed stage.