Sketch uvm_subscriber that flags addr out of range.
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 componentclass 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
endclassSubscriber 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
Directed txn with addr=MAX+1 → one UVM_ERROR.
Legal addr → silent pass.
Full protocol checker inside subscriber.
Forgetting connect to analysis_export.