UVM Coding Practice · Senior

Subscriber Compare Hook

uvm_subscriber write() for light checks.

Interview prompt

Sketch uvm_subscriber that flags addr out of range.

diagram
WHITEBOARD CHAIN

1. DECLARE    interfaces / types / ports you need
2. SKELETON   class extends + utils macro + key methods
3. MECHANISM  fill one critical method while narrating
4. PITFALL    name one bug juniors make on this pattern
5. TEST       how you would smoke-test the component

Reference sketch (≤40 lines)

systemverilog
class addr_sub extends uvm_subscriber #(txn);
  `uvm_component_utils(addr_sub)
  function new(string name, uvm_component parent); super.new(name, parent); endfunction
  function void write(txn t);
    if (t.addr > MAX_ADDR)
      `uvm_error("ADDR", $sformatf("OOR addr=%0h", t.addr))
  endfunction
endclass

Mechanism to narrate

  • Subscriber extends uvm_subscriber#(txn) — analysis_export built-in

  • write() is the hook — keep light (one check or cover sample)

  • Heavy compare belongs in scoreboard, not subscriber

Smoke test (5 minutes)

  • Directed txn with addr=MAX+1 → one UVM_ERROR.

  • Legal addr → silent pass.

Common pitfalls

  • Full protocol checker inside subscriber.

  • Forgetting connect to analysis_export.