I have a lot of project ideas I want to work on. However…I’ve been so busy running TinyFPGA that I don’t have much time for implementing projects on the boards myself. That’s pretty ironic since I created these boards in the first place for myself to use
That said, here are my thoughts on projects I would love to see and use myself.
Open Source Microcontroller Toolkit
A toolkit for piecing together your own microcontroller built to your specifications. The user building the microcontroller doesn’t need to know how to write a single line of Verilog. Instead, the toolkit allows them to pick and chose CPU cores and peripherals to make their own custom microcontroller that suites their needs.
To ensure interoperability, all the CPU cores and peripherals use Wishbone B4 Spec. Each CPU core or peripheral is packaged in a standard way along with some meta-data exposed to the toolkit. Both a command-line tool as well as a GUI exist for users to customize their micro-controller. The toolkit can stitch together the components and use the appropriate tools to synthesize the design, compile the code, and download the combined design and program to the FPGA board.
- The JOP CPU is the Java Optimized CPU. It runs Java efficiently and with predictable worst-case execution times. Very slick. I’ve always wanted this in a tiny form-factor and now it’s possible with the TinyFPGA boards. Source code is available on github.
- RISC V microcontroller. Use the PicoRV32 core and implement an open-source RISC microcontroller.
- The old 6502 has some major nostalgia going for it. It doesn’t work well with C code so you need to program it in assembly. There’s a small and fast Arlet Core as well as a Cycle Accurate Core.
Esoteric language machines. Because you can.
AVR8, an AVR-compatible core.
- USB Controller. Take the one from the TinyFPGA B-Series repository and implement a host-interface on top of it.
- SPI Master/Slave
- i2c Master/Slave
- Interrupt Controller
- VGA Controller
- PS/2 keyboard/mouse port
- Stepper Motor Controller
Retro Computer Chip Library
There are a lot of retro computers that could be completely implemented on a TinyFPGA B2 board. There could be even more retro computer chips that could be implemented on the TinyFPGA boards that could then be integrated into a physical retro computer.
It would be great to have a library of these legacy components with their original interfaces along with a Wishbone B4 compliant interface. They could be used as a chip substitute in a real retro computer, or combined together to make various retro computers.
Some Retro Chips:
Standalone Microcontroller Peripherals
Sometimes you just don’t have that one chip you need to finish a project. With a TinyFPGA board and the right design, you could just flash the needed component onto the TinyFPGA board and use it without having to wait for another component to be delivered.
There are a lot of peripherals that are pretty standard but would be wonderful to have available at your fingertips when needed. There are also some specialty peripherals that you could base a project around…the kind of things that FPGAs excel at and microcontrollers have a hard time with.
With a standard SPI-Slave to Wishbone master component, these peripherals could be interchangable with the previous ideas.
- SPI Chip-Select expander: A SPI device that simply expands the number of available CS pins for the microcontroller.
- Low-power SPI polling: A SPI device that polls another device on behalf of the host system while the host sleeps. Once the polling condition is met, the host system can be waken up via an interrupt pin. Note that this can be expanded to many interfaces…implement a protocol engine that can wait for a complicated condition using very little power, then wake up the host.
- Video Adapter: Enable VGA, composite, HDMI, or LVDS video out capabilities for a microcontroller. Text, custom tile, and sprite modes would be great.
- LCD Adapter: Directly control an LCD panel
- Stepper/servo Controller: Implement stepper motor control in an FPGA. It could even implement synchronized control of multiple axis to enable high-quality features like true-linear ramp-up and ramp-down that can be difficult to implement fast enough in a microcontroller. Synchronize with many stepper and servo channels.
- DSP offload: Implement discrete fast fourier transforms, low/high/band-pass filters, and other signal processing in the FPGA to offload the main controller.
These are some ideas that have been floating in my head. I would love to hear more ideas from the community, projects you want to see, projects you want help on, and anything else that comes to mind.