A Journey Into CI/CD for FPGAs

For more information, check out Github’s page on CI/CD:

CI/CD flow (https://github.com/resources/articles/ci-cd)

Windows Subsystem for Linux

Set up WSL2 with Ubuntu 24.04 (or 22.04):

Installing Vivado inside WSL:

Github Action Runner

Runners page on vivado-ci-cd repository

Docker Setup

Example Vivado Project

Timing diagram for cool_mult_ex. dina, dinb, and dout_ch are all sourced from CSVs

Vivado Tool Command Language (TCL) Scripts

Bringing It All Together

Last three “run” commands not run in docker. What was I thinking?
Single-job CI/CD flow for the example project

Deployment to the FPGA

It’s brilliant! And it worked. Once Tailscale is set up (extremely easy), I used the Tailscale IP of Windows when connecting to the hardware server in WSL, and it worked like a charm. I added that IP as a Github secret, and I was able to add an FPGA programming job to the pipeline.

CI/CD build, test, and deploy separated into three jobs
SW 10, 9, and 0 on results in 4*1 = 4 in the code, shown in the LEDs as 0110

Security

Final Thoughts

Leave a comment