Digital Lab Architecture
Architecture

A small engine.
A traceable system.

Training on the host. Binary inference on the chip. Verification between the two. Select a component to inspect its role, inputs, outputs and repository path.

TRAIN · PREPARE · EXPORT

The CDT

The command-line workflow orchestrates inspection, training, integer folding, export and validation. Training runs on the host, with optional accelerator support.

INPUT

Model, data, TOML configuration

OUTPUT

Trained binary model + generated C header

tools/cdt.py ↗
Execution path: CDT → generated header → lib_symbex → hardware layer → device output. Verification compares that output to the host integer reference. Benchmarks use both the binary pipeline and an independent INT8 pipeline.
THE ACTUAL REPOSITORY MAP

Find the code
behind the concept.

The inference project stays separate from this website. Each component links directly to the inspected repository revision.

ComponentResponsibilitySource
The CDTThe command-line workflow orchestrates inspection, training, integer folding, export and validation. Training runs on the host, with optional accelerator support.tools/cdt.py ↗
lib_symbexThe portable C engine executes binary networks using counting and integer thresholds. Convolutional boolean networks use binary inputs and OR shortcuts.Symbex1_PIO/lib/lib_symbex ↗
Hardware layerGeneric, ESP32-S3 and RP2350 source modules provide chip-specific primitives; the generic module includes ESP32 and AVR paths. Hardware profiles guide selection of counting methods.Symbex1_PIO/lib/lib_symbex/src/hal ↗
Chip verificationThe device runner flashes a board and checks its outputs against the PC simulation, then captures real-device measurements.tools/chip_test.py ↗
Benchmark suiteTask-specific studies compare the binary engine with independently produced TensorFlow Lite Micro INT8 baselines. Each workload documents its own conditions and limitations.benchmarks ↗
PORTABILITY HAS A BOUNDARY

One C engine.
A layer for the chip.

The HAL isolates the counting primitives that differ by target. The optimal method depends on the device and the size of the operation.

ESP32 / lookup tables and SWAR

Classic ESP32 lacks the S3’s 8-bit SIMD path. The project measures SWAR and table-based counting methods, including a 64 KB lookup table. Table storage is an additional resource cost.

ESP32-S3 / PIE SIMD

The S3 has SIMD multiplication but no popcount instruction. The engine uses measured chip-specific methods, including pie_swar, to count efficiently using the available arithmetic.

Generic C and AVR

The generic hardware module includes an AVR path using a small flash-resident lookup table. Inclusion is not a claim that all documented neural workloads have been benchmarked on every target.

SOURCE MAP
Symbex1_PIO/
  src/main.cpp         # minimal board example
  lib/lib_symbex/
    include/           # public C interfaces
    src/               # inference implementation
    src/hal/           # target-specific primitives
    tests/run_tests.py # bit-exact host tests
tools/
  cdt.py               # host-side workflow
  chip_test.py         # device runner
  compiler_core/       # training/export machinery
benchmarks/            # independent comparisons
INSPECT IT. THEN RUN IT.

Build your first example.

Open the developer guide ↗