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

  1. bind Fundamentals — syntax, why bind exists, module vs instance targeting, what elaboration produces.

  2. Writing Assertion Modules for bind — input-only conventions, parameterization, internal-signal access, a valid/ready checker.

  3. Bind File Organization — central bind files, compile order, ifdef guards, naming, DV ownership.

  4. Reusable Checker Libraries — OVL-style generic checkers, the checker construct, library versioning.

  5. bind Debug & Limitations — elaboration errors, waveform scope, generate interactions, performance, bind vs inline assertions.

diagram
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 scope

Key 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.