Home

Awesome

<img src="https://travis-ci.org/tinyfpga/TinyFPGA-B-Series.svg?branch=master" />

TinyFPGA B2 Board

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.

TinyFPGA BX Repo has Moved

If you are looking for the TinyFPGA BX design files and examples, it is in a seperate repository: TinyFPGA BX GitHub Repo.

Features

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.

FPGA Feature Summary

TinyFPGA B1TinyFPGA B2
FPGA ChipICE40LP4KICE40LP8K
Logic Cells3,5207,680
Block RAM Bits80 KBit128 KBit
Phase Lock Loops11
User IO Pins2323

Common Features

Building your own TinyFPGA B1 or B2 Boards

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:

Buy TinyFPGA B1 or B2 Boards

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.

Project Directory Structure

board

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.

bootloader

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.

programmer

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.

template

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).

Project Log

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.

License

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.