Verify

Device-Model Verification

A test program can compile cleanly, pass every structural validator, and still be wrong — reading the wrong register, comparing against a value the silicon can never produce, measuring supply current in a state the flow never established. ATE·IQ replays the generated program and its patterns against a model of the device itself and catches those errors before the program reaches a tester — the same model your design and verification teams already rely on, plugged into the test side of the house.

01

Why compile-clean is not correct

Structural checks answer "is this a valid IG-XL program?" They cannot answer "does this program do what the spec asked, to this device?" That second question is where real test-floor debug time goes — and it is answerable offline, if you have a model of the device to ask.

The capability was proven the honest way: on a TMP126 program whose sheets, VBA and cross-sheet checks were all clean, the model replay found four independent defect classes — three of them live in the replayed run, the fourth demonstrated as a latent trap the same checks would have missed. Each would have surfaced as a confusing failure at the tester.

What the checkers sawWhat the device model found
Valid SPI patterns, correct sheet references No pattern formed the device's 16-bit command word — the part would parse every write as a different operation on a different register than intended.
A well-formed shutdown-current test with correct limits The flow never actually commanded shutdown, so the measurement was taken in continuous-conversion mode — far outside the limit band, on a perfectly good part.
A burst-read test that generated and validated The pattern issued thirteen single reads and never auto-incremented — functionally a different test from the one the requirement asked for.
Read compares populated from the register map (latent, demonstrated rather than observed) Compares pinned to power-on reset values: a converting device returns live data, so a correct part would fail the test the first time the flow actually converted.

None of those are visible to a compiler, a schema validator or a lint pass. They are meaning errors. Two were then fixed structurally in the generator — so the same class cannot recur — and the fixes are locked by tests that replay the generator's real output through the model.

02

The device model

ATE·IQ does not invent the device. The model is an input, sitting behind a small, explicit contract: reset to a known state, prove yourself with a self-test, accept a clocked bus transaction and answer as the part would, report what you measure, take a forced condition. Anything that can answer those questions can be the judge.

That contract is the point. The executable model of a device usually already exists — design and verification teams build one long before the test program does — and it encodes the behaviour a test engineer otherwise has to re-derive by hand from a document. Plugging that model into the test side is what turns "the program looks valid" into "the part agrees with what the program does".

Whatever supplies it, the model is driven the same way. It is deliberately time-free: a conversion takes milliseconds, a pattern takes microseconds, so rather than invent timing precision it cannot justify, the replay advances device time only on explicit events — which keeps every verdict reproducible and pushes genuinely time-dependent questions into the honest-decline column where they belong. And before any verdict is issued the model must pass a mandatory self-test against known-good reference values. If that fails, nothing is claimed to be verified — no partial credit, no quiet degradation.

Where the model comes from

SourceWhat it judges
Derived from your register map
automatic, no modelling work
Register semantics: frame parsing, wrong-register writes, reset-value and read-back compares, live registers treated as capture-only. Everything dynamic declines (§11).
A behavioural model built to the contract
how the capability was proven
Full device behaviour — protocol, state machine, alert logic, state-dependent supply current. The reference implementation ATE·IQ ships for the demonstration part was written clean-room from public documentation, with every behaviour citing its source.
Your own device model
connected, not rewritten (§03)
The authority your design team already trusts, answering test-side questions. Your RTL or SystemC connects behind a small wire protocol and outranks every derived model — proven end to end on real third-party RTL (§03).
Where that stands today All three are shipping. The derived stand-in is self-serve in the app — a register map can come straight from a CMSIS-SVD file, DC facts from a guided datasheet-transcription editor (§04) — and the behavioural reference model ships built-in for the demonstration part. Connecting your own model means an adapter that speaks a small, documented protocol for it (§03); reference adapters ship with the platform, and the path is proven end to end on real third-party RTL running under a simulator — but we will not pretend an adapter has met your model before it has.

The fabricated instance

