The newest addition to yoursunny.com's toy vault is Fipsy FPGA Breakout Board, a tiny circuit board offering a piece of Lattice MachXO2-256 field-programmable gate array (FPGA).
After porting an SPI programmer to ESP32, it's time to write some Verilog!
Blinky is boring, but I did it anyway.
Then, I'm moving on to better stuff: a piano.
The piano is an acoustic music instrument played using a keyboard.
When a key is pressed, a hammer strikes a string, causing it to resonate and produce sound at a certain frequency.
A normal piano has 88 keys, and each key has a well-defined sound frequency.
My "piano", built on Fipsy, has four keys, and uses a passive buzzer to produce sound.
Play Tone on Passive Buzzer with FPGA
A passive buzzer plays a tone controlled by an oscillating electronic signal at the desired frequency.
In Arduino, the
tone() function generates a square wave of a specified frequency, which can be used to control a passive buzzer.
MocoMakers is creating Fipsy FPGA Breakout Board, a tiny circuit board offering a piece of Field-programmable gate array (FPGA).
I worked with FPGA years ago in class projects, but didn't have access to a device after that.
I backed the project, and received two Fipsy boards on Jul 20.
Fipsy is a very simple board: there is no power regulator or USB port.
The official method to program the Fipsy is through the SPI port on a Raspberry Pi.
It is easy to setup, and is a good use case for my Raspberry Pi Zero W, but there is one problem:
It is good practice to power off the circuit when modifying hardware wiring.
However, powering off a Raspberry Pi cleanly requires sending a
shutdown command and waiting for a few seconds.
If I just pull the power cord, I would risk corrupting the filesystem.
ESP32 microcontroller has SPI ports, and can be powered off and restarted very quickly.
Can I program Fipsy from an ESP32?
Hardware side is easy.
ESP32 has two available SPI ports, HSPI and VSPI, and I connected Fipsy to the Heltec WiFi_Kit_32's HSPI port.
All that remains is deciphering the spaghetti code of the official programmer.
After a day of hard work, I got it working: