Skip to content
STIMSMITH

CPU Verification

Concept WIKI v6 · 7/30/2026

CPU verification is the functional verification of CPU cores, motivated by microarchitectural features such as pipelining, multiple instruction issue, out-of-order execution, branch prediction, and caching that threaten functional correctness. The article covers constrained-random instruction-stream generation (including TVS asureISG and VCS constraint-solver tradeoffs), multi-core shared-resource stimulus generation, differential fuzzing approaches such as DifuzzRTL and ISAAC's LLM-aided, FPGA-accelerated full-stack framework, and differential testing for transient-execution vulnerabilities via SpecDoctor.

Overview

CPU verification is the functional verification of CPU cores. It is motivated by the fact that performance-enhancing microarchitectural features can threaten functional correctness. Evidence identifies examples such as Pipeline, Multiple Instruction Issue, Out-of-Order Execution, Branch Prediction, and memory-access acceleration through Cache. These features create corner cases that require specialist verification techniques. [C1]

Differential testing as industrial practice

Industrial practice for CPU verification relies on differential testing. The ISAAC paper positions CPU verification as a critical, time-intensive, and labor-consuming bottleneck in integrated-circuit development, and reports that nearly every stage of the framework pipeline has bottlenecks: front-end stimulus generation lacks micro-architectural awareness, yielding low-quality and redundant tests that impede coverage closure and miss corner cases; back-end simulation infrastructure, even with FPGA acceleration, often stalls on long-running tests and offers limited visibility, delaying feedback and prolonging the debugging cycle. [C11]

Constrained-random instruction-stream execution

One highlighted technique is Constrained Random Instruction Stream Generation, described in the evidence as constrained-random instruction-stream execution. In this approach, small assembler programs are generated and executed on the CPU core. The goal is to generate programs that exercise corner cases created by complex CPU performance enhancements. [C2]

Test and Verification Solutions Ltd extended its CPU verification capability with CPU verification engineers and an instruction-stream generation tool, asureISG. The source states that asureISG initially supported single-core CPU verification and was planned to be enhanced with multi-core support. [C3]

Multi-core and shared-resource concerns

The same TVS source connects multi-core verification to shared resources. It states that multiple cores are used to add performance to SoCs and products, and that those cores often share resources such as caches. This creates a need for multiple instruction streams generated by a tool that understands potential bugs in the management of shared resources. [C4]

Stimulus-generation tradeoffs

The AMD microcode-stimulus evidence describes practical tradeoffs in generating x86 opcodes:

  • Serial randomization achieved desired speed and memory use, but caused a significant distribution problem because each portion of the opcode was generated serially and the overall distribution could not be controlled. The result was skewed stimuli and the need for more seeds and simulations to close coverage. [C5]
  • A simple constrained-random approach solved the distribution issue, but reached speed and memory limits because of the complexity of the x86 instruction set, reducing simulation performance. [C6]
  • Randomizing instructions by choosing the opcode category first simplified the solver problem because only constraints specific to that category were active. The source reports improved speed and memory use without sacrificing distribution quality or test-level control. [C7]

Constraint-solver behavior

The evidence also describes behavior of the VCS constraint solvers used in the AMD microcode-stimulus work. In BDD solver mode, the solver elaborates the entire solution space of a randomize call before selecting a solution. This can consume substantial memory and time, although the elaborated solution space is cached to speed later randomization calls. The source notes that BDD solving can work well for CPU opcode generation when the randomize problem does not require excessive memory and the same randomize call occurs many times. [C8]

Single-class versus multiple-class generation

The AMD evidence compares single-class and multiple-class randomization architectures. In the reported runtime comparison, the multiple-class architecture was faster with either solver tested: the default RACE solver showed a 4x speedup, and the BDD solver showed a 2x speedup. Memory requirements were also significantly better for the multiple-class architecture in the BDD measurements. [C9]

The stated reason for the acceleration and memory reduction was that the new implementation presented a smaller set of variables and constraints to the solver. The source reports that the new implementation had 7x fewer constraints than the original, allowing the solver to calculate solutions more efficiently. [C10]

Differential fuzz testing for CPU verification

DifuzzRTL is a differential fuzz testing approach for CPU verification. It introduces a new coverage metric, register-coverage, which comprehensively captures the states of an RTL design and correctly guides input generation. DifuzzRTL automatically instruments register-coverage, randomly generates and mutates instructions defined in the ISA, then cross-checks them against an ISA simulator to detect bugs. [C13]

LLM-aided FPGA-accelerated CPU verification (ISAAC)

ISAAC is presented as a full-stack, Large Language Model (LLM)-aided CPU verification framework with FPGA parallelism, spanning bug categorisation, stimulus generation, and simulation infrastructure. Its front-end multi-agent stimulus engine is infused with micro-architectural knowledge and historical bug patterns to generate targeted tests that achieve coverage goals and capture elusive corner cases. [C11]

In ISAAC's back-end, a lightweight forward-snapshot mechanism and a decoupled co-simulation architecture between the Instruction Set Simulator (ISS) and the Design Under Test (DUT) enable a single ISS to drive multiple DUTs in parallel. By eliminating long-tail test bottlenecks and exploiting FPGA parallelism, simulation throughput is significantly improved. [C11]

Applied to a mature CPU that has undergone multiple successful tape-outs, ISAAC achieved up to 17,536x speed-up over software RTL simulation while detecting several previously unknown bugs, two of which are reported in the paper. [C11]

Differential fuzzing for transient-execution vulnerabilities (SpecDoctor)

