SlideShare a Scribd company logo
1 of 16
December 8-10, 2020
Virtual Event
Ivannikov Institute for System Programming
Russian Academy of Sciences
Nikita Chertok, Mikhail Chupilko, Alexander Kamkin
Online Test Program Generator for
RISC-V Microprocessors
MicroTESK Framework
MicroTESK Framework
Specifications
(nML)
Specifications
Translator
Test Programs
(ASM)
Test Program
Generator
Binary Code
Analyzer
Tool
Builders
Processor
Model
Coverage
Simulator
Metadata
lui a0,0xdead
ori a0,a0,0x0
lui a1,0xbeef
ori a1,a1,0xf
add t0,a0,a1
Simulator
(C/C++)
Specifications
(WhyML)
…
Ref. Simulator
(QEMU)
Specifications
Debug
1
https://forge.ispras.ru/projects/microtesk
op add (rd: X, rs1: X, rs2: X)
syntax = format("add %s, %s, %s",
rd.syntax, rs1.syntax, rs2.syntax)
image = format("0000000%s%s000%s0110011",
rs2.image, rs1.image, rd.image)
action = {
rd = rs1 + rs2;
}
mode X (i: card(5)) = XREG[i]
syntax = format("%s",
if i==0 then ZERO().syntax
elif i==1 then RA().syntax
elif i==2 then SP().syntax
elif i==3 then GP().syntax
elif i==4 then TP().syntax
elif i>=5 && i<=7 then
Temp(coerce(card(3), i-5)).syntax
elif i>=8 && i<=9 then
Saved(coerce(card(4), i-8)).syntax
elif i>=10 && i<=17 then
Func(coerce(card(3), i-10)).syntax
elif i>=18 && i<=27 then
Saved(coerce(card(4), i-16)).syntax
else
Temp(coerce(card(3), i-25)).syntax
image = format("%5s", i)
nML Language Overview
2
#ifdef RV64I
let XLEN = 64
...
#else
...
#endif
let MEMORY_SIZE_IN_WORDS = 2 ** (XLEN – 2)
shared mem MEM[MEMORY_SIZE_IN_WORDS, WORD]
type WORD = card(32)
type XWORD = card(XLEN)
type FLOAT32 = float(23, 8)
reg XREG [32, XWORD]
reg PC [XWORD]
Specifications
3
Specifications Characteristic Value
RISC-V Instruction Set Manual Vol. I: User-Level ISA (v. 2.2) 145 pages (94 pages in chapters 2-18)
Base Extension Base Extension In Total
RV32I M F C P
24 pages 44 pages 68 pages
RV32E A D B V
RV64I Q J N
2 pages 24 pages 26 pages
RV128I L T
# Specified Instructions 230 instructions
ISA Specifications Size (nML) 4 900 LOC (w/o comments)
MMU Specification Size (MMUSL) 460 LOC (Sv32, Sv39, and Sv48)
Offline Test Program Generation
4
Design Under Test
(RTL, FPGA)
lui a0, 0xdead
ori a0, a0, 0x0
lui a1, 0xbeef
ori a1, a1, 0xf
add t0, a0, a1
sub t1, a0, t1
add t0, t0, t1
Test Programs
(ASM)
Reference Simulator
(C/C++)
Traces (Tarmac) /
Signatures
0x2000: lui ...
0x2004: ori ...
0x2008: lui ...
0x200c: ori ...
0x2010: add ...
0x2014: sub ...
0x2018: add ...
Comparator
(Python)
0x2000: lui ...
0x2004: ori ...
0x2008: lui ...
0x200c: ori ...
0x2010: add ...
0x2014: sub ...
0x2018: bug ...
Traces (Tarmac) /
Signatures
What’s Inside?
?
5
MicroTESK Test Program Generator (Offline)
MicroTESK Test Program Generator
Specifications (nML)
Translator
Test Templates (Ruby)
lui a0, 0xdead
ori a0, a0, 0x0
lui a1, 0xbeef
ori a1, a1, 0xf
add t0, a0, a1
sub t1, a0, t1
add t0, t0, t1
Test Programs
(Assembly Code)
Processor Model
Generation Core
Specification Engineer
Verification Engineer
6
Autogen
https://forge.ispras.ru/projects/microtesk-riscv
Test Templates (Offline)
 Test templates similar to RISC-V Foundation’s Tests
https://github.com/riscv/riscv-tests
 Test templates similar to RISC-V Torture Test Generator
https://github.com/ucb-bar/riscv-torture 7
class MyTemplate < RiscVBaseTemplate
def run
block(:combinator => 'product',
:compositor => 'random') {
iterate {
xor x(_), x(_), x(_) do situation(...) end
lui x(_), _
}
iterate {
and x(_), x(_), x(_)
or x(_), x(_), x(_)
}
}.run
end
end
# Single Test Case
# Initialization
ori a7, a7, 0x2d7
slli a7, a7, 0xb
ori a7, a7, 0x1
slli a7, a7, 0xb
ori a7, a7, 0x3d2
ori t3, t3, 0x164
slli t3, t3, 0xb
ori t3, t3, 0x52b
slli t3, t3, 0xb
ori t3, t3, 0x24e
# Stimulus
and s4, a7, a7
xor s8, s4, t3
2 × 2 = 4 test cases
• Combinatorial Brute Force
• Randomization
• Constraint Solving
• Self Checking
Code is distributed under
Apache License, v2.0
Online Test Generation
Offline Test Generation
lui a0, 0xdead
ori a0, a0, 0x0
lui a1, 0xbeef
ori a1, a1, 0xf
add t0, a0, a1
sub t1, a0, t1
add t0, t0, t1
Test Program Generator
(Standalone Software)
Test Programs
(Binaries)
Design Under Test
(RTL, FPGA, IC)
DUT executes loaded
test programs
lui a0, 0xdead
ori a0, a0, 0x0
lui a1, 0xbeef
ori a1, a1, 0xf
add t0, a0, a1
sub t1, a0, t1
add t0, t0, t1
Test Program Generator
(Binary Inside DUT)
Test Programs
(Binaries)
Design Under Test
(FPGA, IC)
DUT executes
test generator
that produces
test programs
Tests programs are
loaded to memory
8
Online TPG Requirements
 Autonomy
 Self-generation of a variety of tests from a template
 Self-checking of tests results
 Performance
 Test massiveness prevails over test directedness
 Simple techniques (brute force, randomization, mutation, etc.)
 Robustness
 No loss of control (exception handling, timers, etc.)
 Saving and restoring generator state
9
Online TPG Architecture
Control
Unit
Allocator
Executor
Test Oracle
add …
sub …
...
add …
nop
sub …
Generator
Transformer
Residential Part Test Image
External Part
Control
Console
Generator
Commands
Parameters
Statistics
Coverage
Failures
.text
110011010100000…
110011011100000…
...
.data
1101111010101101
.text
110011010100000…
110010000000000…
110011011100000…
.data
1101111010101101
Test w/ mutant (QED)
Verdict
.data
1101111010101101
1011111011101111
.data
1101111010101101
1011101011101111
Test Results
Test Code
Allocation, linking, etc.
Signatures
Metadata
Allocates code in memory
Gets signatures and compares them
Requests next test case
Transfers control to
tests and returns back
Deviation
10
MicroTESK Test Program Generator (Online)
MicroTESK Test Program Generator
Specifications (nML)
Translator
Test Templates (Ruby)
Test Generator
(Code in C)
Processor Model
Generation Core
Specification Engineer
Verification Engineer
11
Autogen
https://forge.ispras.ru/projects/microtesk-riscv
Generator
Transformer
Test Templates (Online)
 Test template is translated to C language:
combinators, compositors, preparators, etc.
 Generator in C implements a certain interface:
can be obtained by other means (e.g., Autogen)
class MyTemplate < RiscVBaseTemplate
def run
block(:combinator => 'product',
:compositor => 'random') {
iterate {
xor x(_), x(_), x(_) do ... end
lui x(_), _
}
iterate {
and x(_), x(_), x(_)
or x(_), x(_), x(_)
}
}.run
end
end
// MyTemplate (simplified)
OP *iterate_0[] = { {XOR}, {LUI} };
OP *iterate_1[] = { {AND}, {OR} };
// :combinator => 'product'
for (i[0] = 0; i[0] < 2; i[0]++)
for (i[1] = 0; i[1] < 2; i[1]++) {
OP *combine[] = tpg_malloc(...)
combine[0] = iterate_0[i[0]];
combine[1] = iterate_1[i[1]];
// :compositor => 'random'
OP compose[] = tpg_malloc(...);
k = j[0] = j[1] = 0;
while (j[0] < 1 && j[1] < 1) {
while (j[s = rand() % 2] == 2);
compose[k++] = combine[s][j[s]++];
}
// choose registers, generate data,
// insert initialization code, etc.
...
// get the test’s binary image
for (int n = 0; n < N; n++) {
binary[n] = test[n].image();
}
} 12
Online TPG Features
 Test generation techniques
 Combinatorial brute-force generation (“perebor”)
 Randomization
 No constraint solving!
 Test result checking techniques
 Precalculated signatures returned by generator
 Equivalent (modulo inputs) transformations
 Dead code injection (NOPs between instructions, etc.)
 Quick error detection (QED)
13
Future Work Directions
 RISC-V specifications
 Specifying more subsets (RV128I, Q, L, B, T, J, P, V, and N)
 Online test program generation
 Error localization and diagnostics
 Test coverage tracking and test completeness assessment
 Advanced test program generation
 Model-based generation (modeling compiler transformations)
 Mutations and coverage-directed fuzzing
 Binary code equivalence checking
 Verifying optimizing compilers (including JIT and AOT) 14
http://www.microtesk.org
microtesk-support@ispras.ru
Thank
You!

More Related Content

What's hot

Standardizing the tee with global platform and RISC-V
Standardizing the tee with global platform and RISC-VStandardizing the tee with global platform and RISC-V
Standardizing the tee with global platform and RISC-VRISC-V International
 
RISC-V Boot Process: One Step at a Time
RISC-V Boot Process: One Step at a TimeRISC-V Boot Process: One Step at a Time
RISC-V Boot Process: One Step at a TimeAtish Patra
 
Kernel Recipes 2015: Linux Kernel IO subsystem - How it works and how can I s...
Kernel Recipes 2015: Linux Kernel IO subsystem - How it works and how can I s...Kernel Recipes 2015: Linux Kernel IO subsystem - How it works and how can I s...
Kernel Recipes 2015: Linux Kernel IO subsystem - How it works and how can I s...Anne Nicolas
 
Verilator: Fast, Free, But for Me?
Verilator: Fast, Free, But for Me? Verilator: Fast, Free, But for Me?
Verilator: Fast, Free, But for Me? DVClub
 
Design & Check Cyclic Redundancy Code using VERILOG HDL
Design & Check Cyclic Redundancy Code using VERILOG HDLDesign & Check Cyclic Redundancy Code using VERILOG HDL
Design & Check Cyclic Redundancy Code using VERILOG HDLijsrd.com
 
Event driven simulator
Event driven simulatorEvent driven simulator
Event driven simulatorSahil Abrol
 
LLVM Register Allocation
LLVM Register AllocationLLVM Register Allocation
LLVM Register AllocationWang Hsiangkai
 
Combinational & Sequential ATPG.pdf
Combinational & Sequential ATPG.pdfCombinational & Sequential ATPG.pdf
Combinational & Sequential ATPG.pdfMoinPasha12
 
BUD17-209: Reliability, Availability, and Serviceability (RAS) on ARM64
BUD17-209: Reliability, Availability, and Serviceability (RAS) on ARM64 BUD17-209: Reliability, Availability, and Serviceability (RAS) on ARM64
BUD17-209: Reliability, Availability, and Serviceability (RAS) on ARM64 Linaro
 
HKG15-505: Power Management interactions with OP-TEE and Trusted Firmware
HKG15-505: Power Management interactions with OP-TEE and Trusted FirmwareHKG15-505: Power Management interactions with OP-TEE and Trusted Firmware
HKG15-505: Power Management interactions with OP-TEE and Trusted FirmwareLinaro
 
Analysis of Open-Source Drivers for IEEE 802.11 WLANs
Analysis of Open-Source Drivers for IEEE 802.11 WLANsAnalysis of Open-Source Drivers for IEEE 802.11 WLANs
Analysis of Open-Source Drivers for IEEE 802.11 WLANsDanh Nguyen
 
Project ACRN: SR-IOV implementation
Project ACRN: SR-IOV implementationProject ACRN: SR-IOV implementation
Project ACRN: SR-IOV implementationGeoffroy Van Cutsem
 

What's hot (20)

Review of QNX
Review of QNXReview of QNX
Review of QNX
 
Standardizing the tee with global platform and RISC-V
Standardizing the tee with global platform and RISC-VStandardizing the tee with global platform and RISC-V
Standardizing the tee with global platform and RISC-V
 
RISC-V Boot Process: One Step at a Time
RISC-V Boot Process: One Step at a TimeRISC-V Boot Process: One Step at a Time
RISC-V Boot Process: One Step at a Time
 
Kernel Recipes 2015: Linux Kernel IO subsystem - How it works and how can I s...
Kernel Recipes 2015: Linux Kernel IO subsystem - How it works and how can I s...Kernel Recipes 2015: Linux Kernel IO subsystem - How it works and how can I s...
Kernel Recipes 2015: Linux Kernel IO subsystem - How it works and how can I s...
 
Verilator: Fast, Free, But for Me?
Verilator: Fast, Free, But for Me? Verilator: Fast, Free, But for Me?
Verilator: Fast, Free, But for Me?
 
Kernel Debugging & Profiling
Kernel Debugging & ProfilingKernel Debugging & Profiling
Kernel Debugging & Profiling
 
Qemu Introduction
Qemu IntroductionQemu Introduction
Qemu Introduction
 
Hacking QNX
Hacking QNXHacking QNX
Hacking QNX
 
Design & Check Cyclic Redundancy Code using VERILOG HDL
Design & Check Cyclic Redundancy Code using VERILOG HDLDesign & Check Cyclic Redundancy Code using VERILOG HDL
Design & Check Cyclic Redundancy Code using VERILOG HDL
 
Event driven simulator
Event driven simulatorEvent driven simulator
Event driven simulator
 
sc vector
sc vectorsc vector
sc vector
 
LLVM Register Allocation
LLVM Register AllocationLLVM Register Allocation
LLVM Register Allocation
 
Verification Challenges and Methodologies
Verification Challenges and MethodologiesVerification Challenges and Methodologies
Verification Challenges and Methodologies
 
Combinational & Sequential ATPG.pdf
Combinational & Sequential ATPG.pdfCombinational & Sequential ATPG.pdf
Combinational & Sequential ATPG.pdf
 
Qemu JIT Code Generator and System Emulation
Qemu JIT Code Generator and System EmulationQemu JIT Code Generator and System Emulation
Qemu JIT Code Generator and System Emulation
 
CPU Verification
CPU VerificationCPU Verification
CPU Verification
 
BUD17-209: Reliability, Availability, and Serviceability (RAS) on ARM64
BUD17-209: Reliability, Availability, and Serviceability (RAS) on ARM64 BUD17-209: Reliability, Availability, and Serviceability (RAS) on ARM64
BUD17-209: Reliability, Availability, and Serviceability (RAS) on ARM64
 
HKG15-505: Power Management interactions with OP-TEE and Trusted Firmware
HKG15-505: Power Management interactions with OP-TEE and Trusted FirmwareHKG15-505: Power Management interactions with OP-TEE and Trusted Firmware
HKG15-505: Power Management interactions with OP-TEE and Trusted Firmware
 
Analysis of Open-Source Drivers for IEEE 802.11 WLANs
Analysis of Open-Source Drivers for IEEE 802.11 WLANsAnalysis of Open-Source Drivers for IEEE 802.11 WLANs
Analysis of Open-Source Drivers for IEEE 802.11 WLANs
 
Project ACRN: SR-IOV implementation
Project ACRN: SR-IOV implementationProject ACRN: SR-IOV implementation
Project ACRN: SR-IOV implementation
 

Similar to Online test program generator for RISC-V processors

PVS-Studio, a solution for resource intensive applications development
PVS-Studio, a solution for resource intensive applications developmentPVS-Studio, a solution for resource intensive applications development
PVS-Studio, a solution for resource intensive applications developmentOOO "Program Verification Systems"
 
Track c-High speed transaction-based hw-sw coverification -eve
Track c-High speed transaction-based hw-sw coverification -eveTrack c-High speed transaction-based hw-sw coverification -eve
Track c-High speed transaction-based hw-sw coverification -evechiportal
 
Cluj.py Meetup: Extending Python in C
Cluj.py Meetup: Extending Python in CCluj.py Meetup: Extending Python in C
Cluj.py Meetup: Extending Python in CSteffen Wenz
 
20081114 Friday Food iLabt Bart Joris
20081114 Friday Food iLabt Bart Joris20081114 Friday Food iLabt Bart Joris
20081114 Friday Food iLabt Bart Jorisimec.archive
 
Virtual platform
Virtual platformVirtual platform
Virtual platformsean chen
 
PVS-Studio 5.00, a solution for developers of modern resource-intensive appl...
PVS-Studio 5.00, a solution for developers of modern resource-intensive appl...PVS-Studio 5.00, a solution for developers of modern resource-intensive appl...
PVS-Studio 5.00, a solution for developers of modern resource-intensive appl...Andrey Karpov
 
JVM Mechanics: When Does the JVM JIT & Deoptimize?
JVM Mechanics: When Does the JVM JIT & Deoptimize?JVM Mechanics: When Does the JVM JIT & Deoptimize?
JVM Mechanics: When Does the JVM JIT & Deoptimize?Doug Hawkins
 
The System of Automatic Searching for Vulnerabilities or how to use Taint Ana...
The System of Automatic Searching for Vulnerabilities or how to use Taint Ana...The System of Automatic Searching for Vulnerabilities or how to use Taint Ana...
The System of Automatic Searching for Vulnerabilities or how to use Taint Ana...Positive Hack Days
 
Java 5 6 Generics, Concurrency, Garbage Collection, Tuning
Java 5 6 Generics, Concurrency, Garbage Collection, TuningJava 5 6 Generics, Concurrency, Garbage Collection, Tuning
Java 5 6 Generics, Concurrency, Garbage Collection, TuningCarol McDonald
 
Production Time Profiling and Diagnostics on the JVM
Production Time Profiling and Diagnostics on the JVMProduction Time Profiling and Diagnostics on the JVM
Production Time Profiling and Diagnostics on the JVMMarcus Hirt
 
Eric Lafortune - The Jack and Jill build system
Eric Lafortune - The Jack and Jill build systemEric Lafortune - The Jack and Jill build system
Eric Lafortune - The Jack and Jill build systemGuardSquare
 
Static analysis of C++ source code
Static analysis of C++ source codeStatic analysis of C++ source code
Static analysis of C++ source codePVS-Studio
 
Static analysis of C++ source code
Static analysis of C++ source codeStatic analysis of C++ source code
Static analysis of C++ source codeAndrey Karpov
 
May2010 hex-core-opt
May2010 hex-core-optMay2010 hex-core-opt
May2010 hex-core-optJeff Larkin
 
Cray XT Porting, Scaling, and Optimization Best Practices
Cray XT Porting, Scaling, and Optimization Best PracticesCray XT Porting, Scaling, and Optimization Best Practices
Cray XT Porting, Scaling, and Optimization Best PracticesJeff Larkin
 
Unit testing in iOS featuring OCUnit, GHUnit & OCMock
Unit testing in iOS featuring OCUnit, GHUnit & OCMockUnit testing in iOS featuring OCUnit, GHUnit & OCMock
Unit testing in iOS featuring OCUnit, GHUnit & OCMockRobot Media
 

Similar to Online test program generator for RISC-V processors (20)

PVS-Studio, a solution for resource intensive applications development
PVS-Studio, a solution for resource intensive applications developmentPVS-Studio, a solution for resource intensive applications development
PVS-Studio, a solution for resource intensive applications development
 
Track c-High speed transaction-based hw-sw coverification -eve
Track c-High speed transaction-based hw-sw coverification -eveTrack c-High speed transaction-based hw-sw coverification -eve
Track c-High speed transaction-based hw-sw coverification -eve
 
Cluj.py Meetup: Extending Python in C
Cluj.py Meetup: Extending Python in CCluj.py Meetup: Extending Python in C
Cluj.py Meetup: Extending Python in C
 
20081114 Friday Food iLabt Bart Joris
20081114 Friday Food iLabt Bart Joris20081114 Friday Food iLabt Bart Joris
20081114 Friday Food iLabt Bart Joris
 
Virtual platform
Virtual platformVirtual platform
Virtual platform
 
PVS-Studio 5.00, a solution for developers of modern resource-intensive appl...
PVS-Studio 5.00, a solution for developers of modern resource-intensive appl...PVS-Studio 5.00, a solution for developers of modern resource-intensive appl...
PVS-Studio 5.00, a solution for developers of modern resource-intensive appl...
 
JVM Mechanics: When Does the JVM JIT & Deoptimize?
JVM Mechanics: When Does the JVM JIT & Deoptimize?JVM Mechanics: When Does the JVM JIT & Deoptimize?
JVM Mechanics: When Does the JVM JIT & Deoptimize?
 
Joel Falcou, Boost.SIMD
Joel Falcou, Boost.SIMDJoel Falcou, Boost.SIMD
Joel Falcou, Boost.SIMD
 
The System of Automatic Searching for Vulnerabilities or how to use Taint Ana...
The System of Automatic Searching for Vulnerabilities or how to use Taint Ana...The System of Automatic Searching for Vulnerabilities or how to use Taint Ana...
The System of Automatic Searching for Vulnerabilities or how to use Taint Ana...
 
Java 5 6 Generics, Concurrency, Garbage Collection, Tuning
Java 5 6 Generics, Concurrency, Garbage Collection, TuningJava 5 6 Generics, Concurrency, Garbage Collection, Tuning
Java 5 6 Generics, Concurrency, Garbage Collection, Tuning
 
Learning Dtrace
Learning DtraceLearning Dtrace
Learning Dtrace
 
Production Time Profiling and Diagnostics on the JVM
Production Time Profiling and Diagnostics on the JVMProduction Time Profiling and Diagnostics on the JVM
Production Time Profiling and Diagnostics on the JVM
 
Eric Lafortune - The Jack and Jill build system
Eric Lafortune - The Jack and Jill build systemEric Lafortune - The Jack and Jill build system
Eric Lafortune - The Jack and Jill build system
 
CodeChecker summary 21062021
CodeChecker summary 21062021CodeChecker summary 21062021
CodeChecker summary 21062021
 
Static analysis of C++ source code
Static analysis of C++ source codeStatic analysis of C++ source code
Static analysis of C++ source code
 
Static analysis of C++ source code
Static analysis of C++ source codeStatic analysis of C++ source code
Static analysis of C++ source code
 
What Lies Beneath
What Lies BeneathWhat Lies Beneath
What Lies Beneath
 
May2010 hex-core-opt
May2010 hex-core-optMay2010 hex-core-opt
May2010 hex-core-opt
 
Cray XT Porting, Scaling, and Optimization Best Practices
Cray XT Porting, Scaling, and Optimization Best PracticesCray XT Porting, Scaling, and Optimization Best Practices
Cray XT Porting, Scaling, and Optimization Best Practices
 
Unit testing in iOS featuring OCUnit, GHUnit & OCMock
Unit testing in iOS featuring OCUnit, GHUnit & OCMockUnit testing in iOS featuring OCUnit, GHUnit & OCMock
Unit testing in iOS featuring OCUnit, GHUnit & OCMock
 

More from RISC-V International

London Open Source Meetup for RISC-V
London Open Source Meetup for RISC-VLondon Open Source Meetup for RISC-V
London Open Source Meetup for RISC-VRISC-V International
 
Ziptillion boosting RISC-V with an efficient and os transparent memory comp...
Ziptillion   boosting RISC-V with an efficient and os transparent memory comp...Ziptillion   boosting RISC-V with an efficient and os transparent memory comp...
Ziptillion boosting RISC-V with an efficient and os transparent memory comp...RISC-V International
 
Static partitioning virtualization on RISC-V
Static partitioning virtualization on RISC-VStatic partitioning virtualization on RISC-V
Static partitioning virtualization on RISC-VRISC-V International
 
Semi dynamics high bandwidth vector capable RISC-V cores
Semi dynamics high bandwidth vector capable RISC-V coresSemi dynamics high bandwidth vector capable RISC-V cores
Semi dynamics high bandwidth vector capable RISC-V coresRISC-V International
 
Reverse Engineering of Rocket Chip
Reverse Engineering of Rocket ChipReverse Engineering of Rocket Chip
Reverse Engineering of Rocket ChipRISC-V International
 
RISC-V NOEL-V - A new high performance RISC-V Processor Family
RISC-V NOEL-V - A new high performance RISC-V Processor FamilyRISC-V NOEL-V - A new high performance RISC-V Processor Family
RISC-V NOEL-V - A new high performance RISC-V Processor FamilyRISC-V International
 
RISC-V 30910 kassem_ summit 2020 - so_c_gen
RISC-V 30910 kassem_ summit 2020 - so_c_genRISC-V 30910 kassem_ summit 2020 - so_c_gen
RISC-V 30910 kassem_ summit 2020 - so_c_genRISC-V International
 
RISC-V 30907 summit 2020 joint picocom_mentor
RISC-V 30907 summit 2020 joint picocom_mentorRISC-V 30907 summit 2020 joint picocom_mentor
RISC-V 30907 summit 2020 joint picocom_mentorRISC-V International
 
RISC-V 30906 hex five multi_zone iot firmware
RISC-V 30906 hex five multi_zone iot firmwareRISC-V 30906 hex five multi_zone iot firmware
RISC-V 30906 hex five multi_zone iot firmwareRISC-V International
 
RISC-V 30946 manuel_offenberg_v3_notes
RISC-V 30946 manuel_offenberg_v3_notesRISC-V 30946 manuel_offenberg_v3_notes
RISC-V 30946 manuel_offenberg_v3_notesRISC-V International
 
RISC-V software state of the union
RISC-V software state of the unionRISC-V software state of the union
RISC-V software state of the unionRISC-V International
 
Ripes tracking computer architecture throught visual and interactive simula...
Ripes   tracking computer architecture throught visual and interactive simula...Ripes   tracking computer architecture throught visual and interactive simula...
Ripes tracking computer architecture throught visual and interactive simula...RISC-V International
 

More from RISC-V International (20)

WD RISC-V inliner work effort
WD RISC-V inliner work effortWD RISC-V inliner work effort
WD RISC-V inliner work effort
 
RISC-V Zce Extension
RISC-V Zce ExtensionRISC-V Zce Extension
RISC-V Zce Extension
 
RISC-V Online Tutor
RISC-V Online TutorRISC-V Online Tutor
RISC-V Online Tutor
 
London Open Source Meetup for RISC-V
London Open Source Meetup for RISC-VLondon Open Source Meetup for RISC-V
London Open Source Meetup for RISC-V
 
RISC-V Introduction
RISC-V IntroductionRISC-V Introduction
RISC-V Introduction
 
Ziptillion boosting RISC-V with an efficient and os transparent memory comp...
Ziptillion   boosting RISC-V with an efficient and os transparent memory comp...Ziptillion   boosting RISC-V with an efficient and os transparent memory comp...
Ziptillion boosting RISC-V with an efficient and os transparent memory comp...
 
Static partitioning virtualization on RISC-V
Static partitioning virtualization on RISC-VStatic partitioning virtualization on RISC-V
Static partitioning virtualization on RISC-V
 
Semi dynamics high bandwidth vector capable RISC-V cores
Semi dynamics high bandwidth vector capable RISC-V coresSemi dynamics high bandwidth vector capable RISC-V cores
Semi dynamics high bandwidth vector capable RISC-V cores
 
Security and functional safety
Security and functional safetySecurity and functional safety
Security and functional safety
 
Reverse Engineering of Rocket Chip
Reverse Engineering of Rocket ChipReverse Engineering of Rocket Chip
Reverse Engineering of Rocket Chip
 
RISC-V NOEL-V - A new high performance RISC-V Processor Family
RISC-V NOEL-V - A new high performance RISC-V Processor FamilyRISC-V NOEL-V - A new high performance RISC-V Processor Family
RISC-V NOEL-V - A new high performance RISC-V Processor Family
 
RISC-V 30910 kassem_ summit 2020 - so_c_gen
RISC-V 30910 kassem_ summit 2020 - so_c_genRISC-V 30910 kassem_ summit 2020 - so_c_gen
RISC-V 30910 kassem_ summit 2020 - so_c_gen
 
RISC-V 30908 patra
RISC-V 30908 patraRISC-V 30908 patra
RISC-V 30908 patra
 
RISC-V 30907 summit 2020 joint picocom_mentor
RISC-V 30907 summit 2020 joint picocom_mentorRISC-V 30907 summit 2020 joint picocom_mentor
RISC-V 30907 summit 2020 joint picocom_mentor
 
RISC-V 30906 hex five multi_zone iot firmware
RISC-V 30906 hex five multi_zone iot firmwareRISC-V 30906 hex five multi_zone iot firmware
RISC-V 30906 hex five multi_zone iot firmware
 
RISC-V 30946 manuel_offenberg_v3_notes
RISC-V 30946 manuel_offenberg_v3_notesRISC-V 30946 manuel_offenberg_v3_notes
RISC-V 30946 manuel_offenberg_v3_notes
 
RISC-V software state of the union
RISC-V software state of the unionRISC-V software state of the union
RISC-V software state of the union
 
Ripes tracking computer architecture throught visual and interactive simula...
Ripes   tracking computer architecture throught visual and interactive simula...Ripes   tracking computer architecture throught visual and interactive simula...
Ripes tracking computer architecture throught visual and interactive simula...
 
Porting tock to open titan
Porting tock to open titanPorting tock to open titan
Porting tock to open titan
 
Open j9 jdk on RISC-V
Open j9 jdk on RISC-VOpen j9 jdk on RISC-V
Open j9 jdk on RISC-V
 

Recently uploaded

Handwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed textsHandwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed textsMaria Levchenko
 
🐬 The future of MySQL is Postgres 🐘
🐬  The future of MySQL is Postgres   🐘🐬  The future of MySQL is Postgres   🐘
🐬 The future of MySQL is Postgres 🐘RTylerCroy
 
Breaking the Kubernetes Kill Chain: Host Path Mount
Breaking the Kubernetes Kill Chain: Host Path MountBreaking the Kubernetes Kill Chain: Host Path Mount
Breaking the Kubernetes Kill Chain: Host Path MountPuma Security, LLC
 
Boost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdfBoost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdfsudhanshuwaghmare1
 
How to convert PDF to text with Nanonets
How to convert PDF to text with NanonetsHow to convert PDF to text with Nanonets
How to convert PDF to text with Nanonetsnaman860154
 
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
08448380779 Call Girls In Diplomatic Enclave Women Seeking MenDelhi Call girls
 
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...Miguel Araújo
 
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdfThe Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdfEnterprise Knowledge
 
Powerful Google developer tools for immediate impact! (2023-24 C)
Powerful Google developer tools for immediate impact! (2023-24 C)Powerful Google developer tools for immediate impact! (2023-24 C)
Powerful Google developer tools for immediate impact! (2023-24 C)wesley chun
 
Automating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps ScriptAutomating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps Scriptwesley chun
 
Exploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone ProcessorsExploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone Processorsdebabhi2
 
TrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
TrustArc Webinar - Stay Ahead of US State Data Privacy Law DevelopmentsTrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
TrustArc Webinar - Stay Ahead of US State Data Privacy Law DevelopmentsTrustArc
 
Presentation on how to chat with PDF using ChatGPT code interpreter
Presentation on how to chat with PDF using ChatGPT code interpreterPresentation on how to chat with PDF using ChatGPT code interpreter
Presentation on how to chat with PDF using ChatGPT code interpreternaman860154
 
Artificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and MythsArtificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and MythsJoaquim Jorge
 
2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...Martijn de Jong
 
Tata AIG General Insurance Company - Insurer Innovation Award 2024
Tata AIG General Insurance Company - Insurer Innovation Award 2024Tata AIG General Insurance Company - Insurer Innovation Award 2024
Tata AIG General Insurance Company - Insurer Innovation Award 2024The Digital Insurer
 
Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024The Digital Insurer
 
Factors to Consider When Choosing Accounts Payable Services Providers.pptx
Factors to Consider When Choosing Accounts Payable Services Providers.pptxFactors to Consider When Choosing Accounts Payable Services Providers.pptx
Factors to Consider When Choosing Accounts Payable Services Providers.pptxKatpro Technologies
 
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptx
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptxEIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptx
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptxEarley Information Science
 
Finology Group – Insurtech Innovation Award 2024
Finology Group – Insurtech Innovation Award 2024Finology Group – Insurtech Innovation Award 2024
Finology Group – Insurtech Innovation Award 2024The Digital Insurer
 

Recently uploaded (20)

Handwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed textsHandwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed texts
 
🐬 The future of MySQL is Postgres 🐘
🐬  The future of MySQL is Postgres   🐘🐬  The future of MySQL is Postgres   🐘
🐬 The future of MySQL is Postgres 🐘
 
Breaking the Kubernetes Kill Chain: Host Path Mount
Breaking the Kubernetes Kill Chain: Host Path MountBreaking the Kubernetes Kill Chain: Host Path Mount
Breaking the Kubernetes Kill Chain: Host Path Mount
 
Boost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdfBoost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdf
 
How to convert PDF to text with Nanonets
How to convert PDF to text with NanonetsHow to convert PDF to text with Nanonets
How to convert PDF to text with Nanonets
 
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
 
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
 
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdfThe Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
 
Powerful Google developer tools for immediate impact! (2023-24 C)
Powerful Google developer tools for immediate impact! (2023-24 C)Powerful Google developer tools for immediate impact! (2023-24 C)
Powerful Google developer tools for immediate impact! (2023-24 C)
 
Automating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps ScriptAutomating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps Script
 
Exploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone ProcessorsExploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone Processors
 
TrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
TrustArc Webinar - Stay Ahead of US State Data Privacy Law DevelopmentsTrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
TrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
 
Presentation on how to chat with PDF using ChatGPT code interpreter
Presentation on how to chat with PDF using ChatGPT code interpreterPresentation on how to chat with PDF using ChatGPT code interpreter
Presentation on how to chat with PDF using ChatGPT code interpreter
 
Artificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and MythsArtificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and Myths
 
2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...
 
Tata AIG General Insurance Company - Insurer Innovation Award 2024
Tata AIG General Insurance Company - Insurer Innovation Award 2024Tata AIG General Insurance Company - Insurer Innovation Award 2024
Tata AIG General Insurance Company - Insurer Innovation Award 2024
 
Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024
 
Factors to Consider When Choosing Accounts Payable Services Providers.pptx
Factors to Consider When Choosing Accounts Payable Services Providers.pptxFactors to Consider When Choosing Accounts Payable Services Providers.pptx
Factors to Consider When Choosing Accounts Payable Services Providers.pptx
 
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptx
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptxEIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptx
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptx
 
Finology Group – Insurtech Innovation Award 2024
Finology Group – Insurtech Innovation Award 2024Finology Group – Insurtech Innovation Award 2024
Finology Group – Insurtech Innovation Award 2024
 

Online test program generator for RISC-V processors

  • 1. December 8-10, 2020 Virtual Event Ivannikov Institute for System Programming Russian Academy of Sciences Nikita Chertok, Mikhail Chupilko, Alexander Kamkin Online Test Program Generator for RISC-V Microprocessors
  • 2. MicroTESK Framework MicroTESK Framework Specifications (nML) Specifications Translator Test Programs (ASM) Test Program Generator Binary Code Analyzer Tool Builders Processor Model Coverage Simulator Metadata lui a0,0xdead ori a0,a0,0x0 lui a1,0xbeef ori a1,a1,0xf add t0,a0,a1 Simulator (C/C++) Specifications (WhyML) … Ref. Simulator (QEMU) Specifications Debug 1 https://forge.ispras.ru/projects/microtesk
  • 3. op add (rd: X, rs1: X, rs2: X) syntax = format("add %s, %s, %s", rd.syntax, rs1.syntax, rs2.syntax) image = format("0000000%s%s000%s0110011", rs2.image, rs1.image, rd.image) action = { rd = rs1 + rs2; } mode X (i: card(5)) = XREG[i] syntax = format("%s", if i==0 then ZERO().syntax elif i==1 then RA().syntax elif i==2 then SP().syntax elif i==3 then GP().syntax elif i==4 then TP().syntax elif i>=5 && i<=7 then Temp(coerce(card(3), i-5)).syntax elif i>=8 && i<=9 then Saved(coerce(card(4), i-8)).syntax elif i>=10 && i<=17 then Func(coerce(card(3), i-10)).syntax elif i>=18 && i<=27 then Saved(coerce(card(4), i-16)).syntax else Temp(coerce(card(3), i-25)).syntax image = format("%5s", i) nML Language Overview 2 #ifdef RV64I let XLEN = 64 ... #else ... #endif let MEMORY_SIZE_IN_WORDS = 2 ** (XLEN – 2) shared mem MEM[MEMORY_SIZE_IN_WORDS, WORD] type WORD = card(32) type XWORD = card(XLEN) type FLOAT32 = float(23, 8) reg XREG [32, XWORD] reg PC [XWORD]
  • 4. Specifications 3 Specifications Characteristic Value RISC-V Instruction Set Manual Vol. I: User-Level ISA (v. 2.2) 145 pages (94 pages in chapters 2-18) Base Extension Base Extension In Total RV32I M F C P 24 pages 44 pages 68 pages RV32E A D B V RV64I Q J N 2 pages 24 pages 26 pages RV128I L T # Specified Instructions 230 instructions ISA Specifications Size (nML) 4 900 LOC (w/o comments) MMU Specification Size (MMUSL) 460 LOC (Sv32, Sv39, and Sv48)
  • 5. Offline Test Program Generation 4 Design Under Test (RTL, FPGA) lui a0, 0xdead ori a0, a0, 0x0 lui a1, 0xbeef ori a1, a1, 0xf add t0, a0, a1 sub t1, a0, t1 add t0, t0, t1 Test Programs (ASM) Reference Simulator (C/C++) Traces (Tarmac) / Signatures 0x2000: lui ... 0x2004: ori ... 0x2008: lui ... 0x200c: ori ... 0x2010: add ... 0x2014: sub ... 0x2018: add ... Comparator (Python) 0x2000: lui ... 0x2004: ori ... 0x2008: lui ... 0x200c: ori ... 0x2010: add ... 0x2014: sub ... 0x2018: bug ... Traces (Tarmac) / Signatures
  • 7. MicroTESK Test Program Generator (Offline) MicroTESK Test Program Generator Specifications (nML) Translator Test Templates (Ruby) lui a0, 0xdead ori a0, a0, 0x0 lui a1, 0xbeef ori a1, a1, 0xf add t0, a0, a1 sub t1, a0, t1 add t0, t0, t1 Test Programs (Assembly Code) Processor Model Generation Core Specification Engineer Verification Engineer 6 Autogen https://forge.ispras.ru/projects/microtesk-riscv
  • 8. Test Templates (Offline)  Test templates similar to RISC-V Foundation’s Tests https://github.com/riscv/riscv-tests  Test templates similar to RISC-V Torture Test Generator https://github.com/ucb-bar/riscv-torture 7 class MyTemplate < RiscVBaseTemplate def run block(:combinator => 'product', :compositor => 'random') { iterate { xor x(_), x(_), x(_) do situation(...) end lui x(_), _ } iterate { and x(_), x(_), x(_) or x(_), x(_), x(_) } }.run end end # Single Test Case # Initialization ori a7, a7, 0x2d7 slli a7, a7, 0xb ori a7, a7, 0x1 slli a7, a7, 0xb ori a7, a7, 0x3d2 ori t3, t3, 0x164 slli t3, t3, 0xb ori t3, t3, 0x52b slli t3, t3, 0xb ori t3, t3, 0x24e # Stimulus and s4, a7, a7 xor s8, s4, t3 2 × 2 = 4 test cases • Combinatorial Brute Force • Randomization • Constraint Solving • Self Checking Code is distributed under Apache License, v2.0
  • 9. Online Test Generation Offline Test Generation lui a0, 0xdead ori a0, a0, 0x0 lui a1, 0xbeef ori a1, a1, 0xf add t0, a0, a1 sub t1, a0, t1 add t0, t0, t1 Test Program Generator (Standalone Software) Test Programs (Binaries) Design Under Test (RTL, FPGA, IC) DUT executes loaded test programs lui a0, 0xdead ori a0, a0, 0x0 lui a1, 0xbeef ori a1, a1, 0xf add t0, a0, a1 sub t1, a0, t1 add t0, t0, t1 Test Program Generator (Binary Inside DUT) Test Programs (Binaries) Design Under Test (FPGA, IC) DUT executes test generator that produces test programs Tests programs are loaded to memory 8
  • 10. Online TPG Requirements  Autonomy  Self-generation of a variety of tests from a template  Self-checking of tests results  Performance  Test massiveness prevails over test directedness  Simple techniques (brute force, randomization, mutation, etc.)  Robustness  No loss of control (exception handling, timers, etc.)  Saving and restoring generator state 9
  • 11. Online TPG Architecture Control Unit Allocator Executor Test Oracle add … sub … ... add … nop sub … Generator Transformer Residential Part Test Image External Part Control Console Generator Commands Parameters Statistics Coverage Failures .text 110011010100000… 110011011100000… ... .data 1101111010101101 .text 110011010100000… 110010000000000… 110011011100000… .data 1101111010101101 Test w/ mutant (QED) Verdict .data 1101111010101101 1011111011101111 .data 1101111010101101 1011101011101111 Test Results Test Code Allocation, linking, etc. Signatures Metadata Allocates code in memory Gets signatures and compares them Requests next test case Transfers control to tests and returns back Deviation 10
  • 12. MicroTESK Test Program Generator (Online) MicroTESK Test Program Generator Specifications (nML) Translator Test Templates (Ruby) Test Generator (Code in C) Processor Model Generation Core Specification Engineer Verification Engineer 11 Autogen https://forge.ispras.ru/projects/microtesk-riscv Generator Transformer
  • 13. Test Templates (Online)  Test template is translated to C language: combinators, compositors, preparators, etc.  Generator in C implements a certain interface: can be obtained by other means (e.g., Autogen) class MyTemplate < RiscVBaseTemplate def run block(:combinator => 'product', :compositor => 'random') { iterate { xor x(_), x(_), x(_) do ... end lui x(_), _ } iterate { and x(_), x(_), x(_) or x(_), x(_), x(_) } }.run end end // MyTemplate (simplified) OP *iterate_0[] = { {XOR}, {LUI} }; OP *iterate_1[] = { {AND}, {OR} }; // :combinator => 'product' for (i[0] = 0; i[0] < 2; i[0]++) for (i[1] = 0; i[1] < 2; i[1]++) { OP *combine[] = tpg_malloc(...) combine[0] = iterate_0[i[0]]; combine[1] = iterate_1[i[1]]; // :compositor => 'random' OP compose[] = tpg_malloc(...); k = j[0] = j[1] = 0; while (j[0] < 1 && j[1] < 1) { while (j[s = rand() % 2] == 2); compose[k++] = combine[s][j[s]++]; } // choose registers, generate data, // insert initialization code, etc. ... // get the test’s binary image for (int n = 0; n < N; n++) { binary[n] = test[n].image(); } } 12
  • 14. Online TPG Features  Test generation techniques  Combinatorial brute-force generation (“perebor”)  Randomization  No constraint solving!  Test result checking techniques  Precalculated signatures returned by generator  Equivalent (modulo inputs) transformations  Dead code injection (NOPs between instructions, etc.)  Quick error detection (QED) 13
  • 15. Future Work Directions  RISC-V specifications  Specifying more subsets (RV128I, Q, L, B, T, J, P, V, and N)  Online test program generation  Error localization and diagnostics  Test coverage tracking and test completeness assessment  Advanced test program generation  Model-based generation (modeling compiler transformations)  Mutations and coverage-directed fuzzing  Binary code equivalence checking  Verifying optimizing compilers (including JIT and AOT) 14