# giclab/flexvit architecture

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

- Interactive diagram: https://gitdiagram.com/giclab/flexvit
- Repository: https://github.com/giclab/flexvit

## Overview

FlexViT is an FPGA accelerator integration for TensorFlow Lite vision-transformer inference, built as a SECDA-TFLite delegate. The main workflow selects supported model nodes, prepares and tiles their inputs and weights, dispatches DMA transfers to the accelerator, and returns quantized outputs to the TFLite graph. README also documents simulation benchmarks and inference-difference checks, hardware assets, and artifact evaluation with several INT8 models. Edges reflect sampled delegate and driver behavior plus README-described runtime capabilities; simulation and board execution orchestration belongs to SECDA-TFLite, not this repository.

Main entry points: [`src/data/models`](https://github.com/giclab/flexvit/tree/main/src/data/models) (INT8 models), [`src/src/secda_delegates/vit_delegate/v9/vit_delegate.cc`](https://github.com/giclab/flexvit/blob/main/src/src/secda_delegates/vit_delegate/v9/vit_delegate.cc) (ViT delegate), [`src/src/secda_delegates/vit_delegate/v9/accelerator/scheduler.sc.h`](https://github.com/giclab/flexvit/blob/main/src/src/secda_delegates/vit_delegate/v9/accelerator/scheduler.sc.h) (Data scheduler), [`src/src/secda_delegates/vit_delegate/v9/accelerator/driver/acc_container.h`](https://github.com/giclab/flexvit/blob/main/src/src/secda_delegates/vit_delegate/v9/accelerator/driver/acc_container.h) (Accelerator data container)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_integration["TFLite integration"]
  node_delegate["ViT delegate<br/>[vit_delegate.cc]"]
  node_provider["Delegate provider"]
  node_external["External delegate adaptor"]
end

subgraph group_compute["Data preparation"]
  node_prep["Tensor preparation<br/>[util_prep.h]"]
  node_util["Operator utilities<br/>[util.h]"]
  node_container["Accelerator data container<br/>[acc_container.h]"]
  node_driver["Tiled DMA driver<br/>[vit_driver.h]"]
end

subgraph group_accelerator["FPGA accelerator"]
  node_binding["SystemC binding<br/>[systemc_binding.h]"]
  node_acc["Accelerator module<br/>[acc.sc.h]"]
  node_scheduler["Data scheduler<br/>[scheduler.sc.h]"]
  node_pe["Processing elements<br/>[PE.sc.h]"]
  node_ppu["Post-processing unit<br/>[PPU.sc.h]"]
end

subgraph group_assets["Models and hardware"]
  node_models["INT8 models"]
  node_hardware["FPGA bitstreams"]
  node_config["Accelerator configuration<br/>[vit_9_0.json]"]
end

subgraph group_evaluation["Evaluation workflows"]
  node_simulation["Simulation workflows"]
  node_benchmark["Layer benchmark<br/>[launch.json]"]
  node_diff["Inference difference<br/>[launch.json]"]
  node_artifact["Artifact evaluation"]
end

node_user(("Model developer"))
node_tflite["TensorFlow Lite runtime"]
node_secda["SECDA-TFLite flows"]
node_board["FPGA board"]

node_user -->|"selects model"| node_models
node_models -->|"loaded by"| node_tflite
node_user -->|"enables delegate"| node_provider
node_user -.->|"configures options"| node_external
node_provider -->|"creates"| node_delegate
node_external -->|"creates"| node_delegate
node_tflite -->|"delegates nodes"| node_delegate
node_delegate -->|"prepares operators"| node_prep
node_delegate -->|"sets layer data"| node_container
node_prep -->|"formats tensors"| node_container
node_container -->|"provides buffers"| node_driver
node_driver -->|"sends DMA data"| node_binding
node_binding -->|"connects signals"| node_acc
node_acc -->|"runs"| node_scheduler
node_scheduler -->|"schedules compute"| node_pe
node_scheduler -->|"triggers postprocess"| node_ppu
node_pe -->|"provides accumulations"| node_ppu
node_ppu -->|"returns output"| node_driver
node_config -.->|"configures hardware"| node_secda
node_hardware -.->|"programs"| node_board
node_secda -.->|"runs inference"| node_board
node_simulation -->|"offers"| node_benchmark
node_simulation -->|"offers"| node_diff
node_models -->|"benchmarked by"| node_benchmark
node_models -->|"checked by"| node_diff
node_artifact -->|"documents evaluation"| node_models
node_artifact -.->|"describes workflow"| node_secda

click node_delegate "https://github.com/giclab/flexvit/blob/main/src/src/secda_delegates/vit_delegate/v9/vit_delegate.cc"
click node_provider "https://github.com/giclab/flexvit/blob/main/src/src/secda_delegates/vit_delegate/v9/vit_delegate_provider.cc"
click node_external "https://github.com/giclab/flexvit/blob/main/src/src/secda_delegates/vit_delegate/v9/vit_delegate_adaptor.cc"
click node_prep "https://github.com/giclab/flexvit/blob/main/src/src/secda_delegates/vit_delegate/v9/util_prep.h"
click node_util "https://github.com/giclab/flexvit/blob/main/src/src/secda_delegates/vit_delegate/v9/util.h"
click node_container "https://github.com/giclab/flexvit/blob/main/src/src/secda_delegates/vit_delegate/v9/accelerator/driver/acc_container.h"
click node_driver "https://github.com/giclab/flexvit/blob/main/src/src/secda_delegates/vit_delegate/v9/accelerator/driver/vit_driver.h"
click node_binding "https://github.com/giclab/flexvit/blob/main/src/src/secda_delegates/vit_delegate/v9/accelerator/driver/systemc_binding.h"
click node_acc "https://github.com/giclab/flexvit/blob/main/src/src/secda_delegates/vit_delegate/v9/accelerator/acc.sc.h"
click node_scheduler "https://github.com/giclab/flexvit/blob/main/src/src/secda_delegates/vit_delegate/v9/accelerator/scheduler.sc.h"
click node_pe "https://github.com/giclab/flexvit/blob/main/src/src/secda_delegates/vit_delegate/v9/accelerator/PE.sc.h"
click node_ppu "https://github.com/giclab/flexvit/blob/main/src/src/secda_delegates/vit_delegate/v9/accelerator/PPU.sc.h"
click node_models "https://github.com/giclab/flexvit/tree/main/src/data/models"
click node_hardware "https://github.com/giclab/flexvit/tree/main/src/hardware_automation/generated"
click node_config "https://github.com/giclab/flexvit/blob/main/src/hardware_automation/configs/vit_9_0.json"
click node_simulation "https://github.com/giclab/flexvit/tree/main/src/src/tensorflow"
click node_benchmark "https://github.com/giclab/flexvit/blob/main/src/src/tensorflow/launch.json"
click node_diff "https://github.com/giclab/flexvit/blob/main/src/src/tensorflow/launch.json"
click node_artifact "https://github.com/giclab/flexvit/blob/main/ARTIFACT_EVALUATION.md"

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_delegate,node_provider,node_external toneBlue
class node_prep,node_util,node_container,node_driver toneAmber
class node_binding,node_acc,node_scheduler,node_pe,node_ppu toneMint
class node_models,node_hardware,node_config toneRose
class node_simulation,node_benchmark,node_diff,node_artifact,node_user,node_tflite,node_secda,node_board toneIndigo
```

## Components

### TFLite integration

- [ViT delegate](https://github.com/giclab/flexvit/blob/main/src/src/secda_delegates/vit_delegate/v9/vit_delegate.cc): `src/src/secda_delegates/vit_delegate/v9/vit_delegate.cc`
- [Delegate provider](https://github.com/giclab/flexvit/blob/main/src/src/secda_delegates/vit_delegate/v9/vit_delegate_provider.cc): `src/src/secda_delegates/vit_delegate/v9/vit_delegate_provider.cc`
- [External delegate adaptor](https://github.com/giclab/flexvit/blob/main/src/src/secda_delegates/vit_delegate/v9/vit_delegate_adaptor.cc): `src/src/secda_delegates/vit_delegate/v9/vit_delegate_adaptor.cc`

### Data preparation

- [Tensor preparation](https://github.com/giclab/flexvit/blob/main/src/src/secda_delegates/vit_delegate/v9/util_prep.h): `src/src/secda_delegates/vit_delegate/v9/util_prep.h`
- [Operator utilities](https://github.com/giclab/flexvit/blob/main/src/src/secda_delegates/vit_delegate/v9/util.h): `src/src/secda_delegates/vit_delegate/v9/util.h`
- [Accelerator data container](https://github.com/giclab/flexvit/blob/main/src/src/secda_delegates/vit_delegate/v9/accelerator/driver/acc_container.h): `src/src/secda_delegates/vit_delegate/v9/accelerator/driver/acc_container.h`
- [Tiled DMA driver](https://github.com/giclab/flexvit/blob/main/src/src/secda_delegates/vit_delegate/v9/accelerator/driver/vit_driver.h): `src/src/secda_delegates/vit_delegate/v9/accelerator/driver/vit_driver.h`

### FPGA accelerator

- [SystemC binding](https://github.com/giclab/flexvit/blob/main/src/src/secda_delegates/vit_delegate/v9/accelerator/driver/systemc_binding.h): `src/src/secda_delegates/vit_delegate/v9/accelerator/driver/systemc_binding.h`
- [Accelerator module](https://github.com/giclab/flexvit/blob/main/src/src/secda_delegates/vit_delegate/v9/accelerator/acc.sc.h): `src/src/secda_delegates/vit_delegate/v9/accelerator/acc.sc.h`
- [Data scheduler](https://github.com/giclab/flexvit/blob/main/src/src/secda_delegates/vit_delegate/v9/accelerator/scheduler.sc.h): `src/src/secda_delegates/vit_delegate/v9/accelerator/scheduler.sc.h`
- [Processing elements](https://github.com/giclab/flexvit/blob/main/src/src/secda_delegates/vit_delegate/v9/accelerator/PE.sc.h): `src/src/secda_delegates/vit_delegate/v9/accelerator/PE.sc.h`
- [Post-processing unit](https://github.com/giclab/flexvit/blob/main/src/src/secda_delegates/vit_delegate/v9/accelerator/PPU.sc.h): `src/src/secda_delegates/vit_delegate/v9/accelerator/PPU.sc.h`

### Models and hardware

- [INT8 models](https://github.com/giclab/flexvit/tree/main/src/data/models): `src/data/models`
- [FPGA bitstreams](https://github.com/giclab/flexvit/tree/main/src/hardware_automation/generated): `src/hardware_automation/generated`
- [Accelerator configuration](https://github.com/giclab/flexvit/blob/main/src/hardware_automation/configs/vit_9_0.json): `src/hardware_automation/configs/vit_9_0.json`

### Evaluation workflows

- [Simulation workflows](https://github.com/giclab/flexvit/tree/main/src/src/tensorflow): `src/src/tensorflow`
- [Layer benchmark](https://github.com/giclab/flexvit/blob/main/src/src/tensorflow/launch.json): `src/src/tensorflow/launch.json`
- [Inference difference](https://github.com/giclab/flexvit/blob/main/src/src/tensorflow/launch.json): `src/src/tensorflow/launch.json`
- [Artifact evaluation](https://github.com/giclab/flexvit/blob/main/ARTIFACT_EVALUATION.md): `ARTIFACT_EVALUATION.md`

### Other components

- **Model developer**
- **TensorFlow Lite runtime**
- **SECDA-TFLite flows**
- **FPGA board**

## Connections

- Model developer → INT8 models: selects model
- INT8 models → TensorFlow Lite runtime: loaded by
- Model developer → Delegate provider: enables delegate
- Model developer → External delegate adaptor: configures options
- Delegate provider → ViT delegate: creates
- External delegate adaptor → ViT delegate: creates
- TensorFlow Lite runtime → ViT delegate: delegates nodes
- ViT delegate → Tensor preparation: prepares operators
- ViT delegate → Accelerator data container: sets layer data
- Tensor preparation → Accelerator data container: formats tensors
- Accelerator data container → Tiled DMA driver: provides buffers
- Tiled DMA driver → SystemC binding: sends DMA data
- SystemC binding → Accelerator module: connects signals
- Accelerator module → Data scheduler: runs
- Data scheduler → Processing elements: schedules compute
- Data scheduler → Post-processing unit: triggers postprocess
- Processing elements → Post-processing unit: provides accumulations
- Post-processing unit → Tiled DMA driver: returns output
- Accelerator configuration → SECDA-TFLite flows: configures hardware
- FPGA bitstreams → FPGA board: programs
- SECDA-TFLite flows → FPGA board: runs inference
- Simulation workflows → Layer benchmark: offers
- Simulation workflows → Inference difference: offers
- INT8 models → Layer benchmark: benchmarked by
- INT8 models → Inference difference: checked by
- Artifact evaluation → INT8 models: documents evaluation
- Artifact evaluation → SECDA-TFLite flows: describes workflow
