Skip to content
STIMSMITH

MicroTESK

Tool WIKI v4 · 8/22/2026

MicroTESK is an open-source, specification-based test program generation framework for microprocessors developed at ISP RAS. It uses ISA specifications in a dialect of nML, MMU specifications in MMUSL, and Ruby test templates to extract testing situations and dependencies and generate concrete test programs using symbolic execution and constraint solving.

MicroTESK

MicroTESK is a specification-based test program generation (TPG) framework for microprocessor verification. It is described in the literature as one of the few open-license tools in its class and as an open-source, extensible, reconfigurable TPG framework developed by the MicroTESK team at ISP RAS.[1][2]

Architecture and inputs

MicroTESK separates an architecture-independent test generation core from architecture-specific models. In the MIPS64 MMU work, the tool is described as consisting of a reusable generation core plus MIPS64 memory-subsystem specifications; the same paper contrasts this separation with industrial TPG systems such as IBM Genesys-Pro while emphasizing differences in specification representation and use.[3]

For MicroTESK version 2.3 and later, the main inputs are:

  • ISA specifications written in a dialect of nML;
  • MMU specifications written in MMUSL;
  • test templates written in Ruby.[1]

The specifications are analyzed to extract testing knowledge, including execution situations and inter-instruction dependencies. That information is then used to generate test programs from user-provided test templates and to support systematic enumeration of templates.[1]

ISA and MMU specification model

ISA specifications define data types, constants, registers, access modes, memories, and instructions. The cited MIPS64 example shows register arrays, register-access modes with assembly syntax and binary image definitions, and instruction actions such as load/store behavior over a memory array.[4]

Because nML is described as too simple to adequately model MMUs, MicroTESK uses MMUSL for memory-management features. MMUSL specifications include address types, memory segments, buffers such as TLBs and caches, and control logic for handling loads and stores. Buffers can be described by associativity, number of sets, entry format, index and tag functions, and eviction policy.[4][5]

Test program generation approach

MicroTESK test templates are Ruby classes based on the framework's template library. Templates can refer to modes and instructions from the specifications and use TPG constructs such as blocks and situations. In the MIPS64 MMU example, a template block containing load and store instructions is processed by a memory engine, while a situation such as an L1 cache hit guides generation by constraining MMU variables and buffers.[5]

For MMU-oriented generation, parsing the specifications produces an interpreter for the instruction set simulator and a symbolic representation as a labeled directed acyclic graph. MicroTESK traverses the graph to extract execution paths for memory requests; paths end in memory access or exceptions such as alignment faults or TLB refill events. The tool can also derive dependencies between execution paths over shared buffers, including conflict types such as same buffer index, same tag, and recently evicted tag.[6]

Given a test template, MicroTESK enumerates symbolic test programs by selecting relevant execution paths and satisfiable dependencies. To manage combinatorial explosion, it uses heuristics including path factorization and limiting dependency depth. Symbolic programs are then instantiated with test data such as addresses, buffer entries, and load/evict sequences, and finally transformed into ISA-specific preparation code that initializes registers, buffers, and memory.[6][7]

MIPS64 MMU case study

A 2016 case study used MicroTESK to generate test programs for MIPS64 memory management units. The approach combined ISA specifications in nML with MMU specifications in MMUSL, and relied on symbolic execution and constraint solving for test-data generation.[2]

In that case study, the MIPS64 MMU specification covered address spaces, TLB entry format, address translation, and a two-level write-through cache. The MMUSL description was reported to be about 220 lines and included JTLB and DTLB TLBs, L1 and L2 cache buffers, and memory segments such as kseg0, kseg1, xkphys, and useg. Based on the ISA and MMU specifications, the authors defined 18 memory-access instructions plus auxiliary instructions for TLB and cache access.[8]

The same study notes practical limitations: exhaustive enumeration works only for very short test templates, while more complex cases require heuristics or constrained random generation. The authors also identified constraint-solving performance as a priority for further optimization and suggested extending the approach to multicore designs and multiprocessor systems.[2][8]

Project members

The public MicroTESK project page lists Alexander Kamkin as project creator and lists Alexander Kamkin and Alexander Protsenko as managers. It also lists Alexander Protsenko, Alexander Kamkin, Mikhail Chupilko, and Sergey Smolov among the project developers.[9]

CITATIONS

9 sources
9 citations
[1] MicroTESK is an open-license specification-based TPG tool whose version 2.3+ inputs include nML ISA specifications, MMUSL MMU specifications, and Ruby test templates; it extracts situations and dependencies for test generation and template enumeration. Specification-Based Test Program Generation for MIPS64 Memory Management Units
[2] The MicroTESK team describes its goal as creating an open-source, extensible, reconfigurable TPG framework; the MIPS64 MMU work used ISA specifications in nML, MMU specifications in MMUSL, Ruby test templates, symbolic execution, and constraint solving, and identified constraint-solving performance and multicore extension as future work. Specification-Based Test Program Generation for MIPS64 Memory Management Units
[3] The MIPS64 MMU tool based on MicroTESK consists of an architecture-independent generation core and MIPS64 memory-subsystem specifications, and uses MMUSL specifications to extract execution paths and dependencies with symbolic execution and constraint solving for test data. Specification-Based Test Program Generation for MIPS64 Memory Management Units
[4] MicroTESK ISA specifications define data types, constants, registers, access modes, memories, and instructions; MMUSL is used for address types, memory segments, buffers, and load/store control logic. Specification-Based Test Program Generation for MIPS64 Memory Management Units
[5] MMUSL buffer specifications can include associativity, sets, entry format, index and tag functions, and eviction policy; test templates are Ruby subclasses that use specification-defined modes/instructions and TPG constructs such as blocks and situations. Specification-Based Test Program Generation for MIPS64 Memory Management Units
[6] For MMU generation, MicroTESK parses specifications into an ISS interpreter and a labeled DAG, extracts execution paths, derives dependencies over shared buffers, and enumerates symbolic test programs using path/dependency combinations and heuristics. Specification-Based Test Program Generation for MIPS64 Memory Management Units
[7] Symbolic test programs are instantiated with test data such as addresses, buffer entries, and load/evict sequences and then transformed into ISA-specific preparation code. Specification-Based Test Program Generation for MIPS64 Memory Management Units
[8] The MIPS64 MMU case study specified address spaces, TLB entry format, address translation, two-level write-through cache, JTLB/DTLB, L1/L2 caches, selected memory segments, and 18 memory-access instructions; the MMUSL description was approximately 220 lines. Specification-Based Test Program Generation for MIPS64 Memory Management Units
[9] The MicroTESK public project page lists Alexander Kamkin as project creator, Alexander Kamkin and Alexander Protsenko as managers, and Alexander Protsenko, Alexander Kamkin, Mikhail Chupilko, and Sergey Smolov among developers. Overview - MicroTESK - Open-Source Projects

VERSION HISTORY

v4 · 8/22/2026 · gpt-5.5 (current)
v3 · 6/27/2026 · gpt-5.5
v2 · 5/30/2026 · gpt-5.5
v1 · 5/26/2026 · gpt-5.5