A model that describes digital behaviour will not answer an analog question. Where that is the case, ATE·IQ can layer a deterministic, seeded "manufactured part" over it: pin behaviour synthesized from the part's documented electrical envelope. Every value carries its provenance — a documented typical, a value synthesized from a documented limit, or an industry-standard assumption where the specification is silent — and that provenance travels into any finding it produces. It unlocks the analog families a register model alone must decline: clamp continuity, input leakage, output levels, power-on-reset and brownout thresholds, and a temperature-accuracy corner check that catches program limits tighter than the part's own guaranteed capability.

03

Bring your own model — a connection, not a project

The strongest judge is the model your design and verification teams already maintain. ATE·IQ connects it as-is: an adapter wraps your RTL or SystemC behind a small, documented request/response protocol — reset, self-test, bus transaction in, answer out — and the project points at that adapter's endpoint. Nothing about your model is rewritten, and nothing about it leaves your infrastructure.

On the project page you enter the endpoint and an optional secret, and press Probe: the platform opens a session, requires the model to identify itself (a name and a build digest), probes it for determinism, and runs its self-test through the wire — showing you exactly what generation would attach. A model that will not identify itself or answers non-deterministically is refused, with the reason on screen; a model that fails its self-test can never verify anything — the failing check is shown, and no verdict is claimed against it. At generation time an unreachable model becomes a visible warning and the run proceeds on the derived stand-in — never silently.

The path is proven end to end on real third-party RTL: an SPI flash behavioural model and an open-source I²C slave core, both running unmodified under an HDL simulator, both judging generated programs through the same contract — including one catching a deliberately wrong register value in the project's own map, with both values named. Reference adapters ship with the platform, including one built on the standard Python co-simulation framework DV teams already use — designed so the same testbench retargets between simulators by changing a runner name.

You always know who judged

A stand-in derived from your uploads and your actual device model are different authorities, and the platform never lets the two blur. The project page states which one the next generation will attach — and every run, and the generated workbook itself, records the model's identity and digest.

Project-page strip stating that the customer's own RTL model judges generation, with per-source status chips
Fig. 1a — Who judges generation, stated on the project page: here the customer's own model is connected and outranks every derived source; with no model connected the same strip reads "ATE-IQ-DERIVED STAND-IN (NOT A REAL DEVICE MODEL)" and names exactly which uploads it derives from.
04

Start from a standard file

The derived stand-in has a deliberately low entry price: files you already have.

Transcription is not verification A transcribed pack is validated for shape and self-consistency — which cannot prove a number was copied from the datasheet correctly. The editor says so on the surface: pack-green is not datasheet-correct, and the numbers deserve a human check against the source.
05

The program remembers its judge

A model-judged program does not depend on the model at run time. The model's answers — predicted read-backs, DC readings for the offline branch — are baked into the generated workbook as a plain VBA table, so the .igxlproj stays self-contained on the tester.

The table's preamble records generated against: model, digest — and that digest is a fence, not a caption. If your model changes and the program is regenerated, a stale baked table is caught loudly before dispatch rather than shipping answers from a model that no longer exists.

The model can also author the pattern's expected values directly: read compares are rewritten from the device's own parse of the transaction. When the model's answer disagrees with what the register map implied, the disagreement is surfaced as a warning naming both values — the pattern ships the model's answer, and the engineer adjudicates which source is wrong. That is precisely the demonstration above: a stale map value planted against real RTL was caught with values, then the model-authored expects converged the program to green.

06

Cross-checking the judge itself

When the model's adapter supplies the simulator's own session capture — as the reference RTL adapters do — each pattern test also ships a cross-check waveform file: the tester's pattern and the simulator's own signal capture, time-aligned in one standard VCD — two scopes, one time axis, openable in any waveform viewer. A capture the alignment cannot anchor is refused loudly, never guessed into place.

GTKWave showing the tester pattern scope and the RTL simulator's own capture aligned on one time axis
Fig. 1b — The dual-scope cross-check in GTKWave: the model's clock and chip-select tracking the tester's, while the RTL's internal command register decodes the opcodes the pattern shifts in. The simulator's capture is verbatim — internals included — never redrawn from the replay.

