Closed hartytp closed 6 years ago
@dhslichter there was only one more SMA cable in the lab and no 50R terminators at all. Any way the probes are OK to check how the driver controls.
The screenshots are crappy. tl;dr: All good. The only issue are phase noise spurs at -75dBc at ~1.2 kHz offset with many harmonics, especially x11. We didn't figure out where exactly they came from. The spur offset is surprisingly low. Their offset is temperautre dependent (increases with temperature). And coupling different parts of the PCB (by finger), especially around the underside near the clock fanout, makes them worse. That spur needs to be debugged.
6dBm outputs, 3rd harmonic at -53dB
10dBm outputs, 3rd harmonic at -25dB
@jordens such spur may be caused by PSU instability. Then 1.2kHz ripples caused by SMPS or LDO feedback loop may cause such spurs. So you can have a look with scope on critical power rails.
Ack. We didn't find anything noticable on the rails. We'll do more prodding and poking.
@jordens I can have a look with spectrum analyzer or when necessary with SSA. Is ADI devkit sufficient to recreate this spur?
I don't know. But I'd be surprised if you see them on the devkit. I'll give you details about the setup later.
No, I mean Urukul controlled by ADI devkit instead of the Artiq
I think you should see them on Urukul with your setup. I added the description of the setup to the post above.
@jordens what reference clock used for the test? KC705 output from the FPGA pll possible has the low freq modulation from the power or even fan. And the AD9910 pll most likely will unable to clean it.
@a-shafir the reference is clean. And that hypothesis is already excluded be the other observations.
AD9912 variant also works fine (https://github.com/m-labs/artiq/commit/a940550e4755f92c96408acfd560099e2e2ee3ed) @gkasprow did you get a chance to hunt for the 1.2 kHz spurs?
@jordens not yet. The University and my lab was closed during Xmass. I could not even cross the main gate. They open tomorrow.
Ack. That's fine!
The spur might be a beat due to the on board oscillator leaking through the mux (-61 dB isolation, 25 ppm spec, 1.2 kHz is 12 ppm). But the magnitude is still high: the capacitor population should have created much more isolation. The symptoms are otherwise fitting (maybe not the harmonics, though). @gkasprow if you get to testing this before I do, try with and without L9.
@jordens Based on those measurements are you happy to scrap the screening clips for the next revision? We could also DNP them, but scrapping them frees up quite a bit of space (and, anyway, AFAICT, there wasn't enough space on Urukul to do the screening properly anyway, so the current arrangement is a bit of a bodge!). Or, do you want to take measurements with the screening in place first to see if it actually makes a difference?
Why would you remove the clips now? The pending changes certainly don't need the additional space. And yes, I'd like to test and quantify the crosstalk in a rack with Urukul in proximity to other Urukuls, Kaslis, or DIOs pulsing 5 V into 50 Ohm.
Why would you remove the clips now?
No hurry for this, just came up now because I was reviewing my to do list for these boards.
My guess is that most of the screening we've added to the EEMs is unnecessary and can be removed at some point once we've finished testing, but there is no rush for that.
@jordens tomorrow I plan to spend full day on this issue.
@jordens I got such spectra on my setup
@gkasprow those are not the ones I am interested in. Look above for a description, photos and analysis of the ~kHz spurs.
above there are mainly setup windows :)
I brought a spectrum analyser (N9030A) with SSA function and got such plot. I confirm that the level of spurs gets increased by 20dB when I touch the clock chip
I removed L9 and it helped. So in next revision will add MOSFET switch.
Excellent, Greg. Yes. A mosfet would work.
@jordens do you want to control MLVDS receiver type via FPGA pin ?
Yes. If there is a pin available.
Closing since Urukul v1.1 has gone to manufacture, so I assume Urkul v1.0 testing is complete (reopen if I'm wrong about that).
I still want those tests.
Okay, sorry. Overly enthusiastic in my pruning.
No problem.
Another quick shot at verifying that the clock distribution with Kasli and Urukul fundamentally works (modulo the known issues). Instrument noise floor still at -130 dBc/Hz. I would expect flicker phase (0.9 GS/s, 24x PLL, 150 MHz carrier, L(1kHz)=-116 dBc/Hz) to be a bit better given the datasheet graph (1 GS/s, 20x PLL, 200 MHz carrier, L(1kHz)=-120 dBc/Hz). But this may also be a setup or Kasli issue as I measured L(1kHz)=-126 dBc/Hz for Urukul itself, 80 MHz carrier and 1 GHz/40x PLL previously which exactly matches the datasheet. This is between two arms of the ADCLK948.
Edit: The analysis was not properly rejecting common mode aperture jitter. This one is with fixed numerics: 83 MHz carrier, L(1kHz) = -125 dBc/Hz.
We took some data today using the AD9910 Urukul with a Wenzel oscillator source. Will upload tomorrow.
Courtesy of @WeiDaZhang: Urukul AD9910 phase noise. Urukul Phase Noise Measurement - Ver1.0 w- XTAL Disabled.pdf
Urukul noise performance basically matches the data sheet curve.
Conclusions:
Other than that, all looks really good! Congratulations @gkasprow
NB haven't bothered to check performance without the PLL. We may not quite hit the noise floor of the DDS in that case, but clearly there is no drastic problem.
Why did @WeiDaZhang switch to higher phase noise E4422B Ref vs Wenzel?
Looks like <5 dB deviation from Datasheet at single frequency. Nice job! Is it similar at other output frequencies?
Before I forget: @cjbe tested phase synchronisation with FPGA. All looks good!
Nice. @cjbe @hartytp with the FPGA driving SYNC? Or just among the DDS?
@jordens with FPGA driving sync. I tested synchronisation between channels on the same board and channels on different boards.
The DDS sync signal was generated by a TTLClkGen, and IO_UPDATE by a TTL SERDES output. I adjusted the sync input delay on each channel to sit in the centre of the eye - thus the SYNC_CLK of each DDS is aligned to better than 1 DDS clk period (=1ns @ 1GHz).
I choose an offset between IO_UPDATE and the sync TTLClkGen such that IO_UPDATE aligned roughly on the falling edge of the DDS SYNC_CLK. (I did not look at the CPLD timing report to work out if this would work with a fixed value over PVT).
I saw no synchronisation errors over ~10^10 IO_UPDATES, but I did see at least one SYNC_SMP_ERR from most of the AD9910 over this 10^10 events using the standard 300ps validation window - I have not looked to see if this happens with slightly smaller validation windows.
Ok. Nice!
(I did not look at the CPLD timing report to work out if this would work with a fixed value over PVT).
This still concerns me, and is something we need to look at. @jordens do you know how well constrained this timing is atm?
SYNC is not routed through the CPLD. That can't be related to SYNC_SMP_ERRs. How are you checking for IO_UPDATE synchronization errors? I don't know about the constraints there (other than the 7.7ns nominal propagation delay) and whether that's even specified.
There are two considerations here:
1) SYNC_SMP_ERRs: This is just due to the jitter of the FPGA generated SYNC relative to the AD9910 1GHz clock. I see a narrower eye using the FPGA generated SYNC vs the AD9910 sync (~6 taps = ~450ps for the FPGA generated clock). I am using a validation window of 300ps, so it is not surprising that at least 1 in 10^10 events closes the eye to <300ps, but may be fine for a validation window one tap smaller.
2) IO_UPDATE sync errors: I am setting CFR1 bit 11 so the phase resets on IO_UPDATE, I am then triggering a scope on a signal synchronous with IO_UPDATE, and looking at the RF phase relative to this trigger with a scope on persist. As the RTIO fine clock is 1ns, and the SYNC_CLK period is 4ns, there are 4 possible IO_UPDATE alignments. With one of these I see frequent phase alignment errors on the scope, but with the other 3 I have not seen any - I choose the best out of these three by looking at the IO_UPDATE timing at the AD9910.
My only worry is how large the PVT change in the 7.7ns propagation delay is - if it is larger than ~2ns (which is probably is) things are getting marginal (the IO_UPDATE setup/hold is 1.75ns/0ns). We could register IO_UPDATE on the DDS0_SYNC_CLK at the CPLD - from the CPLD datasheet it looks like the PVT on the clock input buffer and standard output buffer sum to ~0.9ns, so this may well work out.
That's what I thought. I don't think P is relevant for us (you'll have to tweak it anyway). And I don't think VT are more than 500 ps for our VT variability. Registering io update doesn't help AFAICT because (1) there is no way to delay the cpld output to meet sync clk s/h and (2) the s/h window on the cpld is unlikely to be significantly larger than the 2.25 ns of the DDS.
NB we have an IO_UPDATE return on EEM1 in the current design, so if we see any PVT issues with the phase synchronisation, we should be able to use that to calibrate the delays in the CPLD buffers. Given that, I no longer have any concerns about phase synchronisation with Urukul!
The warmest chip is the clock fanout. With just convective cooling it is ~75C wenn flat on a table.
Pulled fresh out of a crate after thermalizing with convective cooling upright the DDS also get into the 70C.
What do people think about maybe sprinkling a few cheap, low-profile SMT/THT heatsinks on Urukul (and maybe/other EEMs with significant power consumption) near the most power-hungry ICS?
Use some fixed reference frequency for all tests, such as 80MHz.