For most people, adding WiFi to a project means grabbing something like an ESP8266 or an ESP32. But if you are developing your own design on an FPGA, that means adding another package. If you are targeting Linux, the OpenWifi project has a good start at providing WiFi in Verilog. There are examples for many development boards and advice for porting to your own target on GitHub. You can also see one of the developers, [Xianjun Jiao], demonstrate the whole thing in the video below.
The demo uses a Xilinx Zynq, so the Linux backend runs on the Arm processor that is on the same chip as the FPGA doing the software-defined radio. We’ll warn you that this project is not for the faint of heart. If you want to understand the code, you’ll have to dig into a lot of WiFi trivia.
The good news though is that a lot of the higher-level functions fall to the generic Linux drivers. Other than a user-space control program, OpenWiFi only provides a driver and an FPGA configuration. All of the higher details occur in the Linux WiFi system that can talk to many different chipsets.
The team didn’t produce any hardware but used multiple FPGA development boards that were commercially available. It’s fair to say that if you really wanted to add WiFi to a project and you weren’t making many copies of it, there are easier ways. But even if you aren’t targeting a custom ASIC with WiFi, reading the Verilog and understanding the code can teach you a lot about WiFi internals.
If you need something simpler to get started on FPGAs, try our bootcamp. Don’t think you need to know WiFi internals? Maybe. But maybe you want to know what kind of attacks you might have to guard against, too.