This is a third, independent check on top of the replay verdicts: the replay compares decoded values, the cross-check lets an engineer compare raw waveforms with their own eyes. A defect in the replay's decoding would be visible here as a waveform disagreement — which is the point of having it.

Scope, stated plainly A model connected over the wire protocol (§03) does not return simulator captures today — the wire deliberately has no channel for them, because a capture reconstructed on ATE·IQ's side of the wire would defeat the independence that makes this a cross-check. The capability rides the adapter: where the adapter runs the simulator and can hand back its dump, the file ships; where it cannot, the replay verdicts and in-app waveforms (§10) still stand.
07

Replay: the device reads the wire

Verification runs on the real artefacts. The exact vector array the .atp pattern was emitted from is clocked, bit by bit, into the model — which parses the frame the way silicon would, with no help from the pattern's own annotations.

PATTERN the emitted .atp vectors TEST + LIMITS plan record, spec limits DEVICE MODEL device behaviour self-test gated VERIFIED device agrees, bit for bit FINDING expected vs actual, located NOT VERIFIED declined, with the reason a declined check is always labelled and never counted as a pass — the inventory of what was NOT verified ships with the run
Fig. 1 — Replay. Three outcomes, all of them explicit — nothing is ever quietly assumed to pass.

Each frame produces one of three families of finding, and every finding carries expected-versus-actual with units and a location:

State persists across frames within a test, so a write in one frame changes what a later frame reads back. Before each test the model is put in a production-realistic condition — the forced ambient the requirement states, and a device that has been powered and converting — rather than an unrealistically fresh-from-reset part.

08

What it will not judge

Every test is scoped against the model's judging surface before a verdict is issued. A test the model cannot honestly judge is declined — loudly, with a reason — and a declined check is never counted as a pass.

AnswerableDeclined, and why
Register, ID and configuration access over the bus Checksum-protected frames — where the model has no checksum algorithm it refuses rather than guesses.
Supply current after a bus-commanded mode change Input-threshold searches — a specification bounds the recognition regions, not the switching point; scoring a synthesized threshold against a recognition window would mis-fail good parts.
Clamp continuity, leakage, output levels, POR and brownout thresholds Repeatability, drift and supply rejection — these grade real silicon statistics, which no behavioural model can stand in for.
Temperature-accuracy corner checks against the guaranteed error band Timing measurements — conversion times and margins depend on real device and tester timing; the model is time-free by design.

The decline list is calibrated, not defensive. Windowed supply-current measurements were declined for exactly as long as their sample instant was unknowable — and became verifiable again the moment the pattern itself could pin it (§10).

09

One verdict, three judges

The device model does not replace the existing checks, and it cannot be satisfied instead of them. A generation result is clean only when every judge agrees:

The clean verdict clean ⇔ the offline compile proxy passes and zero validator errors and (the device model verified it or honestly declined it). A failed model self-test is never clean — nothing was verified, so nothing is claimed.

That structure is the defence against over-fitting to a single judge: a generator cannot satisfy the loop by gaming one checker. Model findings feed the existing repair loop rather than starting a second one — inside the same two-round budget — and findings against deterministically emitted artefacts are surfaced rather than re-prompted, because a defect in an emitter is fixed in code, not talked away by a language model.

10

Seeing it: design-verification waveforms

Every pattern-carrying test in a run produces a full DV-style waveform, drawn from the same replay that judges it: the stimulus the tester will drive, the device's modelled response overlaid on it, the part's internal state, and a frame table of what the pattern intended beside what the device parsed.

Design-verification waveform for a TMP126 temperature-accuracy test
Fig. 2 — One test, fully instrumented: bus pins with drive-versus-compare colouring, device response, alert and status flags, protocol state, register values stepping at their latch cycles, and a supply-current probe — with the frame table below reconciling pattern intent against the device's own parse.

The internal lanes are the part of this that no logic analyser gives you: the protocol state machine, the address pointer, each watched register's value changing at the exact cycle it latches, and the supply-current probe stepping between the device's documented operating states.

Measurements the pattern takes itself

