Online documentation - for instructors: https://positronemissiontomography.readthedocs.io/en/latest/index.html
Online laboratory manual - for students: positron-emission-tomography
Github repository - setup related files :https://github.com/UChicagoPhysicsLabs/PositronEmissionTomography
Bill of Materials - for whomever wants to build a setup: https://docs.google.com/spreadsheets/d/1UGA9dp_g9l_pHDlyD9L5UesSFoDoISthVe1psVAu_JQ/
A simple experimental setup to demonstrate the basics of positron emission tomography - 2002 AJP paper that was the original basis of the experiment
Use of Physical Models to Facilitate Transfer of Physics Learning to Understand Positron Emission Tomography - 2006 PERC proceedings, more information is in the author's dissertation
Teaching about the physics of medical imaging 2009 International Conference on Physics Educate (ICPE) proceedings. Only tangentially related.
Design of low-cost digital pulse processing unit for gamma spectrometry - 2024 paper, uses an ARM microcontroller instead of an FPGA. Limited count rate, and not really suited for coincidence counting, but a good starting point for a student project.
A flexible 32-channel time-to-digital converter implemented in a Xilinx Zynq-7000 field programmable gate array 2017 paper on high-resolution timing measurements. The chips they use are 7020s instead of the Red Pitaya's 7010s, but the main difference is that the higher grade chips have more fabric elements (flip-flops, logic cells, etc) by around a factor of 3. Managed to achieve 5.8 ps time precision with 380 MHz measurable hit rate and 2.63 ns dead time.
Recent Developments and Challenges in FPGA-Based Time-to-Digital Converters - 2019 paper covering different methods of high-precision interval measurement. Good overview paper for finding more information.
Principles of Computerized Tomographic Imaging - Online book by Avinash C. Kak and Malcolm Slaney
As a general note, there are a few common families of FPGA devices which have differing development tools.
Zynq-7000 SoC Design Overview Design Hub - Has relevant datasheets & pinouts for the chip at the heart of the Red Pitaya. The specific chip is the xc7z010clg400-1 for the 125-14 versions of the devices. The second generation should be the same.
https://www.zynqbook.com/ - Scottish Engineering group's book on the Zynq chip.
FPGA for beginners Glossary - From Digilent, but the language is still relevant
Laboratory for Integrated Circuit Design: Red Pitaya Projects - Slovenian website with a few useful examples.
https://github.com/pavel-demin/red-pitaya-notes/ - Pavel Demin's Github, more useful than the actual official documentation.
Anton Potočnik's Tutorials - This is the first of five tutorials on creating some basic projects on the Red Pitaya. Incredibly useful place for a novice to start.
https://github.com/XavierAudier/minimal_redpitaya/ - A Github repository containing a minimally working project for starting with the Red Pitaya.
https://github.com/marceluda/rp_lock-in_pid - Lock-in amplifier and PID code for a Red Pitaya. Author also has a lock-in amplifier and scope project.
Official Documentation - Can be tricky to navigate, but does ultimately have most of the information you'd need to work with the devices. Of particular use are the pages for:
Compact embedded device for lock-in measurements and experiment active control - 2019 paper on other uses for the Red Pitaya in the lab.
FPGA-Based High-Speed Optical Fiber Sensor Based on Multitone-Mixing Interferometry - Optics with the Red Pitaya
A many-channel FPGA control system - Yet more applications
Design of a Tomato Sorting Device Based on the Multisine-FSR Composite Measurement - Using a Red Pitaya to measure the impedance of tomatoes to characterize how ripe they are. I love that this exists.
As of the OS 2.0 update, the way that files are uploaded to the Red Pitaya has changed. You no longer upload the raw bitstream but instead make a bootable bitstream .bif file. The official solution only seems to work straight from the .tcl command line, so to streamline the approach I came up with the following solution:
make a file called rp_post.tcl with the following contents:
set biffile [open "system_wrapper.bif" w+]
put $biffile "all:{ system_wrapper.bit }"
close $biffile
exec bootgen -image system_wrapper.bif -arch zynq -process_bitstream bin -o system_wrapper.bit.bin -w
In Vivado, navigate to the project Settings ⇒ Bitstream and set the file for the tcl.post option.
To make your machine a trusted client so you don't need to enter a password to login:
ssh-keygen to make a key pairid_rsassh-copy-id -f -i id_rsa.pub root@red_pitaya_addressssh -i id_rsa root@red_pitaya_address.ssh directory and .ssh/authorized_keys file on the Red Pitaya sideTo synchronize files to your local machine, some flavor of shell script works well. For windows, a powershell file along the lines of
scp -i "path_to_ssh_key" root@rp-XXXXXX.local/home/jupter/*.csv c:/your_path_here
where the path_to_ssh_key is pointed to your local private key, root@rp-XXXXXX should have the Xs replaced with the last 6 characters of the device's MAC address, and your_path_here is pointed wherever you want things stored locally.
If you save a version of that command as a .ps1 file, you can then use Windows Task Scheduler to run it periodically. I use a 1 hour interval but do as you please.