sinara-hw / sinara

Sayma AMC/RTM issue tracker
Other
42 stars 7 forks source link

Urukul v1.0 detailed testing #354

Closed hartytp closed 6 years ago

hartytp commented 7 years ago

Use some fixed reference frequency for all tests, such as 80MHz.

a-shafir commented 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.

jordens commented 6 years ago

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.

Setup

low frequency limit

switch isolation

crosstalk

cross-channel intermodulation

Attenuator step from 20 to 60 digital (16+4dB switch glitch)

att_step_20-60 att_step_20-60_b

Attenuator step from 31 to 32 digital (major carry glitch)

att_step_31-32

Harmonics DC to 1 GHz, clock and ref leakage below RBW

harmonics_0-1g_10dbm

Harmonics 2 and 3 vs power

6dBm outputs, 3rd harmonic at -53dB harmonics_6dbm

10dBm outputs, 3rd harmonic at -25dB harmonics_10dbm

Close in spurs (1.2 kHz multiples, especially 11x)

narrow_sfdr_50k

PLL bump and 1 MHz spurs

pll_bump_5m

Phase noise 100 mHz to 10MHz

phase_noise_100m-10m

Phase noise 10 Hz to 10 MHz

phase_noise_10-10m

Phase noise 1 kHz to 1MHz

phase_noise_1k-1m

RF switch turn on transient

sw_on

Nyquist rejection 400 MHz to 600 MHz

nyquist_rejection_400m-600m

Nyquist rejection 450 MHz to 550 MHz

nyquist_rejection_450m-550m

gkasprow commented 6 years ago

@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.

jordens commented 6 years ago

Ack. We didn't find anything noticable on the rails. We'll do more prodding and poking.

gkasprow commented 6 years ago

@jordens I can have a look with spectrum analyzer or when necessary with SSA. Is ADI devkit sufficient to recreate this spur?

jordens commented 6 years ago

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.

gkasprow commented 6 years ago

No, I mean Urukul controlled by ADI devkit instead of the Artiq

jordens commented 6 years ago

I think you should see them on Urukul with your setup. I added the description of the setup to the post above.

a-shafir commented 6 years ago

@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.

jordens commented 6 years ago

@a-shafir the reference is clean. And that hypothesis is already excluded be the other observations.

jordens commented 6 years ago

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?

gkasprow commented 6 years ago

@jordens not yet. The University and my lab was closed during Xmass. I could not even cross the main gate. They open tomorrow.

jordens commented 6 years ago

Ack. That's fine!

jordens commented 6 years ago

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.

hartytp commented 6 years ago

@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?

jordens commented 6 years ago

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.

hartytp commented 6 years ago

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.

gkasprow commented 6 years ago

@jordens tomorrow I plan to spend full day on this issue.

gkasprow commented 6 years ago

@jordens I got such spectra on my setup tek00000

jordens commented 6 years ago

@gkasprow those are not the ones I am interested in. Look above for a description, photos and analysis of the ~kHz spurs.

gkasprow commented 6 years ago

above there are mainly setup windows :) tek00002

gkasprow commented 6 years ago

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

screen_0001

gkasprow commented 6 years ago

I removed L9 and it helped. So in next revision will add MOSFET switch.

gkasprow commented 6 years ago

screen_0002

jordens commented 6 years ago

Excellent, Greg. Yes. A mosfet would work.

gkasprow commented 6 years ago

@jordens do you want to control MLVDS receiver type via FPGA pin ?

jordens commented 6 years ago

Yes. If there is a pin available.

hartytp commented 6 years ago

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).

jordens commented 6 years ago

I still want those tests.

hartytp commented 6 years ago

Okay, sorry. Overly enthusiastic in my pruning.

jordens commented 6 years ago

No problem.

jordens commented 6 years ago

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.

image

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. image

hartytp commented 6 years ago

We took some data today using the AD9910 Urukul with a Wenzel oscillator source. Will upload tomorrow.

hartytp commented 6 years ago

Courtesy of @WeiDaZhang: Urukul AD9910 phase noise. Urukul Phase Noise Measurement - Ver1.0 w- XTAL Disabled.pdf

hartytp commented 6 years ago

Urukul noise performance basically matches the data sheet curve.

hartytp commented 6 years ago

Urukul Amplitude Modulation Noise Measurement - Ver1.0 w- XTAL Disabled.pdf

Uruku AM noise. cf

hartytp commented 6 years ago

Conclusions:

Other than that, all looks really good! Congratulations @gkasprow

hartytp commented 6 years ago

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.

jbqubit commented 6 years ago

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?

hartytp commented 6 years ago

Before I forget: @cjbe tested phase synchronisation with FPGA. All looks good!

jordens commented 6 years ago

Nice. @cjbe @hartytp with the FPGA driving SYNC? Or just among the DDS?

cjbe commented 6 years ago

@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.

jordens commented 6 years ago

Ok. Nice!

hartytp commented 6 years ago

(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?

jordens commented 6 years ago

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.

cjbe commented 6 years ago

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.

jordens commented 6 years ago

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.

hartytp commented 6 years ago

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!

jordens commented 6 years ago

The warmest chip is the clock fanout. With just convective cooling it is ~75C wenn flat on a table. flir0044

Pulled fresh out of a crate after thermalizing with convective cooling upright the DDS also get into the 70C. flir0033

hartytp commented 6 years ago

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?