Skip to main content
Lab Notes

coverage

Functional Coverage and AI Agents: Capabilities and Limits in RTL Simulation

Marcus Lin 8 min read
Functional coverage paths and agent-assisted bin targeting in RTL simulation

A compute block is stuck at 72 percent functional coverage with three weeks remaining before tape-out sign-off, and its remaining bins span 14 coverage groups. Most concern protocol corner cases around back-pressure on the memory interface. The verification engineer has already spent days writing targeted tests, but each test requires tracing the interaction between the arbiter state machine and the outstanding-request counter. This is where an AI agent either becomes useful in the RTL simulation flow or exposes the limits of automation.

That scenario is representative of the work we are tackling at ChipAgents. Our experience so far is uneven in a useful way: agents are effective at mechanical stimulus construction and coverage-gap triage, but they cannot reliably supply design intent that was never provided to them. That distinction should shape the integration plan.

What Functional Coverage Measures

Toggle and code coverage, including branch, statement, and expression coverage, often rise quickly. These metrics show whether simulation has exercised signal transitions or RTL paths. Constrained-random regression can usually fill much of that space without targeted intervention.

Functional coverage has a different purpose. Verification engineers define coverage groups to represent design intent, such as state machine cross-products, protocol sequence completion, data hazards, and back-pressure behavior. The RTL does not automatically reveal which of those scenarios matter. A useful model depends on someone understanding the specification and encoding that understanding in bins and crosses.

That difference creates a clear boundary for agent-assisted closure. An agent can generate stimulus against an existing coverage model. It is much less dependable at deciding whether the model represents the right scenarios, because that decision depends on context outside the ports, RTL, and coverage database.

Where Agents Help Most

The strongest use case is constrained-random stimulus aimed at named uncovered bins. Given a coverage group and a block interface, an agent can draft a SystemVerilog constraint object that biases transactions toward specific bin combinations. It can encode legal input space, weight transitions toward uncovered states, and exclude combinations that would make the simulator or bus-functional model reject the sequence.

For a moderately complex 4-way arbiter with fairness counters, a verification engineer may spend hours building that model from scratch. An agent can produce a first draft in minutes. The engineer still reviews protocol assumptions, then runs the test. A fairness-violation scenario that drives all requestors to assert simultaneously while one grant remains held is a good example of a pattern agents generally construct well.

Agents are also useful for mechanical coverage-model authoring. Given a state machine and its transition table, an agent can draft a cross-coverage group for state-to-next-state pairs, including negative bins for transitions that should never occur. This avoids manually enumerating a long state list and can expose omitted transition combinations during review.

Another practical use is gap triage. After a regression, an agent can inspect an UCDB extract, group uncovered bins by characteristics such as sequential state, combinational path, or protocol sequence, and rank gaps by likely reachability. Manual triage on a large design can consume hours. The agent can perform the categorization quickly, while engineers review estimates for individual gaps.

The State-Space Boundary

The difficult cases involve abstract state and design intent, not merely legal inputs. Consider a packet processor whose coverage model tracks the ordering of CRC failure, length mismatch, and header checksum error. Stimulus must create each error in isolation, place it in the required packet fields, and preserve enough packet validity for the bus-functional model to accept the transaction. The agent needs the packet layout, field positions, checksum rules, and error-construction details.

When given only RTL and a UCDB file, agents often produce plausible constraint objects that generate illegal packets or valid errors in the wrong ordering. The missing ingredient is context, not necessarily model capability. Supplying the relevant specification section beside the gap description improves the result substantially. The practical question is therefore not whether to provide context, but how much context belongs with each task.

What Early Access Has Shown

In our early-access work, agents have been most reliable when the covered behavior is visible at the interface, bins describe input combinations rather than hidden state, and the stimulus does not depend on timing relationships absent from the interface specification.

They need more help when coverage depends on micro-architectural state that is not exposed at top-level ports. For example, memory-controller write coalescing may require knowledge of internal buffer allocation policy. Driving individual writes is not enough if the objective is to exercise the coalescing decision itself.

A short plain-English description of the intended behavior, attached alongside the UCDB extract, has moved many difficult gaps into the reliably addressable category. It is a small addition to the normal review flow and gives the agent the context that the database cannot provide.

A Practical Integration Pattern

We use two tracks for coverage closure. Straightforward protocol state machines, data-path combinations, and state transitions can go directly to agent-assisted test generation, with an engineer reviewing the generated SystemVerilog before regression. Gaps tied to hidden micro-architecture or subtle timing receive a short intent description first. The agent handles construction, while the engineer supplies the behavioral constraints.

We are not saying that human judgment becomes unnecessary. The coverage model, the decision about which scenarios deserve bins, and the review of generated tests against design intent remain engineer-owned. We are saying that mechanical stimulus construction is an appropriate place to reduce manual effort without delegating verification judgment.

The compute block described above moved from 72 percent to 94 percent coverage during a four-day sprint, with agent assistance applied across the 14 coverage groups. Eight groups matched the agent-reliable profile and closed without extra context. Six required design-intent notes. Four of those closed after the engineer added the notes, while two still needed manually written tests because their behavior depended on subtle micro-architectural timing.

That split is a useful planning assumption for moderately complex blocks. Before connecting an agent to Xcelium, VCS, or QuestaSim, classify the uncovered bins by observability and context requirements. The classification determines whether the next productive action is generated stimulus, a specification excerpt, or direct engineer-authored test code.

ChipAgents

Put AI agents to work on your uncovered bins

ChipAgents works inside your existing simulation flow to classify gaps and generate targeted tests.

Request Access