The TinyFPGA B2 board is a tiny FPGA board with a low cost per logic element and convenient USB bitstream programming capability. It measures just 18mm x 36mm and is a perfect fit for breadboards.
If you are looking for the TinyFPGA BX design files and examples, it is in a seperate repository: TinyFPGA BX GitHub Repo.
The heart of the B-series boards is either a ICE40LP4K or ICE40LP8K FPGA from Lattice. For full details on the ICE40 series of FPGAs you can read the ICE40 Family Handbook.
|TinyFPGA B1||TinyFPGA B2|
|Block RAM Bits||80 KBit||128 KBit|
|Phase Lock Loops||1||1|
|User IO Pins||23||23|
It is possible to build the TinyFPGA B-Series boards by hand in a home lab. However, it uses tiny 0402 surface mount capacitors and resistors and the ICE40 FPGAs used are in a 81 ball BGA package with 0.4mm pitch between the balls. It is a challenging undertaking and will most likely result in some bad assembled boards along with the good. I have used the following with success to hand assemble the prototype boards:
programmer_arduinofolder to load the bootloader onto the SPI Flash using an Arduino.
If you don't want to go through the hassle of ordering parts, tools, and supplies and assembling the boards yourself you can order professionally assembled and tested boards from Tindie or the TinyFPGA Store. These boards are not hobbyist-made, they are fabricated and assembled in a professional PCB fab that manufactures and assembles many other consumer, industrial and military electronics. They go through an automated testing and programming process to ensure the board is healthy and ready to program over USB.
This contains a KiCad project with the schematic and layout of the B-series boards. The board is designed with 4/4mil track size/spacing and 0.2mm hole size. BOM lists for B1 and B2 boards are available here as well.
FPGA boards with USB bitstream programming capability typically use an expensive USB interface chip to provide this functionality. The TinyFPGA B-series implement the USB bitstream programming capability within the FPGA itself. This directory contains the verilog code that implements this bootloader. The code is organized as an iCEcube2 project. The bootloader itself works in the same way an Arduino bootloader works. It is the first design to boot on the FPGA, if it is connected to a USB host it waits for a new bitstream to be programmed to the SPI flash, then reboots the FPGA to load the user design from flash. If the board is not connected to a USB host or if there is no programmer application running on the host then the bootloader will quickly timeout and load the user design. The bootloader does not consume any FPGA resources while the user design is loaded.
The bootloader uses a simple protocol over a generic USB serial interface. This directory contains a Python module for interfacing with the bootloader as well as a friendly Python GUI application for selecting and programming bitstreams.
This is a template iCEcube2 project for developing your own designs to program onto the board. It takes care of pin and clock constraints. Just edit the TinyFPGA_B.v file to add your designs module(s).
For more information on the development and production of the B-Series please read and follow the TinyFPGA B-Series Project Page at hackaday.io.
The TinyFPGA B-Series project is an open source project licensed under GPLv3. Please see the included LICENSE file for details. If you do wish to distribute boards derived from this open source hardware project then you must also release the source files for the boards under GPLv3. You are free to do this, but please improve upon the original design and provide a tangible benefit for users of the board.