Fault Simulation
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
stefan 6b99576f0b improve s27 test and comment 5 days ago
kyupy@ed9b5c6cd6 simplify simple, more results, bump kyupy with sim fix 5 days ago
src/fsim simplify simple, more results, bump kyupy with sim fix 5 days ago
tests improve s27 test and comment 5 days ago
.gitignore basic project setup, tools and fsim 3 weeks ago
.gitmodules basic project setup, tools and fsim 3 weeks ago
.python-version basic project setup, tools and fsim 3 weeks ago
Makefile add atpg patterns for testing 2 weeks ago
README.md simplify simple, more results, bump kyupy with sim fix 5 days ago
flake.lock basic project setup, tools and fsim 3 weeks ago
flake.nix basic project setup, tools and fsim 3 weeks ago
main.py tests for safsim and wip ppsfp implementation 2 weeks ago
pyproject.toml results from Kelvin 2 weeks ago
uv.lock results from Kelvin 2 weeks ago

README.md

Fault Simulation

PPSFP (Parallel-Pattern Single-Fault Propagation) style fault simulators and other utility functions for use in various projects. These fault simulators are meant to be correct (ensured by unit-tests) and reasonably fast.

Fault simulation has $O(n^3)$ complexity. Every fault is simulated with every pattern involving every combinational gate in the circuit. We measure performance in terms of gates * faults * patterns / second. How fast can we make it?

Quick Start

This project has submodules. To ensure everything is up-to-date, run

git submodule update --init --recursive

after git clone, git pull or git checkout.

This project manages reproducible programming environments with:

  • uv for managing python environments.
  • nix for managing non-python tools and benchmark designs. Follow this guide or this guide to setup nix-eda binary cache to avoid re-building EDA-related tools.

Run all unit-tests: uv run pytest

Run a naive, baseline fault simulation with 1024 random patterns: uv run main.py tests/c6288.bench

Same on an 18k-gate circuit: uv run main.py polito-itc99-b15-sky130

nix develop makes quaigh available, another simulator/atpg written in rust.

To run Jupyter Notebooks in the reproducible programming environment, install a kernelspec:

uv run ipython kernel install --user --env VIRTUAL_ENV $(pwd)/.venv --env PATH ${PATH} --name=uv-env

Run a Jupyter Lab server locally:

uv run jupyter lab

Choose uv-env as kernel in Jupyter Lab.

Performance Statistics

Numbers are given in gfs/s = gates * faults * patterns / second.

Single-core SAFSimSimple on 1024 patterns (baseline):

OS, CPU, RAM tests/c6288.bench polito-itc99-b15-sky130
2.4k gates, 7.7k SAF 17k gates, 24k SAF
MacOS, M3 Max, 32GiB (Stefan) 1.52G 1.97G
WSL, i7-14650HX, 15GiB (Zhang) 1.68G 2.03G
Ubuntu, Xeon E5-1650, 251GiB (Nosaka) 0.94G 1.18G
WSL2, i5-8250U, 8GiB (Kawachi) 0.82G 0.94G
GH Codespace, EPYC 7763 (Kelvin) 1.03G ?
Ubuntu, i5-8265U, 8GiB (Kelvin) 0.77G ?

Single-core SAFSimIncremental on 1024 patterns:

OS, CPU, RAM tests/c6288.bench polito-itc99-b15-sky130
2.4k gates, 7.7k SAF 17k gates, 24k SAF
MacOS, M3 Max, 32GiB (Stefan) 2.83G 7.71G
WSL, i7-14650HX, 15GiB (Zhang) ? ?
Ubuntu, Xeon E5-1650, 251GiB (Nosaka) ? ?
WSL2, i5-8250U, 8GiB (Kawachi) 1.98G 4.74G
GH Codespace, EPYC 7763 (Kelvin) ? ?
Ubuntu, i5-8265U, 8GiB (Kelvin) ? ?

Single-core SAFSimPPSFP on 1024 patterns:

OS, CPU, RAM tests/c6288.bench polito-itc99-b15-sky130
2.4k gates, 7.7k SAF 17k gates, 24k SAF
MacOS, M3 Max, 32GiB (Stefan) 14.7G 77.0G
WSL, i7-14650HX, 15GiB (Zhang) ? ?
Ubuntu, Xeon E5-1650, 251GiB (Nosaka) ? ?
WSL2, i5-8250U, 8GiB (Kawachi) 7.33G 38.1G
GH Codespace, EPYC 7763 (Kelvin) ? ?
Ubuntu, i5-8265U, 8GiB (Kelvin) ? ?

Notes

Common Fault Classes:
DT - Detected
DS - Detected By Simulation
DI - Detected By Implication
PT - Possibly detected
UD - Undetectable
UB - Undetectable - blocked
UR - Undetectable - redundant
AU - ATPG untestable
AN - ATPG untestable - not detected
ND - Not detected
NO - Not detected - not observed