Urukul - cnourshargh/Bham-ARTIQ-examples GitHub Wiki
For official Urukul page, click here
Overview
Urukul is a 4 channel DDS based frequency synthesiser. It comes as one of 2 variations, either with an AD9910 or AD9912 DDS. My sinara device uses a AD9910 so the following will be in reference to that. It has a built in RAM in which sequences of amplitudes can be saved and run very quickly. We expected the same functionality for quickly ramping through frequencies however, we have not been able to implement this.
The Urukul board contains a CPLD (Complex Programmable Logic Device). This, and the Urukul channel, must be initialised separately before you can output to the channel. The code for initialising the CPLD can be found here in the official ARTIQ docs.
Specifications
The Urukul board has an analogue bandwidth of 400MHz. It can provide 0.25Hz frequency resolution in the range 1MHz to 400MHz. The maximum output signals are about 2Vpp.
Code Examples
Urukul_SingleOutput.py
Code demonstrating basic use of Urukul to output fixed frequency and amplitude waveform
- Sets frequency, amplitude, and channel attenuation as variables
- Switches channel on
- Writes amplitude and frequency to urukul
- Switches channel off
Urukul_GUI_Frequency_Input.py
Code demostrating basic use of management system for taking inputs from user, by allowing user to input frequency
- Takes frequency input (in MHz) in build and saves it as an attribute
- Sets amplitude and channel attenuation as variables
- Switches channel on
- Writes amplitude and frequency to urukul
- Switches channel off
Urukul_GUI_AmpAttFreqInput.py
Code demonstrating how to take multiple inputs from the user in a single experiment
- User inputs:
- Frequency (in MHz)
- Amplitude (as amplitude scale factor, so between 0 and 1)
- Attenuation (in dB, between 0 and 31.5)
- Pulse duration (in seconds)
- Sets above as attributes
- Writes attenuation to channel
- Switches Channel on
- Writes amplitude and frequency to urukul
- Waits specified duration
- Switches channel off
Urukul_RAM_Amplitude.py
Code demonstrating use of RAM on Urukul. We had hoped to be able to use RAM for frequency scans and it appeared that this was not possible so we only have code demonstrating an amplitude scan. The doccumentation for using RAM mode was limitted which is why the comments are not as clear as on some other code
- Produces list of amplitudes to be output
- Initialises CPLD and Urukul Channel
- Sets RAM Profile
- Writes to the CFR(control function register)
- Sets channel frequency and attenuation
- Switches channel on
- Loops following until manually broken
- In Parallel:
- Pulses TTL channel
- Starts ramping up through list
- In Parallel:
- Pulses TTL channel
- Starts ramping down through list
- In Parallel:
Schematics
For Urukul Schematics, click here
Content to be Looked into
- External clocking
- Urukul boards have an SMA connection for receiving an external clock however we did have not had time to properly look into this. It definitely requires a change to the device db but beyond that I'm not sure
- RAM Mode
- The AD9910 chip has a built in RAM which can be used to change outputs on an urukul channel with rapid succession. While we have been able to make this work for varying amplitudes on a fixed frequency signal, we have not been able to achieve fast frequency scans which was our main aim with RAM mode
- Phase control
- There are phase differences present between different Urukul channels. The phase different varies with the frequency being output. We have not had time to characterise the frequency dependence of the phase difference and therefore can't achieve phase control between Urukul channels