sinarads/2118-2128.tex
occheung 3654502d1b dio: add spec sources
Also remove propagation delay specs from LVDS-TTL.
PCB traces would make a significant impact.
2022-01-14 14:09:32 +08:00

519 lines
22 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{subfig}
\usepackage{tikz}
\usepackage{pgfplots}
\usepackage{circuitikz}
\usepackage{pifont}
\usetikzlibrary{calc}
\usetikzlibrary{fit,backgrounds}
\title{2118 BNC-TTL / 2128 SMA-TTL}
\author{M-Labs Limited}
\date{July 2021}
\revision{Revision 1}
\companylogo{\includegraphics[height=0.73in]{artiq_sinara.pdf}}
\begin{document}
\maketitle
\section{Features}
\begin{itemize}
\item{8 channels.}
\item{Input and output capable.}
\item{Galvanically isolated.}
\item{3ns minimum pulse width.}
\item{BNC or SMA connectors.}
\end{itemize}
\section{Applications}
\begin{itemize}
\item{Photon counting.}
\item{External equipment trigger.}
\item{Optical shutter control.}
\end{itemize}
\section{General Description}
The 2118 BNC-TTL card is a 8hp EEM module, while the 2128 SMA-TTL card is a 4hp EEM module.
Both TTL cards add general-purpose digital I/O capabilities to carrier cards such as 1124 Kasli and 1125 Kasli-SoC.
Each card provides two banks of four digital channels each, with BNC (2118) or SMA (2128) connectors.
Each bank has individual ground isolation.
The direction (input or output) of each bank can be selected using DIP switches.
Each channel supports 50\textOmega~terminations individually controllable using DIP switches.
Outputs tolerate short circuits indefinitely.
The card support a minimum pulse width of 3ns.
% Switch to next column
\vfill\break
\newcommand*{\MyLabel}[3][2cm]{\parbox{#1}{\centering #2 \\ #3}}
\newcommand*{\MymyLabel}[3][4cm]{\parbox{#1}{\centering #2 \\ #3}}
\begin{figure}[h]
\centering
\scalebox{0.88}{
\begin{circuitikz}[european, scale=0.95, every label/.append style={align=center}]
\begin{scope}[yshift=1.3cm]
\draw[color=white, text=black] (-0.1,0) node[twoportshape,t={IO 0}, circuitikz/bipoles/twoport/width=1.2, scale=0.4] (io0) {};
\draw[color=white, text=black] (-0.1,-0.7) node[twoportshape,t={IO 1}, circuitikz/bipoles/twoport/width=1.2, scale=0.4 ] (io1) {};
\draw[color=white, text=black] (-0.1,-1.4) node[twoportshape,t={IO 2}, circuitikz/bipoles/twoport/width=1.2, scale=0.4 ] (io2) {};
\draw[color=white, text=black] (-0.1,-2.1) node[twoportshape,t={IO 3}, circuitikz/bipoles/twoport/width=1.2, scale=0.4 ] (io3) {};
\node [label={[xshift=-0.18cm, yshift=-0.305cm]\tiny{IO 0}}] {};
\node [label={[xshift=-0.18cm, yshift=-0.97cm]\tiny{IO 1}}] {};
\node [label={[xshift=-0.18cm, yshift=-1.64cm]\tiny{IO 2}}] {};
\node [label={[xshift=-0.18cm, yshift=-2.302cm]\tiny{IO 3}}] {};
% draw female SMA_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=10cm, 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=20cm, 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=30cm, 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 (1.6,-1.05) node[twoportshape,t={Octal Bus Transceiver}, circuitikz/bipoles/twoport/width=2.5, scale=0.7, rotate=-90 ] (bus1) {};
\draw (3.05,-0) node[twoportshape,t={Isolator}, circuitikz/bipoles/twoport/width=1.3, scale=0.4] (iso1) {};
\draw (3.05,-0.7) node[twoportshape,t={Isolator}, circuitikz/bipoles/twoport/width=1.3, scale=0.4] (iso2) {};
\draw (3.05,-1.4) node[twoportshape,t={Isolator}, circuitikz/bipoles/twoport/width=1.3, scale=0.4] (iso3) {};
\draw (3.05,-2.1) node[twoportshape,t={Isolator}, circuitikz/bipoles/twoport/width=1.3, scale=0.4] (iso4) {};
\draw (3.05,-2.7) node[twoportshape,t={Isolator}, circuitikz/bipoles/twoport/width=1.3, scale=0.4] (i2ciso1) {};
\draw (4.5,-1.15) node[twoportshape,t=\MymyLabel{4-Channel LVDS}{Line Transceiver}, circuitikz/bipoles/twoport/width=2.6, scale=0.7, rotate=-90] (lvds1) {};
\draw (6.8,-0.9) -- ++(0.00001,0) node[twoportshape, anchor=left, t={EEM port}, circuitikz/bipoles/twoport/width=6, scale=0.6, rotate=-90] (kasli) {} ;
\draw (0.8,-3.5) node[twoportshape,t=\MymyLabel{Per-bank \phantom{spac} }{Input/Output Switch}, circuitikz/bipoles/twoport/width=2.7, scale=0.44] (ioswitch) {};
\draw (3.05,-3.5) node[twoportshape,t=\MymyLabel{IO Expander}{for I2C Bus}, circuitikz/bipoles/twoport/width=1.8, scale=0.5] (i2c) {};
\draw (5.68,-2.3) node[twoportshape,t=EEPROM, circuitikz/bipoles/twoport/width=1.2, scale=0.5] (eeprom) {};
\draw (0.8,-2.7) node[twoportshape,t=\MymyLabel{High-Z/50\textOmega}{Switch \phantom{ssssss} }, circuitikz/bipoles/twoport/width=2, scale=0.4] (termswitch1) {};
% Termination Switch 1,2,3,4
\begin{scope}[xshift=0.9cm, yshift=-2.66cm, scale=0.12, every node/.style={scale=0.1}, rotate=-90 ]
\draw (0.4,0) to[short,-o](0.75,0);
\draw (0.78,0)-- +(30:0.46);
\draw (1.25,0)to[short,o-](1.6,0) ;
\end{scope}
\begin{scope}[xshift=1cm, yshift=-2.66cm, scale=0.12, every node/.style={scale=0.1}, rotate=-90 ]
\draw (0.4,0) to[short,-o](0.75,0);
\draw (0.78,0)-- +(30:0.46);
\draw (1.25,0)to[short,o-](1.6,0) ;
\end{scope}
\begin{scope}[xshift=1.1cm, yshift=-2.66cm, scale=0.12, every node/.style={scale=0.1}, rotate=-90 ]
\draw (0.4,0) to[short,-o](0.75,0);
\draw (0.78,0)-- +(30:0.46);
\draw (1.25,0)to[short,o-](1.6,0) ;
\end{scope}
\begin{scope}[xshift=1.2cm, yshift=-2.66cm, scale=0.12, every node/.style={scale=0.1}, rotate=-90 ]
\draw (0.4,0) to[short,-o](0.75,0);
\draw (0.78,0)-- +(30:0.46);
\draw (1.25,0)to[short,o-](1.6,0) ;
\end{scope}
\end{scope}
% I/O Switch 1, 2
\begin{scope}[xshift=1.2cm, yshift=-1.98cm, scale=0.12, every node/.style={scale=0.1}, rotate=-90 ]
\draw (0.4,0) to[short,-o](0.75,0);
\draw (0.78,0)-- +(30:0.46);
\draw (1.25,0)to[short,o-](1.6,0) ;
\end{scope}
\begin{scope}[xshift=1.32cm, yshift=-1.98cm, scale=0.12, every node/.style={scale=0.1}, rotate=-90 ]
\draw (0.4,0) to[short,-o](0.75,0);
\draw (0.78,0)-- +(30:0.46);
\draw (1.25,0)to[short,o-](1.6,0) ;
\end{scope}
\draw (0.8,-3.05) node[twoportshape,t=\MymyLabel{High-Z/50\textOmega}{Switch \phantom{ssssss} }, circuitikz/bipoles/twoport/width=2, scale=0.4] (termswitch2) {};
% Termination Switch 5,6,7,8
\begin{scope}[xshift=0.9cm, yshift=-3.02cm, scale=0.12, every node/.style={scale=0.1}, rotate=-90 ]
\draw (0.4,0) to[short,-o](0.75,0);
\draw (0.78,0)-- +(30:0.46);
\draw (1.25,0)to[short,o-](1.6,0) ;
\end{scope}
\begin{scope}[xshift=1cm, yshift=-3.02cm, scale=0.12, every node/.style={scale=0.1}, rotate=-90 ]
\draw (0.4,0) to[short,-o](0.75,0);
\draw (0.78,0)-- +(30:0.46);
\draw (1.25,0)to[short,o-](1.6,0) ;
\end{scope}
\begin{scope}[xshift=1.1cm, yshift=-3.02cm, scale=0.12, every node/.style={scale=0.1}, rotate=-90 ]
\draw (0.4,0) to[short,-o](0.75,0);
\draw (0.78,0)-- +(30:0.46);
\draw (1.25,0)to[short,o-](1.6,0) ;
\end{scope}
\begin{scope}[xshift=1.2cm, yshift=-3.02cm, scale=0.12, every node/.style={scale=0.1}, rotate=-90 ]
\draw (0.4,0) to[short,-o](0.75,0);
\draw (0.78,0)-- +(30:0.46);
\draw (1.25,0)to[short,o-](1.6,0) ;
\end{scope}
% channel 5,6,7,8
\begin{scope}[yshift=-3.6cm]
\draw[color=white, text=black] (-0.1,0) node[twoportshape,t={IO 4}, circuitikz/bipoles/twoport/width=1.2, scale=0.4 ] (io4) {};
\draw[color=white, text=black] (-0.1,-0.7) node[twoportshape,t={IO 5}, circuitikz/bipoles/twoport/width=1.2, scale=0.4 ] (io5) {};
\draw[color=white, text=black] (-0.1,-1.4) node[twoportshape,t={IO 6}, circuitikz/bipoles/twoport/width=1.2, scale=0.4 ] (io6) {};
\draw[color=white, text=black] (-0.1,-2.1) node[twoportshape,t={IO 7}, circuitikz/bipoles/twoport/width=1.2, scale=0.4 ] (io7) {};
\node [label={[xshift=-0.18cm, yshift=-0.305cm]\tiny{IO 4}}] {};
\node [label={[xshift=-0.18cm, yshift=-0.97cm]\tiny{IO 5}}] {};
\node [label={[xshift=-0.18cm, yshift=-1.64cm]\tiny{IO 6}}] {};
\node [label={[xshift=-0.18cm, yshift=-2.302cm]\tiny{IO 7}}] {};
% draw female SMA 4,5,6,7
\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=10cm, 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=20cm, 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=30cm, 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 (1.6,-1.05) node[twoportshape,t={Octal Bus Transceiver}, circuitikz/bipoles/twoport/width=2.5, scale=0.7, rotate=-90 ] (bus2) {};
\draw (3.05,-0) node[twoportshape,t={Isolator}, circuitikz/bipoles/twoport/width=1.3, scale=0.4] (iso5) {};
\draw (3.05,-0.7) node[twoportshape,t={Isolator}, circuitikz/bipoles/twoport/width=1.3, scale=0.4] (iso6) {};
\draw (3.05,-1.4) node[twoportshape,t={Isolator}, circuitikz/bipoles/twoport/width=1.3, scale=0.4] (iso7) {};
\draw (3.05,-2.1) node[twoportshape,t={Isolator}, circuitikz/bipoles/twoport/width=1.3, scale=0.4] (iso8) {};
\draw (3.05,0.6) node[twoportshape,t={Isolator}, circuitikz/bipoles/twoport/width=1.3, scale=0.4] (i2ciso2) {};
\draw (4.5,-1.05) node[twoportshape,t=\MymyLabel{4-Channel LVDS}{Line Transceiver}, circuitikz/bipoles/twoport/width=2.6, scale=0.7, rotate=-90] (lvds2) {};
\end{scope}
% Drawing Connections
\draw [latexslim-latexslim] (io0.east) -- ++(1,0);
\draw [latexslim-latexslim] (io1.east) -- ++(1,0);
\draw [latexslim-latexslim] (io2.east) -- ++(1,0);
\draw [latexslim-latexslim] (io3.east) -- ++(1,0);
\draw [latexslim-latexslim] (io4.east) -- ++(1,0);
\draw [latexslim-latexslim] (io5.east) -- ++(1,0);
\draw [latexslim-latexslim] (io6.east) -- ++(1,0);
\draw [latexslim-latexslim] (io7.east) -- ++(1,0);
\draw [latexslim-latexslim] (iso1.west) -- ++(-0.72,0) ;
\draw [latexslim-latexslim] (iso2.west) -- ++(-0.72,0) ;
\draw [latexslim-latexslim] (iso3.west) -- ++(-0.72,0) ;
\draw [latexslim-latexslim] (iso4.west) -- ++(-0.72,0) ;
\draw [latexslim-latexslim] (iso1.east) -- ++(0.69,0);
\draw [latexslim-latexslim] (iso2.east) -- ++(0.69,0);
\draw [latexslim-latexslim] (iso3.east) -- ++(0.69,0);
\draw [latexslim-latexslim] (iso4.east) -- ++(0.69,0);
\draw [latexslim-latexslim] (iso5.west) -- ++(-0.72,0) ;
\draw [latexslim-latexslim] (iso6.west) -- ++(-0.72,0) ;
\draw [latexslim-latexslim] (iso7.west) -- ++(-0.72,0) ;
\draw [latexslim-latexslim] (iso8.west) -- ++(-0.72,0) ;
\draw [latexslim-latexslim] (iso5.east) -- ++(0.7,0);
\draw [latexslim-latexslim] (iso6.east) -- ++(0.7,0);
\draw [latexslim-latexslim] (iso7.east) -- ++(0.7,0);
\draw [latexslim-latexslim] (iso8.east) -- ++(0.7,0);
\draw [latexslim-] (eeprom.south) -- ++(0,-0.95);
\draw [latexslim-latexslim] (lvds1.north) -- ++(1.61,0);
\draw [latexslim-latexslim] (lvds2.north) -- ++(1.62,0);
\draw [latexslim-latexslim] (i2c.east) -- ++(2.77,0);
\draw [latexslim-] (i2c.west) -- (ioswitch.east) ;
\draw [-latexslim] (i2c.north east) -- (lvds1.south east);
\draw [-latexslim] (i2c.south east) -- (lvds2.south west);
\draw [-latexslim] (i2ciso1.west) -- (bus1.north east);
\draw [thin] [-latexslim] (i2c.north) -- (i2ciso1.south);
\draw [-latexslim] (i2ciso2.west) -- (bus2.north west);
\draw [thin] [-latexslim] (i2c.south) -- (i2ciso2.north);
% termination switch connection
\draw (0.65,-1.18) -- ++(0,2.47) ;
\draw (0.75,-1.18) -- ++(0,1.77) ;
\draw (0.85,-1.18) -- ++(0,1.07) ;
\draw (0.95,-1.18) -- ++(0,0.37) ;
\draw (0.65,-3.25) -- ++(0,-2.45) ;
\draw (0.75,-3.25) -- ++(0,-1.75) ;
\draw (0.85,-3.25) -- ++(0,-1.05) ;
\draw (0.95,-3.25) -- ++(0,-0.35) ;
\node[draw, dotted, thick, rounded corners, inner xsep=0.7em, inner ysep=0.4em, fit=(io0) (i2ciso1.south west)] (box1) {};
\node[fill=white, rotate=-90] at (box1.west) {GND BANK 1};
\node[fill=white,above] at (box1.north) {\tiny{Either all 4 channels are inputs or all 4 channels are outputs }};
\node[draw, dotted, thick, rounded corners, inner xsep=0.7em, inner ysep=0.4em, fit=(io4)(termswitch2) (iso8.south west)] (box2) {};
\node[fill=white, rotate=-90] at (box2.west) {GND BANK 2};
\node[fill=white,below] at (box2.south) {\tiny{Either all 4 channels are inputs or all 4 channels are outputs }};
\end{circuitikz}
}
\caption{Simplified Block Diagram}
\end{figure}
\begin{figure}[hbt!]
\centering
\subfloat[\centering BNC-TTL]{{
\includegraphics[height=1.8in]{DIO_BNC_FP.png}
\includegraphics[height=1.8in]{photo2118.jpg}
}}%
\subfloat[\centering SMA-TTL]{{
\includegraphics[height=1.8in]{DIO_SMA_FP.png}
\includegraphics[height=1.8in]{photo2128.jpg}
}}%
\caption{BNC-TTL/SMA-TTL Card photos}%
\label{fig:example}%
\end{figure}
% For wide tables, a single column layout is better. It can be switched
% page-by-page.
\onecolumn
\section{Electrical Specifications}
All specifications are in $0\degree C \leq T_A \leq 70\degree C$ unless otherwise noted.
Pulse width distortion \& peak jitters are based on the isolator IC (SI8651BB-B-IS1), other specifications are based on the bus transceivers IC (SN74BCT25245DW).
\begin{table}[h]
\begin{threeparttable}
\caption{Recommended Operating Conditions}
\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
High-level input voltage & $V_{IH}$ & 2 & & & V & \\
\hline
Low-level input voltage & $V_{IL}$ & & & 0.8 & V & \\
\hline
Input clamp current & $I_{OH}$ & & & -18 & mA & termination disabled \\
\hline
High-level output current & $I_{OH}$ & & & -160 & mA & \\
\hline
Low-level output current & $I_{OL}$ & & & 376 & mA & \\
\thickhline
\end{tabularx}
\end{threeparttable}
\end{table}
\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
High-level output voltage & $V_{OH}$ & 2 & & & V & $I_{OH}$=-160mA \\
& & 2.7 & & & V & $I_{OH}$=-6mA \\
\hline
Low-level output voltage & $V_{OL}$ & & 0.42 & 0.55 & V & $I_{OL}$=188mA \\
& & & & 0.7 & V & $I_{OL}$=376mA \\
\hline
Pulse width distortion & $PWD$ & & 0.2 & 4.5 & ns & \\
\hline
Peak jitter & $T_{JIT(PK)}$ & & 350 & & ps & \\
\thickhline
\end{tabularx}
\end{threeparttable}
\end{table}
\section{Front Panel Drawings}
\begin{figure}[hbt!]
\centering
\includegraphics[height=2.5in]{DIO_SMA_drawings.jpg}
\includegraphics[height=2.5in]{DIO_SMA_assembly.jpg}
\caption{2128 SMA-TTL front panel drawings.}
\end{figure}
\newpage
\section{Configuring IO Direction \& Termination}
The termination and IO direction can be configured by switches.
The per-channel termination and per-bank IO direction switches are found at the middle-left and middle-right of both cards respectively.
Termination switches selects the termination of each channel, between high impedence (OFF) and 50\textOmega~(ON).
IO direction switches partly decides the IO direction of each bank.
\begin{itemize}
\itemsep0em
\item Closed switch (ON) \\
Fix the corresponding bank to output. The direction cannot be changed by I\textsuperscript{2}C.
\item Opened switch (OFF) \\
Leave the direction configurable by I\textsuperscript{2}C.
\end{itemize}
\begin{figure}[hbt!]
\centering
\subfloat[\centering BNC-TTL]{{
\includegraphics[height=1.5in]{bnc_ttl_switches.jpg}
}}%
\subfloat[\centering SMA-TTL]{{
\includegraphics[height=1.5in]{sma_ttl_switches.jpg}
}}%
\caption{Position of switches}%
\end{figure}
\section{Example ARTIQ code}
The sections below demonstrate simple usage scenarios of the 2118 BNC-TTL/2128 SMA-TTL 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}.
Timing accuracy in the examples below is well under 1 nanosecond thanks to the ARTIQ RTIO system.
\subsection{One pulse per second}
The channel should be configured as output in both the gateware and hardware.
\begin{minted}{python}
@kernel
def run(self):
self.core.reset()
while True:
self.ttl0.pulse(500*ms)
delay(500*ms)
\end{minted}
\newpage
\subsection{Morse code}
This example demonstrates some basic algorithmic features of the ARTIQ-Python language.
\begin{minted}{python}
def prepare(self):
# As of ARTIQ-6, the ARTIQ compiler has limited string handling
# capabilities, so we pass a list of integers instead.
message = ".- .-. - .. --.-"
self.commands = [{".": 1, "-": 2, " ": 3}[c] for c in message]
@kernel
def run(self):
self.core.reset()
for cmd in self.commands:
if cmd == 1:
self.led.pulse(100*ms)
delay(100*ms)
if cmd == 2:
self.led.pulse(300*ms)
delay(100*ms)
if cmd == 3:
delay(700*ms)
\end{minted}
\subsection{Counting rising edges in a 1ms window}
The channel should be configured as input in both the gateware and hardware.
\begin{minted}{python}
@kernel
def run(self):
self.core.reset()
gate_end_mu = self.ttl0.gate_rising(1*ms)
counts = self.ttl0.count()
print(counts)
\end{minted}
This example code uses the software counter, which has a maximum count rate of approximately 1 million events per second.
If the gateware counter is enabled on the TTL channel, it can typically count up to 125 million events per second:
\begin{minted}{python}
@kernel
def run(self):
self.core.reset()
self.edgecounter0.gate_rising(1*ms)
counts = self.edgecounter0.fetch_count()
print(counts)
\end{minted}
\newpage
\subsection{Responding to an external trigger}
One channel needs to be configured as input, and the other as output.
\begin{minted}{python}
@kernel
def run(self):
self.core.reset()
self.ttlin.gate_rising(5*ms)
timestamp_mu = self.ttlin.timestamp_mu()
at_mu(timestamp_mu + self.core.seconds_to_mu(10*ms))
self.ttlout.pulse(1*us)
\end{minted}
\section{Ordering Information}
To order, please visit \url{https://m-labs.hk} and select the 2118 BNC-TTL/2128 SMA-TTL in the ARTIQ Sinara crate configuration tool. The card 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}