Work

Almost all of my work is done with McGill University's experimental cosmology lab, building readout and signal-processing systems for telescopes. Most of my open-source code is on GitHub.

FPGA and RTL Design

ICEboard
A custom FPGA / ARM motherboard with two FMC mezzanine slots, designed with McGill. ICEboards are the basis for readout and signal-processing systems on the South Pole Telescope, the Simons Array, CHIME, and HIRAX.
ICEboard, top view
minimax
An experimental RISC-V CPU that executes compressed (RVC) instructions natively and handles the rest of RV32I in microcode.
pyxsi
Python bindings for the Xilinx Simulator Interface, so testbenches can mix Python, C/C++, and RTL. (Notes)
vivado-hooks
A remote-build and regression-test framework for Vivado projects, made of git hooks, worktrees, and tmux. (Notes)

Signal Processing

ciccomp
CIC compensation filter design using open-source tools. (Notes)
firpm
A C++ Parks-McClellan FIR filter designer. I contributed regularization, templated arithmetic types, and Python bindings.

Embedded Linux

The ICEboard runs Linux on a TI AM3874 ARM SoC alongside its FPGA, and newer systems use Xilinx's Zynq UltraScale+ parts. Patches from that work have been merged into the Linux kernel (including TI81xx support and the ICEboard's device tree), U-Boot, and Buildroot.

Python and Control Systems

tuberd
A C++ server and Python client that expose an instrument's control plane across a network as ordinary-looking Python method calls.
awaitless
An IPython extension that runs coroutines at the prompt without an explicit "await". (Notes)
tworoutine
Python functions that can be called synchronously or asynchronously from a single implementation. Deprecated in favour of awaitless. (Notes)

Radiation Tolerance

mr.scrub
An ECC-based internal configuration-memory scrubber for Xilinx UltraScale FPGAs, built around a Minimax core.
minimax-tmr
A triple modular redundancy (TMR) wrapper for the Minimax CPU.
goes-proton-python
Fetching and plotting GOES satellite proton-detector data. (Notes)

Deployment and Lifecycle

I have contributed design work to the following experiments:

  • The South Pole Telescope, including three generations of bolometer readout designs and the Kinetic-Inductance Detector (KID) readout for SPT-SLIM.
  • The CHIME experiment, an interferometer tracing the 21cm Hydrogen line back in time to probe the growth of the universe, and its successor CHORD.
  • The E and B Experiment, a stratospheric balloon that flew 35 km over Antarctica in Dec. 2012-Jan. 2013.
  • The POLARBEAR, POLARBEAR2, and Simons Observatory experiments.
  • The LiteBIRD satellite-based CMB telescope, in collaboration with McGill and under contract to the Canadian Space Agency.

Other Open-Source Contributions

Smaller fixes and features have also gone upstream to GetData, pytest, and matplotlib.