Precision timing for every lab

Exvi Technologies builds user-friendly, plug-and-play scientific instruments for precision timing. Our first product, the TDC-A, is a compact USB time tagger for photon counting and event-timing applications. All Exvi products come with easy-to-use software and a programming interface for automated measurements.

The TDC-A is Exvi's low-cost, picosecond-resolution USB time tagger. View TDC-A →

exvi.timing GUI showing a cross-correlation histogram with a Gaussian peak fit
EXVI TDC-A USB time tagger, four front SMA input channels

Quantum optics

The TDC-A covers the standard measurements around single-photon detectors, such as coincidence counting, g²(τ) antibunching measurements, and the characterization of photon-pair sources.

Sensing and imaging

Lidar and fluorescence-lifetime measurements (TCSPC / FLIM) both record the delay between a reference pulse and a detector event. A time tagger measures this delay directly, at picosecond resolution.

Test and measurement

A time tagger is also a general-purpose tool for electronic timing. It can measure the period, jitter, and drift of a clock signal, or record asynchronous pulses from a device under test for later analysis.

EXVI TDC-A USB time tagger with four front SMA input channels
$2,370

TDC-A

Compact USB time tagger for counts, streaming, correlation, and other timing-heavy measurement workflows.

EXVI TDC-A USB time tagger with four front SMA input channels

The TDC-A is a four-channel USB time tagger: 22 ps typ. (40 ps max) RMS jitter, 4 ps bin width, up to 100 MCPS per channel. It streams raw timestamps to the host, where the GUI or the Python & C++ API handles counting, correlation, and analysis.

Ordering

$2,370

Indicative price only, not an offer for sale — the TDC-A is not yet certified and is not currently offered for general sale.

Price per device, excluding shipping and sales tax. Quantity and academic discounts available. See pricing policy.

Coming soon →

Signal Path

How TDC-A works

From input pulse to usable data
1. Threshold discrimination Events arriving on each input channel are first compared against a user-settable voltage threshold, so the instrument responds to real pulses rather than low-level noise.
Tip: Optimizing the threshold based on the input signal can greatly improve timing resolution.
2. Timestamp generation Valid pulses are converted into precise timestamps, preserving the timing relationship between channels for counting, correlation, and general event analysis.
Tip: Fixed timing offsets between channels are on the order of a few ns and can be compensated in software.
3. Host-side measurement and analysis Timestamps are streamed over USB to the GUI or API, where they can be viewed live, counted, correlated, saved, or integrated into automated measurement workflows.
Tip: Streaming and analyzing raw timestamps can be computationally intense — on-device counts are far lighter when you only need rates.

Rationale

Why this performance envelope is practical
  • The tagger is rarely the bottleneck For typical single-photon detectors (SPADs, PMTs, SiPMs), the detector's own jitter is larger than the TDC-A's 22 ps RMS, and typical count rates sit well below the instrument's throughput limit. In most setups the experiment sets the resolution, not the tagger.
  • Between buy and build The alternative to a premium time tagger is usually building your own timing electronics — months of work plus the risk of getting it wrong. The TDC-A is a finished instrument priced close enough to a self-build that building rarely makes sense.
  • Cheap enough to dedicate At this price, a tagger can stay permanently in one setup, go into a student lab, or be built into a prototype — uses that are hard to justify when the instrument costs five figures.
  • Off-the-shelf foundation The TDC-A is built on commercial off-the-shelf (COTS) modules, which keeps the supply chain stable and servicing straightforward.

Block diagram

TDC-A EXVI TDC-Core Time-to-Digital Converter 4 ps bins 22 ps typ. jitter 4 ns dead time CH 1 CH 2 CH 3 CH 4 analog front end mini-USB timestamps out 0100 1010 1100 0110 1011 0010 0100 1111 timestamp bytes CLK OUT CLK IN 10 MHz 10 MHz FRONT BACK

Schematic overview — not to scale. The clock port can carry a 10 MHz reference or a dedicated synchronization signal for multi-unit setups.

Specifications

Preliminary — typical values from pre-production units, subject to change pending final characterization.

Timing performance

Core timing metrics
Timing jitter (RMS)22 ps typ. · 40 ps max.
Timing jitter (FWHM)52 ps typ. · 94 ps max.
Bin widthConfigurable, min. 4 ps**
Dead timeConfigurable, min. 4 ns*

*Jitter may be added for pulse spacing of less than 20 ns.
**Bin width is set in software, down to a minimum of 4 ps.

Channels and rates

