1001 lines
41 KiB
TeX
1001 lines
41 KiB
TeX
\documentclass[10pt]{datasheet}
|
|
\usepackage{palatino}
|
|
\usepackage{textgreek}
|
|
\usepackage{minted}
|
|
\usepackage{tcolorbox}
|
|
\usepackage{etoolbox}
|
|
\BeforeBeginEnvironment{minted}{\begin{tcolorbox}[colback=white]}%
|
|
\AfterEndEnvironment{minted}{\end{tcolorbox}}%
|
|
|
|
\usepackage[justification=centering]{caption}
|
|
|
|
\usepackage[utf8]{inputenc}
|
|
\usepackage[english]{babel}
|
|
\usepackage[english]{isodate}
|
|
|
|
\usepackage{graphicx}
|
|
\usepackage{subfigure}
|
|
|
|
\usepackage{tikz}
|
|
\usepackage{pgfplots}
|
|
\usepackage{circuitikz}
|
|
\usepackage{pifont}
|
|
\usetikzlibrary{calc}
|
|
\usetikzlibrary{fit,backgrounds}
|
|
|
|
\title{4410/4412 Urukul}
|
|
\author{M-Labs Limited}
|
|
\date{November 2021}
|
|
\revision{Revision 1}
|
|
\companylogo{\includegraphics[height=0.73in]{artiq_sinara.pdf}}
|
|
|
|
\begin{document}
|
|
\maketitle
|
|
|
|
\section{Features}
|
|
|
|
\begin{itemize}
|
|
\item{4-channel 1GS/s DDS.}
|
|
\item{Output frequency ranges from \textless 1 to \textgreater 400 MHz.}
|
|
\item{Sub-Hz frequency resolution.}
|
|
\item{Controlled phase steps.}
|
|
\item{Accurate output amplitude control.}
|
|
\end{itemize}
|
|
|
|
\section{Applications}
|
|
|
|
\begin{itemize}
|
|
\item{Dynamic low-noise RF source.}
|
|
\item{Driving RF electrodes in ion traps.}
|
|
\item{Driving acousto-optic modulators.}
|
|
\item{Form a laser intensity servo with 5108 Sampler.}
|
|
\end{itemize}
|
|
|
|
\section{General Description}
|
|
The 4410/4412 Urukul card is a 4hp EEM module part of the ARTIQ Sinara family.
|
|
It adds frequency generation capabilities to carrier cards such as 1124 Kasli and 1125 Kasli-SoC.
|
|
|
|
It provides 4 channels of DDS at 1GS/s.
|
|
Output frequency from \textless 1 to \textgreater 400 MHz are supported.
|
|
The nominal maximum output power of each channel is 10dBm.
|
|
Each channel can be attenuated from 0 to -31.5 dB by a digital attenuator.
|
|
RF switches (1ns temporal resolution) on each channel provides 70 dB isolation.
|
|
4410 Urukul comes with AD9910 chips, while 4412 Urukul comes with AD9912 chips instead.
|
|
|
|
|
|
% Switch to next column
|
|
\vfill\break
|
|
|
|
\newcommand*{\MyLabel}[3][2cm]{\parbox{#1}{\centering #2 \\ #3}}
|
|
\newcommand*{\MymyLabel}[3][4cm]{\parbox{#1}{\centering #2 \\ #3}}
|
|
\newcommand{\repeatfootnote}[1]{\textsuperscript{\ref{#1}}}
|
|
|
|
\begin{figure}[h]
|
|
\centering
|
|
\scalebox{0.88}{
|
|
\begin{circuitikz}[european, scale=0.95, every label/.append style={align=center}]
|
|
|
|
\begin{scope}[]
|
|
|
|
% Node to pin-point the locations of SMA symbols
|
|
\draw[color=white, text=black] (-0.1, 0) node[twoportshape, circuitikz/bipoles/twoport/width=1.2, scale=0.4 ] (ext_clk) {};
|
|
\draw[color=white, text=black] (-0.1, -0.35) node[twoportshape, circuitikz/bipoles/twoport/width=1.2, scale=0.4 ] (mmcx) {};
|
|
\draw[color=white, text=black] (-0.1, -1.75) node[twoportshape, circuitikz/bipoles/twoport/width=1.2, scale=0.4 ] (rf0) {};
|
|
\draw[color=white, text=black] (-0.1, -2.45) node[twoportshape, circuitikz/bipoles/twoport/width=1.2, scale=0.4 ] (rf1) {};
|
|
\draw[color=white, text=black] (-0.1, -3.15) node[twoportshape, circuitikz/bipoles/twoport/width=1.2, scale=0.4 ] (rf2) {};
|
|
\draw[color=white, text=black] (-0.1, -3.85) node[twoportshape, circuitikz/bipoles/twoport/width=1.2, scale=0.4 ] (rf3) {};
|
|
|
|
% Labels for female EXT_CLK, MMCX, RF {0, 1, 2, 3}
|
|
\node [label=left:\tiny{EXT CLK}] at (0.35, 0) {};
|
|
\node [label=left:\tiny{MMCX}] at (0.35, -0.35) {};
|
|
\node [label=left:\tiny{RF 0}] at (0.35, -1.75) {};
|
|
\node [label=left:\tiny{RF 1}] at (0.35, -2.45) {};
|
|
\node [label=left:\tiny{RF 2}] at (0.35, -3.15) {};
|
|
\node [label=left:\tiny{RF 3}] at (0.35, -3.85) {};
|
|
|
|
% draw female EXT_CLK, MMCX, RF {0, 1, 2, 3}
|
|
\begin{scope}[scale=0.07 , rotate=-90, xshift=0cm, yshift=2cm]
|
|
\draw (0,0.65) -- (0,3);
|
|
\clip (-1.5,0) rectangle (1.5,1.5);
|
|
\draw (0,0) circle(1.5);
|
|
\clip (-0.8,0) rectangle (0.8,0.8);
|
|
\draw (0,0) circle(0.8);
|
|
\end{scope}
|
|
\begin{scope}[scale=0.07 , rotate=-90, xshift=5cm, yshift=2cm]
|
|
\draw (0,0.65) -- (0,3);
|
|
\clip (-1.5,0) rectangle (1.5,1.5);
|
|
\draw (0,0) circle(1.5);
|
|
\clip (-0.8,0) rectangle (0.8,0.8);
|
|
\draw (0,0) circle(0.8);
|
|
\end{scope}
|
|
\begin{scope}[scale=0.07 , rotate=-90, xshift=25cm, yshift=2cm]
|
|
\draw (0,0.65) -- (0,3);
|
|
\clip (-1.5,0) rectangle (1.5,1.5);
|
|
\draw (0,0) circle(1.5);
|
|
\clip (-0.8,0) rectangle (0.8,0.8);
|
|
\draw (0,0) circle(0.8);
|
|
\end{scope}
|
|
\begin{scope}[scale=0.07 , rotate=-90, xshift=35cm, yshift=2cm]
|
|
\draw (0,0.65) -- (0,3);
|
|
\clip (-1.5,0) rectangle (1.5,1.5);
|
|
\draw (0,0) circle(1.5);
|
|
\clip (-0.8,0) rectangle (0.8,0.8);
|
|
\draw (0,0) circle(0.8);
|
|
\end{scope}
|
|
\begin{scope}[scale=0.07 , rotate=-90, xshift=45cm, yshift=2cm]
|
|
\draw (0,0.65) -- (0,3);
|
|
\clip (-1.5,0) rectangle (1.5,1.5);
|
|
\draw (0,0) circle(1.5);
|
|
\clip (-0.8,0) rectangle (0.8,0.8);
|
|
\draw (0,0) circle(0.8);
|
|
\end{scope}
|
|
\begin{scope}[scale=0.07 , rotate=-90, xshift=55cm, yshift=2cm]
|
|
\draw (0,0.65) -- (0,3);
|
|
\clip (-1.5,0) rectangle (1.5,1.5);
|
|
\draw (0,0) circle(1.5);
|
|
\clip (-0.8,0) rectangle (0.8,0.8);
|
|
\draw (0,0) circle(0.8);
|
|
\end{scope}
|
|
|
|
% Draw the internal oscillator
|
|
\draw (0.02, -0.8) node[twoportshape, t={OSC}, circuitikz/bipoles/twoport/width=0.8, scale=0.4] (xo) {};
|
|
|
|
% Draw the clock buffers as selector
|
|
% \tikzset{demux/.style={muxdemux, muxdemux def={Lh=6, Rh=6, NL=3, NT=1, NB=0, NR=1, w=2.5}, no input leads, scale=0.4}};
|
|
% \draw (1.55, -0.35) node[demux]{\rotatebox[origin=c]{-90}{CLK BUFFERS}};
|
|
\draw (1.45, -0.35) node[twoportshape, t={CLK Buffers}, circuitikz/bipoles/twoport/width=2.2, scale=0.4, rotate=-90] (clk_buf) {};
|
|
|
|
% Connect CLK_IN to DDS clock buffers
|
|
\draw [-latexslim] (ext_clk.east) -- ++(1,0);
|
|
\draw [-latexslim] (mmcx.east) -- ++(1,0);
|
|
\draw [-latexslim] (xo.east) -- ++(1,0);
|
|
|
|
% Connect CPLD clk_sel to DDS clock buffers
|
|
\draw [-latexslim] (clk_buf.east) -- ++(0,-0.42);
|
|
|
|
% Signal path: From control signals / clock of DDS to output of the RF switches
|
|
\draw (1.35, -1.75) node[twoportshape, t={DDS Signal Path}, circuitikz/bipoles/twoport/width=2, scale=0.4] (sig0) {};
|
|
\draw (1.35, -2.45) node[twoportshape, t={DDS Signal Path}, circuitikz/bipoles/twoport/width=2, scale=0.4] (sig1) {};
|
|
\draw (1.35, -3.15) node[twoportshape, t={DDS Signal Path}, circuitikz/bipoles/twoport/width=2, scale=0.4] (sig2) {};
|
|
\draw (1.35, -3.85) node[twoportshape, t={DDS Signal Path}, circuitikz/bipoles/twoport/width=2, scale=0.4] (sig3) {};
|
|
|
|
% Extra node to expand the dotted area eastward
|
|
\draw[color=white, text=black] (2.1, -3.85) node[twoportshape, circuitikz/bipoles/twoport/width=0.4, scale=0.4 ] (sig3_east) {};
|
|
|
|
% Connect RF to DDS block
|
|
\draw [latexslim-] (rf0.east) -- (sig0.west);
|
|
\draw [latexslim-] (rf1.east) -- (sig1.west);
|
|
\draw [latexslim-] (rf2.east) -- (sig2.west);
|
|
\draw [latexslim-] (rf3.east) -- (sig3.west);
|
|
|
|
% DDS signal path dotted area
|
|
\node[draw, dotted, thick, rounded corners, inner xsep=0.7em, inner ysep=0.4em, fit=(rf3)(sig0)(sig3_east.east)] (abs_dds) {};
|
|
\node[fill=white, rotate=-90, scale=0.7] at (abs_dds.west) {DDS Channels};
|
|
|
|
% CPLD
|
|
\draw (3.8, -0.35) node[twoportshape, t={CPLD}, circuitikz/bipoles/twoport/width=1.1, scale=0.8, rotate=-90] (cpld) {};
|
|
|
|
% Synthronization clock buffer for DDS block
|
|
\draw (3.5, -2.5) node[twoportshape, t=\MymyLabel{Sync}{Buffer}, circuitikz/bipoles/twoport/width=1.2, scale=0.5] (sync_buf) {};
|
|
|
|
% Connect CPLD to:
|
|
% DDS clock buffer
|
|
\draw [latexslim-] (clk_buf.north) -- (cpld.south);
|
|
% DDS signal path
|
|
\draw [latexslim-latexslim] (3.4, -0.7) -- ++ (-1.5, 0) -- ++ (0,-0.72);
|
|
% Draw to intersection point, then complete the connection to sync buffer
|
|
\draw [-] (4.2, -0.7) -- (4.55, -0.7) -- (4.55, -2.5);
|
|
\draw [-latexslim] (4.55, -2.5) -- (sync_buf.east);
|
|
|
|
% Connect sync buffer to DDS block
|
|
\draw [-latexslim] (sig0.east) -- (3.35, -1.75) -- ++ (0, -0.5);
|
|
\draw [-latexslim] (sync_buf.south) -- ++ (0, -0.3) -- ++ (-1.05, 0);
|
|
|
|
% LVDS Transceivers
|
|
\draw (6, 0) node[twoportshape, t=\MymyLabel{LVDS}{Transceiever}, circuitikz/bipoles/twoport/width=1.8, scale=0.5] (lvds0) {};
|
|
\draw (6, -0.7) node[twoportshape, t=\MymyLabel{LVDS}{Transceiever}, circuitikz/bipoles/twoport/width=1.8, scale=0.5] (lvds1) {};
|
|
\draw (6, -2.5) node[twoportshape, t=\MymyLabel{LVDS}{Transceiever}, circuitikz/bipoles/twoport/width=1.8, scale=0.5] (lvds2) {};
|
|
\draw (6, -3.2) node[twoportshape, t=\MymyLabel{LVDS}{Transceiever}, circuitikz/bipoles/twoport/width=1.8, scale=0.5] (lvds3) {};
|
|
|
|
% Connect CPLD to transceivers
|
|
\draw [latexslim-latexslim] (lvds0.west) -- ++ (-1.13, 0);
|
|
\draw [latexslim-latexslim] (lvds1.west) -- ++ (-0.35, 0) -- ++ (0, 0.6) -- ++ (-0.78, 0);
|
|
\draw [latexslim-latexslim] (lvds2.west) -- ++ (-0.45, 0) -- ++ (0, 2.3) -- ++ (-0.68, 0);
|
|
\draw [latexslim-latexslim] (lvds3.west) -- ++ (-0.55, 0) -- ++ (0, 2.9) -- ++ (-0.58, 0);
|
|
|
|
% EEPROMs
|
|
\draw (6, -1.4) node[twoportshape, t={EEPROM}, circuitikz/bipoles/twoport/width=1.8, scale=0.5] (eeprom0) {};
|
|
\draw (6, -3.9) node[twoportshape, t={EEPROM}, circuitikz/bipoles/twoport/width=1.8, scale=0.5] (eeprom1) {};
|
|
|
|
% Repeaters for DDS0 sync clock & DDS sync output from sync buffer
|
|
\draw (3.5, -3.85) node[twoportshape, t={Repeaters}, circuitikz/bipoles/twoport/width=1.2, scale=0.5] (rep) {};
|
|
|
|
% Connect DDS0 to repeaters
|
|
\draw [-latexslim] (sig0.east) -- ++ (0.3, 0) -- ++ (0, -1.55) -- (3.35, -3.3) -- ++ (0, -0.3);
|
|
|
|
% Connect sync_buf to repeaters
|
|
\draw [-latexslim] (sync_buf.south) -- ++ (0, -0.3) -- ++ (0.15, 0) -- ++ (0, -0.55);
|
|
|
|
% EEMs
|
|
\draw (8, -0.9) node[twoportshape, t={EEM Port 0}, circuitikz/bipoles/twoport/width=3.2, scale=0.5, rotate=-90] (eem0) {};
|
|
\draw (8, -3.4) node[twoportshape, t={EEM Port 1}, circuitikz/bipoles/twoport/width=3.2, scale=0.5, rotate=-90] (eem1) {};
|
|
|
|
% Connect LVDS and EEM
|
|
\draw [latexslim-latexslim] (lvds0.east) -- (7.75, 0);
|
|
\draw [latexslim-latexslim] (lvds1.east) -- (7.75, -0.7);
|
|
\draw [latexslim-latexslim] (lvds2.east) -- (7.75, -2.5);
|
|
\draw [latexslim-latexslim] (lvds3.east) -- (7.75, -3.2);
|
|
|
|
% Connect EEPROM to EEM
|
|
\draw [latexslim-latexslim] (eeprom0.east) -- (7.75, -1.4);
|
|
\draw [latexslim-latexslim] (eeprom1.east) -- (7.75, -3.9);
|
|
|
|
% Connect EEM0 to sync_buf
|
|
\draw [latexslim-] (3.65, -2.25) -- (3.65, -1.85) -- (7.75, -1.85);
|
|
|
|
% Connect repeaters output to EEM1
|
|
\draw [-latexslim] (rep.south) -- (3.5, -4.35) -- (7.75, -4.35);
|
|
|
|
% Synchronization ICs encased in another dotted area
|
|
\node[draw, dotted, thick, rounded corners, inner xsep=0.7em, inner ysep=0.4em, fit=(rep.south west)(sync_buf.north east)] (sync_path) {};
|
|
\node[fill=white, rotate=-90, scale=0.5] at (sync_path.east) {AD9910 Only};
|
|
|
|
\end{scope}
|
|
|
|
\end{circuitikz}
|
|
}
|
|
|
|
\caption{Simplified Block Diagram}
|
|
\end{figure}
|
|
|
|
\begin{figure}[h]
|
|
\centering
|
|
\scalebox{0.88}{
|
|
\begin{circuitikz}[european, scale=0.95, every label/.append style={align=center}]
|
|
|
|
\begin{scope}[]
|
|
% RF switches {0, 1, 2, 3} for SMA {0, 1, 2, 3}
|
|
\draw (1.4, 0) node[twoportshape, t={RF Switch}, circuitikz/bipoles/twoport/width=1.5, scale=0.6] (sw) {};
|
|
|
|
% Amplifiers {0, 1, 2, 3} for RF switches {0, 1, 2, 3}
|
|
\draw (3, 0) node[buffer, circuitikz/bipoles/twoport/width=1.2, scale=-0.5] (amp) {};
|
|
|
|
% Attenuators {0, 1, 2, 3} for amplifiers {0, 1, 2, 3}
|
|
\draw (4.6, 0) node[twoportshape, t=\MymyLabel{Digital}{Attenuator}, circuitikz/bipoles/twoport/width=2, scale=0.6, rotate=-90] (att) {};
|
|
|
|
% DDS {0, 1, 2, 3} for attenuators {0, 1, 2, 3}
|
|
\draw (6.6, 0) node[twoportshape, t={DDS}, circuitikz/bipoles/twoport/width=1.2, scale=0.7] (dds) {};
|
|
|
|
% Connect main signal path
|
|
\draw [-latexslim] (dds.west) -- (att.north);
|
|
\draw [-latexslim] (att.south) -- (amp.west);
|
|
\draw [-latexslim] (amp.east) -- (sw.east);
|
|
|
|
% Connect abstract DDS clock input
|
|
\node [label=above:\tiny{CLK Buffers}] at (8, -0.2) {};
|
|
\draw [latexslim-] (dds.east) -- (8, 0);
|
|
|
|
% Insert CPLD signal to relevant components
|
|
\node [label=above:\tiny{CPLD}] at (8, 1.1) {};
|
|
\draw [-] (1.4, 1.3) -- (8, 1.3);
|
|
\draw [-latexslim] (1.4, 1.3) -- (sw.north);
|
|
\draw [-latexslim] (4.6, 1.3) -- (att.west);
|
|
\draw [-latexslim] (6.6, 1.3) -- (dds.north);
|
|
|
|
% Connect sync_buf signal to DDS
|
|
\draw [latexslim-] (6.9, -1.35) -- (6.9, -0.35);
|
|
\draw [-latexslim] (6.3, -1.35) -- (6.3, -0.35);
|
|
\node [label=below:\tiny{Sync Buffer /}] at (6.6, -1.15) {};
|
|
\node [label=below:\tiny{Repeaters}] at (6.6, -1.4) {};
|
|
\node [label={[rotate=-90]above:\tiny{DDS 0}}] at (6.8, -0.9) {};
|
|
\node [label={[rotate=-90]above:\tiny{Only}}] at (6.55, -0.9) {};
|
|
|
|
\end{scope}
|
|
|
|
\end{circuitikz}
|
|
}
|
|
|
|
\caption{Simplified DDS Signal Path}
|
|
\end{figure}
|
|
|
|
\begin{figure}[hbt!]
|
|
\centering
|
|
\includegraphics[height=2.2in]{Urukul_FP.png}
|
|
\includegraphics[height=2.2in]{photo4410.jpg}
|
|
\caption{Urukul Card photo}
|
|
\end{figure}
|
|
|
|
% For wide tables, a single column layout is better. It can be switched
|
|
% page-by-page.
|
|
\onecolumn
|
|
|
|
\section{Electrical Specifications}
|
|
|
|
Specifications of parameters are based on the datasheets of the
|
|
DDS IC(AD9910\footnote{\label{ad9910}https://www.analog.com/media/en/technical-documentation/data-sheets/AD9910.pdf},
|
|
AD9912\footnote{\label{ad9912}https://www.analog.com/media/en/technical-documentation/data-sheets/AD9912.pdf}),
|
|
clock buffer IC (Si53312\footnote{\label{clock_buffer}https://www.skyworksinc.com/-/media/Skyworks/SL/documents/public/data-sheets/Si53312.pdf}),
|
|
digital attenuator IC (HMC542BLP4E\footnote{\label{attenuator}https://www.analog.com/media/en/technical-documentation/data-sheets/hmc542b.pdf}),
|
|
various information from Sinara wiki\footnote{\label{urukul_wiki}https://github.com/sinara-hw/Urukul/wiki\#details-specification-and-typical-performance-data}
|
|
and corresponding test results\footnote{\label{sinara354}https://github.com/sinara-hw/sinara/issues/354\#issuecomment-352859041}.
|
|
\begin{table}[h]
|
|
\centering
|
|
\begin{threeparttable}
|
|
\caption{Recommended Operating Conditions}
|
|
\begin{tabularx}{0.9\textwidth}{l | c c c | c | X}
|
|
\thickhline
|
|
\textbf{Parameter} & \textbf{Min.} & \textbf{Typ.} & \textbf{Max.} &
|
|
\textbf{Unit} & \textbf{Conditions} \\
|
|
\hline
|
|
Clock input & & & & &\\
|
|
\hspace{3mm} Input frequency\repeatfootnote{ad9910}\textsuperscript{,}\repeatfootnote{ad9912} & 10 & & 1000 & MHz & PLL disabled \\
|
|
& 3.2 & & 60 & MHz & AD9910, PLL enabled, no clock division \\
|
|
& 12.8 & & 240 & MHz & AD9910, PLL enabled, 4x clock division \\
|
|
& 11 & & 200 & MHz & AD9912, PLL enabled, no clock division \\
|
|
& 44 & & 800 & MHz & AD9912, PLL enabled, 4x clock division \\
|
|
\hspace{3mm} Nominal input power\repeatfootnote{clock_buffer} & & 10 & & dBm & \\
|
|
\thickhline
|
|
\end{tabularx}
|
|
\end{threeparttable}
|
|
\end{table}
|
|
|
|
\begin{table}[h]
|
|
\centering
|
|
\begin{threeparttable}
|
|
\caption{RF Output Specifications}
|
|
\begin{tabularx}{0.9\textwidth}{l | c c c | c | X}
|
|
\thickhline
|
|
\textbf{Parameter} & \textbf{Min.} & \textbf{Typ.} & \textbf{Max.} &
|
|
\textbf{Unit} & \textbf{Conditions} \\
|
|
\hline
|
|
Low frequency power\repeatfootnote{sinara354} & & & -20 & dBm & 100 kHz output \\
|
|
& & & 10 & dBm & 1 MHz output \\
|
|
\hline
|
|
Frequency\repeatfootnote{urukul_wiki} & 1 & & 400 & MHz & \\
|
|
\hline
|
|
Digital attenuation\repeatfootnote{attenuator} & -31.5 & & 0 & dB & \\
|
|
\hline
|
|
Resolution & & & & & \\
|
|
\hspace{3mm} Frequency\repeatfootnote{ad9910}\textsuperscript{,}\repeatfootnote{urukul_wiki} & & 0.25 & & Hz & AD9910 \\
|
|
& & 8 & & $\mu$Hz & AD9912 \\
|
|
\hspace{3mm} Phase offset\repeatfootnote{ad9910}\textsuperscript{,}\repeatfootnote{ad9912} & & 16 & & bits & AD9910 \\
|
|
& & 14 & & bits & AD9912 \\
|
|
\hspace{3mm} Digital amplitude\repeatfootnote{ad9910} & & 14 & & bits & AD9910 \\
|
|
\hspace{3mm} DAC full scale current\repeatfootnote{ad9910}\textsuperscript{,}\repeatfootnote{ad9912} & & 8 & & bits & AD9910 \\
|
|
& & 10 & & bits & AD9912 \\
|
|
\hspace{3mm} Temporal (I/O Update)\repeatfootnote{urukul_wiki} & & 4 & & ns & \\
|
|
\hspace{3mm} Digital attenuation\repeatfootnote{attenuator} & & 0.5 & & dB & \\
|
|
\thickhline
|
|
\end{tabularx}
|
|
\end{threeparttable}
|
|
\end{table}
|
|
|
|
\newpage
|
|
|
|
The tabulated performance characteristics are produced using the following setup unless otherwise noted.
|
|
\begin{itemize}
|
|
\item 100 MHz input clock into SMA, 10 dBm.
|
|
\item Input clock divided by 4.
|
|
\item PLL with x40 multiplier.
|
|
\item Output frequency at 80 MHz or 81 MHz.
|
|
\end{itemize}
|
|
|
|
\begin{table}[h]
|
|
\begin{threeparttable}
|
|
\caption{Electrical Characteristics}
|
|
\begin{tabularx}{\textwidth}{l | c | c c c | c | X}
|
|
\thickhline
|
|
\textbf{Parameter} & \textbf{Symbol} & \textbf{Min.} & \textbf{Typ.} & \textbf{Max.} &
|
|
\textbf{Unit} & \textbf{Conditions} \\
|
|
\hline
|
|
Digital attenuator glitch duration\repeatfootnote{sinara354} & $t_s$ & & 100 & & ns & \\
|
|
\hline
|
|
RF switch\repeatfootnote{sinara354} & & & & & &\\
|
|
\hspace{3mm} Rise to 90\% & $t_{on}$ & & 100 & & ns & \\
|
|
\hspace{3mm} Isolation & & & 70 & & dB & \\
|
|
\hspace{3mm} Turn-on chirp & $\gamma$ & & & 0.1 & deg/s & Excluding the first $\mu$s\\
|
|
\hline
|
|
Crosstalk\repeatfootnote{sinara354} & & & -84 & & dB & Victim RF switch opened \\
|
|
& & & -110 & & dB & Victim RF switch closed \\
|
|
\hline
|
|
Cross-channel-intermodulation\repeatfootnote{sinara354} & & & -90 & & dB & \\
|
|
\hline
|
|
Phase noise\repeatfootnote{sinara354} & $\mathcal{L}(f)$ & & -85 & & dBc/Hz & 0.1 Hz \\
|
|
& & & -95 & & dBc/Hz & 1 Hz \\
|
|
& & & -107 & & dBc/Hz & 10 Hz \\
|
|
& & & -116 & & dBc/Hz & 100 Hz \\
|
|
& & & -126 & & dBc/Hz & 1 kHz \\
|
|
& & & -133 & & dBc/Hz & 10 kHz \\
|
|
& & & -135 & & dBc/Hz & 100 kHz \\
|
|
& & & -128 & & dBc/Hz & 1 MHz \\
|
|
& & & -149 & & dBc/Hz & 10 MHz \\
|
|
\hline
|
|
Second-order harmonics\repeatfootnote{sinara354} & & & -40 & & dB & 6 dBm output \\
|
|
& & & -34 & & dB & 10.5 dBm output \\
|
|
\hline
|
|
Third-order harmonics\repeatfootnote{sinara354} & & & -54 & & dB & 6 dBm output \\
|
|
& & & -28 & & dB & 10.5 dBm output \\
|
|
\hline
|
|
Power consumption (AD9910)\repeatfootnote{urukul_wiki} & $P$ & & 7 & & W & 4x 400 MHz, 10.5 dBm, 52\degree C\\
|
|
Power consumption (AD9912)\repeatfootnote{urukul_wiki} & $P$ & & 6.5 & & W & 4x 400 MHz, 10.5 dBm, 52\degree C\\
|
|
\thickhline
|
|
\end{tabularx}
|
|
\end{threeparttable}
|
|
\end{table}
|
|
|
|
\newpage
|
|
|
|
Harmonic content of the DDS signals from 4410 Urukul is tabulated below\footnote{\label{urukul29}https://github.com/sinara-hw/Urukul/issues/29}. An external 125 MHz clock signal were supplied.
|
|
|
|
\newcommand{\ts}{\textsuperscript}
|
|
\newcolumntype{Y}{>{\centering\arraybackslash}X}
|
|
|
|
\begin{table}[h]
|
|
\begin{threeparttable}
|
|
\caption{Harmonic content with 0.0 dB digital attenuation}
|
|
\begin{tabularx}{\textwidth}{| c | Y | Y | Y | Y | Y | Y | Y | Y | Y |}
|
|
\thickhline
|
|
\multirow{2}{*}{\textbf{Frequency (MHz)}} &
|
|
\multicolumn{9}{c|}{\textbf{Output power (dBm) of the n\ts{th}-order harmonic}}\\
|
|
\cline{2-10} & 1\ts{st} & 2\ts{nd} & 3\ts{rd} & 4\ts{th} & 5\ts{th} & 6\ts{th} &
|
|
7\ts{th} & 8\ts{th} & 9\ts{th} \\
|
|
\hline
|
|
0.1 & -21.14 & -59.03 & -54.93 & -93.07 & -73.38 & -94.07 & -84.78 & -91.77 & -96.61 \\
|
|
\hline
|
|
0.5 & 4.51 & -15.45 & -11.61 & -25.02 & -24.35 & -51.70 & -35.14 & -34.46 & -37.85 \\
|
|
\hline
|
|
1 & 7.67 & -16.80 & -12.32 & -18.27 & -29.25 & -30.87 & -34.51 & -39.28 & -39.84 \\
|
|
\hline
|
|
10 & 10.67 & -12.69 & -13.94 & -26.12 & -27.76 & -36.11 & -55.32 & -43.85 & -42.65 \\
|
|
\hline
|
|
20 & 10.86 & -24.90 & -13.65 & -22.87 & -28.67 & -47.68 & -35.85 & -35.45 & -38.48 \\
|
|
\hline
|
|
50 & 10.74 & -14.18 & -15.01 & -27.57 & -29.01 & -38.05 & -51.52 & -44.53 & -42.71 \\
|
|
\hline
|
|
100 & 9.70 & -33.59 & -16.72 & -34.36 & -26.81 & -40.14 & -41.07 & -43.88 & -56.89 \\
|
|
\hline
|
|
200 & 8.97 & -22.22 & -16.23 & -24.89 & -30.49 & -37.97 & -37.79 & -38.80 & -40.14 \\
|
|
\hline
|
|
300 & 8.27 & -19.17 & -19.51 & -29.80 & -34.75 & -38.90 & -51.92 & -53.38 & -57.95 \\
|
|
\hline
|
|
400 & 7.68 & -17.82 & -21.60 & -33.04 & -37.80 & -50.37 & -57.45 & -59.80 & -64.68 \\
|
|
\hline
|
|
500 & -1.80 & -41.57 & -51.71 & -72.36 & -89.35 & -91.63 & -93.15 & -84.54 & -107.57 \\
|
|
\thickhline
|
|
\end{tabularx}
|
|
\end{threeparttable}
|
|
\end{table}
|
|
|
|
\begin{table}[hbt!]
|
|
\begin{threeparttable}
|
|
\caption{Harmonic content with 10.0 dB digital attenuation}
|
|
\begin{tabularx}{\textwidth}{| c | Y | Y | Y | Y | Y | Y | Y | Y | Y |}
|
|
\thickhline
|
|
\multirow{2}{*}{\textbf{Frequency (MHz)}} &
|
|
\multicolumn{9}{c|}{\textbf{Output power (dBm) of the n\ts{th}-order harmonic}}\\
|
|
\cline{2-10} & 1\ts{st} & 2\ts{nd} & 3\ts{rd} & 4\ts{th} & 5\ts{th} & 6\ts{th} &
|
|
7\ts{th} & 8\ts{th} & 9\ts{th} \\
|
|
\hline
|
|
0.1 & -27.06 & -81.35 & -62.09 & -97.37 & -84.11 & -103.78 & -91.37 & -100.48 & -104.22 \\
|
|
\hline
|
|
0.5 & -3.2 & -37.82 & -52.21 & -66.76 & -77.86 & -85.92 & -86.37 & -97.59 & -120.76 \\
|
|
\hline
|
|
1 & -0.43 & -34.47 & -47.80 & -75.28 & -86.45 & -101.91 & -93.22 & -96.14 & -106.71 \\
|
|
\hline
|
|
10 & 1.95 & -31.04 & -28.23 & -51.76 & -57.29 & -76.26 & -78.15 & -83.85 & -80.20 \\
|
|
\hline
|
|
20 & 2.10 & -33.05 & -28.30 & -54.50 & -52.31 & -72.39 & -70.96 & -82.98 & -82.58 \\
|
|
\hline
|
|
50 & 1.89 & -33.24 & -28.50 & -52.67 & -48.35 & -74.77 & -77.26 & -79.33 & -73.58 \\
|
|
\hline
|
|
100 & 0.80 & -38.51 & -63.22 & -61.73 & -71.97 & -97.45 & -97.67 & -107.40 & -93.03 \\
|
|
\hline
|
|
200 & 0.05 & -38.25 & -42.16 & -63.01 & -84.55 & -82.66 & -108.85 & -116.62 & -99.45 \\
|
|
\hline
|
|
300 & -0.51 & -35.91 & -48.83 & -82.43 & -100.53 & -111.79 & -118.62 & -120.05 & -97.72 \\
|
|
\hline
|
|
400 & -1.20 & -38.37 & -49.77 & -89.45 & -74.66 & -108.12 & -116.75 & -114.08 & -102.29 \\
|
|
\hline
|
|
500 & -11.20 & -61.47 & -77.59 & -74.73 & -100.23 & -93.12 & -99.83 & -86.71 & -112.63 \\
|
|
\thickhline
|
|
\end{tabularx}
|
|
\end{threeparttable}
|
|
\end{table}
|
|
|
|
\newpage
|
|
|
|
\begin{table}[h]
|
|
\begin{threeparttable}
|
|
\caption{Harmonic content with 20.0 dB digital attenuation}
|
|
\begin{tabularx}{\textwidth}{| c | Y | Y | Y | Y | Y | Y | Y | Y | Y |}
|
|
\thickhline
|
|
\multirow{2}{*}{\textbf{Frequency (MHz)}} &
|
|
\multicolumn{9}{c|}{\textbf{Output power (dBm) of the n\ts{th}-order harmonic}}\\
|
|
\cline{2-10} & 1\ts{st} & 2\ts{nd} & 3\ts{rd} & 4\ts{th} & 5\ts{th} & 6\ts{th} &
|
|
7\ts{th} & 8\ts{th} & 9\ts{th} \\
|
|
\hline
|
|
0.1 & -31.06 & -82.29 & -68.34 & -109.04 & -92.48 & -111.23 & -99.94 & -109.85 & -112.36 \\
|
|
\hline
|
|
0.5 & -11.99 & -56.69 & -71.73 & -95.76 & -101.86 & -114.37 & -102.81 & -106.94 & -116.72 \\
|
|
\hline
|
|
1 & -9.94 & -54.54 & -56.49 & -89.12 & -105.94 & -110.93 & -102.79 & -107.01 & -117.29 \\
|
|
\hline
|
|
10 & -7.89 & -50.19 & -57.35 & -91.36 & -97.88 & -107.95 & -103.53 & -96.04 & -108.26 \\
|
|
\hline
|
|
20 & -7.79 & -52.72 & -58.03 & -90.75 & -99.82 & -102.07 & -101.55 & -104.73 & -103.31 \\
|
|
\hline
|
|
50 & -7.96 & -52.36 & -59.26 & -84.44 & -87.55 & -86.88 & -97.76 & -92.61 & -83.19 \\
|
|
\hline
|
|
100 & -9.04 & -57.40 & -61.76 & -78.50 & -91.80 & -117.64 & -107.40 & -112.64 & -102.07 \\
|
|
\hline
|
|
200 & -9.73 & -57.39 & -72.31 & -72.66 & -93.26 & -95.95 & -125.22 & -122.35 & -130.24 \\
|
|
\hline
|
|
300 & -10.27 & -58.65 & -74.60 & -109.24 & -107.74 & -115.75 & -125.36 & -124.54 & -98.86 \\
|
|
\hline
|
|
400 & -10.94 & -59.62 & -79.36 & -98.48 & -74.72 & -111.95 & -119.18 & -114.63 & -104.34 \\
|
|
\hline
|
|
500 & -21.00 & -78.52 & -99.07 & -74.91 & -99.55 & -92.91 & -103.02 & -87.33 & -114.87 \\
|
|
\thickhline
|
|
\end{tabularx}
|
|
\end{threeparttable}
|
|
\end{table}
|
|
|
|
\begin{table}[hbt!]
|
|
\begin{threeparttable}
|
|
\caption{Harmonic content with 31.5 dB digital attenuation}
|
|
\begin{tabularx}{\textwidth}{| c | Y | Y | Y | Y | Y | Y | Y | Y | Y |}
|
|
\thickhline
|
|
\multirow{2}{*}{\textbf{Frequency (MHz)}} &
|
|
\multicolumn{9}{c|}{\textbf{Output power (dBm) of the n\ts{th}-order harmonic}}\\
|
|
\cline{2-10} & 1\ts{st} & 2\ts{nd} & 3\ts{rd} & 4\ts{th} & 5\ts{th} & 6\ts{th} &
|
|
7\ts{th} & 8\ts{th} & 9\ts{th} \\
|
|
\hline
|
|
0.1 & -37.89 & -85.04 & -77.41 & -122.04 & -114.29 & -115.58 & -110.65 & -120.06 & -123.70 \\
|
|
\hline
|
|
0.5 & -22.38 & -71.24 & -89.84 & -107.81 & -108.76 & -127.83 & -114.12 & -118.34 & -127.07 \\
|
|
\hline
|
|
1 & -21.01 & -72.10 & -90.08 & -111.97 & -111.30 & -127.43 & -114.38 & -118.07 & -128.06 \\
|
|
\hline
|
|
10 & -19.22 & -72.13 & -90.74 & -110.14 & -105.28 & -114.04 & -113.51 & -94.85 & -116.15 \\
|
|
\hline
|
|
20 & -19.28 & -75.95 & -94.72 & -91.71 & -107.55 & -112.85 & -112.24 & -116.33 & -114.02 \\
|
|
\hline
|
|
50 & -19.27 & -74.93 & -92.21 & -95.77 & -101.06 & -97.92 & -108.30 & -103.60 & -93.96 \\
|
|
\hline
|
|
100 & -20.27 & -79.05 & -87.48 & -89.73 & -104.00 & -117.98 & -112.12 & -110.51 & -105.80 \\
|
|
\hline
|
|
200 & -21.19 & -78.33 & -106.81 & -82.70 & -92.31 & -109.93 & -133.86 & -120.94 & -102.95 \\
|
|
\hline
|
|
300 & -21.58 & -80.96 & -112.44 & -110.40 & -108.11 & -115.68 & -122.51 & -125.25 & -99.63 \\
|
|
\hline
|
|
400 & -22.44 & -82.73 & -105.55 & -98.03 & -74.84 & -113.93 & -119.41 & -114.93 & -104.55 \\
|
|
\hline
|
|
500 & -31.73 & -93.37 & -99.74 & -75.03 & -99.27 & -92.84 & -104.14 & -87.46 & -116.22 \\
|
|
\thickhline
|
|
\end{tabularx}
|
|
\end{threeparttable}
|
|
\end{table}
|
|
|
|
\newpage
|
|
|
|
\begin{multicols}{2}
|
|
|
|
\begin{figure}[H]
|
|
\includegraphics[width=3.3in]{urukul_xo_phase_noise.jpg}
|
|
\caption{Phase noise of Urukul clocked by\\internal oscillator}
|
|
\end{figure}
|
|
|
|
\begin{figure}[H]
|
|
\includegraphics[width=3.3in]{urukul_clock_phase_noise.jpg}
|
|
\caption{Phase noise of 200 MHz DDS Output}
|
|
\end{figure}
|
|
|
|
\begin{figure}[H]
|
|
\includegraphics[width=3.3in]{urukul_harmonics.png}
|
|
\caption[]{Harmonic content of 200 MHz DDS Output\footnotemark}
|
|
\end{figure}
|
|
|
|
\begin{figure}[H]
|
|
\includegraphics[width=3.3in]{urukul_6dbm_harmonics.png}
|
|
\caption{Harmonic content of 80 MHz DDS Output (6 dBm)\repeatfootnote{sinara354}}
|
|
\end{figure}
|
|
|
|
\begin{figure}[H]
|
|
\includegraphics[width=3.3in]{urukul_10dbm_harmonics.png}
|
|
\caption{Harmonic content of 80 MHz DDS Output (10 dBm)\repeatfootnote{sinara354}}
|
|
\end{figure}
|
|
|
|
\begin{figure}[H]
|
|
\includegraphics[width=3.3in]{rf_transient.jpg}
|
|
\caption{RF switch turn on transient\repeatfootnote{sinara354}}
|
|
\end{figure}
|
|
|
|
\begin{figure}[H]
|
|
\includegraphics[width=3.3in]{nyquist_rejection_400mhz.png}
|
|
\caption{Nyquist rejection 400 MHz to 600 MHz\repeatfootnote{sinara354}}
|
|
\end{figure}
|
|
|
|
\end{multicols}
|
|
|
|
\footnotetext{\label{urukul64}https://github.com/sinara-hw/Urukul/issues/64}
|
|
|
|
\begin{figure}[H]
|
|
\centering
|
|
\includegraphics[width=3.3in]{nyquist_rejection_450mhz.png}
|
|
\caption{Nyquist rejection 450 MHz to 550 MHz\repeatfootnote{sinara354}}
|
|
\end{figure}
|
|
|
|
\begin{figure}[H]
|
|
\centering
|
|
\includegraphics[width=3.3in]{att_glitch_bitflip.png}
|
|
\caption{Attenuator step from 20 to 60 digital\\(16+4dB switch glitch)\repeatfootnote{sinara354}}
|
|
\end{figure}
|
|
|
|
\begin{figure}[H]
|
|
\centering
|
|
\includegraphics[width=3.3in]{att_glitch_carry.png}
|
|
\caption{Attenuator step from 31 to 32 digital\\(major carry glitch)\repeatfootnote{sinara354}}
|
|
\end{figure}
|
|
|
|
\newpage
|
|
|
|
\section{Front Panel Drawings}
|
|
\begin{figure}[hbt!]
|
|
\centering
|
|
\includegraphics[height=2.5in]{Urukul_drawings.jpg}
|
|
\includegraphics[height=2.5in]{Urukul_assembly.jpg}
|
|
\caption{4410 Urukul front panel drawings}
|
|
\end{figure}
|
|
|
|
\section{Urukul Mode Configurations}
|
|
Mode of operation is specified by a DIP switch.
|
|
The DIP switch can be found at the top right corner of the card.
|
|
The following table summarizes the required setting for each mode.
|
|
\ding{51} indicates ON, while \ding{53} indicates OFF.
|
|
|
|
\begin{multicols}{2}
|
|
|
|
\begin{center}
|
|
\captionof{table}{DIP switch configurations}
|
|
\begin{tabular}{|l|cccc|}
|
|
\hline
|
|
\multicolumn{1}{|c|}{\multirow{2}{*}{Mode}} & \multicolumn{4}{c|}{DIP Switch} \\ \cline{2-5}
|
|
\multicolumn{1}{|c|}{} & \multicolumn{1}{c|}{1} & \multicolumn{1}{c|}{2} & \multicolumn{1}{c|}{3} & 4 \\ \hline
|
|
Default & \multicolumn{1}{c|}{\ding{53}} & \multicolumn{1}{c|}{\ding{53}} & \multicolumn{1}{c|}{\ding{53}} & \ding{53} \\ \hline
|
|
SU-Servo & \multicolumn{1}{c|}{\ding{53}} & \multicolumn{1}{c|}{\ding{51}} & \multicolumn{1}{c|}{\ding{53}} & \ding{53} \\ \hline
|
|
\end{tabular}
|
|
\end{center}
|
|
|
|
\columnbreak
|
|
|
|
\begin{center}
|
|
\centering
|
|
\includegraphics[height=1.5in]{urukul_dip_switch.jpg}
|
|
\captionof{figure}{Position of DIP switch}
|
|
\end{center}
|
|
|
|
\end{multicols}
|
|
|
|
\newpage
|
|
|
|
\section{Example ARTIQ code}
|
|
The sections below demonstrate simple usage scenarios of the 4410 Urukul card with the ARTIQ control system.
|
|
They do not exhaustively demonstrate all the features of the ARTIQ system.
|
|
The full documentation for the ARTIQ software and gateware is available at \url{https://m-labs.hk}.
|
|
|
|
\subsection{10 MHz Sinusoidal Wave}
|
|
Generate a 10MHz sinusoid from RF0 with full scale amplitude, attenuated by 6 dB.
|
|
Both the CPLD and the DDS channels should be initialized.
|
|
By default, AD9910 single-tone profiles are programmed to profile 7.
|
|
|
|
\begin{minted}{python}
|
|
@kernel
|
|
def run(self):
|
|
self.core.reset()
|
|
self.cpld.init()
|
|
self.dds0.init()
|
|
self.dds0.cfg_sw(True)
|
|
self.dds0.set_att(6.*dB)
|
|
self.dds0.set(10*MHz)
|
|
\end{minted}
|
|
|
|
If the synchronization feature of AD9910 was enabled, RF signal across different channels of the same Urukul can be synchronized.
|
|
For example, phase-coherent RF signal can be produced on both channel 0 and channel 1 after configuring an appropriate phase mode.
|
|
\begin{minted}{python}
|
|
@kernel
|
|
def run(self):
|
|
self.core.reset()
|
|
self.cpld.init()
|
|
|
|
self.dds0.init()
|
|
self.dds0.cfg_sw(True)
|
|
self.dds0.set_phase_mode(PHASE_MODE_TRACKING)
|
|
self.dds0.set_att(6.*dB)
|
|
self.dds1.init()
|
|
self.dds1.cfg_sw(True)
|
|
self.dds1.set_phase_mode(PHASE_MODE_TRACKING)
|
|
self.dds1.set_att(6.*dB)
|
|
|
|
self.dds0.set(frequency=10*MHz, phase=0.0)
|
|
self.dds1.set(frequency=10*MHz, phase=0.25) # 0.25 turns phase offset
|
|
\end{minted}
|
|
Note that the phase difference between the 2 channels might not be exactly 0.25 turns, but it is a constant.
|
|
It can be negated by adjusting the \texttt{phase} parameter.
|
|
|
|
\newpage
|
|
\subsection{Periodic RF pulse (AD9910 Only)}
|
|
This examples demonstrates that the RF signal can be modulated by amplitude using the RAM modulation feature of AD9910.
|
|
By default, RAM profiles are programmed to profile 0.
|
|
|
|
\begin{minted}{python}
|
|
from artiq.coredevice.ad9910 import RAM_MODE_CONT_RAMPUP
|
|
|
|
def prepare(self):
|
|
self.amp = [0.0, 0.0, 0.0, 0.7, 0.0, 0.7, 0.7] # Reversed Order
|
|
self.asf_ram = [0] * len(self.amp)
|
|
|
|
@kernel
|
|
def init_dds(self, dds):
|
|
self.core.break_realtime()
|
|
dds.init()
|
|
dds.set_att(6.*dB)
|
|
dds.cfg_sw(True)
|
|
|
|
@kernel
|
|
def configure_ram_mode(self, dds):
|
|
self.core.break_realtime()
|
|
dds.set_cfr1(ram_enable=0)
|
|
self.cpld.io_update.pulse_mu(8)
|
|
self.cpld.set_profile(0) # Enable the corresponding RAM profile
|
|
# Profile 0 is the default
|
|
dds.set_profile_ram(start=0, end=len(self.asf_ram)-1,
|
|
step=250, profile=0, mode=RAM_MODE_CONT_RAMPUP)
|
|
self.cpld.io_update.pulse_mu(8)
|
|
dds.amplitude_to_ram(self.amp, self.asf_ram)
|
|
dds.write_ram(self.asf_ram)
|
|
|
|
self.core.break_realtime()
|
|
dds.set(frequency=5*MHz, ram_destination=RAM_DEST_ASF)
|
|
# Pass osk_enable=1 to set_cfr1() if it is not an amplitude RAM
|
|
dds.set_cfr1(ram_enable=1, ram_destination=RAM_DEST_ASF)
|
|
|
|
self.cpld.io_update.pulse_mu(8)
|
|
|
|
@kernel
|
|
def run(self):
|
|
self.core.reset()
|
|
self.core.break_realtime()
|
|
self.cpld.init()
|
|
|
|
self.init_dds(self.dds0)
|
|
self.configure_ram_mode(self.dds0)
|
|
\end{minted}
|
|
|
|
The generated RF output of the above example consists of the following features in sequence:
|
|
\begin{enumerate}
|
|
\item A 5 MHz RF pulse for 2 microseconds.
|
|
\item No signal for 1 microseconds.
|
|
\item A 5 MHz RF pulse for 1 microseconds.
|
|
\item No signal for 3 microseconds.
|
|
\item Go back to item 1.
|
|
\end{enumerate}
|
|
The expected waveform is plotted on the following figure.
|
|
Note that phase of the RF pulses may drift gradually.
|
|
Urukul was operated with a 50$\Omega$ termination to produce the waveform.
|
|
|
|
\begin{tikzpicture}[
|
|
declare function={
|
|
func(\x)= (\x<0) * (0) +
|
|
and(\x>=0, \x<2) * (0.42*cos(deg(10*pi*\x))) +
|
|
and(\x>=2, \x<3) * (0) +
|
|
and(\x>=3, \x<4) * (0.42*cos(deg(10*pi*\x)))) +
|
|
and(\x>=4, \x<7) * (0) +
|
|
and(\x>=7, \x<7.5) * (0.42*cos(deg(10*pi*\x)));
|
|
}
|
|
]
|
|
\begin{axis}[
|
|
axis x line=middle, axis y line=middle,
|
|
every axis x label/.style={
|
|
at={(ticklabel* cs:1.05)},
|
|
anchor=west,
|
|
},
|
|
every axis y label/.style={
|
|
at={(ticklabel* cs:1.05)},
|
|
anchor=south,
|
|
},
|
|
height=5cm,
|
|
width=16cm,
|
|
ymin=-0.5, ymax=0.5, ytick={-0.42,0.42}, ylabel=Voltage ($V$),
|
|
xmin=-0.5, xmax=7.5, xtick={0,...,7}, xlabel=Time ($\mu s$),
|
|
]
|
|
|
|
\addplot[blue, samples=1000, domain=-0.5:7.5]{func(x)};
|
|
\end{axis}
|
|
\end{tikzpicture}
|
|
|
|
\subsection{Simple Amplitude Ramp (AD9910 Only)}
|
|
An amplitude ramp of an RF signal can be generated by modifying the \texttt{self.amp} array in the previous example.
|
|
\begin{minted}{python}
|
|
def prepare(self):
|
|
# Reversed Order
|
|
self.amp = [1.0, 0.9, 0.8, 0.7, 0.6, 0.5, 0.4, 0.3, 0.2, 0.1, 0.0]
|
|
self.asf_ram = [0] * len(self.amp)
|
|
\end{minted}
|
|
|
|
The generated RF output has an incrementing amplitude scale factor (ASF), increasing by 0.1 at every microsecond.
|
|
Once the ASF reaches 1.0, it drops back to 0.0 at the next microsecond.
|
|
The expected waveform over 1 cycle is plotted on the following figure.
|
|
Note that phase of the RF pulses may drift gradually.
|
|
Urukul was operated with a 50$\Omega$ termination to produce the waveform.
|
|
|
|
\begin{tikzpicture}[
|
|
declare function={
|
|
func(\x)= and(\x>=0, \x<1) * (0) +
|
|
and(\x>=1, \x<2) * (0.05*cos(deg(10*pi*\x))) +
|
|
and(\x>=2, \x<3) * (0.1*cos(deg(10*pi*\x))) +
|
|
and(\x>=3, \x<4) * (0.15*cos(deg(10*pi*\x))) +
|
|
and(\x>=4, \x<5) * (0.2*cos(deg(10*pi*\x))) +
|
|
and(\x>=5, \x<6) * (0.25*cos(deg(10*pi*\x))) +
|
|
and(\x>=6, \x<7) * (0.3*cos(deg(10*pi*\x))) +
|
|
and(\x>=7, \x<8) * (0.35*cos(deg(10*pi*\x))) +
|
|
and(\x>=8, \x<9) * (0.4*cos(deg(10*pi*\x))) +
|
|
and(\x>=9, \x<10) * (0.45*cos(deg(10*pi*\x))) +
|
|
and(\x>=10, \x<11) * (0.5*cos(deg(10*pi*\x)));
|
|
}
|
|
]
|
|
\begin{axis}[
|
|
axis x line=middle, axis y line=middle,
|
|
every axis x label/.style={
|
|
at={(ticklabel* cs:1.05)},
|
|
anchor=west,
|
|
},
|
|
every axis y label/.style={
|
|
at={(ticklabel* cs:1.05)},
|
|
anchor=south,
|
|
},
|
|
minor tick num=4,
|
|
grid=both,
|
|
height=8cm,
|
|
width=16cm,
|
|
ymin=-0.7, ymax=0.7, ytick={-0.5,...,0,...,0.5}, ylabel=Voltage ($V$),
|
|
xmin=0, xmax=11.5, xtick={0,...,11}, xlabel=Time ($\mu s$),
|
|
]
|
|
|
|
\addplot[blue, samples=1500, domain=0:11]{func(x)};
|
|
\end{axis}
|
|
\end{tikzpicture}
|
|
|
|
\newpage
|
|
|
|
\subsection{RAM Synchronization (AD9910 Only)}
|
|
Multiple RAM channels can also be synchronized.
|
|
Similar to the 10 MHz single-tone RF signals, specify \texttt{phase} when calling \texttt{dds.set()} in \texttt{configure\char`_ram\char`_mode}.
|
|
For example, set phase to 0 for the channels (\texttt{phase=0.0}).
|
|
\begin{minted}{python}
|
|
dds.set(frequency=5*MHz, phase=0.0, ram_destination=RAM_DEST_ASF)
|
|
\end{minted}
|
|
Then, replace the \texttt{run()} function with the following.
|
|
\begin{minted}{python}
|
|
@kernel
|
|
def run(self):
|
|
self.core.reset()
|
|
self.core.break_realtime()
|
|
self.cpld.init()
|
|
|
|
self.init_dds(self.dds0)
|
|
self.init_dds(self.dds1)
|
|
self.dds0.set_phase_mode(PHASE_MODE_TRACKING)
|
|
self.dds1.set_phase_mode(PHASE_MODE_TRACKING)
|
|
|
|
self.configure_ram_mode(self.dds0)
|
|
self.configure_ram_mode(self.dds1)
|
|
\end{minted}
|
|
Two phase-coherent RF signal with the same waveform as the previous figure (from either RAM examples) should be generated.
|
|
|
|
\subsection{Voltage-controlled DDS Amplitude (SU-Servo Only)}
|
|
The SU-Servo feature can be enabled by integrating the 4410 Urukul with a 5108 Sampler.
|
|
Amplitude of the DDS output can be controlled by the ADC input of the Sampler through PI control, characterised by the following transfer function.
|
|
\[H(s)=k_p+\frac{k_i}{s+\frac{k_i}{g}}\]
|
|
In the following example, the amplitude of DDS is proportional to the ADC input from Sampler.
|
|
First, initialize the RTIO, SU-Servo and its channel.
|
|
Note that the programmable gain of the Sampler is $10^0=1$, the input range is [-10V, 10V].
|
|
\begin{minted}{python}
|
|
@kernel
|
|
def run(self):
|
|
self.core.reset()
|
|
self.core.break_realtime()
|
|
self.suservo.init()
|
|
self.suservo.set_pgia_mu(0, 0) # unity gain
|
|
self.suservo.cplds[0].set_att(0, 15.)
|
|
self.channel.set_y(profile=0, y=0.) # Clear integrator
|
|
\end{minted}
|
|
|
|
Next, setup the PI control as an IIR filter. It has -1 proportional gain $k_p$ and no integrator gain $k_i$.
|
|
|
|
\begin{minted}{python}
|
|
self.channel.set_iir(
|
|
profile=0,
|
|
adc=0, # take data from Sampler channel 0
|
|
kp=-1., # -1 P gain
|
|
ki=0./s, # no integrator gain
|
|
g=0., # no integrator gain limit
|
|
delay=0. # no IIR update delay after enabling
|
|
)
|
|
\end{minted}
|
|
|
|
Then, configure the DDS frequency to 10 MHz with 3V input offset.
|
|
When input voltage $\geq$ offset voltage, the DDS output amplitude is 0.
|
|
|
|
\begin{minted}{python}
|
|
self.channel.set_dds(
|
|
profile=0,
|
|
offset=-.3, # 3V with above PGIA settings
|
|
# Note the inverted sign
|
|
frequency=10*MHz,
|
|
phase=0.)
|
|
\end{minted}
|
|
|
|
SU-Servo encodes the ADC voltage in a linear scale [-1, 1].
|
|
Therefore, 3V is converted to 0.3.
|
|
Note that the ASF of all DDS channels are capped at 1.0, the amplitude clips when ADC input $\leq -7V$ with the above IIR filter.
|
|
|
|
Finally, enable the SU-Servo channel with the IIR filter programmed beforehand.
|
|
|
|
\begin{minted}{python}
|
|
self.channel.set(en_out=1, en_iir=1, profile=0)
|
|
self.suservo.set_config(enable=1)
|
|
\end{minted}
|
|
|
|
A 10 MHz DDS signal is generated from the example above, with amplitude controllable by ADC.
|
|
The RMS voltage of the DDS channel against the ADC voltage is plotted.
|
|
The DDS channel is terminated with 50\textOmega.
|
|
|
|
\begin{center}
|
|
\begin{tikzpicture}[
|
|
declare function={
|
|
func(\x)= and(\x>=-10, \x<-7) * (160) +
|
|
and(\x>=-7, \x<3) * (16*(3-x)) +
|
|
and(\x>=3, \x<10) * (0);
|
|
}
|
|
]
|
|
\begin{axis}[
|
|
axis x line=middle, axis y line=middle,
|
|
every axis x label/.style={
|
|
at={(axis description cs:0.5,-0.1)},
|
|
anchor=north,
|
|
},
|
|
every axis y label/.style={
|
|
at={(ticklabel* cs:1.05)},
|
|
anchor=south,
|
|
},
|
|
minor x tick num=3,
|
|
grid=both,
|
|
height=8cm,
|
|
width=12cm,
|
|
ymin=0, ymax=180, ytick={0,16,...,160}, ylabel=DDS RMS Voltage ($mV_{rms}$),
|
|
xmin=-10, xmax=10, xtick={-10,-8,...,10}, xlabel=Sampler Voltage ($V$),
|
|
]
|
|
|
|
\addplot[blue, samples=21, domain=-10:10]{func(x)};
|
|
\end{axis}
|
|
\end{tikzpicture}
|
|
\end{center}
|
|
|
|
Note: DDS signal should be attenuated. High output power may affect the linearity.
|
|
|
|
\section{Ordering Information}
|
|
To order, please visit \url{https://m-labs.hk} and select the 4410 Urukul in the ARTIQ Sinara crate configuration tool.
|
|
The default chip is AD9910 (4410 Urukul), which supports more features.
|
|
If you need the higher frequency resolution of the AD9912 (4412 Urukul), leave us a note when placing the order.
|
|
To enable SU-Servo feature between 4410 Urukul and 5108 Sampler, specify that SU-Servo is to be integrated into the gateware when placing the order.
|
|
The cards may also be ordered separately by writing to \url{mailto:sales@m-labs.hk}.
|
|
|
|
\section*{}
|
|
\vspace*{\fill}
|
|
|
|
\begin{footnotesize}
|
|
Information furnished by M-Labs Limited is provided in good faith in the hope that it will be useful. However, no responsibility is assumed by M-Labs Limited for its use. Specifications may be subject to change without notice.
|
|
\end{footnotesize}
|
|
|
|
\end{document}
|