azonenberg changed the topic of #scopehal to: libscopehal, libscopeprotocols, and glscopeclient development and testing | https://github.com/glscopeclient/scopehal-apps | Logs: https://libera.irclog.whitequark.org/scopehal
Degi_ has joined #scopehal
Degi has quit [Ping timeout: 258 seconds]
Degi_ is now known as Degi
<azonenberg> PCIe gen3 on 13 GHz active differential probe (top eye), through an AKL-PT5 with cable de-embedded (middle eye), and AKL-PT5 with cable and probe de-embedded (bottom eye)
<azonenberg> Not super pretty but very much open enough to decode
<azonenberg> Have to start actually writing the decode stack next
<_whitenotifier-e> [scopehal] azonenberg pushed 1 commit to master [+0/-0/±1] https://github.com/glscopeclient/scopehal/compare/6adfa3874665...4291c7ba8dfd
<_whitenotifier-e> [scopehal] azonenberg 4291c7b - UpsampleFilter: don't SIGFPE if upsample factor is zero/invalid
<Degi> Hmh, does de-embedding make the signal worse in this case?
<azonenberg> no it opens the eye up a fair bit
<azonenberg> https://www.antikernel.net/temp/lock-bug.png well THIS is new
<azonenberg> CDR on 1.08 Gbps data looks all good for a while then goes haywire and - this is the weird part - achieves a new stable lock at some multiple of the input
<azonenberg> then about 2ms later, it makes another huge jump and, in the existing code on git, crashes or hangs because the period goes negative
<azonenberg> i.e. the error term exceeds the NCO period
<azonenberg> i added some error checks to abort the filter when this happens, just break out of the inner loop but keep all output generated up to that point
<azonenberg> and... this is a tricky problem to debug lol
<Degi> I mean the bottom eye with both deembedded looks smaller than the top eye with no deembedding
<Degi> Huh
<Degi> I find it interesting that the CDR frequency slowly increases, is it implemented as a filtered PLL or so?
<azonenberg> It's a bang-bang control loop
<azonenberg> but it scales the correction when running open loop due to lack of toggles in the input
<azonenberg> So it applies a fixed correction to every edge in a 1-0-1-0 pattern, ignoring the magnitude of the error term and considering only the sign
<azonenberg> but in a 1-1-0-0-1-1-0-0 pattern it applies twice the correction because the time of drift was twice as long
<azonenberg> again ignoring the magnitude of the error term