Skip to content
STIMSMITH

Design Under Test

Concept WIKI v5 · 6/4/2026

A Design Under Test (DUT) is the hardware design whose behavior is exercised, monitored, and checked by a verification or fuzzing methodology. The supplied evidence documents DUT in two distinct settings: (1) a processor implementation in MorFuzz's runtime instruction-morphing co-simulation flow, whose committed program counter, instructions, and write-back values are continuously compared against a reference simulator, and (2) a MIPS-I processor used as the concrete example in a constrained-random verification methodology that drives the DUT with object-oriented SystemVerilog stimulus built from operations, instructions, and instruction scenarios.

Overview

In the supplied evidence, Design Under Test (DUT) refers to the hardware instance whose behavior is the target of a verification or fuzzing flow. Two complementary usages appear in the evidence:

  • In MorFuzz (USENIX Security '23), the DUT is the processor implementation under test that is observed during instruction execution and compared online with a simulator/reference execution. The paper also uses the synonymous phrase processor under test when describing the generated hardware harness.
  • In a constrained-random verification (CRV) methodology (EE Times), the DUT is illustrated with a processor supporting the MIPS-I instruction set, and the main stimulus applied to the DUT is a program trace that combines one or more instruction scenarios.

DUT in MorFuzz's checking flow

MorFuzz observes the DUT during instruction execution and compares its behavior with a simulator/reference execution.

  • In the commitment stage, the DUT commits its program counter and the executed instruction.
  • After receiving the commit request, the simulator executes the next instruction and checks whether that instruction is consistent with what the DUT committed.
  • If the check passes, the simulator records the reference write-back data in a scoreboard.
  • In the judgment stage, once the DUT's write-back data is ready, MorFuzz compares the DUT write-back value with the scoreboard's reference value to determine whether the instruction executed correctly.
  • If mismatched behavior is detected, MorFuzz reports a potential bug and exits the simulation.

This evidence shows the DUT as the concrete hardware instance whose committed instructions and resulting state are checked online.

DUT state synchronization

The MorFuzz paper notes that not all mismatched differences are bugs. Some differences arise from implementation differences between the DUT and the simulator. If the simulation exits immediately on every mismatch, the DUT loses its accumulated execution state, which makes it harder for fuzzing to reach deep processor states.

To address this, MorFuzz introduces a synchronizable co-simulation approach. The goal is to automatically eliminate legal implementation differences by allowing the DUT to synchronize its state to the reference model/simulator so that execution can continue. The paper gives an example where an instruction accesses a peripheral register that the simulator does not model; MorFuzz analyzes the physical address, treats the difference as legal if appropriate, and synchronizes hardware state to the simulator instead of reporting a bug.

DUT-oriented stimulus structure (MorFuzz)

MorFuzz organizes test generation around hardware functionality of the DUT.

A seed determines:

  • the fuzzing execution environment,
  • the instruction extensions to test,
  • the weights of different testing blocks,
  • the random-number seed, and
  • the intensity of instruction shuffle.

MorFuzz defines seven testing block types to cover different hardware functional modules of the DUT:

  1. integer arithmetic test,
  2. floating-point arithmetic test,
  3. CSR test,
  4. memory operation test,
  5. atomic memory operation test,
  6. system operation test, and
  7. custom extension test.

A control-transfer instruction is placed at the end of each testing block to chain blocks together.

DUT execution environment and harness (MorFuzz)

The supplied evidence also describes the surrounding infrastructure for running the DUT.

The fuzzing execution environment:

  • initializes the processor,
  • configures available instruction extensions,
  • sets the address translation mode and page table,
  • sets the runtime privilege level,
  • resides in a non-morphable physical area, and
  • handles exceptions and interrupts with the highest privilege level.

It also provides interfaces for fuzzing the system environment, including page-table randomization functions that can mutate page-table entries and evict mapped pages.

For the hardware side, MorFuzz uses the starship SoC generator to produce a test harness for the processor under test, including the on-chip interconnect system and a memory model that stores the compiled stimulus template.

DUT in constrained-random verification (MIPS-I example)

In the CRV methodology described in the EE Times article, the DUT is a processor supporting the MIPS-I instruction set and the verification problem is the typical microprocessor verification challenge: complex instruction sets, multiple pipeline stages, in-order or out-of-order execution, instruction parallelism, fixed- and floating-point scalar/vector operations, and other features that create a seemingly never-ending list of corner cases to exercise.

Stimulus for the DUT.

  • The main stimulus for the DUT is a program trace, considered as a collection of one or more instruction scenarios.
  • One scenario can be a generic boot code for the processor with an exception handler; another can be a set of instructions to program the processor's internal configuration registers with dynamic contents to set up hardware watchpoints; the remaining scenarios can consist of one or more instructions with load/store, arithmetic, and branch operations, possibly including nested branch loops. Exception conditions can be introduced at random inside these scenarios.

Why simple random stimulus is not enough.

  • Pure random instructions rarely create useful stimulus for the processor to target important design functionalities such as branches/jumps and exceptions. The CRV approach can only create useful stimulus when the stimulus-generation infrastructure is built with enough intelligence about the processor's instruction-set architecture and state, which requires top-down planning.

Exception planning for the DUT.

  • From a stimulus-generation perspective, planning for a processor's exception conditions must cover the occurrence of any one specific exception cause as well as the exception's occurrence probability.
  • The test plan should provide multiple exception conditions simultaneously to test the DUT's exception priority and handling.
  • Because these considerations affect the modeling of the properties and constraints between transaction objects, planning must begin early.

Object-oriented stimulus layering for the DUT.

  • The article models three levels of transaction abstraction for processor verification as SystemVerilog classes: operations, instructions, and instruction scenarios.
  • These classes are implemented in a bottom-up manner, because it is essential to create the lower-level building blocks before raising the level of abstraction to stimulus descriptions.

Scope of this article

Based on the provided evidence alone, the term DUT is documented here in the specific context of:

  • MorFuzz's processor fuzzing and co-simulation flow, where the DUT is a processor implementation that is stimulated, monitored, and compared against reference behavior while embedded in a generated hardware harness and fuzzing environment; and
  • A constrained-random verification methodology for microprocessors, illustrated with a MIPS-I processor DUT, where the DUT is exercised with a program trace built from operations, instructions, and scenarios.

The evidence supports the DUT as the hardware processor instance being stimulated, monitored, compared against reference behavior, and executed inside a generated harness and configurable verification environment.

CITATIONS

14 sources
14 citations
[1] In MorFuzz's checking flow, the DUT first commits its program counter and the executed instruction; the simulator then executes the next instruction and checks whether it matches the DUT's committed instruction. MorFuzz: Fuzzing Processor via Runtime Instruction Morphing enhanced Synchronizable Co-simulation
[2] If the commitment check passes, the simulator records reference write-back data in a scoreboard; the judgment stage later compares the DUT write-back value with the scoreboard reference value. MorFuzz: Fuzzing Processor via Runtime Instruction Morphing enhanced Synchronizable Co-simulation
[3] When mismatched behavior is detected, MorFuzz reports a potential bug and exits the simulation. MorFuzz: Fuzzing Processor via Runtime Instruction Morphing enhanced Synchronizable Co-simulation
[4] Not all mismatched differences are bugs; some arise from implementation differences between the DUT and the simulator, and exiting the simulation on every mismatch would cause the DUT to lose accumulated state and hinder reaching deep processor states. MorFuzz: Fuzzing Processor via Runtime Instruction Morphing enhanced Synchronizable Co-simulation
[5] MorFuzz's synchronizable co-simulation automatically eliminates legal implementation differences by letting the DUT synchronize its state to the reference model; for example, an instruction that accesses a peripheral register not modeled by the simulator can be detected as a legal difference by analyzing the accessed physical address. MorFuzz: Fuzzing Processor via Runtime Instruction Morphing enhanced Synchronizable Co-simulation
[6] MorFuzz seeds determine the fuzzing execution environment, the instruction extensions to be tested, the weights of different testing blocks, the random-number seed, and the intensity of instruction shuffle. MorFuzz: Fuzzing Processor via Runtime Instruction Morphing enhanced Synchronizable Co-simulation
[7] MorFuzz defines seven testing block types covering different hardware functional modules of the DUT: integer arithmetic, floating-point arithmetic, CSR, memory operation, atomic memory operation, system operation, and custom extension; a control-transfer instruction at the end of each block chains them together. MorFuzz: Fuzzing Processor via Runtime Instruction Morphing enhanced Synchronizable Co-simulation
[8] The MorFuzz fuzzing execution environment initializes the processor, configures available instruction extensions, the address translation mode, the page table, and the runtime privilege level, resides in a non-morphable physical area, and handles exceptions and interrupts at the highest privilege level; it also provides page-table randomization functions to mutate page-table entries and evict mapped pages. MorFuzz: Fuzzing Processor via Runtime Instruction Morphing enhanced Synchronizable Co-simulation
[9] MorFuzz uses the starship SoC generator to produce a test harness for the processor under test, including the on-chip interconnect system and a memory model that stores the compiled stimulus template. MorFuzz: Fuzzing Processor via Runtime Instruction Morphing enhanced Synchronizable Co-simulation
[10] In the constrained-random verification methodology, the example design under test (DUT) is a processor supporting the MIPS-I instruction set. Applying Constrained-Random Verification to Microprocessors (EE Times)
[11] The main stimulus for the DUT is a program trace, considered as a collection of one or more instruction scenarios (e.g., a generic boot-code scenario with an exception handler, scenarios that program internal configuration registers to set up hardware watchpoints, and load/store/arithmetic/branch scenarios that may include nested branch loops and randomly introduced exception conditions). Applying Constrained-Random Verification to Microprocessors (EE Times)
[12] Pure random instructions rarely create useful stimulus for the processor to target important design functionalities such as branches/jumps and exceptions; CRV can only create useful stimulus when the stimulus-generation infrastructure is built with enough intelligence about the processor's instruction-set architecture and state, requiring top-down planning. Applying Constrained-Random Verification to Microprocessors (EE Times)
[13] Exception planning for the DUT must cover the occurrence of any one specific exception cause as well as the exception's occurrence probability, and must provide multiple exception conditions simultaneously to test the DUT's exception priority and handling. Applying Constrained-Random Verification to Microprocessors (EE Times)
[14] The CRV methodology models three levels of transaction abstraction for processor verification as SystemVerilog classes — operations, instructions, and instruction scenarios — and implements them in a bottom-up manner. Applying Constrained-Random Verification to Microprocessors (EE Times)

VERSION HISTORY

v5 · 6/4/2026 · minimax/minimax-m3 (current)
v4 · 6/2/2026 · gpt-5.4
v3 · 5/27/2026 · gpt-5.5
v2 · 5/27/2026 · gpt-5.5
v1 · 5/26/2026 · gpt-5.5