azonenberg changed the topic of #scopehal to: libscopehal, libscopeprotocols, and glscopeclient development and testing | https://github.com/azonenberg/scopehal-apps, https://github.com/azonenberg/scopehal, https://github.com/azonenberg/scopehal-docs | Logs: https://freenode.irclog.whitequark.org/scopehal
<azonenberg> And they already have i2c on the connector to the platform from the amp etc
<azonenberg> Bird|otherbox: any updates on the static analysis stuff during the week? I've been going through gradually fixing errors
<azonenberg> there have been a lot of little performance suggestsions as well as a few "OK now but could be iffy if things changed" like default copy constructors on classes that should have been noncopyable
<azonenberg> and one legitimate memory leak so far
<azonenberg> After lots of fixing i'm now about 18% of the way through a full build with analysis with no errors
<Bird|otherbox> azonenberg: still trying to figure out how to get ccc-analyzer to dump the command line it passes to gcc *sigh*
<azonenberg> other than that one you're working on
<monochroma> Bird|otherbox: i have temporarily modified files to replace toolchain binaries with scripts that log the environment and argumented, and then pass those to the real binary in the past
<monochroma> arguments*
<Bird|otherbox> yeah, I'm hoping there's a better-supported way than having to inject stuff into the toolchain like that though
juli966 has quit [Ping timeout: 246 seconds]
juli966 has joined #scopehal
juli966 has quit [Quit: Nettalk6 - www.ntalk.de]
Nero_ has joined #scopehal
NeroTHz has quit [Ping timeout: 272 seconds]
Degi has quit [Ping timeout: 240 seconds]
Degi has joined #scopehal
<_whitenotifier-f> [scopehal-apps] azonenberg opened issue #237: cppcheck false positives due to LogFatal not being parsed as noreturn - https://git.io/JTn6O
<_whitenotifier-f> [scopehal-apps] azonenberg labeled issue #237: cppcheck false positives due to LogFatal not being parsed as noreturn - https://git.io/JTn6O
<azonenberg> Bird|otherbox: in case you wanted more static analysis excitement to work on, lol
<azonenberg> if not, i'll poke at it myself when i get a chance
<azonenberg> first step is gonna be fixing the easy stuff though
<azonenberg> $ git status | wc -l
<azonenberg> 188
<azonenberg> this is going to be a big diff. but i'm making tiny changes like changing string to const string& arguments across zililons of files
<azonenberg> not really a good way to break it up into multiple commits
<Bird|otherbox> yeah, I know the pain man
<Bird|otherbox> I think I have a bead on why cppcheck is false-positiving on LogFatal btw
<azonenberg> this was definitely a good idea though
<azonenberg> and oh?
<azonenberg> great
<azonenberg> i have a noreturn declaration but it might not be formatted in a syntax cppcheck understands
<azonenberg> well if you can fix that easily then go for it
<azonenberg> Sorry to turn you into the build system guru, lol, but you seem to be good at it
<azonenberg> If you want to work on another area of the project let me know, there's plenty of stuff to be done
Pretzel4Life has quit [Ping timeout: 265 seconds]
Pretzel4Ever has joined #scopehal
electronic_eel has quit [Ping timeout: 260 seconds]
electronic_eel has joined #scopehal
<_whitenotifier-f> [scopehal-apps] azonenberg pushed 1 commit to master [+0/-2/±1] https://git.io/JTn7q
<_whitenotifier-f> [scopehal-apps] azonenberg 8878adc - cppcheck now runs in C++ 11 mode, rather than suggesting improvements using C++ 20 features not available on older-but-still-supported platforms like Debian. Removed old ibistest prototype
<_whitenotifier-f> [scopehal] azonenberg pushed 1 commit to master [+0/-0/±179] https://git.io/JTn78
<_whitenotifier-f> [scopehal] azonenberg 7a81e35 - Lots of small fixes found by cppcheck. Mostly adding missing =delete copy constructors/assignment operators on noncopyable classes, and passing constant strings as references.
<azonenberg> Bird|otherbox: i spent way too much time fixing if(str.find("foo") == 0) to if(str.starts_with("foo")) before trying to compile
<azonenberg> at which point i realized
<azonenberg> a) that is a c++ 20 feature
<azonenberg> and b) debian stable's gcc 8.3 does not support C++ 20
<azonenberg> I think we could go to c++ 17 if we wanted to and had a good reason, but i have no immediate plans to do that
<azonenberg> Once all supported platforms have c++ 20 support, starts_with alone is probably enough of a reason to migrate to that
<azonenberg> but until then i think we'll be sticking with 11 unless someone has a good reason to switch to 17
_whitelogger has joined #scopehal
<azonenberg> lain, monochroma, Kliment: wish me luck...
<azonenberg> I just took apart my 1.5 GHz active probe (ZS1500)
<azonenberg> Took some photos
<azonenberg> Going to try and power it up on the bench, sans scope, and put it on the VNA
<monochroma> :O
<monochroma> good luck!
<lain> がんばって!
<azonenberg> ok, step one done
<azonenberg> it powers up and didnt let out any magic smoke
<azonenberg> about 90 mA load on both +12v and -12V
<azonenberg> so far got a bunch of scope screenshots
<azonenberg> it seems to have not super flat response :p
<azonenberg> i think they correct in post
<monochroma> :o
<azonenberg> going to compare the scope with the "naked" probe and with it propelry detected and assembled on the same test signal
<azonenberg> First step is vna measurements though
<monochroma> :D
<azonenberg> interesting, it seems like it's actually closer to a 1 GHz probe than a 1.5 on my VNA
<azonenberg> It's flatter than the TA061 for sure :P
<azonenberg> yeah i measure -8 dB of insertion loss at 1.5 GHz
<azonenberg> interesting observation: the probe gets unhappy if you don't have a 50 ohm load on the output
<azonenberg> it draws about double the usual current and puts out -8V into a high impedance load
<azonenberg> But if you put a 50 ohm load across the output the offset is a mere -113.59 mV
<azonenberg> Speaking of which, do you know how hard it is to get a multimeter to measure a coaxial signal across a 50 ohm load? :p
<azonenberg> I had to use a SMA-to-banana adapter
<azonenberg> then a SMA tee with a F-F adapter coming off one port to a terminator
<azonenberg> then a SMA cable to a SMA-BNC adapter
<azonenberg> which finally went to the DUT
* Kliment is reminded of the contraption for measuring flex antennae on a VNA
<azonenberg> So, at this point i think the tricky part is done, Only thing left is to see if i can sniff the i2c
<azonenberg> i wonder if i can do an acquisition on the same scope
<Kliment> SMA to u.fl, custom board with u.fl to flex
<azonenberg> or if it will halt the trigger or something during the i2c transactions
<Kliment> and same board with 50 ohm load for calibration
<Kliment> and for the "short" calibration I just short it out with tweezers
<_whitenotifier-f> [scopehal] azonenberg pushed 2 commits to master [+0/-0/±2] https://git.io/JTctB
<_whitenotifier-f> [scopehal] azonenberg ce1a2ed - ClockRecoveryFilter: removed dead profiling code
<_whitenotifier-f> [scopehal] azonenberg 61b51ec - ClockRecoveryFilter: fixed memory leak in error handling. Thanks cppcheck!
<azonenberg> lain, monochroma: https://www.antikernel.net/temp/zs1500-s21.png
<azonenberg> it's nice and smooth and flat, slow rolloff. until about 1 GHz then it tanks
<monochroma> and that's supposed to be a 1.5GHz probe?
<azonenberg> Yes
<azonenberg> The VNA says otherwise
<monochroma> i call shannagains
<azonenberg> interestingly the datasheet just says bandwidth, no specs for rise time or flatness or anything else
<azonenberg> conjecture: if you had the siggen right into the probe body it's 1.5 GHz
<azonenberg> and what we're seeing is ground inductance
<azonenberg> i did all this testing with the leaf which is the lowest inductance ground option though
<azonenberg> so this is real world best case bandwidth i think
<azonenberg> you cant tell me there is a better way to ground this probe
<azonenberg> VNA right into the fixture, and then a BNC-to-SMA port on the output of the amplifier going into the other VNA port
<azonenberg> The one thing i might want to re-test at some point is changing the DC bias of the VNA and see if that makes a difference
<azonenberg> the probe appeared to act strange if you didnt have a 50 ohm *DC* load on the output
<azonenberg> and the VNA inputs have a 300 kHz ac coupling with bias tee
<azonenberg> so at some point i'd like to try figuring out a way to put a 50 ohm resistance across the bias tee (nontrivial because it's a SMB connector which i have nothing to mate with)
<azonenberg> and see if i get any different results
<azonenberg> I plan to go ahead with the review as is and state this as a potential source of error in the writeup
<azonenberg> then possibly amend in the future if i repeat the experiment
<azonenberg> Rise time connected to the scope was 269 ps though, which is what you'd expect from ~1.3 GHz bandwidth
<azonenberg> So if the DC bias has an impact it's not huge
<monochroma> azonenberg: this is the same interface that's on my scopes right?
<monochroma> connector*
<azonenberg> what, the bias tee? no, prolink is BMA
<azonenberg> not SMB
<azonenberg> i mix them up too
<monochroma> okay, yeah i was making sure you knew those were BMA
<monochroma> mouser had some nice BMA adaptors
<azonenberg> Yeah the VNA has SMB for the bias tees and N for the actual signal inputs
<azonenberg> So if i have a 50 ohm terminator across the SMB on port 2 i can give the probe the DC load it expects
<azonenberg> my fear is that some of this frequency response is the amplifier railing or something
<azonenberg> But looking at time domain plots between the two tests they look quite similar
<azonenberg> so i don't *think* this is the case
<azonenberg> oh nvm forget what said
<azonenberg> the time domain plots were both into the scope with 50 ohm loads, just one open on the bench and one put together
<azonenberg> the VNA had dc blocking internally
<azonenberg> So i dont know what the time domain waveform looked like there
<electronic_eel> maybe time to change the time unit of scopehal to zeptoseconds? https://www.goethe-university-frankfurt.de/93203693/Zeptoseconds__New_world_record_in_short_time_measurement?locale=en
<azonenberg> lol
<azonenberg> I think fs would be more than enough
<azonenberg> but i am seriously considering ps -> fs
<azonenberg> some higher scope sample rates don't divide cleanly into ps
<azonenberg> 80 Gsps = 12.5 ps for example
<electronic_eel> ah, ok, clean dividing can become an issue
<azonenberg> it would be a significant refactoring though, since all drivers and a bunch of math filters would need to be updated and we'd have to be sure we didn't miss anything
<azonenberg> We'd also have to do a file format version bump, since i don't want to lose my test data acquired with current scopehal
<azonenberg> i dont know if there is a version field in the scopesession yet but if not i guess we can say no version = version 0
<azonenberg> anyway, it's planned but a long ways out from happening
<electronic_eel> yeah, the zeptosecond scope on your bench is also a way out unfortunately
<azonenberg> lol
<azonenberg> That too
<azonenberg> monochroma: also, the perfectionist in me isn't willing to do the review with any doubts about data quality
<azonenberg> i'm going to redo the measurements soon
<azonenberg> I just realized something
<azonenberg> my nearfield EMC probes are SMB and i think the right gender
<azonenberg> and i have a SMB-to-SMA cable that came with them
<azonenberg> if i put a terminator on the other end with a SMA M-M coupler, i can do a 50 ohm SMB load
<azonenberg> it will be hanging off a foot or two of coax but it's on the DC side of a bias tee
_whitelogger has joined #scopehal
<azonenberg> and actually... there is a little "magic"
<electronic_eel> monochroma: you asked wrong. it is "did you put an x-ray on your ebay searchlist"
<azonenberg> because i believe the baseline tetris does not have offset control
* azonenberg double checks
<azonenberg> Yeah. i'm seeing nothing about that
<azonenberg> i think lecroy added the offset feature
<azonenberg> there was probably a bias trimpot to correct for the zero in the baseline design
<azonenberg> and then lecroy put a dac there instead
<electronic_eel> ok, so a little magic with the additional dac. so definitely worth doing
<azonenberg> also it pulls ~90 mA @ +12 and -12V with the output floating or high-Z
<azonenberg> and the output has about a -8 to -7.8 volt DC bias (seems to slowly drift downward as you leave it on longer, it's not stable)
<azonenberg> unsure if oscillating or just a huge bias
<azonenberg> if you apply a 50 ohm load to the output, power consumption drops to 40 mA
<azonenberg> and the output with the probe tip shorted to ground is -113.59 mV DC offset
<azonenberg> interestingly i do not see that offset when i plug the probe in with the full probus interface, rather than plugging in BNC only with the probe powered by a bench supply
<azonenberg> So i suspect the eeprom has a cal coefficient stored in it to remove that dc bias
<azonenberg> either in postprocessing, or by loading an offset correction into the DAC
<azonenberg> unfortunately it's nontrivial for me to sniff the probus
<azonenberg> it appears that the scope UI freezes momentarily when you mate a probe as it reads the ID and it doesnt trigger during that time usually. I got it to happen once but didnt have glscopeclient connected to download the waveform
<azonenberg> And i can't plug it into my other scope because it's just a little bit too far away for a probe from the first one to reach
<Degi> Hmh
<azonenberg> so i'd need to unrack it
<Degi> The 8 V could be from a current mode drivfer?
<azonenberg> Degi: I dont know. it's the kind of thing i would expect from an RF amplifier biased at the output or something
<azonenberg> except this goes down to DC so it's not that
<electronic_eel> it's just i2c, right? use the el cheapo logic analyzer instead?
<azonenberg> electronic_eel: the one i just bought and havent added a scopehal driver for yet?
<azonenberg> yes, that was actually my plan
<azonenberg> i have to write said driver first
<azonenberg> now i have an excuse
<electronic_eel> yes, that one. or any other la you have around
<azonenberg> I have nothing else
<azonenberg> just the two lecroy scopes and the cheapo fx2 la
<electronic_eel> ok, so that one
<azonenberg> yes i could use sigrok but if i force myself to do it in scopehal now i have an excuse to write a driver
<azonenberg> So that's the plan
<azonenberg> but before i do more scopehal R&D work i'm also focusing on fixing a bazillion static analysis findings
<electronic_eel> IIRC sigrok has created their own firmware for them, maybe have a look at that
<azonenberg> so far two legit memory leaks and a bunch of relatively minor performance improvements
<azonenberg> that is my plan
<azonenberg> ship the sigrok firmware as a blob, write a libusb-to-socket host app, then use SCPISocketTransport to connect to that host
<Degi> I wonder if you add a second 50 ohm resistor to the output, whether the output voltage halves (in a voltage mode amplifier with a 50 ohm output, it would reduce to 0.666 of nominal)
<azonenberg> Degi: i can experiment once i get the bias tee load working
<azonenberg> i have zero visibility into what the actual probe tip amplifier module looks like as its all potted
<azonenberg> all i can see is the power supply area
<Degi> Hmh yes, the amp is in the potted tip...
<azonenberg> Yep
<azonenberg> anyway i'm off to get some sleep, the latest analysis run is 18% done with no errors
<Degi> I guess you don't have random stuff laying around that might be usable for an x-ray image?
<Degi> Good night!
<azonenberg> and my boss is coming over tomorrow to drop off some hardware for $dayjob
<azonenberg> and get a lab tour
<electronic_eel> oh, so you need to clean up
<azonenberg> Being asleep when he shows up is probably ill advised :p
<azonenberg> electronic_eel: no i did the tidying up already lol
<azonenberg> but he's coming in... something like 7 hours
<azonenberg> so i should sleep between now and then
<electronic_eel> yeah, so better get some sleep. have a good night!
juli966 has joined #scopehal
FFY00 has joined #scopehal
<azonenberg> Bird|otherbox: cppcheck keeps proving its value
<azonenberg> this latest round of fixes includes... two? memory leak fixes
<azonenberg> as well as a potential crash in the spi flash protocol decode if you are looking at a x1 spi data stream and encounter a quad read command
<_whitenotifier-f> [scopehal] azonenberg pushed 1 commit to master [+0/-0/±15] https://git.io/JTCLC
<_whitenotifier-f> [scopehal] azonenberg 43b611c - Lots of small fixes from cppcheck scans. Fixed two memory leaks, plus a potential segfault in SPIFlashDecoder if a quad read command is seen without a valid quad data stream.
<_whitenotifier-f> [scopehal-apps] azonenberg pushed 1 commit to master [+0/-0/±6] https://git.io/JTCL8
<_whitenotifier-f> [scopehal-apps] azonenberg 49268ff - Minor cleanup of issues found with static analysis. Suppressed some false positive warnings.
<_whitenotifier-f> [scopehal] azonenberg pushed 1 commit to master [+0/-0/±1] https://git.io/JTCt6
<_whitenotifier-f> [scopehal] azonenberg a0c5d43 - Fixed typo
<_whitenotifier-f> [scopehal-apps] azonenberg pushed 1 commit to master [+0/-0/±1] https://git.io/JTCtX
<_whitenotifier-f> [scopehal-apps] azonenberg affccb9 - Updated submodules
juli966 has quit [Quit: Nettalk6 - www.ntalk.de]
<electronic_eel> azonenberg: about the scophal interface to the el cheapo fx2 la. your plan is to write a separate program that talks usb to the fx2 and provides a ethernet socket for a scpi connection to scopehal, correct?
<electronic_eel> so in this kind of configuration the interface between the two programs is completely in your hand. the question i have is if scpi is really the best way to do this
<electronic_eel> how about something with a split control and data channel instead? something scpi like to control the interface and raw data on another socket
<azonenberg> electronic_eel: That had been the plan all along
<azonenberg> use this as a trial for the "scpi control plane plus push-based data" protocol i want to use for maxwell
<azonenberg> with any luck i can use the same driver for both
<azonenberg> or at least very similar code
<azonenberg> scpi is pretty industry standard so it makes sense to use for control plane where performance isnt critical. It's just dumb to put data in the same stream
<electronic_eel> exactly my thought
<azonenberg> sorry if i wasn't clear earlier. But yes, that was the intention
<electronic_eel> no worries, that is why I'm asking
<azonenberg> Shorter term i have a few other priorities
<azonenberg> Finishing up adding support for all of the trigger types (or as many as i can) on the tek mso6 before the guy wants it back
<azonenberg> maybe adding function generator support
<electronic_eel> in which direction do you want to open the connection? I'd prefer from scopehal, with a predefined list of port nos on the usb-bridge. to allow for easy ssh tunneling
<azonenberg> Yes. scopehal initiates all connections
<azonenberg> the tcp stack i will be using for maxwell doesnt even have client support
<azonenberg> it can't send a SYN
<azonenberg> but once the connection is open, triggers will be push based
<azonenberg> you subscribe to waveforms on the scpi interface then eac htrigger you get a header with timestamp and length info then a blob of data
<azonenberg> The other big thing i'm busy with right now is static analysis cleanup
<electronic_eel> ok. for the fx2 thing it will probably be a constant stream. but splitting it into virtual blocks shouldn't be an issue
<azonenberg> My plan is to support a 'dummy' trigger mode for continuous streaming mode
<azonenberg> but logically it will be triggered
<azonenberg> and i will also support downloading trgger commands to the server
<azonenberg> so i can experiment with e.g. a software i2c trigger
<electronic_eel> you mean send a complex trigger command to MAXWELL?
<electronic_eel> maybe built out of logic primitives you prepared for such stuff in the gateware?
<azonenberg> Did you not see the design i came up with for maxwell's trigger arch?
<azonenberg> i havent figured out the details yet but the first stage is pretty worked out and even tested in sim / compiled and verified for timing iirc
<electronic_eel> either I didn't see it or I forgot it
<azonenberg> So the basic idea is, we have the 92 probe inputs (the serdes ones are special and for now wont be trigger capable
<azonenberg> so we have a bunch of 92:1 muxes to select inputs to each trigger block
<azonenberg> The first type of trigger block is a Serial Pattern Matching Engine or SPME for short
<azonenberg> It takes in one channel as a reset/sync line, one as a clock, and one as data
<azonenberg> clocks data into an 8, 16, or 32 bit register (there are gonna be a few of different widths)
<azonenberg> each time a new word of data is available, it's compared to four constant values and a boolean match flag is generated
<electronic_eel> can you provide a virtual clock line to it? like something out of a pll inside maxwell? to cover protocols that don't have a dedicated clock signal
<azonenberg> the implementation is a little complicated as it has to be pipelined/unrolled, the input is running much faster than the SPME can clock so it has to take input from an ISERDES and handle 4 bits at once and output a 4-bit match position flag, etc
<azonenberg> but thats the gist of it. And this isn't the only primitive i plan to implement
<azonenberg> this is targeting spi-esque protocols
<azonenberg> clock can be rising, falling, or double rate and reset polarity is programmable too
<azonenberg> Second type is the Parallel Pattern Matching Engine or PPME, which takes in 8 bits of data, a clock, and compares to a couple of 8-bit constants
<azonenberg> there will eventually be some other types too, details TBD
<azonenberg> all of the comparison targets are ternary so you can have 1, 0, or dontcare
<azonenberg> all of the match flags feed into a not-yet-designed state machine block
<azonenberg> Which ultimately outputs a trigger pulse
<electronic_eel> too bad that yosys/nextpnr don't properly work for xilinx yet, otherwise you could just create the direct gateware for the trigger on the fly
<azonenberg> PR is still going to be a big issue though
<azonenberg> i dont want to burn an entire clock region on it
<azonenberg> you have granularity issues with PR on xilinx arches
<azonenberg> So my plan is to create a coarse grained architecture specifically for triggering that has programmability at particular blocks
<azonenberg> I expect that as an optimization at some point, various parts of these matching blocks will take advantage of programmable LUTs
<azonenberg> you can use a xilinx SRL32 as a 5-bit programmable lut and load contents on the fly through the shift register
<electronic_eel> right. if PR were the only issue, you could use a separate fpga just for the triggers and completely reconfigure it
<azonenberg> connectivity is static of course, but this can give you significant gains in logic density vs having a lut based comparator
<azonenberg> eh, no
<azonenberg> the bandwidth between the chips would need to be absurdly high. on the order of half a Tbps
<azonenberg> it wouldnt be practical to split
<electronic_eel> just double the input signals to both fpgas?
<azonenberg> you do realize you're talking almost a hundred LVDS pairs right?
<azonenberg> and either active buffers or RF splitters plus 6 dB of insertion loss for each one?
<electronic_eel> hmm, yeah. makes the board much more complex
<azonenberg> Like i said there were significant engineering considerations :)
<electronic_eel> is a theoretical thing anyway, as an open toolchain is still some way out and i don't know how fast it will be for xilinx
<electronic_eel> for ice40 and ecp5 it is really fast, so you wouldn't have any issues creating the gateware live. but the xilinx you have are much bigger & more complex devices
<electronic_eel> and you wouldn't want to wait half an hour until your trigger is synthezised...
<azonenberg> I was about to bring that up as the other issue
<azonenberg> So my plan is to create a "virtualized FPGA" specifically designed for triggering
<azonenberg> kinda like a greenpak
<azonenberg> where you have a bunch of coarse grained IP blocks specialized to your problem, some LUTs to glue it together, and a state machine block
<electronic_eel> I hope it will be a bit beefier than a greenpack though ;)
<azonenberg> Lol yes
<azonenberg> i'm targeting 4 or 8 bit datapaths per channel (deserialized) at 312.5 MHz for the trigger path
<azonenberg> so 1.25 or 2.5 Gsps
<azonenberg> meanwhile the capture-to-memory path will hopefully be able to run at 5 Gsps, 312.5 MHz @ 16 bits, if i can get a RLE compressor to run that fast
<azonenberg> the ISERDES can do it, it's a question of if the FPGA can process the data fast enough in order to shoehorn ~0.5 Tbps of raw sample data - plus address/refresh overhead - into ~100 Gbps of DDR write bandwidth
<azonenberg> even at 1.25 Gsps compression is a must if all channels are active
<electronic_eel> problem with compression is that the data can get larger than the original, e.g. if you have a clock that toggles every other cycle and you use pure RLE on it
<azonenberg> Correct
<azonenberg> There's a couple of things I'm going to do about that
<azonenberg> the first is, although i am sampling the input at 5 Gsps the max specified toggle rate will be 1.25 Gbps. That's the fastest data i could realistically oversample and do CDR on
<azonenberg> Anything faster is undefined behavior
<electronic_eel> ;)
<azonenberg> Second, the RLE isn't going straight into the DDR
<azonenberg> The plan is to have samples coming off the ISERDES, maybe a tiny LUTRAM FIFO, then into the RLE engine, then into a block RAM based FIFO per channel or small group of 2/4/8 channels, exact architecture TBD
<azonenberg> then the write logic will pull samples out of those FIFOs and shuffle them into DRAM
<azonenberg> More-full FIFOs will be prioritized
<azonenberg> The BRAM FIFOs are intended to cover both refresh cycles and bursts of poorly compressing data
<azonenberg> And the assumption is that even if some channels like clocks compress poorly, others like enable/reset lines will compress extremely well
<electronic_eel> ok, so you can survive a short burst on one channel without data loss
<azonenberg> Not just one channel, i intend to allow you to sustain worst case overhead on some specified fraction of the channels without exceeding available bandwidth
<azonenberg> But if you feed a 1.25 Gbps PRBS-31 into all 92 channels at once, yes you will run out of buffer space
<electronic_eel> maybe have some logic detect that one channel compresses badly and switch off compression for some time?
<azonenberg> the plan is not to *lose* data per se, if the fifos fill up it will simply stop the acquisition
<azonenberg> your waveform will be truncated but everything up to that point will be correct
<azonenberg> but again the intent is to make it so that the bandwidth from any one fifo to dram is adequate to sustain worst case expansion of the RLE
<azonenberg> the only way you can run into problems is if you have more than say 2/3 of the channels active and they all compress badly
<azonenberg> I think that's an extremely improbable scenario, although i will document it as a possibility
<azonenberg> and you can still use the LA in that case, you're just limited to the block ram buffer capacity
<azonenberg> since the BRAM does have the bandwidth to sustain the full sample rate
<electronic_eel> I'm sure other LAs on the market have similar restrictions, maybe not documented that explicit though
<azonenberg> Yes, i know at least one Tek that says you can only use full sample rate on half the channels
<azonenberg> they likely do not compress to RAM so the bandwidth limit is an on/off deal
<azonenberg> in my case i'm compressing the ram so it's data pattern dependent
<azonenberg> although there are going to be channel count/sample rate conditions below which i can say yes, for all possible data you have enough bandwidth
<azonenberg> above there it's pattern dependent
<electronic_eel> will be fun to develop all this. do you have some pattern generator that can do 92 channels at once at these speeds?
<azonenberg> Nope :)
<azonenberg> Gonna rely heavily on sim for it i suspect
<azonenberg> so far i have the SPME and PPME mostly tested in sim but none of the rest
<electronic_eel> the curse of building your own test gear
<azonenberg> i fully expect maxwell firmware dev to be a 6+ month project
<azonenberg> the 40G capable TCP offload engine will probably be at least a month by itself
<azonenberg> my current 1G one (that didn't quite fully get finished, it worked for IP and UDP but i never did TCP retransmits etc) needs a complete rewrite with deeper pipelines and a 128 bit datapath
<electronic_eel> retransmit buffers capable of 40G will be fun
<electronic_eel> will they go into DDR or BRAM?
<electronic_eel> or do you recompute the packets?
<azonenberg> I will definitely use the DDR for that in this board. but the plan is to have an abstract "transmit buffer interface" that hides the details of this
<azonenberg> My plan is to optimize for the common case of no packet loss
<azonenberg> as long as i can recover from a dropped packet it's OK if it's slow
<electronic_eel> yeah, i think that makes sense. but having to copy over the packet to DDR will break the burst needed for reading/writing sample data
<azonenberg> Correct. My plan is actually to do things a bit differently
<azonenberg> i won't be copying the packet to ddr
<azonenberg> I'm going to pull data out of ddr, generate a tcp segment around it, send that out to the wire
<azonenberg> and then hopefully just mark that buffer as free once i get the ack
<azonenberg> so with any luck a given chunk of waveform data is written once and read once
<electronic_eel> ok, that is what i meant with "recompute the packets"
<azonenberg> The read will use bandwidth that competes with waveform capture, but i don't see a way around that
<azonenberg> not unless i moved to QDR-II+ but that would come at a huge cost in buffer capacity
<azonenberg> the "proper" solution would be multi-channel DDR but that means a bigger fpga with more pins and more pcb layers
<electronic_eel> is QDR-II+ some kind of dual port ram?
<azonenberg> More importantly, it would mean a bigger fpga not supported by webpack ,or moving to ultrascale
<azonenberg> both would be a multi thousand dollar increase in project budget
<azonenberg> QDR-II+ is true dual port SRAM, yes. DDR bus on both read and write ports, generally 36 bits wide
<azonenberg> one single rate address bus taking turns issuing bursts of 4 words to the read and write port
<azonenberg> i plan to use it on the ethernet switch as a packet buffer
<azonenberg> but you're talking $1 or more per MB of buffer
<electronic_eel> but SRAM sounds like you don't get the sizes/density you are used to with DRAM
<azonenberg> Correct. for MAXWELL density was more important. I figure MOST of the time, i won't be using all 96 channels and if i am, it's likely not going to be all with super fast signals
<azonenberg> ultimately i started with the width of a 19" chassis and the pin count of an xc7k160t and shoved as much as i could in it
<azonenberg> and i get whatever performance i get
<electronic_eel> 32 GByte at $1 per MB...
<azonenberg> the 160t is a sweet spot for price/performance that made sense to target here. same reason i'm using it in the switch
<azonenberg> lain, Kliment, electronic_eel: so i just re-tested the ZS1500 with the 50 ohm DC loading on th ebias tee
<azonenberg> it performed slightly better, -3 dB at 1.21 GHz vs 1.07
<electronic_eel> now you just need to find a magic bullet to use as gnd wire to get it up to 1.5...
<azonenberg> lolol
<azonenberg> well, no - i tested it under realistic conditions
<azonenberg> this is how it would be used with the scope
<azonenberg> i'm gonna quote performance as i see it, if someone has problems with my methodology i'm publishing photos of the test setup and the measured s-parameters
<azonenberg> so i welcome anyone pointing out flaws :p
<electronic_eel> so you don't put a probe into a custom designed fixture holding it directly on your siggen to use it in the field?
<azonenberg> lol
<electronic_eel> jokes aside, I think using the gnd leaf is the right way to get realistic results
<azonenberg> more to the point, i'm testing these commercial probes on the same fixture, using the same test methodology, as I evaluate the AKL-PT1
<electronic_eel> no 1.5GHz
<azonenberg> Nope
<electronic_eel> do you want to put these pictures in the review article? I'd remove the one unused red clip cable
<azonenberg> I can't, they're taped together in pairs
<azonenberg> that's the other half of that channel but it's jumpered at the PSU to put them in series with a virtual ground
<electronic_eel> don't you have single cables?
<azonenberg> i mean i could have untaped it
<azonenberg> but no
<azonenberg> all of my power cables are taped together in color-coded pairs
<azonenberg> so i can tell which psu channel they're on
<electronic_eel> I often need pairs, but also singles are often needed to wire in a current meter or something
<azonenberg> no that's quite rare for me
<azonenberg> since i have 0.1 mA resolution in the current readback on the psu itself
<azonenberg> this is a rohde & schwarz psu, not a cheap ebay one :p
<electronic_eel> yeah, my psu has 0.1mA too, this is really handy
<electronic_eel> wouldn't want a psu without it now that I'm used to it
<azonenberg> Yeah
<azonenberg> i mean it's also a $1200 psu
<azonenberg> but it's SUPER nice. has features i've never even used yet
<electronic_eel> mine is a TTI, a bit cheaper than that
<azonenberg> like the ability to program custom i/v curves
<electronic_eel> I think mine can do that too, but I never used it too
<azonenberg> one that i use all the time is overcurrent shutdown
<azonenberg> it supports constant current mode of course, but with non-ohmic loads like SMPSes it makes more sense to shut down if they go over the limit
<azonenberg> you can even program in an inrush period where it current limits
<azonenberg> then shuts down if it goes over the limit after that
<electronic_eel> yeah, the OCP is quite nice. mine doesn't have the inrush thing, so you have to go a bit beyond the final current draw
<azonenberg> mine will also log CSV to a front panel thumbdrive
<azonenberg> not something i use super often but its convenient at time
<azonenberg> times*
<electronic_eel> in the future this is something I hope to get from scopehal for mine
<azonenberg> scopehal already has support for my R&S PSUs in the library
<azonenberg> there just isnt a proper ui yet
<azonenberg> there's the psuclient app in scopehal-apps but its incomplete
<azonenberg> if somebody wants to give it some love, it will be more than welcome. i think that makes sense to be separate from glscopeclient
<electronic_eel> they have lxi and the scpi is well documented, so a driver shouldn't be that much of an issue
<electronic_eel> but I think I should take a look at adding support for my rigol first
<electronic_eel> but I'll also need to do some firmware work for the next revision of Glasgow
<miek> which tti do you have?
<electronic_eel> we added current measurement, but don't have support for the new ic in the firmware yet
<electronic_eel> miek: QL564P
<electronic_eel> there are two generations of these available, the older ones just have usb and gpib, the newer ones also ethernet
<electronic_eel> so if you buy these on ebay, make sure you get a newer one or a deep discount
<miek> ah nice. i've got the same but without the remote control unfortunately
<electronic_eel> the control board is the same for both, there is just an extra comms board for the P version
<electronic_eel> maybe you could take a look at the internal interface and hack together your own comms board?
<electronic_eel> they are built nicely modular internally, so I think this should be possible
<miek> yeah, that would be cool. if you ever get a chance to tear yours down, please send photos :)
<electronic_eel> do you have the service manual?
<electronic_eel> I asked nicely at TTI and they sent it to me
<electronic_eel> there are board layout graphics in them IIRC
<miek> i do not
<miek> ah, looks like it's on xdevs
<miek> oh cool, it just speaks serial to the main pcb
<_whitenotifier-f> [scopehal] azonenberg pushed 1 commit to master [+0/-0/±1] https://git.io/JTCMW
<_whitenotifier-f> [scopehal] azonenberg 0a7e15d - Minor cleanup to BytesToFrames()
<azonenberg> ok, data acquired, time to write the review of the zs1500 now
<miek> if you haven't already, it would be interesting to compare the vna s21 sweep to a sweep terminated into the scope
<azonenberg> what do you mean "a sweep terminated into the scope"
<azonenberg> i can do s11 easily enough
<azonenberg> s21 needs access to both ends of the probe
<miek> using the probe as normal with a scope, and recording amplitude vs frequency
<azonenberg> Oh
<miek> i'd be curious to see if it agrees with the VNA setup as a sanity check, or maybe to see if the scope does some de-embedding
<azonenberg> yeah i might do that at some point. i was planning to do that with the wavelink probe since that is not something i'm willing to crack open
<azonenberg> and i know for a fact they do some de-embedding there
<azonenberg> whether its full s-parameters or just attenuation vs frequency i dont know