Skip to content
DenseChip
Learn
PracticeCode labInterview

DenseChip

Navigate

Menu

LearnPracticeCode labInterview

Tools

All toolsSV editorCode repoResume
DenseChip

Practice, courses, and chip-design tools in one focused workspace.

LearnPracticeCode labInterviewToolsLearning paths

© 2026 DenseChip

AboutContactPrivacyTerms
Skip to lesson

Course contents

  • UVM Foundations6
  • UVM Phases & Simulation Lifecycle78
  • Factory & Configuration30
  • Transaction-Level Modeling (TLM)30
  • UVM Sequences & Stimulus30
  • UVM Agents & Protocol VIP54
  • Environment & Test Classes48
  • Scoreboards, Models & Coverage in UVM26
    • Scoreboard Architecture: Expected vs Actual
    • Reference Models: Choosing the Right Fidelity
    • Predictors: uvm_reg_predictor & Bus-to-RAL
    • Functional Coverage in UVM Environments
    • UVM Reporting, Verbosity & Message IDs
      • UVM Reporting Architecture
      • Severities and Actions
      • Message IDs and Verbosity Control
      • Report Catchers
      • PASS/FAIL, Max Quit Count, and Debug Playbook
  • UVM Register Abstraction Layer (RAL)36
  • Advanced UVM Topics32
  • Senior UVM Prep & Interviews72
  • Coding Practice47
Loading lesson

‹UVM Reporting, Verbosity & Message IDs
  1. Topics
  2. UVM Verification
  3. Scoreboards, Models & Coverage in UVM
  4. UVM Reporting, Verbosity & Message IDs
  5. Severities and Actions

Part 8 · Checking & Coverage · Intermediate

Severities and Actions

uvm_info, uvm_warning, uvm_error, uvm_fatal — behavior, counting, and action flags.

On this page

    Four severities

    design.sv
    1
    2
    3
    4
    `uvm_info("SCB", "matched id=0x42", UVM_HIGH)    // verbosity-gated
    `uvm_warning("CFG", "default timeout used")           // always prints, no count
    `uvm_error("SCB_MISMATCH", "addr 0x1000 exp=FF act=00") // always prints, counts
    `uvm_fatal("NOVIF_APB", "vif not set in config_db")    // prints, counts, stops sim
    Diagram
    Legend: [UVM]
    
      SEVERITY DECISION TREE — which macro to use?
    
      Is the condition a test failure?
           │
           ├─ NO ── Is it informational debug output?
           │           ├─ YES → `uvm_info("ID", msg, UVM_HIGH)
           │           └─ NO  → `uvm_warning("ID", msg)
           │
           └─ YES ── Can simulation continue meaningfully?
                       ├─ YES → `uvm_error("ID", msg)   ← counts toward FAIL
                       └─ NO  → `uvm_fatal("ID", msg)   ← counts + stops sim
    
      Rule of thumb:
      • uvm_info    — debug visibility, no impact on PASS/FAIL
      • uvm_warning — unexpected but non-fatal (missing config default)
      • uvm_error   — check failure, sim continues, test will FAIL
      • uvm_fatal   — unrecoverable (no vif, null pointer), sim stops

    Action flags and counting behavior

    Action flags

    Diagram
    Action Flag     Effect
    ──────────────────────────────────────────────────────
    UVM_DISPLAY     Print message to stdout (sim log)
    UVM_LOG         Write message to report log file
    UVM_COUNT       Increment severity counter on report server
    UVM_EXIT        Stop simulation immediately (fatal default)
    UVM_STOP        Stop simulation after current delta cycle
    
    Default actions by severity:
      uvm_info    → DISPLAY | LOG
      uvm_warning → DISPLAY | LOG | COUNT  (warning count tracked)
      uvm_error   → DISPLAY | LOG | COUNT
      uvm_fatal   → DISPLAY | LOG | COUNT | EXIT

    Severity comparison table

    Diagram
    Severity      Verbosity-gated?  Counts?   Stops sim?  Use for
    ──────────────────────────────────────────────────────────────────────
    UVM_INFO      YES               NO        NO        debug visibility
    UVM_WARNING   NO                YES*      NO        unexpected non-fatal
    UVM_ERROR     NO                YES       NO        check failures
    UVM_FATAL     NO                YES       YES       unrecoverable errors
    
    * warning count tracked but typically not used for PASS/FAIL
    design.sv
    1
    2
    3
    4
    5
    6
    // Override action for a component — suppress display, keep count
    set_report_severity_action(UVM_ERROR, UVM_LOG | UVM_COUNT);
    
    // Max quit count — stop after N errors (avoid log explosion)
    set_report_max_quit_count(50);
    // Or via plusarg: simv +UVM_MAX_QUIT_COUNT=100

    Key takeaways

    • Only uvm_info is verbosity-gated; errors and fatals always print and count.

    • Use uvm_error for check failures; uvm_fatal only when sim cannot continue.

    • set_report_max_quit_count prevents runaway error loops in broken tests.

    Common pitfalls

    • uvm_info for check failures — test passes even when condition is wrong.

    • uvm_fatal for recoverable mismatches — stops sim before check_phase drain.

    • uvm_warning for real bugs — warnings do not fail the test.

    Previous

    299 / 489

    Next: Message IDs and Verbosity Control

    Up next

    Up nextMessage IDs and Verbosity Control

    Sign in to save progress

    Practice this lessonReport an error

    See also

    • Report Catchers
    • PASS/FAIL, Max Quit Count, and Debug Playbook