Skip to content
STIMSMITH

RVFI-DII

Concept

RVFI-DII (pronounced "rividy") is the TestRIG-compatible combination of the RISC-V Formal Interface (RVFI) for per-instruction state observation and Direct Instruction Injection (DII) for harness-driven instruction supply. TestRIG vengines produce DII instruction traces and consume RVFI execution traces from implementations, comparing the etraces returned by a model and an implementation under test over a single socket to detect divergence.

First seen 5/27/2026
Last seen 8/11/2026
Evidence 23 chunks
Wiki v3

WIKI

Overview

RVFI-DII (pronounced "rividy") is the combined verification interface used by the TestRIG framework. It joins the RISC-V Formal Interface (RVFI), a tracing protocol for RISC-V processors that specifies the results of running instructions, with Direct Instruction Injection (DII), in which the next instruction is supplied by the test harness rather than fetched from program memory. TestRIG describes itself as "a framework for RISC-V processor verification using the RVFI-DII interface," and the full wire format is documented in the project repository's RVFI-DII specification.

Components and data flow

READ FULL ARTICLE →

NEIGHBORHOOD

No graph connections found for this entity yet. It may appear in future ingestion runs.

explore full graph →

RELATIONSHIPS

36 connections
TestRIG ← uses 100% 16e
TestRIG uses the RVFI-DII interface as its core communication protocol.','confidence':0.99},"description":"TestRIG is built around the RVFI-DII interface for passing instruction and execution traces between components.",'confidence':0.99}]},{"src_label":"Tool","src_name":"TestRIG","relation_type":"USES","dst_label":"Concept","dst_name":"Random Instruction Generation","evidence_chunk_ids":["2d1a953c-bbc5-45f5-957a-56c3d6263029"],"quote":"Framework for testing RISC-V processors with Random Instruction Generation.","claim":"TestRIG uses Random Instruction Generation to verify RISC-V processors.","description":"TestRIG employs random instruction generation as a core technique for processor verification.","confidence":0.98},{"src_label":"Tool","src_name":"TestRIG","relation_type":"USES","dst_label":"Concept","dst_name":"Vengine","evidence_chunk_ids":["2d1a953c-bbc5-45f5-957a-56c3d6263029"],"quote":"TestRIG supports two types of components: 1. Vengines (verification engines)","claim":"TestRIG uses Vengines as one of its two main component types.","description":"Vengines are a key component type in the TestRIG framework responsible for generating and consuming traces.","confidence":0.99},{"src_label":"Tool","src_name":"TestRIG","relation_type":"USES","dst_label":"Concept","dst_name":"Instruction Trace","evidence_chunk_ids":["2d1a953c-bbc5-45f5-957a-56c3d6263029"],"quote":"Vengines generate one or more DII streams of instruction traces","claim":"TestRIG uses instruction traces as the mechanism for feeding instructions to implementations.","description":"Instruction traces (itraces) are generated by vengines and consumed by implementations in TestRIG.","confidence":0.98},{"src_label":"Tool","src_name":"TestRIG","relation_type":"USES","dst_label":"Concept","dst_name":"Execution Trace","evidence_chunk_ids":["2d1a953c-bbc5-45f5-957a-56c3d6263029"],"quote":"consume one or more RVFI streams of execution traces","claim":"TestRIG uses execution traces returned by implementations to verify behaviour.","description":"Execution traces (etraces) are produced by implementations and consumed by vengines for comparison.","confidence":0.98},{"src_label":"Tool","src_name":"TestRIG","relation_type":"USES","dst_label":"Concept","dst_name":"Direct Instruction Injection","evidence_chunk_ids":["2d1a953c-bbc5-45f5-957a-56c3d6263029","42f69dc2-1bc8-4247-b342-561f49596e0a"],"quote":"As TestRIG relies on direct instruction injection, bypassing fetch through PC","claim":"TestRIG uses direct instruction injection to bypass the fetch stage and inject instructions directly.","description":"Direct instruction injection is a key mechanism in TestRIG that allows bypassing the PC-based fetch.","confidence":0.99},{"src_label":"Tool","src_name":"TestRIG","relation_type":"USES","dst_label":"Concept","dst_name":"Counterexample Reduction","evidence_chunk_ids":["2d1a953c-bbc5-45f5-957a-56c3d6263029"],"quote":"we can expect automatically reduced counterexamples on the order of a handful of instructions","claim":"TestRIG supports automated counterexample reduction by eliminating instructions from traces.","description":"TestRIG enables counterexample reduction by shortening instruction sequences to find minimal divergences.","confidence":0.97},{"src_label":"Tool","src_name":"TestRIG","relation_type":"EVALUATES","dst_label":"Concept","dst_name":"RISC-V","evidence_chunk_ids":["2d1a953c-bbc5-45f5-957a-56c3d6263029"],"quote":"TestRIG is a framework for RISC-V processor verification","claim":"TestRIG targets RISC-V processors for verification.","description":"TestRIG is specifically designed to verify RISC-V processor implementations.","confidence":0.99},{"src_label":"Tool","src_name":"TestRIG","relation_type":"HAS_PART","dst_label":"Tool","dst_name":"QuickCheck Verification Engine","evidence_chunk_ids":["42f69dc2-1bc8-4247-b342-561f49596e0a"],"quote":"The root makefile can currently build the QuickCheck Verification Engine, Spike, and the Sail implementation.","claim":"The QuickCheck Verification Engine is a provided module within TestRIG.","description":"TestRIG includes the QuickCheck Verification Engine as one of its built-in components.","confidence":0.97},{"src_label":"Tool","src_name":"TestRIG","relation_type":"HAS_PART","dst_label":"Tool","dst_name":"Spike","evidence_chunk_ids":["42f69dc2-1bc8-4247-b342-561f49596e0a"],"quote":"The root makefile can currently build the QuickCheck Verification Engine, Spike, and the Sail implementation.","claim":"Spike is a provided module within TestRIG.","description":"TestRIG includes Spike as one of its supported implementations.","confidence":0.95},{"src_label":"Tool","src_name":"TestRIG","relation_type":"HAS_PART","dst_label":"Tool","dst_name":"Sail","evidence_chunk_ids":["42f69dc2-1bc8-4247-b342-561f49596e0a"],"quote":"The root makefile can currently build the QuickCheck Verification Engine, Spike, and the Sail implementation.","claim":"Sail is a provided implementation module within TestRIG.","description":"TestRIG includes a Sail model as one of its supported implementations.","confidence":0.95},{"src_label":"Tool","src_name":"TestRIG","relation_type":"HAS_PART","dst_label":"Tool","dst_name":"RVBS","evidence_chunk_ids":["42f69dc2-1bc8-4247-b342-561f49596e0a"],"quote":"The dependencies for RVBS are the Bluespec compiler `bsc`.","claim":"RVBS is a provided module within TestRIG.","description":"TestRIG includes RVBS as one of its supported implementations.","confidence":0.93},{"src_label":"Tool","src_name":"TestRIG","relation_type":"HAS_PART","dst_label":"Tool","dst_name":"Ibex","evidence_chunk_ids":["42f69dc2-1bc8-4247-b342-561f49596e0a"],"quote":"The dependencies for Ibex are verilator","claim":"Ibex is a provided module within TestRIG.","description":"TestRIG includes Ibex as one of its supported implementations.","confidence":0.93},{"src_label":"Tool","src_name":"TestRIG","relation_type":"HAS_PART","dst_label":"Tool","dst_name":"Toooba","evidence_chunk_ids":["42f69dc2-1bc8-4247-b342-561f49596e0a"],"quote":"Toooba depends on the Bluespec compiler (see the dependencies for RVBS) and verilator.","claim":"Toooba is a provided module within TestRIG.","description":"TestRIG includes Toooba as one of its supported implementations.","confidence":0.93},{"src_label":"Tool","src_name":"Ibex","relation_type":"DEPENDS_ON","dst_label":"Tool","dst_name":"Verilator","evidence_chunk_ids":["42f69dc2-1bc8-4247-b342-561f49596e0a"],"quote":"The dependencies for Ibex are verilator","claim":"Ibex depends on Verilator for building.","description":"Verilator is a required dependency for building the Ibex implementation in TestRIG.","confidence":0.99},{"src_label":"Tool","src_name":"Toooba","relation_type":"DEPENDS_ON","dst_label":"Tool","dst_name":"Verilator","evidence_chunk_ids":["42f69dc2-1bc8-4247-b342-561f49596e0a"],"quote":"Toooba depends on the Bluespec compiler (see the dependencies for RVBS) and verilator.","claim":"Toooba depends on Verilator for building.","description":"Verilator is a required dependency for the Toooba implementation in TestRIG.","confidence":0.99},{"src_label":"Tool","src_name":"Sail","relation_type":"MENTIONS","dst_label":"Concept","dst_name":"CHERI","evidence_chunk_ids":["42f69dc2-1bc8-4247-b342-561f49596e0a"],"quote":"Both Spike and Sail are built without CHERI support by default","claim":"Sail can optionally support CHERI extensions.","description":"Sail has optional CHERI support which is disabled by default in TestRIG.","confidence":0.95},{"src_label":"Tool","src_name":"Spike","relation_type":"MENTIONS","dst_label":"Concept","dst_name":"CHERI","evidence_chunk_ids":["42f69dc2-1bc8-4247-b342-561f49596e0a"],"quote":"Both Spike and Sail are built without CHERI support by default","claim":"Spike can optionally support CHERI extensions.","description":"Spike has optional CHERI support which is disabled by default in TestRIG.","confidence":0.95},{"src_label":"Organization","src_name":"CTSRD-CHERI","relation_type":"INTRODUCES","dst_label":"Tool","dst_name":"TestRIG","evidence_chunk_ids":["42f69dc2-1bc8-4247-b342-561f49596e0a"],"quote":"https://github.laiyagushi.com/CTSRD-CHERI/TestRIG","claim":"TestRIG is authored and maintained by the CTSRD-CHERI organization.","description":"The CTSRD-CHERI GitHub organization hosts and develops the TestRIG framework.","confidence":0.97},{"src_label":"CodeArtifact","src_name":"runTestRIG.py","relation_type":"PART_OF","dst_label":"Tool","dst_name":"TestRIG","evidence_chunk_ids":["42f69dc2-1bc8-4247-b342-561f49596e0a"],"quote":"$ utils/scripts/runTestRIG.py","claim":"runTestRIG.py is a utility script that is part of the TestRIG framework.","description":"runTestRIG.py is the main script used to run TestRIG verification sessions.","confidence":0.99},{"src_label":"Tool","src_name":"TestRIG","relation_type":"MENTIONS","dst_label":"Tool","dst_name":"L3","evidence_chunk_ids":["2d1a953c-bbc5-45f5-957a-56c3d6263029"],"quote":"If the specification is an executable model (see Sail, L3, and many other efforts)","claim":"TestRIG documentation mentions L3 as an example of an executable specification model.","description":"L3 is mentioned alongside Sail as an example of executable specification models compatible with TestRIG.","confidence":0.9},{"src_label":"Concept","src_name":"Vengine","relation_type":"USES","dst_label":"Concept","dst_name":"Instruction Trace","evidence_chunk_ids":["2d1a953c-bbc5-45f5-957a-56c3d6263029"],"quote":"Vengines generate one or more DII streams of instruction traces","claim":"Vengines generate instruction traces as DII streams.","description":"Instruction trace generation is a core responsibility of Vengines in the TestRIG framework.","confidence":0.99},{"src_label":"Concept","src_name":"Vengine","relation_type":"USES","dst_label":"Concept","dst_name":"Execution Trace","evidence_chunk_ids":["2d1a953c-bbc5-45f5-957a-56c3d6263029"],"quote":"and consume one or more RVFI streams of execution traces","claim":"Vengines consume execution traces returned by implementations.","description":"Execution trace consumption is a core responsibility of Vengines for checking correctness.","confidence":0.99},{"src_label":"Concept","src_name":"Vengine","relation_type":"USES","dst_label":"Concept","dst_name":"RVFI-DII","evidence_chunk_ids":["2d1a953c-bbc5-45f5-957a-56c3d6263029"],"quote":"The vengine then feeds these itraces into both a model and an implementation through two TCP sockets in the RVFI-DII format.","claim":"Vengines communicate with implementations using the RVFI-DII format.","description":"Vengines use the RVFI-DII protocol over TCP sockets to communicate instruction and execution traces.","confidence":0.99},{"src_label":"Tool","src_name":"QuickCheck Verification Engine","relation_type":"IMPLEMENTS","dst_label":"Concept","dst_name":"Vengine","evidence_chunk_ids":["42f69dc2-1bc8-4247-b342-561f49596e0a"],"quote":"The root makefile can currently build the QuickCheck Verification Engine, Spike, and the Sail implementation.","claim":"The QuickCheck Verification Engine is an implementation of the Vengine concept in TestRIG.","description":"The QuickCheck Verification Engine serves as a Vengine within the TestRIG framework.","confidence":0.9}]},
The paper introduces RVFI-DII as a combined interface for instruction injection and trace output.
Toooba ← implements 90% 6e
Toooba is instrumented with RVFI-DII for use in TestRIG.
RVFI extends → 100% 5e
RVFI-DII extends RVFI with the Direct Instruction Injection input channel.
TestRIG ← implements 100% 4e
TestRIG uses RVFI-DII as its standardized communication interface.
Toooba ← uses 100% 4e
Toooba is instrumented with RVFI-DII using superscalar fetch and ID assignment.
Piccolo ← implements 90% 4e
Piccolo is instrumented with RVFI-DII for use in TestRIG.
Flute ← implements 90% 4e
Flute is instrumented with RVFI-DII for use in TestRIG.
Flute ← uses 100% 3e
Flute is instrumented with RVFI-DII using a DII queue replacing the instruction cache.
RVBS ← uses 90% 3e
RVBS is instrumented with RVFI-DII to participate in the TestRIG ecosystem.
Piccolo ← uses 100% 3e
Piccolo is instrumented with RVFI-DII, with the cache replaced by a DII queue.
DII Stream ← part of 2e
RVFI-DII defines the DII Stream format for instruction traces.
Ibex ← implements 90% 2e
Ibex is instrumented with RVFI-DII for use in TestRIG.
RVBS ← implements 90% 2e
RVBS is a RISC-V reference implementation instrumented with RVFI-DII.
Sail ← implements 100% 2e
The Sail model implements the RVFI-DII interface.
QCVEngine ← uses 100% 2e
QCVEngine communicates with implementations via RVFI-DII sockets.
Direct Instruction Injection ← implements 100% 2e
Direct Instruction Injection is the DII component of the RVFI-DII interface.
Ibex ← uses 90% 2e
Ibex is instrumented with RVFI-DII to participate in the TestRIG ecosystem.
RVFI Stream ← part of 2e
RVFI-DII defines the RVFI Stream format for execution traces.
UCAM-CL-TR-984 ← uses 100% 2e
RVFI-DII is implemented and used in the TestRIG infrastructure for processor verification.
DII (Direct Instruction Injection) ← part of 1e
DII (Direct Instruction Injection) is a component of the RVFI-DII interface.
spike ← uses 95% 1e
Spike was extended with the Direct Instruction Injection interface to support TestRIG verification.
QEMU ← uses 95% 1e
QEMU was extended with the Direct Instruction Injection interface to support TestRIG verification.
Direct Instruction Injection ← part of 100% 1e
Direct Instruction Injection is the input component of the RVFI-DII interface.
BSV-RVFI-DII Library ← implements 95% 1e
The BSV-RVFI-DII library provides a Bluespec implementation of the RVFI-DII interface.
Flute ← uses 90% 1e
Flute has been instrumented with RVFI-DII.
Piccolo ← uses 90% 1e
Piccolo has been instrumented with RVFI-DII.
RISC-V Formal Interface part of → 85% 1e
RVFI-DII is an extension of the RISC-V Formal Interface standard.
RVFI ← extends 100% 1e
RVFI-DII extends RVFI by adding Direct Instruction Injection capabilities.
spike ← implements 95% 1e
Spike has been extended with the Direct Instruction Injection interface for use with TestRIG.
QEMU ← implements 95% 1e
QEMU has been extended with the Direct Instruction Injection interface for use with TestRIG.
Direct Instruction Injection uses → 100% 1e
RVFI-DII combines RVFI trace output with Direct Instruction Injection input.
RVFI uses → 100% 1e
RVFI-DII uses RVFI as its trace output mechanism.
CHERI-RISC-V VP++ ← uses 95% 1e
CHERI-RISC-V VP++ adds RVFI-DII support for TestRIG verification.
QuickCheckVEngine ← uses 1e
QuickCheckVEngine connects to RISC-V implementations via the RVFI-DII interface.
Sail RISC-V Model ← uses 100% 1e
The Direct Instruction Injection interface was added to the Sail RISC-V formal model.

