ThunderScope

A new type of oscilloscope that’s fast, flexible, and completely open

Crowdfunding now!

View Purchasing Options
Oct 10, 2024

Project update 6 of 6

An Introduction to ngscopeclient

by Andrew Z

Hi everyone!
Andrew here, lead developer of ngscopeclient, the universal T & M software suite. We’re excited to be partnering with the ThunderScope team to deliver a high performance, open source, cross platform, user interface you can use with your ThunderScope - or any of a multitude of other test equipment products from major vendors. Or both at once!

What’s Coming

Over on our side of the fence we’re all busy trying to get a solid v0.1 software release for all major platforms (Linux, Windows, MacOS) out the door by the end of 2024. There’s a lot of work left to do, ranging from commissioning icons for protocol decodes to fixing crashes to improving the discoverability of the user interface.

But if you’re feeling brave and don’t mind compiling a development build from source, you can play with it today! Grab the latest source code and follow the build instructions.

Do keep in mind that this is a development version so some breakage or difficulties are expected and documentation may be lagging behind the current state of the code. Our current timeline calls for a v0.1 feature freeze on December 1st, concentrating entirely on packaging, documentation, and bug fixing from then until the end of the year.

So What Can It Do?

A lot! We have protocol decodes for everything from RS232 to Ethernet and a wide variety of signal processing blocks that’s growing every day. You can connect these blocks in a filter graph view that should be very familiar to you if you’ve ever used Blender, GNU Radio, or a similar node-graph-based tool.

It’s also fast - the most numerically intense DSP blocks like FFT and FIR filters are implemented as Vulkan compute shaders so they run on your GPU rather than your CPU. The entire GUI is GPU accelerated too, so you can display massive waveforms with full intensity grading and not lose detail decimating them for display or have slow redraws when panning and zooming a deep capture.

The possibilities are limited only by your creativity and the capabilities of your hardware - ngscopeclient works with a huge variety of instruments from all major vendors, not just the ThunderScope. From low-cost, entry-level scopes to >10 GHz monsters, RF signal generators to optical spectrometers, odds are something in your lab already has a driver. If not, we’re always on the hunt for more sources of data to crunch and outputs to control!

Here’s a quick example of a two-instrument setup. I’m using my Siglent vector signal generator to create an FM modulated waveform, then cabling the output of the VSG into channel one of a ThunderScope. The acquired waveform is then displayed three different ways:

This is just the beginning, though; there’s so much more you can do.

A More Complex Setup

Sure, most entry-level scopes can do FFTs. But… can they decode Ethernet and TCP/IP? With ngscopeclient, you can! All you need is a handful of filter blocks from the library.

I hooked channel one of a ThunderScope to one leg of a 100BaseTX Ethernet pair. For this demo I used a fancy test fixture with coaxial outputs since I had one on my bench, but you could do the same job just as well by probing from TX+ or RX+ to ground at your magnetics.

The first filter block measures the average DC voltage of the input and subtracts it, essentially AC coupling it in software. This isn’t normally needed for mid-span probing (i.e., on the cable side of the magnetics, with DC bias from the PHY blocked), but I’m running a prototype that hasn’t gone through DC offset calibration yet so there’s a bit of a DC shift from the scope I needed to null out. This was the lazy way to get a demo working rather than wasting time calibrating a prototype I’d probably be ripping open and soldering to in the near future!

At this point, if you were taking a differential measurement, you could subtract the + and - sides of the pair to get a less noisy signal. For a single ended measurement this obviously isn’t needed.

Next, we use the clock recovery PLL block to lock to the 125 Mbps PHY signaling rate (there’s a 25% coding overhead due to the 4b5b, so the PHY datapath is clocked at 125 MHz to send 100 Mbps of data) and output a phase-shifted sampling clock with edges at the center of the data-valid window for each bit.

We then feed the analog waveform and recovered clock into an eye pattern block to display the signal quality, as well as the 100basetX protocol decoder to give us Ethernet frames.

Finally, the decoded Ethernet data is fed into the IPv4 decoder to pull out layer-3 packets.

Switching to the waveform view, we can see two separate views of the Ethernet link.

At top, we have the waveform view with a timeline of packets overlaid. You can manipulate protocol waveforms just like any other waveform - displaying them in the same plot as an analog waveform (which doesn’t have to be the one you decoded), moving them to separate plots, panning and zooming, etc.

At the bottom, we have the protocol analyzer display with a packet dump. You can scroll through this to find packets of interest, filter for packets matching certain criteria, click on a packet to jump to the relevant part of the waveform in the timeline, and more.

Zooming in on the beginning of a single packet, individual bytes and header fields are visible.

We have even more fun planned. There’s a WIP exporter for PCAPNG files that will be able to dump captured USB, CAN, or Ethernet packets to a file and do more complex decoding there. And (at least on Linux), you’ll even be able to stream the packet capture to a pipe, allowing Wireshark to get a live feed of packets every time your scope triggers. It may not be finished in time for the end-of-year v0.1 release, but it’s coming soon!

I Don’t Want to Wait!

If you have any of the gear on our supported model list, you can try it out today. Do keep in mind that the firmware in the overwhelming majority of scopes on the market today (almost everything in the under-$10K price range, and even some higher end models,) is not optimized for good PC streaming performance. So expect slow update rates, a handful of waveforms per second rather than the responsiveness you’re used to seeing from the scope front panel display, on hobbyist-class scopes.

And if don’t have any compatible gear, don’t despair! You can play with the built-in demo scope or import data in CSV, VCD, WAV, or a laundry list of other formats, then explore and manipulate the waveforms.


Sign up to receive future updates for ThunderScope.

ThunderScope is part of AMD FPGA Playground

Key Components

Artix™ 7 XC7A35T-2CSG325C · FPGA
maximum throughput data transfer

Subscribe to the Crowd Supply newsletter, highlighting the latest creators and projects