Part 10 · Advanced Topics · Intermediate
Reporting and Factory Diffs That Affect Real Regressions
Differences and migration traps in message control and factory override usage across 1.2-style and 1800.2-focused flows.
Why reporting/factory are migration hotspots
Most code compiles after a library swap; most regressions fail because of behavior expectations. Reporting and factory are where teams encode those expectations: log IDs, verbosity targeting, override precedence, and debug assumptions.
A tiny semantic mismatch can flood logs, hide errors, or instantiate unexpected component types. These are high-cost failures because they distort triage signal across thousands of tests.
[ADV] impact map
Reporting mismatch -> log volume spikes / missing diagnostics / false confidence
Factory mismatch -> wrong type instantiated / override ignored / hidden behavior
Combined effect -> triage noise, flaky signatures, slow migrationReporting deltas to audit
The safest reporting migration strategy is explicitness: explicit IDs, explicit component paths, explicit severity actions. Implicit defaults are where mode and vendor variation hurts most.
[UVM] reporting audit table
Audit item Why it breaks Preferred direction
---------------------------------------------------------------------------------------------
ID naming inconsistency +uvm_set_verbosity misses target normalize IDs by subsystem
Path wildcard overuse noisy or under-filtered logs scope patterns intentionally
Reliance on default actions vendor/mode differences set actions explicitly
Legacy helper wrappers strict lane rejects migrate to standard calls// Explicit reporting intent is migration-friendly
function void build_phase(uvm_phase phase);
super.build_phase(phase);
set_report_id_verbosity("SCB", UVM_MEDIUM);
set_report_severity_action(UVM_ERROR, UVM_DISPLAY | UVM_COUNT);
endfunctionPrefer stable report IDs (`CFG`, `SCB`, `DRV`) over ad-hoc strings.
Document wildcard patterns used in CLI verbosity controls.
Audit old wrappers that indirectly call reporting APIs.
Factory override differences in practice
Factory issues usually appear as 'test behaves differently' rather than compile errors. Root causes include override timing, path mismatch, and assumptions about instance-vs-type precedence.
class base_test extends uvm_test;
`uvm_component_utils(base_test)
function void build_phase(uvm_phase phase);
super.build_phase(phase);
// Type override example
my_driver::type_id::set_type_override(my_driver_errinj::get_type());
// Instance override example
my_monitor::type_id::set_inst_override(
my_monitor_trace::get_type(),
"uvm_test_top.env.agt*.mon"
);
endfunction
endclass[UVM] factory migration checklist
1) Confirm override executed before create()
2) Confirm instance path matches final hierarchy
3) Confirm no later override masks earlier intent
4) Dump factory in debug lane for deterministic evidence
5) Compare strict/compat logs for override registration differencesFactory debug instrumentation
function void start_of_simulation_phase(uvm_phase phase);
super.start_of_simulation_phase(phase);
if ($test$plusargs("DUMP_FACTORY"))
uvm_factory::get().print(1);
endfunctionUse targeted factory dumps; full dumps in every test are expensive.
Capture dumps in failing strict-lane seeds for reproducible triage.
Keep hierarchy naming conventions stable to protect instance overrides.
Diff triage flow for mixed failures
When logs change and behavior changes together, triage in two passes: reporting stability first, then factory behavior. Otherwise changed diagnostics can hide the override bug.
[ADV] two-pass triage
Pass A (signal stabilization):
- normalize verbosity targets
- confirm expected report IDs visible
- remove log noise from wildcard misuse
Pass B (behavior validation):
- assert expected override registrations
- trace create() type resolutions
- compare DUT-facing stimulus and monitor output[UVM] reporting/factory risk chart
Risk category Symptom Typical fix
-------------------------------------------------------------------------------
Low minor log wording drift update log parser patterns
Medium missing debug IDs normalize report ID conventions
High wrong component subtype created fix override path/timing
Critical silent disabled checker enforce explicit severity actionsKey takeaways
Reporting and factory behavior should be made explicit before migration runs.
Override bugs manifest as behavioral drift, not just compile failures.
Stabilize diagnostics first, then resolve factory semantics.
Common pitfalls
Debugging factory issues with noisy, unstable reporting configuration.
Applying instance overrides with stale hierarchy paths.
Assuming one passing seed implies override logic is safe.