Acquisition capacity
Input channels4
Maximum count rate100 MCPS per channel
Maximum time tag rate14 MTags/s
Measurement modesCounts, streaming, correlation

Inputs and interface

Electrical and host connection
Data interfaceUSB 2.0
Input couplingAC coupled
Input impedance50 Ohm
Minimum input amplitude~50 mV
Maximum input amplitude5 V
Minimum pulse width4 ns
Clock I/O (CLKIO)Internal; external 10 MHz reference; external 1 PPS
Clock logic level3.3 V LVTTL (3 V TTL-compatible)

Software and system

Operation and support
Softwareexvi.timing
APIPython and C++
Operating systemsLinux, Windows; macOS planned
Operating temperature10 to 35 °C
Storage temperature5 to 45 °C
Power draw~750 mW

Commercial and applications

Ordering and fit
Base price$2,370
Academic pricingavailable
Quantity discountsavailable
ApplicationsQuantum optics, QKD, lidar, test and measurement, research prototypes

Documentation And Support

Published materials

Support paths
Datasheet (prototype / evaluation)Download PDF ↓
User manualcoming soon
Software downloadssoftware page

More products coming

The TDC-A is the first product. If your application needs more channels, a different form factor, or a specific feature, tell us — it shapes what we build next.

Software

TDC-A is controlled through exvi.timing — Exvi's timing software, with a desktop GUI plus a Python & C++ API and drivers, on Windows and Linux. Go to software →

Software catalog

exvi.timing GUI showing a cross-correlation histogram with a Gaussian peak fit

exvi.timing

The GUI + SDK package for the TDC-A time tagger. Configure channels and thresholds, watch live counts and correlation histograms, then script the same measurements from Python or C++. One installer covers all of it.

Desktop GUI Python API C++ API Windows + Linux Works with TDC-A

Measurement GUI

Set up channels and thresholds, watch live counts and correlation histograms, and save data — no code required.

Python & C++ API

Drive the instrument and pull timestamps from automated experiments, measurement systems, and custom analysis. The API ships inside every installer, alongside the GUI.

Instrument drivers

USB support for the FTDI module used by the instrument. Windows uses the official FTDI VCP installer; on Linux, FTDI VCP support is built into the kernel.

Downloads

exvi.timing v0.3.0 — installers for Windows, Linux, and Android (desktop GUI plus the Python & C++ API).

exvi.timing installers

Version 0.3.0
Windows · 64-bit installerDownload ↓
Linux · Ubuntu / Debian (.deb)Download ↓
Linux · x86-64 (.tar.gz)Download ↓
Android (.apk · debug preview)Download ↓

exvi.timing GUI

Live timing view with counts, streaming, and correlation histograms — plug in over USB and start measuring.

exvi.timing GUI showing the Correlation experiment: a live cross-correlation histogram with a Gaussian peak fit and timing statistics

exvi.timing — the Correlation experiment: a live cross-correlation histogram with Gaussian peak fit, timing statistics, and per-experiment controls.

exvi.timing API

The Python and C++ APIs share one object model and the same method names. Full reference in the user manual, §7.

Python count_rates.py
import exvi.timing as tt

# Connect to the first available TDC-A
dev = tt.Device.open_first()

# Set input thresholds (volts)
dev.set_thresholds([0.5, 0.5, 0.5, 0.5])

# On-device counts over a 1 s gate
r = dev.count_for(1.0)
print(f"IN1 rate: {r.rate_hz(tt.Input.IN1):.0f} counts/s")

dev.close()
C++ count_rates.cpp
#include "exvi/timing.hpp"
#include <iostream>
using namespace std::chrono_literals;
namespace tt = exvi::timing;

int main() {
    tt::Device dev = tt::Device::open_first();

    // Set input thresholds (volts)
    dev.set_thresholds({0.5, 0.5, 0.5, 0.5});

    // On-device counts over a 1 s gate
    auto r = dev.count_for(1s);
    std::cout << "IN1 rate: "
              << r.rate_hz(tt::Input::IN1)
              << " counts/s\n";
    return 0;
}

Platform support

Current software support is provided for Windows and Linux. macOS support may be added later.

What is a time tagger?

A time tagger — also called a time-to-digital converter (TDC) — timestamps the moment a signal crosses a threshold on each of its inputs. Every event becomes a (channel, time) pair with picosecond resolution. Because nothing is thrown away or averaged in hardware, you can reconstruct timing statistics afterwards: rates, delay histograms, correlations, lifetimes, and coincidence-style relationships between channels.

