Since starting work in the FPGA field, There are always things I want to try but simply don't have time or resources to try out at work. So I wanted to setup a home FPGA Lab that lets me or anyone else I allow to write code, compile, simulate, build, deploy, and test, fully remotely. I also wanted this to be setup such that switching between fpgas was as simple as instantiating a different top level, and enabling or disabling the specific IO.Â
Primary Language : Gitlab yml scripting, Make Files, System Verilog, XDL, Tcl
Simulation Software : Model Sim
FPGA to Synthesize to : Artix 7 35T (ARTY board), Artix 7 200t (ALINX pcie edge board)
This is a work in progress.
As of right now, the System verilog supports easily switching between 2 boards with minimal code configuration.
Both boards have basic 1G ethernet working, as well as regbank generation, and parsing ethernet TCP or UDP packets. (There is a generic parser utility I wrote that makes this very easy)
The PCIE board has a basic PCIE engine for memory mapped registers as well as a basic DMA engine. However I have not had time to debug or really test the DMA engine. (Lack of time to write driver code)
These boards are hosted in my Ubuntu server, and unfortunately due to ISP, and being located in an apartment, its been more of a pain to continue setting up the server for remote development every time I move or the ISP decides to switch my "static" ip.
When I initially set it up howver, Gitlab was setup such that on every commit, all the unit tests written with SVunit framework would run.
If they all passed it would continue to running builds. The build flow took about 15 min for a full PCIE build (This is great compared to the 7+ hr build times at work). After it was done building, I had it auto flash the image onto the server and reboot the card so that it would pickup said image. Then finally, I had a python testing enviornemt such that it would automatically run through various test cases using the physical hardware to ensure everything was working correctly.
Future work includes setting up a general global database on my NAS so that I can store important information about what image is programed, and allow the testing tools to access and understand what it needs to be testing.
Additionally, This all needs to be setup with more security in mind. At the time, I had port forwarded the specific ports for my server to SSH, and that just was not good from a security standpoint. Since then I have setup cloudflare tunneling for my NAS as well as added a bunch of extra security, so I will need to re-configure a bunch of scripts as well as the gitlab runner setup.
The last major blocker is my PC power supply died, and being cheap I decided to canibalize my servers power supply instead of buying a new one. So the server does not currently turn on. This can be fixed, but at the moment will remain in a broken state.