This repository contains the FPGA implementation of an ADMM (Alternating Direction Method of Multipliers) solver developed for real-time linear Model Predictive Control (MPC) on the Crazyflie quadrotor platform.
The project targets an AMD Xilinx Artix-7 100T FPGA and includes the HLS solver, the FPGA integration files, and support scripts used to build and program the design.
This work was developed within the master's thesis:
Hardware-Algorithm Co-Design for Real-Time Linear Model Predictive Control. FPGA Implementation and Deployment on a Resource-Constrained Quadrotor
Author: Andrea Grillo
Period: 2025-2026
The development flow for this project is managed through the provided Makefiles:
- Python scripts generate the matrices and headers used by the solver.
- The ADMM solver is synthesized with Vitis HLS.
- The generated IP is integrated in the full FPGA design and built in Vivado.
- An Arduino-based SPI test can be used for standalone communication checks.
- The final deployment target is the Crazyflie platform, using the companion firmware available here: crazyflie_fpga_firmware.
vitis_projects/ADMM/: Vitis HLS project containing the ADMM solver implementation and testbenchvivado_project/: Vivado project with the top-level FPGA design, SPI/UART modules, constraints, and generated IPscripts/: build, programming, simulation, and data/header generation scriptsarduino_spi_test/: simple Arduino sketch used for SPI communication testsMakefile: top-level build flow for HLS, Vivado, bitstream generation, and programming
- FPGA deck hardware repository: Crazyflie_FPGA_Deck
- Crazyflie firmware repository: crazyflie_fpga_firmware