Hi Sebastien (cc'ing ARTIQ list for commentary/archival purposes), For the RTIO clocking, I'm currently planning to put a 2.5V LVDS clock on the USER_CLK_P/USER_CLK_N SMA connectors directly on the KC705 board (goes to an MRCC pair in I/O Bank 15, pins L25 and K25). This will come from an LTC6957-2 clock generation chip on a separate small board, which takes a reference sine wave and converts it to LVDS with very low added phase noise. We will use a phase-locked oscillator (PLO) referenced to the 10 MHz maser signal to generate the RTIO clock, and then an ultra-low-phase-noise multiplier will multiply this frequency by 24 to generate the DDS SYSCLK. In this way we can ensure that the DDS SYSCLK/SYNC_CLK and the RTIO clock are always reliably phase-locked to each other. Another option would be to use a PLO at the DDS SYSCLK frequency and then employ a 24x divider, which would give better phase noise performance at the RTIO clock frequency, but a) I don't think the PLO is the limit on the RTIO clock phase noise, and b) the divider system is more e xpensive and would require purchase orders.
For the Magtrap experiment, we will clock the RTIO core at 100 MHz and the DDS chips at 2.4 GHz -- this is optimal in terms of where the DDS spurs are located with respect to the Mg+ transition frequencies. For other experiments, people may use higher frequencies. Above 3 GHz we haven't been able to get the DDS clocks to sync reliably, though. This may work better with the FPGA-based syncing because even if the process is a bit random, you can just send individual SYNC pulses until the SYNC_CLK phase is as desired and then stop. The edge timing at the SYNC_IN pin is probably the main limitation there. For the DDS clocking, Raghu has done some experiments to see how long the DDS SYNC_CLKs maintain synchronization if they are not constantly receiving synchronization pulses (both at 2.5 GHz and 3 GHz SYSCLK), and it seems they have a tendency to lose lock with each other at around 1, 2, or 3 hours after synchronization. This is not a big deal necessarily, but it does mean that if we use the FPGA-based synchronization it will have to be a calibration experiment that gets repeated on a regular basis (or at least, the FPGA should be able to check for DDS synchronization before and after a given kernel runs and flag an error if the DDS lost sync during the experiment, and then run a resynchronization routine). The current DDS sync design I envision involves using one 3.3V LVCMOS line from the FPGA to send a synchronization signal, which will go to a 1:12 LVCMOS clock distribution chip on the FMC backplane. Unfortunately we cannot use LVDS because all the available I/O banks need to run at a 3.3V VCCO in order to talk to the interface logic of the DDS chips (e.g. the parallel bus etc). Using 2.5V LVCMOS to drive 3.3V inputs degrades our noise margin to basically zero, which given our desire for >100 MHz bus speeds doesn't seem like a sensible tradeoff. Putting level translators in will be a nightmare in terms of introducing skew and latency, especially for bidirectional signals. I don't think that using LVCMOS instead of LVDS will make a big difference, though, as the 3.3V LVCMOS rise times (based on IBIS) are ~300-400 ps, and I don't think we can do much better since we have to convert to 3.3 V LVCMOS in the end to talk to the DDS SYNC_IN pin. The clock distribution chip has a similar rise time spec. Each output from the clock distribution chip will be dedicated to one DDS. On the DDS cards themselves, there will be an analog switch which allows the clocking signal to be either passed through to the DDS SYNC_IN or blocked (SYNC_IN pulled low after the switch), depending on a DDS chip select signal. The same analog switch will use another channel to pass the DDS SYNC_CLK back to the FPGA for monitoring. It will also have two more channels that are connected together right next to the DDS, so that the FPGA can send pulses and measure a round-trip time from FPGA inputs to DDS and back for deskewing if needed. I would imagine that the board-to-board variations would be sufficiently small, though, that one could manually perform a calibration of the propagation delays for the setup with DDS clocks synced and then just give those numbers to the FPGA to use as offsets....then one wouldn't need to use a round-trip signal every time. I am making provision on the DDS cards themselves to do the hardware-only syncing using the SYNC_OUT/SYNC_IN method if preferred for some reason, so that can be a backup option. Let me know your thoughts! Best, Daniel _______________________________________________ ARTIQ mailing list https://ssl.serverraum.org/lists/listinfo/artiq