It sits between your detectors (single-photon detectors, PMTs, SiPMs, discriminators, logic outputs) and your computer: the detectors produce electrical pulses, the tagger turns those pulses into calibrated timestamps, and your software does the physics.

Key concepts

Timestamp & resolution

Each event is stamped with an absolute time in picoseconds. The bin size is the finest time step the device can distinguish; on the TDC-A it is configurable down to 4 ps.

Jitter

The run-to-run spread of a timestamp. It sets how sharply two events can be resolved in time — the TDC-A is ~22 ps RMS (typical). It is the quantity a cross-correlation width actually measures.

Dead time

A short blind interval after each accepted event. It caps the maximum event rate and can be used deliberately to suppress detector after-pulses or re-triggering.

Coincidence window

Two streamed events “coincide” when they fall within a chosen time window. This host-side analysis is the foundation of correlation, heralding, and entanglement measurements.

Correlation & g²(τ)

A histogram of the delays between two channels reveals their timing relationship: the peak position is the relative delay, its width is the combined jitter. In quantum optics this is the second-order correlation g²(τ).

Reference clock

Locking the timebase to an external 10 MHz or 1 PPS reference bounds long-term drift and gives a common, traceable time across several instruments.

Where it's used

  • Quantum optics & single photons Host-side coincidence analysis, g²(τ) / antibunching, heralding, and entangled-pair characterization.
  • Fluorescence lifetime (TCSPC / FLIM) Histogramming photon arrival times relative to a laser sync pulse to extract decay lifetimes.
  • Lidar & time-of-flight Distance and ranging from round-trip travel time.
  • Quantum key distribution (QKD) Timing, synchronization, and sifting of detection events.
  • Metrology & clock characterization Jitter, drift, Allan deviation, and frequency-offset measurements.
  • Time-of-flight mass spectrometry Ion arrival-time spectra.

Further reading

Have a review paper we should list here? Email info@exvi.io.

Entangled photon-pair characterization & g²(τ) antibunching

What it is. A Hanbury Brown–Twiss (HBT) measurement: send a source onto two detectors and histogram the delays between their clicks. The second-order correlation g²(τ) characterizes the source — a dip to g²(0) < 0.5 signals single-photon emission (antibunching); for photon-pair sources, the correlation peak quantifies the pairs and heralding efficiency.

With the TDC-A. Connect the two detectors to two inputs, stream time tags, and build the cross-correlation histogram of the click delays.

Pythong2_hbt.py
import exvi.timing as tt
import numpy as np

dev = tt.Device.open_first()
dev.set_thresholds([0.5, 0.5, 0.0, 0.0])          # detectors on IN1, IN2
dev.start_tag_stream([tt.Input.IN1, tt.Input.IN2])

t1, t2 = [], []
for _ in range(2000):                             # collect a batch of tags
    for tag in dev.read_tags(8192, timeout_seconds=0.1):
        (t1 if tag.input == tt.Input.IN1 else t2).append(tag.timestamp_ps)

dev.stop_tag_stream(); dev.close()

# cross-correlate the two click trains -> g2(tau) around zero delay
# (build a histogram of t2 - t1 for nearby pairs; dip at 0 = antibunching)

Fluorescence lifetime imaging (FLIM / TCSPC)

What it is. Measure how long a fluorophore stays excited by histogramming photon arrival times relative to the laser pulse that excited it. The decay histogram, fit to an exponential, gives the fluorescence lifetime τ; scanning the sample turns those lifetimes into an image (FLIM).

With the TDC-A. Feed the laser sync into one input and the detector into another; histogram detector arrivals relative to the preceding sync pulse (a start–stop measurement). For imaging, index the histograms by the scanner's pixel marker.

Pythontcspc.py
import exvi.timing as tt

dev = tt.Device.open_first()
dev.set_thresholds([1.0, 0.5, 0.0, 0.0])          # IN1 = laser sync, IN2 = detector
dev.start_tag_stream([tt.Input.IN1, tt.Input.IN2])

# for each detector tag, record its delay after the most recent sync tag;
# accumulate those delays into a histogram -> the fluorescence decay curve,
# then fit an exponential for the lifetime tau.

dev.stop_tag_stream(); dev.close()

Clock characterization

What it is. Characterize an oscillator, GPS-disciplined reference, or 1 PPS by timestamping its edges against the tagger's timebase — measure period, jitter, drift, or Allan deviation, optionally with the TDC-A locked to a traceable 10 MHz reference.

With the TDC-A. Feed the clock or 1 PPS into an input, timestamp its edges, and compute the statistics from the inter-edge intervals.

