Part 6 · Agents & Protocol IP · Intermediate
Monitor Debug Checklist: Symptom-First Triage
A deterministic monitor-debug workflow for no-sample, bad-decode, and broken publish scenarios.
Debug order
Debug in fixed boundary order: configuration, sampling gate, reconstruction, publish call, subscriber ingest.
[MON] triage matrix
no monitor traffic -> vif/config/gating
monitor logs only -> analysis wiring
wrong transaction fields -> reconstruction/clocking
intermittent corruption -> race or mutation policytask monitor_smoke(my_env env);
run_minimal_sequence();
if (env.agt.mon.publish_hits == 0)
`uvm_fatal("MON_SMOKE", "monitor published no transactions")
if (env.sb.ingest_hits == 0)
`uvm_fatal("MON_SMOKE", "scoreboard ingested no transactions")
endtaskKey takeaways
Counters and stage logs make monitor bugs localizable.
Most failures are boundary failures, not random DUT behavior.
Smoke-level liveness checks should gate deeper regressions.
Common pitfalls
Skipping wiring checks and overfocusing on decode internals.
No drop/publish counters, making silent failures opaque.
Debugging many seeds before proving single-seed correctness.
Applied Patterns
This appendix consolidates reusable monitor patterns for enterprise-scale UVM environments where multiple teams share protocol VIP.
Use this as a quick implementation checklist before releasing monitor updates into regression branches.
[MON][UVM][AGT] reusable pattern grid
sampling:
accepted-handshake gating only
reconstruction:
key-based accumulator with completion predicate
publishing:
clone policy + counter instrumentation
debug:
boundary-first triage with deterministic smokefunction void monitor_health_report();
`uvm_info("MON_HEALTH",
$sformatf("sampled=%0d published=%0d dropped=%0d pending=%0d",
sampled_cnt, published_cnt, dropped_cnt, pending_cnt),
UVM_LOW)
endfunction[MON] review checklist
- passive contract verified
- reset/flush policy documented
- publish ownership policy documented
- consumer fan-out validated
- counters visible in report_phaseDesign monitor updates as API changes to downstream consumers, not local edits.
Keep monitor diagnostics always-on and low overhead for regression reliability.
Revalidate sample-to-publish boundary after every protocol extension.