Phase 1 runs today on Rigol DHO800/900 and MHO900 · our own instrument in design · Oct 2026

aioscilloscope

A modern oscilloscope platform, built in three phases: our own software on scopes you can already buy, then the FPGA, then an instrument of our own, shaped by what engineers ask for.

A Rigol DHO924S running NovaOS: a 1 MHz clock with frequency modulation in the density display, temperature palette, 19.2k waveforms per second
A real screen: a Rigol DHO924S running NovaOS. Density display in the temperature palette, every acquired waveform counted, 19.2k wfm/s.

CH1Phase 1: NovaOS on Rigol DHO800/900 and MHO900

These scopes pair a Rockchip RK3399 with a Xilinx-class FPGA over PCIe, the same recipe as the LED video processors we work with every day. Stock, they run Android 7.1 on a Linux 4.4 kernel with a Java app on top. NovaOS replaces all of it: the Rockchip 6.12 BSP kernel (Linux 6.12.112, a long-term kernel supported until December 2028, and the newest with Rockchip's Mali GPU driver; why not 7.2), a minimal Yocto and systemd system, and a scope stack written from scratch in Rust: the acquisition engine, a GPU-drawn UI, SCPI, Webcontrol, VXI-11 and LXI.

It is our own engine talking to the FPGA directly, so everything the hardware can do is available. The stock firmware stays on the scope, one menu item away.

There is no Android, no Java, no X server and no compositor: the UI draws with OpenGL ES on the Mali GPU straight to the display through DRM/KMS, samples arrive by PCIe DMA into a shared-memory ring the UI reads without copying, and remote view uses the SoC's hardware H.264 encoder. A running scope uses about 217 MB of RAM. How the stack fits together.

Measured on our units

WhatNovaOSNotes
Operating systemLinux 6.12.112Rockchip BSP, Yocto, systemd, Rust userspace. Stock: Android 7.1 on Linux 4.4.
Boot to a live trace12.5 s DHO924S · 11.9 s MHO934From kernel start, later boots, median. Stock figure being measured the same way.
DHO FPGA bring-up2.0 sStock waits fixed timers totalling about 15 s; we probe for readiness and verify the image loaded.
Density display coverage100 %Every acquired waveform is counted into the per-pixel map, on worker threads.
Remote view latency~0.1 sA change on the scope, hardware H.264, to another display's glass.
MHO ADC interleave spurs0.5 to 1.2 mVpkAfter self-calibration, 2 GSa/s. Stock without a self-calibration: 2.3 to 8.1 mVpk, varying from boot to boot (four boots measured).

What it adds

DHO900 and MHO900 side by side

Under NovaOSDHO924SMHO934
Analog channels4, 12-bit4, 12-bit
Maximum sample rate1.25 GSa/s4 GSa/s
Input impedance1 MΩ1 MΩ or 50 Ω
Signal generators12
Logic channels1616, at 1 GSa/s
Eye diagram data rateto 625 Mb/sto 2 Gb/s
Bode sweepto 78 MHzto 100 MHz, on G1 or G2

CH2Phase 2: the FPGA

Rigol's FPGA design is solid: it fills most of the chip with triggers, filters and interleave correction. What it leaves on the table is getting data out: capture and read-out take turns, read-out runs at about one sample per clock, and there is no density map in the FPGA. On a DHO at 20 ns/div we reach about 30k waveforms a second, a quarter of what the record length allows.

IdeaTodayTarget, an estimate
Overlapped capture and read-out~10k wfm/s at 2 µs/div~28 to 30k wfm/s
Density map built in the FPGA~30k wfm/s at fast timebases0.5 to 1M wfm/s
Segmented memory~40k segments/s~1M segments/s at 1 kpts

First we are squeezing the driver side, since part of the per-trigger cost may come from how the image is driven. A rewrite only makes sense where the community wants the speed.

CH3Phase 3: an instrument of our own

Everything learned in phases 1 and 2 goes into our own design: no screen, no knobs, no phone operating system. Plug it in over Ethernet with PoE or USB, and an AI agent, or any program, connects and drives it. It is also an FPGA bring-up bench: logic inputs, JTAG, a console, two supplies and a generator, all on one timebase.

CallWhat it does
describeChannels, limits, calibration state and age, and what the inputs see right now.
configureTakes the state you want and returns what was actually set, rounded to the hardware's steps.
captureOne acquisition: statistics, measurements, clipping flags, a thumbnail and an evidence id.
measure · decodeMeasurements and bus decodes on a capture.
watchArms on an edge, a glitch or a decoded frame, and notifies when it happens.
generateDrives the generator, inside limits a person has set.
run_suiteRuns the connected board's own test list against its description.

A built-in MCP server (Model Context Protocol) serves these calls; the same calls work as JSON over HTTP and WebSocket, and SCPI stays for existing tools. We are prototyping the same agent interface on the phase 1 scopes first.

CardTarget
General acquisition4 channels; 1 GS/s 8-bit on 1 channel (250 MS/s on 4), 640 MS/s 12-bit; 350 MHz
High speed2 × 5.2 GS/s or 1 × 10.4 GS/s, 12-bit; 3 GHz at 50 Ω
Link probe4 transceiver lanes, 0.5 to 10.3 Gb/s: lock, 2-D eye scan, bit-error rate
Bring-upA keyed board port: JTAG, console, logic, two supplies, a generator behind a physical switch

Safety lives in hardware. A physical generator-output switch means an agent cannot drive a circuit until a person turns it on. Updates are signed, FPGA images are signed and checked before they load, and nothing listens without a token.

Every figure in this section is a design target until a measurement replaces it.

CH4Tell us what you want

Phase 3's spec and price come from you. We would like to hear:

  • Which scopes you would want NovaOS on next.
  • What you miss most on your scope's stock software.
  • Which decoders, analysis and agent features matter to you.
  • What you would pay for the instrument in phase 3, and which cards you would want.

Email [email protected].