Pythonclock_jitter.py
import exvi.timing as tt
import numpy as np

dev = tt.Device.open_first()
dev.set_clock(tt.ClockSource.CLKIN)               # lock to a 10 MHz reference (optional)
dev.set_thresholds([1.5, 0.0, 0.0, 0.0])          # clock / 1 PPS on IN1
dev.start_tag_stream([tt.Input.IN1])

edges = []
for _ in range(2000):
    edges += [t.timestamp_ps for t in dev.read_tags(8192, timeout_seconds=0.1)]

dev.stop_tag_stream(); dev.close()

periods = np.diff(edges)
print(f"period {np.mean(periods)/1e3:.3f} ns, jitter {np.std(periods):.1f} ps")

Want the full write-ups?

We're expanding these into step-by-step guides with wiring diagrams and complete analysis code. Tell us which one you need first.

In progress

Tags to your phone, over the network

Stream calibrated time tags over USB to an Android phone, then forward them over local Wi-Fi to a workstation or cluster for processing. Any bench becomes a distributed acquisition node — the instrument stays tiny while the compute lives wherever you want it. (Android support is on the roadmap.)

Demo

Live count-rate monitor

A few lines of Python that print real-time count rates on each input — the “hello world” of a time tagger, and a quick way to confirm your setup is wired correctly.

Demo

“Is my source single-photon?”

A quick g²(0) check with two detectors (HBT). Watch the dip at zero delay drop below 0.5 as your source gets cleaner — the classic antibunching signature, live.

Demo

Clock sanity check

Feed a 1 PPS or clock edge into an input and watch its period and jitter update live — a cheap way to eyeball an oscillator or a GPS-disciplined reference.

Idea

Catch a cosmic-ray muon

Two scintillator + SiPM paddles in coincidence: when both fire within a few nanoseconds, you (probably) caught a muon passing through. A classroom-friendly particle detector on a USB budget.

Got a demo idea?

We'd love to hear it — and we're happy to feature community projects. Get in touch.

Why Exvi Technologies exists

  • Buy versus build Labs that need precise timing usually either buy a premium instrument or spend months building their own electronics. Exvi exists to add a third option: a finished instrument at a price much closer to a self-build.
  • Sufficient over maximal The specs are chosen to cover the large majority of real experiments, not to win benchmark comparisons. That is what keeps the price down.
  • What lower cost changes A cheaper instrument gets used differently: it can stay permanently in one setup, go into a teaching lab, or ship inside a prototype instead of being shared between experiments.

Pricing

Base prices are listed per device on the product pages — you shouldn't have to request a quote just to find out what an instrument costs.

  • Public base pricing Per-device prices are shown on the product pages; no quote wall to get a number.
  • Quantity discounts Lower per-unit pricing for larger orders: 5% off for 3 or more units, 10% for 5 or more, and 15% for 10 or more.
  • Academic pricing 15% off for universities, research institutes, and other academic customers (combinable with quantity discounts).
  • Shipping and tax Flat shipping & handling of $25 within the US and $75 internationally; base prices exclude sales tax, VAT, and duties, which depend on destination and local tax treatment.
  • Annual adjustment Price changes happen at most once a year and are intended to track inflation, not arbitrary repricing.

Ordering — coming soon

The TDC-A is not yet available for general sale. It is completing conformity assessment (CE / UKCA / FCC). Ahead of certification, a limited number of evaluation prototypes are available to early partners for testing and integration — supplied as pre-production units for evaluation only. To enquire about a prototype, use the General questions form or email info@exvi.io.

General questions

Compatibility, applications, lead time, software, or anything else.

Direct contact

Overview

These Terms & Conditions ("Terms") govern use of this website and the sale of products and software by Exvi Technologies, LLC ("Exvi", "we", "us"), California, USA. By using the site, requesting a quotation, or placing an order, you agree to these Terms. Where a signed agreement or a firm quotation states different terms, that document controls for that transaction.

Last updated: 19 June 2026. We may update these Terms from time to time; the version in effect at the time of your order applies.

Website & content

  • Informational only Site content, specifications, and pricing policy are provided for general information and may change without notice.
  • No binding offer Published descriptions and prices do not by themselves create a binding sales agreement; a contract is formed only as described under "Quotations & orders".
  • Acceptable use Use the site lawfully; do not attempt to disrupt, scrape abusively, or misuse it.

