Low-cost, open-source FPGA boards in a tiny form factor with built-in USB, SPI flash, LDO, and MEMS clock.
I've documented the bootloader protocol a bit more in the GitHub repo: https://github.com/tinyfpga/TinyFPGA-B-Series/blob/master/bootloader/README.md
If you want to integrate the TinyFPGA B-series into a development platform, you can ideally use the tinyfpgab.py programmer script instead of writing your own. However, there are some cases where it's just not practical or user-friendly to do so. In those cases this README should help along with the reference implementation that tinyfpgab.py provides.
I've also added support for programming TinyFPGA B-series bitstreams using a command-line interface. Take a look at the READ for instructions on using the command line interface.
I've finally gone over the schematics of all my projects and organized them a little bit so they are nice and easy to follow. For people that don't have KiCad installed, making the schematics available in PDF form is much more convenient and easy to share for quick reference.
You can view the PDF directly on GitHub: https://github.com/tinyfpga/TinyFPGA-B-Series/blob/master/board/TinyFPGA-B.pdf, or you can take a look at the image included below.
I've also started a new Hackaday.io project, #The Hobbyist's Guide to FPGAs. I'll be posting articles, tutorials, and hands on labs using the TinyFPGA boards as project logs. If this sounds interesting to you then follow the project to be updated when new content is posted.
I've updated the getting started guide to include installation of @Paul Stoffregen's Virtual Serial Driver Installer if you use a version of Windows older than Windows 10. If you ordered a TinyFPGA B2 board and are planning on using an older version of Windows, you will need to install the driver in order to program the board.
Windows 10 has a brand new USB serial port driver that works for all CDC class USB devices (USB serial ports). Older versions of windows don't do this because some devices aren't exactly compliant to the CDC class driver and needed special workarounds. The new Windows 10 USB serial driver gets around this by relaxing its standards a bit and letting devices misbehave a little bit. This allows them to default to using the universal driver. Paul's installer installs an INF file that tells windows that any CDC class USB device that doesn't already have a driver specific to its VID and PID can use the generic USB serial port driver.
Paul went through all the work to make this installer and get it signed. Not only does it work for his Teensy boards, it also works for everyone else that makes a generic USB serial device with a different USB VID and PID. Thanks Paul!
The TinyFPGA B2 boards are available to buy today from Tindie: https://www.tindie.com/products/tinyfpga/tinyfpga-b2/
Take a look and buy the tiniest FPGA board with this many logic resources!
The firmware and hardware of the production programmer/tester for the B-series boards is finished. This is what I use to program the bootloader onto the SPI flash and test all of the components of the board. The TinyFPGA B-Series boards have many more components than the #TinyFPGA A-Series boards and there is a lot more that can go wrong.
During PCB manufacture the final step is electrical test. The bare PCBs are tested automatically using a machine that probes all of the traces and ensures there are no shorts or opens. After the board is populated with all of its components further tests must be made. The connectivity of each of the components must be tested as well as their basic functionality. This is what the pogo-bed tester firmware currently does:
So far all of the boards are passing, however I anticipate there will be some boards that fail due to one reason or another. Any failing boards will be analyzed and feedback sent to the manufacturer and/or updates made to the PCB layout.
With current progress the hardware is ready to be listed on Tindie for sale, however I will need to make sure there is a getting started guide that can get people up and running with the board quickly.
The production tester and programmer PCBs don't arrive from OSH Park until late next week. I wanted to get a head start so I hacked together a more convenient prototype than a basic solderless breadboard. This one uses pogo-pins and has all the necessary connections to program and test the board.
It's an ugly piece of kit, but does the job. I'm using one of the #Teensy 3.0 & 3.1 & 3.2 & 3.5 & 3.6 boards as the brains of the tester. Teensy 3.6 is perfect for the task. It has a built in micro SD card slot, USB device and host mode at the same time, and plenty of analog and digital IO for testing all the pins of the B-series boards as well as any indicators or displays I may want to add.
I test a board by pressing on it's reset button while pushing it on the pogo pins at the same time. The microswitch will activate when the board is pressed firmly against the pins. I've found that programming will fail if the board is not firm on the pogo pins. It takes several seconds per board for the full program, verify, and test cycle. I may want a lever to hold down the board while it is being tested.
I ran about ten boards through the programming cycle to find and fix any bugs. Ultimately one of the B2 boards had a defect. Looks like a faulty SPI flash chip at this point. The detailed failure information from the tester says it always fails at a specific address in flash. Interesting failure. Maybe ESD related, I'll need to take some more precautions going forward. Anways I can replace the flash chip at a later date and use the reworked board for a free giveaway.
A few more things need to be done before I can list the board on Tindie:
Happy with current progress.
I spent some time last night sketching up a quick PCB for testing and programming TinyFPGA B1 and B2 boards. I previously made a tester for the TinyFPGA A1 and A1 boards. I followed the general strategy that sparkfun uses for their boards. The A-Series tester looks like this:
I press the board onto the pogo pins, the Teensy 3.0 microcontroller tests all the pins via JTAG boundary scan and lights up the green LED if it passes. This rig made it pretty easy to test all of the A1 and A2 prototype and production boards.
The B-Series boards are a bit more complex and have a few more things to test. Some of the differences:
Because of these extra requirements I've decided to upgraded to a Teensy 3.6. It's probably overkill, but it has the extra pins I needed as well as a built-in SD card slot and high clock speed. So I can do things like a basic test of the 16MHz clock and output of the voltage regulators. Additionally the extra pins give me the opportunity for more control and feedback during testing: I can integrate a display for pass/fail information. I could even have multiple bitstream images on the SD card in case I want to offer pre-programmed designs in addition to the basic bootloader.
The tester PCB ended up being pretty simple though:
I will almost certainly be hacking in some changes to the tester once I get it back from OSH Park, but I have already taken too long to make this programmer and so I wanted to start moving faster. I gave myself a decently sized breadboard area to add any buttons, indicators, or LCD.
Meanwhile I have a simple firmware development setup for the Teensy. This will let me have my firmware finished and tested in time for the actual production testing hardware. I have the bootloader programming portion of the tester firmware complete and am now working on the testing portion.
The PCBs should come back late next week. With some luck I'll be able to get it working and list the first batch of TinyFPGA B2 boards on Tindie.