As promised: quick demo of ngscopeclient running CDR eye pattern on >800 Msps (2x 50M points @ 8.2 Hz) of live streaming waveform data on an RTX 2080 Ti.
https://www.youtube.com/watch?v=r6uPpITsyhQ
Saito Koji – Waveform Transmission
#alternative
I'm going to have to screen record this, I can't believe I got it working this well.
2x 50M point differential Ethernet waveform into subtract filter, CDR, and eye pattern.
Refreshing at 8.3 Hz. With just a little bit more optimization or faster hardware this will be real time.
Then I can start working on getting protocol decodes to run at full rate too.
So, tonight's goal is to continue with ngscopeclient performance work.
I started out by doubling the speed of the eye pattern *again* by moving index buffer calculation from CPU to GPU.
Next up is going to be getting the 100baseTX decoder to not be so slow. Right now of the 43 seconds of CPU time in the current 1-minute benchmark, 26.9 is spent sampling the MLT-3 waveform on rising edges of the recovered clock.
The thing is, we already *know* the sample values at the re…
Starting to look at some performance improvements for various scopehal filters as I begin the push for v0.2.
The benchmark dataset is P/N legs of 100baseTX Ethernet sampled at 500 Msps with a ThunderScope.
At 50M point memory depth, each waveform is 100 MB in size (2 channels * 8 bits * 500 Msps) and covers 100ms of real time.
The filter graph currently takes just shy of a second to run, meaning we're at 10% of real time. I want to improve on this.
Thinking about a potential performance improvement for overlapping compute and transfer operations in ngscopeclient.
Right now, if you use a ThunderScope (ignoring unified memory platforms where the issue is moot) when a new waveform shows up we write it into CPU side pinned memory.
Then we vkCopyBuffer it into local memory, barrier on that transfer, and run the ConvertNBitSamples shader to convert the raw adc codes to float32.
The problem is, this burns scratch buffer spac…
Put a random old M.2 SSD I had in a M.2 to mini-PCIe carrier board and attached it to the STM32MP2 devkit.
Didn't even have to do anything and a 100 MHz refclk (no spread spectrum, it looks pretty stable) magically appeared on the connector. I'm not sure which side is sourcing it (can an addin card generate REFCLK?) because I didn't do anything to configure PCIe on the host side yet.
Promising!
Initial experiments on a GPU-accelerated parallel CDR PLL filter.
Fundamentally, the problem is that a PLL is stateful so you can't process any given iteration of it without knowing the previous state. I'm trying to work around that by recognizing that the impulse response of the PLL loop filter tails off to effectively zero after a while, so we can truncate and samples older than that point will not materially affect the output.
What you see here is the first pass of wha…
Looking to have someone redraw the icon for the "coupler de-embed" filter in ngscopeclient as I'm not thrilled with the current one.
The big question is, what should it actually depict?
The filter performs directivity enhancement for a dual directional coupler. It takes in the measured forward and reverse waveforms, S-parameters of the coupler, and outputs new forward and reverse waveforms with (most of) the leakage removed.