Quotations & orders

  • Preliminary quotation Generated automatically for planning only — not an invoice, not a binding offer, and not a request for payment.
  • Firm quotation A firm quotation is an offer by Exvi, valid until the date stated on it. A purchase order or written acceptance referencing that quotation forms a binding agreement.
  • Errors Quotations and orders are subject to correction of obvious clerical or pricing errors and to product availability at the time of order.

Prices, taxes & duties

  • Currency All prices are in U.S. dollars (USD).
  • Exclusions Prices exclude sales tax, VAT, GST, customs duties, tariffs, and import fees. These are the buyer's responsibility and are assessed at destination.
  • Importer of record For international orders the buyer is the importer of record (Incoterms® 2020 DAP) unless agreed otherwise in writing.
  • Discounts Quantity (5% / 10% / 15% at 3+ / 5+ / 10+ units) and academic (15%) discounts apply as published; see the pricing policy.

Payment

  • Terms Net 30 days for institutions/companies with an approved purchase order; otherwise payment in advance. New international customers may be asked to prepay.
  • Methods Bank transfer (ACH / wire). Bank fees, where applicable, are the buyer's responsibility.
  • Title Title to goods passes only on full payment; risk passes on delivery per the applicable Incoterm.
  • Fraud caution Confirm bank details via a known Exvi contact before paying. We never change payment details by email.

Shipping & delivery

  • Lead times Estimates only and non-binding: in-stock items typically ship within about a week; otherwise approximately 6 weeks from order confirmation.
  • Shipping & handling Flat $25 within the US and $75 internationally, unless a quotation states otherwise.
  • Delivery & risk Delivery and transfer of risk follow Incoterms® 2020 DAP unless agreed otherwise. We are not liable for carrier or customs delays outside our control.

Warranty

  • Limited warranty Products carry a 12-month limited warranty against defects in materials and workmanship from the date of delivery.
  • Pre-production & evaluation units Evaluation and pre-production units are supplied “as-is,” without warranty, under a separate Evaluation Unit Agreement; the limited warranty above does not apply to them.
  • Remedy Our sole obligation is, at our option, to repair or replace a defective product, or refund the price paid for it.
  • Exclusions The warranty excludes misuse, accident, unauthorized modification or repair, improper installation, operation outside published specifications, and normal wear.
  • Returns process Contact info@exvi.io for a return authorization before returning any item.

Limitation of liability

  • No indirect damages To the maximum extent permitted by law, Exvi is not liable for indirect, incidental, special, or consequential damages, or for lost profits, data, or use.
  • Cap Our total liability arising from a transaction is limited to the amount paid for the product giving rise to the claim.
  • Fitness Products are general-purpose instruments; the buyer is responsible for determining suitability for its application. Except as expressly stated, products are provided without other warranties to the extent permitted by law.
  • Statutory rights Nothing in these Terms excludes or limits liability where it would be unlawful to do so, and these Terms do not affect any mandatory statutory or consumer rights you may have.

Returns & cancellations

  • Cancellation Orders may be cancelled before shipment; work already incurred (e.g. custom configuration) may be chargeable.
  • Returns Non-defective items may be returned within 30 days of delivery if unused and in original condition; a restocking fee may apply and return shipping is the buyer's responsibility.
  • Refunds Approved refunds are issued to the original payment method once the returned item is received and inspected.

Export control & compliance

  • Country of origin United States. Applicable export classifications are provided with a firm quotation or on request.
  • Restrictions Products may not be exported, re-exported, or transferred to embargoed/sanctioned countries, denied/restricted parties, or for prohibited end-uses.
  • Buyer responsibility The buyer is responsible for compliance with all applicable export-control and sanctions laws and for any required licenses or local approvals.

Intellectual property & software

  • Ownership All trademarks, designs, documentation, firmware, and software remain the property of Exvi or its licensors.
  • Software license exvi.timing and device firmware are licensed, not sold, for use with Exvi hardware. Do not redistribute, reverse-engineer, or circumvent licensing except as permitted by law.
  • Feedback Suggestions you share may be used to improve our products without obligation.

Privacy & data

  • What we collect Information you submit (name, organization, email, shipping/contact details) and quotation details.
  • How we use it To respond to enquiries, prepare quotations, and fulfil orders. We do not sell your personal data.
  • Storage & requests Records are kept in access-controlled storage and retained only as long as needed. To access or delete your data, contact info@exvi.io.

Governing law & contact

  • Governing law These Terms and any sale are governed by the laws of the State of California, USA, without regard to conflict-of-law rules.
  • Severability If any provision is unenforceable, the remaining provisions stay in effect.
  • Contact Exvi Technologies, LLC, California, USA — info@exvi.io.