Compare commits

...

5 Commits

2 changed files with 21 additions and 5 deletions

View File

@ -607,13 +607,23 @@ Typically, with the coarse RTIO clock at 125 MHz, a \texttt{ClockGen} channel ca
\inputcolorboxminted{firstline=72,lastline=75}{examples/ttl.py}
\newpage
\subsection{Maximum Sustained Event Separation}
The maximum sustained event separation is the least amount of time separation between input gated events, in which all gated edges can be continuously \& reliabily timestamped by the RTIO system without causing \texttt{RTIOOverflow} exceptions.
\subsection{Minimum Sustained Event Separation}
The minimum sustained event separation is the least amount of time separation between input gated events, in which all gated edges can be continuously \& reliabily timestamped by the RTIO system without causing \texttt{RTIOOverflow} exceptions.
The following \texttt{run()} function finds the separation by approximating the time of running \texttt{timestamp\char`_mu()} as a constant. Import the \texttt{time} library to use \texttt{time.sleep()}.
\inputcolorboxminted{firstline=60,lastline=92}{examples/ttl_in.py}
\inputcolorboxminted{firstline=63,lastline=98}{examples/ttl_in.py}
The result fluctuates at around 650ns with Kasli v1.1.
\begin{center}
\begin{table}[H]
\captionof{table}{Minimum sustained event separation of different carrier}
\centering
\begin{tabular}{|c|c|c|}
\hline
Carrier & Kasli v1.1 & Kasli-SoC \\ \hline
Duration & 650 ns & 600 ns \\ \hline
\end{tabular}
\end{table}
\end{center}
\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}.

View File

@ -51,6 +51,9 @@ class ExternalTrigger(EnvExperiment):
self.ttlout.pulse(1*us)
import time
class MeanTimestampDuration(EnvExperiment):
def build(self):
self.setattr_device("core")
@ -72,7 +75,10 @@ class MeanTimestampDuration(EnvExperiment):
# Guarantee t0 > gate_end_mu
# Otherwise timestamp_mu may wait for pulses till gate_end_mu
self.rpc_sleep(1*ms)
rtio_time_mu = self.core.get_rtio_counter_mu()
sleep_mu = float(gate_end_mu - rtio_time_mu)
self.rpc_sleep(self.core.mu_to_seconds(sleep_mu))
t0 = self.core.get_rtio_counter_mu()
while self.ttlin.timestamp_mu(gate_end_mu) >= 0:
pass