FPGA
Ultimately, I would like to tape out a chip one day, and it is clear that having an FPGA board would be useful for trying things out before going all the way to silicon.
During the course I never really got into FPGA development. I did have an FPGA board to work with, but I never got around to using it, at least not with an open-source workflow on Linux.
## Spiral 0 - Choosing an FPGA
There are many options out there, but what I'm looking for is something beginner-friendly that I will not outgrow immediately.
I'm also looking for something budget-friendly that works well with OpenFPGA and other open-source FPGA tools, preferably with a CLI-based workflow.
Some of the things I want to look at are:
- OpenFPGA support
- Open-source toolchain support
- Linux support
- CLI-based workflow
- Yosys and nextpnr support
- Enough resources to experiment with small CPUs and SoCs
- Good documentation and community support
- Price and availability
- Small enough to easily travel with
A couple of boards came up that looked promising:
| Board | FPGA | Approx. logic | Open-source flow | Memory | Beginner | Room to grow |
|---|---|---|---|---|---|---|
| OrangeCrab | Lattice ECP5-25F / 85F | 24K / 84K LUT | Excellent | 128 MB DDR3L | Medium | Excellent |
| iCEBreaker v1.1a | Lattice iCE40UP5K | ~5K LUT | Excellent | 1 Mbit SPRAM + BRAM | Excellent | Medium |
| ULX3S | Lattice ECP5 | 12K–85K LUT | Excellent | SDRAM | Medium | Excellent |
| Tang Nano 9K | Gowin GW1NR-9 | 8,640 LUT4 | Good / improving | 468 Kbit BSRAM + flash | Good | Good |
| iCESugar | Lattice iCE40UP5K | ~5K LUT | Excellent | 1 Mbit SPRAM + BRAM | Good | Medium |
| Pico-Ice | Lattice iCE40UP5K + RP2040 | 5.3k LUTs, | Excellent | 1Mb SPRAM, 120Kb DPRAM, 8 Multipliers | Excellent | Moderate |
Narrowing it down
Looking at the different boards made it clear that FPGA choice is not only about getting the largest FPGA possible. The toolchain, documentation, physical size and how easy it is to actually experiment with the board are just as important to me.
The OrangeCrab initially looked very interesting. It combines a relatively powerful ECP5 FPGA with a small form factor and excellent open-source tool support. However, I found that the board has been discontinued. I could probably still find one somewhere, but it does not make much sense to choose discontinued hardware when I'm buying a new development board.
The ULX3S also has excellent open-source support and considerably more FPGA resources than most of the other boards. On the other hand, it is quite a large development board. I want something small that I can easily carry around with my laptop and other electronics, so that makes the ULX3S less attractive to me.
The iCEBreaker and iCESugar both use the Lattice iCE40UP5K. This FPGA has very mature open-source support through tools such as Yosys, nextpnr and Project IceStorm. They look like good boards for learning, although the relatively small FPGA means there is less room to grow into larger designs.
The Tang Nano 9K is interesting because it is small, inexpensive and provides more logic resources than the UP5K boards. It uses a Gowin FPGA rather than Lattice, however, so the open-source ecosystem is something I need to investigate further.
The Pico-Ice became particularly interesting. It combines an iCE40UP5K FPGA with an RP2040 on a very small board. The FPGA has excellent open-source tool support, while the RP2040 can handle programming, USB communication and interaction with the FPGA. I already have experience working with RP2040 boards, so this also provides a familiar bridge into FPGA development.
At this point I have not decided which board to get, but the comparison has narrowed down what I'm actually looking for. The next step is to choose one, order it, and start experimenting with the open-source FPGA workflow.