# sandialabs/cross-sim architecture

> Architecture diagram of the GitHub repository sandialabs/cross-sim, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-09-30). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/sandialabs/cross-sim
- Repository: https://github.com/sandialabs/cross-sim

## Overview

CrossSim is a Python accuracy simulator and co-design tool for analog in-memory computing, with a NumPy-like core API, signal-processing algorithms, and a neural-network inference interface. In the principal workflow, an engineer configures hardware parameters, converts a Keras or PyTorch model to analog layers, and runs inference through CrossSim cores to assess algorithm accuracy under device and circuit effects. Application examples also cover ADC/DAC calibration and profiling. The graph reflects documented capabilities and indexed references; unsampled implementation details are represented only where the tree or README supports them.

Main entry points: [`applications/dnn`](https://github.com/sandialabs/cross-sim/tree/main/applications/dnn) (Inference Examples), [`simulator/cores/analog_core.py`](https://github.com/sandialabs/cross-sim/blob/main/simulator/cores/analog_core.py) (Analog Core), [`applications/dnn/inference/interface`](https://github.com/sandialabs/cross-sim/tree/main/applications/dnn/inference/interface) (Inference Interface), [`applications/dnn/dnn_inference_params.py`](https://github.com/sandialabs/cross-sim/blob/main/applications/dnn/dnn_inference_params.py) (DNN Parameters)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_apps["Applications"]
  node_examples["Inference Examples"]
  node_inference["Inference Interface"]
  node_calibration["ADC/DAC Calibration"]
  node_preprocess["Data Preparation"]
  node_dnnparams["DNN Parameters"]
  node_evaluation["Inference Evaluation<br/>[run_inference.py]"]
end

subgraph group_frameworks["DNN Interfaces"]
  node_torch["PyTorch Conversion<br/>[convert.py]"]
  node_torchlayers["PyTorch Analog Layers<br/>[conv.py]"]
  node_keras["Keras Conversion<br/>[convert.py]"]
end

subgraph group_engine["Simulation Engine"]
  node_core["Analog Core<br/>[analog_core.py]"]
  node_corevariants["Core Variants<br/>[bitsliced_core.py]"]
  node_parameters["Core Parameters<br/>[core_parameters.py]"]
  node_backend["Compute Backend<br/>[backend.py]"]
end

subgraph group_hardware["Hardware Models"]
  node_arrays["Crossbar Arrays<br/>[iarray.py]"]
  node_converters["ADC and DAC<br/>[iadc.py]"]
  node_devices["Device Models<br/>[idevice.py]"]
end

subgraph group_algorithms["Algorithms"]
  node_dnnops["DNN Operations<br/>[dnn.py]"]
  node_analogconv["Analog Convolution"]
  node_dsp["DFT Algorithm<br/>[dft.py]"]
end

node_user(("Engineer"))

node_user -->|"selects model"| node_examples
node_examples -->|"configures hardware"| node_dnnparams
node_examples -->|"converts model"| node_torch
node_examples -->|"converts model"| node_keras
node_examples -->|"uses interface"| node_inference
node_examples -.->|"prepares inputs"| node_preprocess
node_inference -->|"runs inference"| node_evaluation
node_inference -->|"configures parameters"| node_dnnparams
node_calibration -.->|"sets ADC/DAC ranges"| node_examples
node_dnnparams -->|"sets core settings"| node_parameters
node_torch -->|"replaces layers"| node_torchlayers
node_torchlayers -->|"delegates convolution"| node_analogconv
node_keras -->|"creates analog layers"| node_core
node_dnnops -->|"uses analog cores"| node_core
node_dnnops -->|"uses convolution"| node_analogconv
node_dsp -->|"uses analog core"| node_core
node_core -->|"supports core styles"| node_corevariants
node_core -->|"simulates array operations"| node_arrays
node_core -->|"reads configuration"| node_parameters
node_corevariants -->|"uses ADC/DAC models"| node_converters
node_arrays -->|"uses compute backend"| node_backend
node_converters -->|"uses compute backend"| node_backend
node_devices -->|"uses compute backend"| node_backend
node_parameters -.->|"configures device effects"| node_devices
node_evaluation -.->|"reports accuracy"| node_user

click node_examples "https://github.com/sandialabs/cross-sim/tree/main/applications/dnn"
click node_inference "https://github.com/sandialabs/cross-sim/tree/main/applications/dnn/inference/interface"
click node_calibration "https://github.com/sandialabs/cross-sim/tree/main/applications/dnn/inference/adc"
click node_preprocess "https://github.com/sandialabs/cross-sim/tree/main/applications/dnn/inference/helpers/imagenet_preprocess"
click node_dnnparams "https://github.com/sandialabs/cross-sim/blob/main/applications/dnn/dnn_inference_params.py"
click node_torch "https://github.com/sandialabs/cross-sim/blob/main/simulator/algorithms/dnn/torch/convert.py"
click node_torchlayers "https://github.com/sandialabs/cross-sim/blob/main/simulator/algorithms/dnn/torch/conv.py"
click node_keras "https://github.com/sandialabs/cross-sim/blob/main/simulator/algorithms/dnn/keras/convert.py"
click node_dnnops "https://github.com/sandialabs/cross-sim/blob/main/simulator/algorithms/dnn/dnn.py"
click node_analogconv "https://github.com/sandialabs/cross-sim/blob/main/simulator/algorithms/dnn/analog_convolution.py"
click node_dsp "https://github.com/sandialabs/cross-sim/blob/main/simulator/algorithms/dsp/dft.py"
click node_core "https://github.com/sandialabs/cross-sim/blob/main/simulator/cores/analog_core.py"
click node_corevariants "https://github.com/sandialabs/cross-sim/blob/main/simulator/cores/bitsliced_core.py"
click node_parameters "https://github.com/sandialabs/cross-sim/blob/main/simulator/parameters/core_parameters.py"
click node_backend "https://github.com/sandialabs/cross-sim/blob/main/simulator/backend/backend.py"
click node_arrays "https://github.com/sandialabs/cross-sim/blob/main/simulator/circuits/array/iarray.py"
click node_converters "https://github.com/sandialabs/cross-sim/blob/main/simulator/circuits/adc/iadc.py"
click node_devices "https://github.com/sandialabs/cross-sim/blob/main/simulator/devices/idevice.py"
click node_evaluation "https://github.com/sandialabs/cross-sim/blob/main/applications/dnn/inference/run_inference.py"

classDef toneNeutral fill:#f8fafc,stroke:#334155,stroke-width:1.5px,color:#0f172a
classDef toneBlue fill:#dbeafe,stroke:#2563eb,stroke-width:1.5px,color:#172554
classDef toneAmber fill:#fef3c7,stroke:#d97706,stroke-width:1.5px,color:#78350f
classDef toneMint fill:#dcfce7,stroke:#16a34a,stroke-width:1.5px,color:#14532d
classDef toneRose fill:#ffe4e6,stroke:#e11d48,stroke-width:1.5px,color:#881337
classDef toneIndigo fill:#e0e7ff,stroke:#4f46e5,stroke-width:1.5px,color:#312e81
classDef toneTeal fill:#ccfbf1,stroke:#0f766e,stroke-width:1.5px,color:#134e4a
class node_examples,node_inference,node_calibration,node_preprocess,node_dnnparams,node_evaluation toneBlue
class node_torch,node_torchlayers,node_keras toneAmber
class node_core,node_corevariants,node_parameters,node_backend toneMint
class node_arrays,node_converters,node_devices toneRose
class node_dnnops,node_analogconv,node_dsp,node_user toneIndigo
```

## Components

### Applications

- [Inference Examples](https://github.com/sandialabs/cross-sim/tree/main/applications/dnn): `applications/dnn`
- [Inference Interface](https://github.com/sandialabs/cross-sim/tree/main/applications/dnn/inference/interface): `applications/dnn/inference/interface`
- [ADC/DAC Calibration](https://github.com/sandialabs/cross-sim/tree/main/applications/dnn/inference/adc): `applications/dnn/inference/adc`
- [Data Preparation](https://github.com/sandialabs/cross-sim/tree/main/applications/dnn/inference/helpers/imagenet_preprocess): `applications/dnn/inference/helpers/imagenet_preprocess`
- [DNN Parameters](https://github.com/sandialabs/cross-sim/blob/main/applications/dnn/dnn_inference_params.py): `applications/dnn/dnn_inference_params.py`
- [Inference Evaluation](https://github.com/sandialabs/cross-sim/blob/main/applications/dnn/inference/run_inference.py): `applications/dnn/inference/run_inference.py`

### DNN Interfaces

- [PyTorch Conversion](https://github.com/sandialabs/cross-sim/blob/main/simulator/algorithms/dnn/torch/convert.py): `simulator/algorithms/dnn/torch/convert.py`
- [PyTorch Analog Layers](https://github.com/sandialabs/cross-sim/blob/main/simulator/algorithms/dnn/torch/conv.py): `simulator/algorithms/dnn/torch/conv.py`
- [Keras Conversion](https://github.com/sandialabs/cross-sim/blob/main/simulator/algorithms/dnn/keras/convert.py): `simulator/algorithms/dnn/keras/convert.py`

### Simulation Engine

- [Analog Core](https://github.com/sandialabs/cross-sim/blob/main/simulator/cores/analog_core.py): `simulator/cores/analog_core.py`
- [Core Variants](https://github.com/sandialabs/cross-sim/blob/main/simulator/cores/bitsliced_core.py): `simulator/cores/bitsliced_core.py`
- [Core Parameters](https://github.com/sandialabs/cross-sim/blob/main/simulator/parameters/core_parameters.py): `simulator/parameters/core_parameters.py`
- [Compute Backend](https://github.com/sandialabs/cross-sim/blob/main/simulator/backend/backend.py): `simulator/backend/backend.py`

### Hardware Models

- [Crossbar Arrays](https://github.com/sandialabs/cross-sim/blob/main/simulator/circuits/array/iarray.py): `simulator/circuits/array/iarray.py`
- [ADC and DAC](https://github.com/sandialabs/cross-sim/blob/main/simulator/circuits/adc/iadc.py): `simulator/circuits/adc/iadc.py`
- [Device Models](https://github.com/sandialabs/cross-sim/blob/main/simulator/devices/idevice.py): `simulator/devices/idevice.py`

### Algorithms

- [DNN Operations](https://github.com/sandialabs/cross-sim/blob/main/simulator/algorithms/dnn/dnn.py): `simulator/algorithms/dnn/dnn.py`
- [Analog Convolution](https://github.com/sandialabs/cross-sim/blob/main/simulator/algorithms/dnn/analog_convolution.py): `simulator/algorithms/dnn/analog_convolution.py`
- [DFT Algorithm](https://github.com/sandialabs/cross-sim/blob/main/simulator/algorithms/dsp/dft.py): `simulator/algorithms/dsp/dft.py`

### Other components

- **Engineer**

## Connections

- Engineer → Inference Examples: selects model
- Inference Examples → DNN Parameters: configures hardware (evidence: `applications/dnn/torch/cifar10_resnet/inference_cifar10_resnet.py`)
- Inference Examples → PyTorch Conversion: converts model (evidence: `applications/dnn/torch/cifar10_resnet/inference_cifar10_resnet.py`)
- Inference Examples → Keras Conversion: converts model (evidence: `applications/dnn/keras/cifar10_resnet/inference_cifar10_resnet.py`)
- Inference Examples → Inference Interface: uses interface (evidence: `applications/dnn/inference/interface/inference_net.py`)
- Inference Examples → Data Preparation: prepares inputs
- Inference Interface → Inference Evaluation: runs inference
- Inference Interface → DNN Parameters: configures parameters (evidence: `applications/dnn/inference/interface/inference_net.py`)
- ADC/DAC Calibration → Inference Examples: sets ADC/DAC ranges
- DNN Parameters → Core Parameters: sets core settings (evidence: `applications/dnn/dnn_inference_params.py`)
- PyTorch Conversion → PyTorch Analog Layers: replaces layers (evidence: `simulator/algorithms/dnn/torch/convert.py`)
- PyTorch Analog Layers → Analog Convolution: delegates convolution (evidence: `simulator/algorithms/dnn/torch/conv.py`)
- Keras Conversion → Analog Core: creates analog layers
- DNN Operations → Analog Core: uses analog cores (evidence: `simulator/algorithms/dnn/dnn.py`)
- DNN Operations → Analog Convolution: uses convolution (evidence: `simulator/algorithms/dnn/dnn.py`)
- DFT Algorithm → Analog Core: uses analog core (evidence: `applications/dsp/2d_dft_example.py`)
- Analog Core → Core Variants: supports core styles (evidence: `simulator/cores/analog_core.py`)
- Analog Core → Crossbar Arrays: simulates array operations (evidence: `simulator/cores/analog_core.py`)
- Analog Core → Core Parameters: reads configuration (evidence: `simulator/cores/analog_core.py`)
- Core Variants → ADC and DAC: uses ADC/DAC models (evidence: `simulator/cores/bitsliced_core.py`)
- Crossbar Arrays → Compute Backend: uses compute backend (evidence: `simulator/circuits/array/iarray.py`)
- ADC and DAC → Compute Backend: uses compute backend (evidence: `simulator/circuits/adc/iadc.py`)
- Device Models → Compute Backend: uses compute backend (evidence: `simulator/devices/idevice.py`)
- Core Parameters → Device Models: configures device effects
- Inference Evaluation → Engineer: reports accuracy
