Part 7 · Environment & Tests · Intermediate

Analysis Port Fan-In: Merging Streams into Checkers

Designing fan-in from multiple monitor analysis ports into deterministic checker ingress paths.

Fan-in architecture

Fan-in joins several observed streams into one checking domain. Keep stream identity metadata so comparisons remain explainable.

diagram
[ENV][UVM][CHECK] fan-in architecture

ctrl_mon.ap  --> sb.ctrl_imp
req_mon.ap   --> sb.req_imp
rsp_mon.ap   --> sb.rsp_imp
err_mon.ap   --> sb.err_imp

sb ingress stage:
  stamp source_id
  stamp observed_time
  enqueue by stream
systemverilog
function void write_req(req_txn t);
  req_txn c = t.clone();
  c.source_id = "req_mon";
  req_q.push_back(c);
  req_hits++;
endfunction
  • Use one write_* method per stream for debuggable ingestion.

  • Attach source metadata immediately on ingress.

  • Avoid flattening streams too early in the pipeline.

Key takeaways

  • Structured fan-in preserves context needed for high-quality diagnostics.

  • Separate ingress queues simplify latency and ordering analysis.

Common pitfalls

  • Using one generic queue and losing stream provenance.

  • Mutating ingress objects after queue insertion.


Applied Patterns

Track per-stream counters and backlog depth to detect fan-in imbalances before compare quality degrades.

diagram
[CHECK] fan-in telemetry

stream counters:
  ctrl_hits
  req_hits
  rsp_hits
  err_hits

queue depth alarms:
  req_q depth > threshold
  rsp_q depth > threshold

action:
  print stream lag diagnostics
  gate regression on sustained lag
systemverilog
function void check_backlog();
  if (req_q.size() > max_q_depth)
    `uvm_warning("FANIN", $sformatf("req_q depth=%0d", req_q.size()))
  if (rsp_q.size() > max_q_depth)
    `uvm_warning("FANIN", $sformatf("rsp_q depth=%0d", rsp_q.size()))
endfunction
  • Queue depth telemetry exposes correlation bottlenecks early.

  • Per-stream alarms are more useful than one aggregate metric.

  • Lag diagnostics should include source identifiers.


Integration Drilldown

Stress one stream while idling others to validate fan-in resilience and alert thresholds.

diagram
[CHECK] burst imbalance test

phase 1: req burst only
phase 2: rsp catch-up
phase 3: steady dual stream

verify:
  no dropped samples
  lag alarms only when threshold crossed

Key takeaways

  • Imbalance tests validate fan-in behavior under realistic burst patterns.

Common pitfalls

  • Calibrating thresholds only on uniform synthetic traffic.