Part 7 · Advanced & Integration · Intermediate
bind: Attaching Verification to RTL
Hub — bind syntax and elaboration, assertion-module conventions, bind-file organization, reusable checker libraries, and bind debug.
Overview
The bind construct instantiates a verification module inside an RTL module without editing the RTL source . The bound instance elaborates as if it were written inside the target, seeing the target's ports and internal signals — which makes bind the standard delivery mechanism for assertion checkers, protocol monitors, and coverage collectors on design code that DV does not own.
This topic covers the full discipline: the bind statement itself, how to write modules that are safe to bind, how to organize bind files so they survive RTL refactors, how to build a reusable checker library, and how to debug the elaboration and waveform quirks that binds introduce.
Sub-topics
bind Fundamentals — syntax, why bind exists, module vs instance targeting, what elaboration produces.
Writing Assertion Modules for bind — input-only conventions, parameterization, internal-signal access, a valid/ready checker.
Bind File Organization — central bind files, compile order, ifdef guards, naming, DV ownership.
Reusable Checker Libraries — OVL-style generic checkers, the checker construct, library versioning.
bind Debug & Limitations — elaboration errors, waveform scope, generate interactions, performance, bind vs inline assertions.
Legend: [RTL] [DV]
BIND — WHO OWNS WHAT
RTL repo [RTL] DV repo [DV]
────────────── ─────────────────────────
fifo.sv ◄── no edits ── fifo_checker.sv (assertions)
arbiter.sv arb_checker.sv
subsystem_binds.sv:
bind fifo fifo_checker ...
bind arbiter arb_checker ...
│
▼ elaboration
┌──────────────────────────────┐
│ fifo (every instance) │
│ ├─ ... RTL contents ... │
│ └─ fifo_checker chk (DV) │ ← lives inside the
└──────────────────────────────┘ target's scopeKey takeaways
bind inserts a DV module into an RTL scope at elaboration — zero RTL edits, separable ownership.
Bound modules see the target's ports and internals as if written inline.
The discipline around bind (file organization, checker conventions, libraries) matters as much as the syntax.