Some measurements only mean something at a precise instant inside a running pattern — a supply current during a conversion, not before or after it. On UltraFLEX the pattern can pin that instant itself rather than leaving it to post-burst timing, and for the tests that need it ATE·IQ generates the pieces that make that work end to end, then verifies them.

Verification is the part that matters here. Because the replay knows the device's state at every cycle, it knows what state the part was in at the exact vector where the measurement was taken, and judges each sample against the test's limits accordingly — which is what turns "current measured somewhere in this burst" into a checkable claim.

Waveform showing a pattern-pinned mid-burst supply-current measurement
Fig. 3 — A pattern-pinned measurement: the instrument lane shows the measurement state applying mid-pattern, and the supply-current trace steps from quiescent to active as the pattern triggers a conversion — so the sample lands inside the conversion by construction, not by timing luck.
Why this is hard offline A mid-burst reading means nothing without knowing where in the burst it landed — exactly what a static check cannot tell you. Replaying the pattern against a device model answers it directly: what state the part was in when each sample was taken, judged against the test's limits, with that state named in any failure.
Scope, stated plainly This generation path currently covers active-conversion supply-current tests on a serial bus, where the rail voltage is known and within the instrument's range; anything outside that falls back to a conventional post-pattern meter read. And while the emitted pattern is verified against the device model, the pattern compiler has not yet signed off on this construct in a bench run. It is on by default, with a switch to fall back to the conventional meter read — so the outstanding confirmation is named here rather than assumed, and it applies to what ships.
11

Any device with a register map

A hand-built behavioural model is the deepest form of this, but it is not the entry price. Where a project carries a register map — addresses, widths, reset values, fields — ATE·IQ stands up a generic register model from it automatically: wrong-register detection, reset-value and read-back compares with reserved and self-clearing bits masked, and reads of live registers treated as capture-only rather than compared against a constant. Declare the device's bus framing as a project bus profile and that model parses the wire exactly the way the generator writes it; without one, both fall back to a generic address-and-data frame — and generation says so instead of implying the framing is confirmed.

The metadata that drives it is yours and editable in the app — which registers hold run-time state, which control bits self-clear, which bits a register walk must not toggle. When a program's semantics depend on something the map does not yet state, generation names the row to fix instead of guessing.

What the generic model is not It reasons about register semantics, and only those. Measurements, conversion dynamics, alert behaviour and timing decline with a reason, because a register map does not describe them — those need a device behavioural model like the one in §02. Its bus protocol is treated as assumed rather than documented, so a disagreement with the pattern is reported as "not verified" rather than as a fault in your program.
12

On the TMP126 demo

The 34-test TMP126 program is generated, replayed and judged on every run. The current run verifies clean with no semantic errors outstanding:

tests replayed
34
verified clean
27
declined, with reasons
6
carrying a warning
1
semantic errors
0

All 22 pattern-carrying tests replay with zero mismatched compare cycles. Getting there was the point of the exercise: the first two defects in §01 were not patched in the generated output — they were fixed in the generator, so the emitter and the model now take the device's framing from one shared source and cannot drift apart. That class of defect is now caught at the source, and the demo program generates semantically correct without spending repair rounds on device semantics.

What "zero errors" does and does not mean It means nothing the oracle currently rules on is wrong — not that every question has been asked. The burst-shape defect in §01 shows how that gap closes: for a while the replay recorded the transaction shape without any rule that failed a read burst issued as single transfers, so the test reported clean. There is now a rule that fails it, and the generator emits the burst as one auto-incrementing transaction, so the defect is both judged and gone. Rules are added as the classes they catch are proven, and the honest inventory of what was not checked ships with every run rather than being summarised away.
Honest boundary Model-verified is not tool-verified, and neither is silicon-verified. These verdicts are against the device model as ATE·IQ interprets the generated artefacts — and are only as good as that model. IG-XL remains the authority on tool semantics, and correlation on real parts remains the authority on the device. Where the model derives from a project's own register map, the verdict is only as good as that map — and the platform says so on the surface rather than in a footnote.