CITATIONS

10 sources
10 citations — click to expand
[1] TestRIG is a framework for RISC-V processor verification using the RVFI-DII (pronounced "rividy") interface. GitHub - CTSRD-CHERI/TestRIG: Testing processors with Random Instruction Generation · GitHub
[2] Vengines generate one or more DII streams of instruction traces and consume one or more RVFI streams of execution traces; implementations consume a DII instruction trace and generate an RVFI execution trace. GitHub - CTSRD-CHERI/TestRIG: Testing processors with Random Instruction Generation · GitHub
[3] The vengine feeds itraces into both a model and an implementation through two TCP sockets in the RVFI-DII format, the model and implementation return an RVFI-DII etrace detailing the state observation and state change of each instruction, and the vengine compares these two traces to identify any divergence. GitHub - CTSRD-CHERI/TestRIG: Testing processors with Random Instruction Generation · GitHub
[4] Implementations consume instructions exclusively from the RVFI-DII instruction port, bypassing any actual instruction memory and ignoring the architectural program counter, and deliver a trace report at the end of execution in the RVFI-DII format. GitHub - CTSRD-CHERI/TestRIG: Testing processors with Random Instruction Generation · GitHub
[5] The RVFI-DII communication uses a single socket with the itrace consumed and the etrace delivered over the same socket. GitHub - CTSRD-CHERI/TestRIG: Testing processors with Random Instruction Generation · GitHub
[6] TestRIG eliminates the "test gap" between specification and implementation by using an executable model as the specification, allowing automated verification of any specified property without passing through human interpretation and hand-writing tests. GitHub - CTSRD-CHERI/TestRIG: Testing processors with Random Instruction Generation · GitHub
[7] TestRIG verifies the pipeline as well as specification compliance: under random sequence generation every register value read in the pipeline can be observed, whereas a test suite only reports a prescribed test result. GitHub - CTSRD-CHERI/TestRIG: Testing processors with Random Instruction Generation · GitHub
[8] Because DII bypasses fetch through the PC, a sequence of instructions can easily be shortened by eliminating instructions from the trace to see if divergence still occurs, yielding automatically reduced counterexamples on the order of a handful of instructions. GitHub - CTSRD-CHERI/TestRIG: Testing processors with Random Instruction Generation · GitHub
[9] TestRIG supports a "single implementation" mode that runs an implementation on its own and asserts more liberal properties over the RVFI trace (for example, instruction count in equals instruction count out to detect processor lockup); DII is required to allow such liberal testing without having to reason about control flow. [PDF] CAMBRIDGE - RISC-V Summit Europe
[10] Single-implementation-mode testing via DII has uncovered cases such as a processor mis-decoding and locking up on certain illegal instructions, a subtle and rare compressed-branch mispredict infinite loop, and a reachable fatal assert condition in a version of the Sail model. [PDF] CAMBRIDGE - RISC-V Summit Europe