UVM Coding Practice · Senior

Resource Pool vs config_db

When to use uvm_resource_db.

Interview prompt

Global seed vs per-agent vif — which API?

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
  • vif: config_db scoped to hierarchy path — set in top, get in agent

  • global seed: uvm_resource_db or plusarg — not tied to one component path

  • config_db dump for bring-up; resource pool for cross-test globals

Reference sketch (≤40 lines)

systemverilog
// hierarchical vif
uvm_config_db#(apb_vif)::set(this, "env.agent*", "vif", vif);
// global seed
uvm_resource_db#(int)::set("GLOBAL_SEED", seed, this);

Mechanism to narrate

  • config_db: scoped by instance path — best for vif, cfg objects

  • resource_db: global name lookup — seeds, shared knobs

  • Wildcard set("*") works but hides path bugs — use sparingly

Smoke test (5 minutes)

  • Explain which API for vif vs seed in 30 seconds.

  • Describe uvm_config_db::dump() use after build_phase.

Common pitfalls

  • Wildcard set for everything.

  • Same field name collision across agents.

  • get in wrong phase.