Skip to main content

GitHub PyPI License

RAVEL

RAVEL (Rate-Aware Vectorized Engine for Low-latency) generates a specialized, hls4ml-compatible FPGA inference project. Aria 1.3.0 supports P2/P4 temporal packing and Dense x1/x2 for the CNN-for-Arianna model family. New conversions default to P4/D2; P2/D1 remains an explicit compatibility choice. The model family is capable of processing an 8-channel ADC stream with a rate of up to 4.4 GSa/s on the KU5P. This model distinguishes in real time between neutrino signals generated by Askaryn Radiation and noise, and can detect over 99% of neutrinos at a trigger rate of 1 Hz.

Performance

Like-for-like HLS comparison

All three flows below use the exact same Keras model, hls4ml configuration, part, and clock target. The vanilla project is emitted directly by hls4ml without manual changes to generated C++, headers, Tcl, or YAML.

Flow II Latency (cycles) Est. clock (ns) BRAM_18K DSP FF LUT
Vanilla hls4ml 3076 3084 3.619 18 0 26275 38365
RAVEL Aria 1.1.0 P2/D1 178 183 3.647 0 4 3483 28922
RAVEL Aria 1.3.0 P4/D2 94 99 3.502 0 8 4436 53502

Aria 1.3 P4/D2 reduces II by 47.2% relative to Aria 1.1 P2/D1. It uses 8 DSP, 4436 FF, 53502 LUT, and no BRAM; these estimates correspond to 0.44%, 1.02%, 24.66%, and 0% of the selected KU5P. The LUT increase is 85.0% relative to P2/D1 and is the main cost of doubling Dense work per cycle. Resource figures are Vitis HLS estimates. See the Aria 1.3 synthesis and RTL CoSim evidence and reference report.

The throughput requirements of ARIANNA, RNO-G, and IceCube-Gen2 are already met by the current system design (AI Trigger System, v3.3.0). For models with similar architectures and size, processing speed and power consumption are no longer limiting factors.

More Information about the reference implementation, please see the performance of the CNN-Core-Generator.

Install

Use a clean Python 3.11 virtual environment on Linux:

python -m pip install ravel-hls

Python API

import hls4ml
import keras
from hgq.layers import QConv2D, QDense
import ravel_hls as ravel

model = keras.models.load_model(
    "model.keras", custom_objects={"QConv2D": QConv2D, "QDense": QDense}
)
hls = hls4ml.utils.config_from_keras_model(
    model, granularity="name", backend="Vitis"
)
hls["Model"].update({"Strategy": "Latency", "ReuseFactor": 1})

config = {
    "Project": {"Name": "cnn_core", "OutputDir": "cnn_core"},
    "HLS": {
        "Backend": "Vitis",
        "IOType": "io_stream",
        "Part": "xcku5p-ffvb676-2-e",
        "ClockPeriod": 5.0,
        "Config": hls,
    },
    "Verification": {"Mode": "required", "Samples": 32, "Seed": 19},
    "Vitis": {"Run": False},
}

project = ravel.convert(model, config)
print(project.status)

Optimization is optional. Omission selects the versioned aggressive default:

config["Optimization"] = {
    "TemporalPacking": 2,  # 2 or 4
    "DenseParallelism": 1,  # 1 or 2
}

Each axis may be set independently; an omitted axis keeps its aggressive default. Project.refresh() reuses the resolved values recorded by the project and does not apply newer defaults.

Vitis.Run defaults to False. Set it to True to run vitis_hls -f build_prj.tcl after atomic project publication and automatically record the synthesis report. The default Vitis stages are reset and synthesis; CSim, CoSim, validation, export, and Vivado synthesis remain disabled unless their booleans under Vitis.Stages are enabled explicitly. The same operation can be requested later with project.build().

The concise project lifecycle is Project.open(path), project.refresh(model), project.build(), project.record(report_dir), and project.link(). The CLI command ravel-hls inspect PROJECT --json performs full source-integrity checking; add --fast when payload hashing should be skipped.

Parameter packages

Parameters stores portable generation-relevant inference state without generated HLS sources or executable Python objects:

parameters = ravel.Parameters.extract(model)
parameters.save("trained.ravelparams")

project = ravel.Project.open("cnn_core")
project.refresh(ravel.Parameters.load("trained.ravelparams"))

The deterministic archive contains JSON plus NPY arrays for kernel, bias, and learned K/I/F quantizer state. Static quantizer contracts and slot schemas are compatibility-checked before a complete staged regeneration. A parameter package is not encrypted.

Other Information

See the executable CNN-for-Arianna reference, architecture, compatibility, and project format for the full contracts.

Our Project used RAVEL

The Future Plan

RAVEL will evolve from the closed, qualified specialization flow into a general rate-aware FPGA inference generator. Plans for higher versions are tentative.

Higher versions will focus primarily on expanding functionality and model support. At present, Nocturne 2.0 is expected to bring the target model into its highest practical throughput range. Further versions may still achieve higher throughput, but the remaining headroom is expected to be quite limited.

  • Aria 1.x Continue improving the closed P2/P4 x D1/D2 specialization set, deterministic project lifecycle, verification, and tool compatibility. For this version, RAVEL's goal is simply to design an efficient converter for models currently in use or planned for use for high-energy neutrino experiments, e.g., ARIANNA, RNO-G, and IceCube-Gen2.
  • Nocturne 2.x Generalize model support, add P8 where system bandwidth and scheduling permit it, and derive balanced layer-level parallelism.
  • Rhapsody 3.x Support multiple independent inference contexts within one IP, with configurable resource sharing, duplication.
  • Requiem 4.x Select internal parallelism, IP replication, and lane scheduling according to input rate, internal interval, latency, and FPGA resource constraints.

License

This project licensed under Apache-2.0. See LICENSE.

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

ravel_hls-1.3.0.tar.gz (109.1 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

ravel_hls-1.3.0-py3-none-any.whl (48.6 kB view details)

Uploaded Python 3

File details

Details for the file ravel_hls-1.3.0.tar.gz.

File metadata

  • Download URL: ravel_hls-1.3.0.tar.gz
  • Upload date:
  • Size: 109.1 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/7.0.0 CPython/3.13.14

File hashes

Hashes for ravel_hls-1.3.0.tar.gz
Algorithm Hash digest
SHA256 f731f17fd5ba30e9599c60aa599a0aaf340dff360d743aab2f1f17beb86770af
MD5 4c4637e331ba08c4da4e740930af9cbf
BLAKE2b-256 2996b2f40a3acba868542104fe3e0e7128504ed4274a9e97bd4f79d29f746f70

See more details on using hashes here.

Provenance

The following attestation bundles were made for ravel_hls-1.3.0.tar.gz:

Publisher: publish.yml on albertc9/RAVEL

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file ravel_hls-1.3.0-py3-none-any.whl.

File metadata

  • Download URL: ravel_hls-1.3.0-py3-none-any.whl
  • Upload date:
  • Size: 48.6 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/7.0.0 CPython/3.13.14

File hashes

Hashes for ravel_hls-1.3.0-py3-none-any.whl
Algorithm Hash digest
SHA256 8b69afc5003aa43d569008c76a2bb25aa4c1d93ce36e1a051d27b582702057f5
MD5 b9c26c8d1187b1d855fcefc8c8c330f7
BLAKE2b-256 f821bfafecc6aee203298af57ac1c66ee66af3987d351b55ec17098ab1220ed0

See more details on using hashes here.

Provenance

The following attestation bundles were made for ravel_hls-1.3.0-py3-none-any.whl:

Publisher: publish.yml on albertc9/RAVEL

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page