Around the time of the pandemic, or even before, I acquired a couple FPGA board with the intend to learn more about FPGA programming.
The Alchitry Au is a development board based on the Xilinx Artix 7. At that stage, I wasn’t really into doing coding in the Xilinx toolchain since its big and not open source.
The Alchitry Cu is a lower powered board based on the Lattice iCE40, even lattice offers their own toolset called iCECube, there are open source alternatives. (yosys, nextpnr, etc)
- Lattice iCE40-HX8K FPGA - 7680 logic elements
- 79 IO pins (3.3V logic level)
- USB-C to configure and power the board
- Eight general purpose LEDs
- One button (typically used as a reset)
- 100MHz on-board clock (can be multiplied internally by the FPGA)
- Powered with 5V through USB-C port, 0.1” holes, or headers
- USB to serial interface for data transfer (up to 12Mbaud)
- Qwiic Connector
- Dimensions of 65mm x 45mm
The Alchitry io board is also a nice addition, including DIP switches, LED and segmented LED that you can use to test your circuit design.
- 4x 7-segment LED digits
- 5x momentary push buttons
- 24x LEDs
- 24x DIP switches
Lately, I’ve been following the tutorial from Digi-Key, this is a great introduction about FPGA, from building blinky to RISC-V. (Since I am using Alchitry-Cu, the pcf and some of the logic design has to be tailored for the Alchitry-Cu)
While following the show, and programming the FPGA, I have encountered couple issues with the board, and I will highlight them here.
I will first start with the pros for the board:
- Small footprint (very small, credit card sized)
- USB-C (yeah, I care about this a lot)
- Schematic is available (same can be said for most dev board)
- Program with USB
- Can be used with open source toolchain (apio)
And the cons for the board:
- iCE40-HX8K is a bit limited in terms of embedded ram
- Not enough existing peripheral could be used
- Alchitry io has hardware flaw (fixed in new v2 version)
When working on the project for the push button, I realized there is no pull-up-down resisters on the board. The board internally has pull-up resistors but the switch is also hooked up to the VCC so there is no sense to use the internal pull-up resistor.
This has created a lot of pain for us, since a separate pull down simulator has to be implemented to simulate the pull down.
// A module to emulate pull down resistors by occasionally pulling outputs low.
What this does is everytime we want to read the pin, we pull it to low, this would allow the pin to exit the floating state and able to function exactly like a correctly pulled down input.
In the updated version of the IO sheld, this issue has been fixed and proper pull down has been added.
This change can also be seen on the PCB as well
If you happened to be using Alchitry Cu with the outdated IO shield. Here are some utilities I wrote during my learning, also please feel free to make any suggestions.