Transient execution vulnerabilities break fundamental security assumptions guaranteed by the CPU and are critical to detect at the RTL development stage before chip manufacturing. SpecDoctor is an automated RTL fuzzer that designs a fuzzing template to test scenarios of transient execution vulnerabilities (e.g., Meltdown, Spectre, ForeShadow) with a single template, and performs multi-phased fuzzing where each phase solves an individual vulnerability constraint in the RTL context. SpecDoctor was implemented and evaluated on two out-of-order RISC-V CPUs, Boom and NutShell-Argo, finding vulnerabilities sharing prior attack vectors as well as two new variants, Boombard and Birgus, with unique attack vectors; both reported vulnerabilities were confirmed by developers. [C14]

Related tooling and methodologies

The ISA specification notes page from Alastair Reid's Related Work lists CPU verification among topics that relate to instruction-set architecture specification. UVM is referenced as a tool commonly used in verification methodologies that apply to CPU verification environments. [C12]

Scope note

Based on the supplied evidence, this article covers CPU verification as it relates to CPU-core functional correctness, differential testing practices, constrained-random instruction-stream generation, multi-core shared-resource stimulus, constraint-solver performance in opcode generation, differential fuzz testing approaches such as DifuzzRTL and SpecDoctor, and LLM-aided FPGA-accelerated frameworks such as ISAAC.

CITATIONS

14 sources
14 citations
[1] CPU verification is the functional verification of CPU cores, motivated by microarchitectural features such as pipelining, multiple instruction issue, out-of-order execution, branch prediction, and caching that can threaten functional correctness. TVS extends CPU Verification Capability - Design And Reuse
[2] Constrained random instruction stream execution generates small assembler programs for execution on the core to verify corner cases created by complex performance enhancements. TVS extends CPU Verification Capability - Design And Reuse
[3] TVS extended its CPU verification capability with a new Instruction Stream Generation tool called asureISG and a new team of CPU verification engineers. TVS extends CPU Verification Capability - Design And Reuse
[4] asureISG initially supports single CPU core verification but will soon be enhanced with multi-core support; multi-core SoCs share resources such as caches, requiring multiple instruction streams that understand potential bugs in shared-resource management. TVS extends CPU Verification Capability - Design And Reuse
[5] Serial randomization of x86 opcodes achieved desired speed and memory use but suffered a significant distribution problem; results were skewed, requiring many additional seeds and simulations to close coverage. Generating AMD microcode stimuli using VCS constraint solver
[6] A simple constrained-random approach solved the x86 opcode distribution issue but reached speed and memory limits because of the complexity of the x86 instruction set, reducing simulation performance. Generating AMD microcode stimuli using VCS constraint solver
[7] Randomizing x86 instructions by first choosing the opcode category simplified the constraint-solver problem, resulting in improved memory and speed without sacrificing distribution quality or test-level control. Generating AMD microcode stimuli using VCS constraint solver
[8] In BDD solver mode, VCS elaborates the entire solution space of a randomize call before selecting a solution, which can consume substantial memory and time but is cached to speed subsequent calls; BDD works well for CPU opcode generation when memory is not excessive and the same randomize call occurs many times. Generating AMD microcode stimuli using VCS constraint solver
[9] A multiple-class randomization architecture was faster than a single-class architecture with either VCS solver: a 4x speedup with the default RACE solver and a 2x speedup with the BDD solver, with significantly better BDD memory requirements. Generating AMD microcode stimuli using VCS constraint solver
[10] The multiple-class implementation presented 7x fewer constraints to the VCS solver than the original, allowing the solver to calculate solutions more efficiently and yielding the acceleration and memory reduction. Generating AMD microcode stimuli using VCS constraint solver
[11] CPU verification is a critical, time-intensive, and labor-consuming bottleneck in IC development; industrial practice relies on differential testing, and the front-end stimulus generation and back-end simulation stages each have pipeline bottlenecks; ISAAC is a full-stack LLM-aided framework with FPGA parallelism whose multi-agent stimulus engine uses micro-architectural knowledge and historical bug patterns, and whose back-end uses a lightweight forward-snapshot mechanism and decoupled ISS-DUT co-simulation enabling one ISS to drive multiple DUTs in parallel; ISAAC achieved up to 17,536x speed-up over software RTL simulation on a mature, multi-tape-out CPU and detected several previously unknown bugs. ISAAC: Intelligent, Scalable, Agile, and Accelerated CPU Verification via LLM-aided FPGA Parallelism
[12] DifuzzRTL is a differential fuzz testing approach for CPU verification that introduces register-coverage as a coverage metric to comprehensively capture RTL state and guide input generation; it instruments register-coverage, randomly generates and mutates ISA-defined instructions, and cross-checks results against an ISA simulator to detect bugs. DiFuzzRTL: Differential Fuzz Testing to Find CPU Bug (S&P 2021)
[13] SpecDoctor is an automated RTL fuzzer for transient execution vulnerabilities in CPUs that uses a single fuzzing template to test Meltdown/Spectre/ForeShadow-style scenarios with multi-phased fuzzing solving individual vulnerability constraints; evaluated on Boom and NutShell-Argo RISC-V CPUs, it found prior-style vulnerabilities plus two new variants Boombard and Birgus, both confirmed by developers. SpecDoctor: Differential Fuzz Testing to Find Transient Execution Vulnerabilities
[14] Alastair Reid's Related Work ISA specification notes page lists CPU verification among topics related to instruction-set architecture specification. ISA specification notes

VERSION HISTORY

v6 · 7/30/2026 · minimax/minimax-m3 (current)
v5 · 7/19/2026 · minimax/minimax-m3
v4 · 6/16/2026 · gpt-5.5
v3 · 5/31/2026 · gpt-5.4
v2 · 5/30/2026 · gpt-5.5
v1 · 5/27/2026 · gpt-5.5