v0.12.1 (Host↔FPGA Time Sync)

View this release on GitHub → Release Date: June 08, 2026

This release introduces host↔FPGA time synchronization, making per-frame timestamps trustworthy for sensor fusion.

Interface contract: carbon-interface v1.3.3 — exact interface contract version matches are now required for the register/RAM access that time sync depends on. Firmware compatibility: v5.0.X and v5.1.X (max frame rate 20 fps; bandwidth selection in the SDL section).

Note: v0.12.0 was withdrawn shortly after release due to a frame-timestamp parsing bug; v0.12.1 fixes it and supersedes it.

New Features

Host↔FPGA time synchronization — consistent sub-100 µs clock sync

The client now disciplines the FPGA’s system clock to the host clock in the background, enabled by default. A custom Voyant time protocol — built entirely on register reads/writes, with no PTP grandmaster or NTP server required — holds the host↔FPGA offset consistently under 100 µs. This makes per-frame timestamps trustworthy for fusing Carbon data with other time-stamped sensors.

A new client.time_sync_state() call reports sync health (offset, jitter, round-trip, and a SyncQuality band: Excellent ≤ 1 µs, Good ≤ 100 µs, Fair ≤ 1 ms, Poor beyond). A time_sync_monitor CLI tool watches it live.

Behavior Changes

Frame timestamps now come from the FPGA clock by default

Because the FPGA clock is now disciplined to the host, frames are stamped with the FPGA timestamp by default rather than host-on-receipt time — giving every frame a host-aligned hardware timestamp closer to acquisition and free of host-side receive jitter. To restore the old behavior, set use_msg_timestamp = false.

Bug Fixes

  • Frame timestamp parsing — the FPGA’s packed 96-bit timestamp is now decoded correctly. The earlier interpretation produced wildly wrong frame times and is why v0.12.0 was pulled.

Other Changes

  • Ubuntu 26.04 support confirmed — the Debian package install is now verified in CI on Ubuntu 22.04, 24.04, and 26.04.
  • Signed register / RAM read & write — register-I/O fix that correctly handles signed values. This is what unlocked the time-sync protocol (writing the residual clock offset back to the FPGA), and is why this release requires carbon-interface v1.3.3.
  • Wire-protocol types are now fully code-generated from the carbon-interface contract — message structs, payload parsing, and register/RAM address constants produced at build time, keeping the SDK in lockstep with each interface update.

Documentation

For comprehensive documentation, examples, and installation instructions, visit our documentation site.

Feedback

We value your feedback! If you encounter issues or have suggestions for improvements, please see our troubleshooting guide for the best options for getting in touch with us.

← Next release
v0.12.2
Previous release →
v0.11.0

Copyright © Voyant Photonics, Inc.

This site uses Just the Docs, a documentation theme for Jekyll.