Software Toolchain

SNOW ANGEL

ONNX to Synthesizable HDL

Develop a model in Python, MATLAB, or other tools. Export it as an ONNX model, and hand it to SNOW ANGEL. It comes back as synthesizable HDL, ready to run on LACE or another FPGA platform. No hand-written hardware in between!

Input
ONNX model
Output
Synthesizable HDL
Model from
Python · MATLAB · etc.
Targets
LACE · FPGA

Develop. Compile. Deploy.

01
Develop
Your team

Build the model or algorithm in the tools you already use (Python, MATLAB, etc.) and export it as an ONNX model. At this stage the model is hardware agnostic.

Python · MATLAB → ONNX
02
Compile
SNOW ANGEL

Hand the ONNX model to SNOW ANGEL. It produces synthesizable HDL for the network, with minimal user input.

ONNX → Synthesizable HDL
03
Deploy
LACE · FPGA

Synthesize the HDL with vendor tools and load it onto the LACE hardware or another FPGA-based platform. Retrain and redeploy at any time, even after launch.

HDL → FPGA

What SNOW ANGEL Does

A common way to run a model on an FPGA is to build a general-purpose accelerator and schedule the network’s layers onto it one after another. SNOW ANGEL takes a different approach. It reads the model as ONNX and builds hardware shaped like the network itself. SNOW ANGEL fits the model to the fabric you have.

The model’s operations are chained through on-board cache, so data streams from one operation to the next as soon as it is produced, with minimal round trips through external memory between layers. SNOW ANGEL converts the trained model to hardware, and its built-in quantization tools give you control over speed and performance.

If your platform is reprogrammable, a retrained network is a recompile and an upload rather than a hardware revision. A mission can launch with one model, learn from flight data, and replace it over your command link.

Deployment is where we work most closely with a team: choosing the model, fitting the design to the fabric’s resources, and seeing it through to a unit running on the bench. SNOW ANGEL is the toolchain behind our own deployments, and the same one we use on yours.

Part of a compiled network: two input caches feed a Conv block, three caches carry its output to a LeakyRelu block, and four more carry that to a MaxPool block, which also takes one input cache directly
Part of a compiled network. Each operation is its own block, and data moves between them through on-board cache.

Packets with BRISC

BRISC is our tool for defining packet structures without writing code or VHDL. Lay out your telecommand and telemetry packets in Excel or in a web interface, and BRISC generates the encoding and decoding for them automatically.

SNOW ANGEL is integrated directly with BRISC. Every solution it generates comes with matching packet handling, so getting data into a deployed model and results back out takes a few clicks in a web interface instead of custom code, packet routing, and VHDL on either end.

Supported

Input

Model Format
ONNX
Developed in
Python · MATLAB · Your Toolchain
Operations
ONNX operations or your own custom operations

Output

Hardware
Synthesizable HDL
Commanding
Telecommand structure
Data Handling
Routing and packetizing

Targets

Devices
LACE
Other FPGAs
Inquire
Vendor Tools
Libero, or Inquire

Availability

Contact Us

Supported inputs and targets describe the toolchain as used on our own deployments and may change. Ask us about your model.

Bring Your Model to the Edge

Tell us what you have (a trained network, a MATLAB algorithm, an idea) and where it needs to run. We’ll walk through what compiling it with SNOW ANGEL would take and what it would look like on LACE or another platform.