My partner in crime working on myStorm – Ken Boak (@monsonite) has written a guest post about myStorm from his perspective, it’s rather less hand wavy than the quickening groundwork I laid down, focusing in on our first real product and it’s features, enjoy..
myStorm is the perfect combination of a $5 Raspberry Pi Zero, a $1, 32-bit ARM microcontroller and a $5 versatile low power FPGA – an open hardware platform – brought to life with innovative open source software.
As a low cost development platform for digital devices based on FPGA and ARM technology, myStorm aims to achieve a price point, previously unavailable in FPGA boards.
Aimed at Engineers, Hobbyists and Students of Electronics and Computing Science, myStorm offers a versatile FPGA platform that can be used as a system building block within physical computing devices.
The Story Begins…
I had been wanting to create an FPGA board for some time – especially now since Clifford Wolf’s open source ICE Storm toolset has become available.
The opportunity presented itself a couple of months ago, when following a discussion with fellow embedded hardware engineer, Alan Wood (@folknology on Twitter) who came up with the concept and philosophy, over a post-OSHUG beer, we decided that we would produce a small FPGA board using the Lattice ICE40HX4K part.
This dev-board will be needed for a forthcoming FPGA workshop to be held in early September at OSHCamp – held in Hebden Bridge, near Halifax, Yorkshire.
We wanted a “no-nonsense” FPGA development board that would encourage open source hardware enthusiasts to take their first steps with low cost FPGAs and verilog or VHDL. The emphasis would be in producing a low cost board that provided the greatest versatility and connectivity possible – and would form a useful platform that was cheap enough to be built into other projects. So we aimed to hit the $30 price point – which is the sweet spot for open hardware designs.
Make it So….
The board had to be 2 layer, fit the size constraints of EagleCAD Lite, and use components that could, if necessary, be soldered at home – by those DIY’ers experienced with Surface Mount parts. For this reason we chose a 144 pin LQFP package for the FPGA rather than a BGA – as BGAs are neither very friendly for 2 layer pcb layout, nor for soldering.
Alan did the preliminary system design, whilst I looked at finding an efficient means of routing the on board SRAM to the FPGA for minimum signal skew. The solution was to put the SRAM on the underside of the pcb – directly beneath the FPGA package.
After several Saturday lunctime pub-meetups we settled on an overall design, with which we have played ping-pong on GitLab for the last week or so, slowly refining the layout between us – but is now ready to go for prototype pcb manufacturing.
Low Cost – Achieving a price-point breakthrough!
Seldom do you get much of an FPGA board for under $50 – with the $22 Lattice ICE Stick setting the current lower limit.
But the ICEStick is limited by the HX1K part, and very little accessible I/O.
Like a lot of FPGA boards, it also uses the FT2232 USB to serial bridge to provide programming and communications, but this IC costs around $5, to me has always seemed a rather expensive solution. Something would have to be done to eliminate the FT2232.
Alan had the brilliant idea of using an inexpensive ARM microcontroller to provide the FPGA support role – acting both as the programmer, the store for the bitfile in it’s Flash and as a versatile ADC/COMS slave processor, this also allows standalone operation with a PC via usb.
We believe that with this approach we achieve a board selling price of $30 (£23) which will provide a highly versatile FPGA platform that is cheap enough to be embedded into other projects – it’s the “Arduino” of FPGA’s.
Raspberry Pi integration
A Raspberry Pi Zero (or regular Raspberry Pi) – which can host all of the FPGA and ARM development tools, provides an integrated design environment for FPGA and ARM – at a novel concept in hardware hacking projects.
The Pi can be used to host the Project Ice Storm tool chain, and if fitted via the 40 pin connector on the left to the myStorm board provides a complete integrated FPGA development system without a PC.
In addition to being used as a host system, the Pi has full access to the FPGA via a bidirectional 8 bit bus. The FPGA can if required act as the complete I/O sub-system to the Raspberry Pi. This allows the myStorm board to be used in sophisticated projects, for example digital instrumentation, digital storage oscilloscopes, logic analysers, protocol analysers, waveform synthesis, graphics generators etc etc.
It is unlikely that this level of advanced system “building block” has been previously achievable to the hobbyist for around the $35 price-point. (A Raspberry Pi Zero can be supplied by the user for as low as $5)
Connectivity is a key feature, and so the board uses some old familiar friends – including Arduino “Shield” headers to provide access to a rich mix of GPIO. The GPIO and ADC lines connect directly to the ARM microcontroller, and the digital pins are 5V tolerant.
The ADC pins provide up to 6 channels of 12 bit ADC. In some projects the STM32 will act mainly as an I/O and coms slave, and for this it can be programmed using the STM32-Duino variant of the Arduino IDE or using mbed – where it can appear as a Nucleo 103.
The Arduino Shield connectors have a further 6 pins available on the “power” connector. These are connected to the STM32 pins but additionally via link resistors to 4 of the FPGA pins. These may be used where you need only a few lines of direct connection to the FPGA.
For small projects, the “Arduino” headers will accept a variety of shields or proto-boards, including the 50mm x 50mm sub-shields that I have developed over the last year.
Whilst many existing FPGA boards tend to be loaded with other hardware – such as LED digits, switches, VGA connectors and audio – we have chosen not to put these on board, but allow them to be added externally.
Our connectors have been placed as far as practically possible on an 0.1″ grid spacing. This allows a 75mm x 75mm “super-shield” to be placed on top – accessing the majority of the I/O lines.
The industry standard connector for FPGA dev-boards is the PMOD connector – devised by Digilent – so our board has up to 13 of these available, either in the 6-pin single row PMOD, or double PMOD version.
Another recent ICE40 FPGA board by Olimex has defined a large general GPIO IDC header for expansion – and so this 34 pin connector can be added as an alternative to the PMODS on the right hand edge of the board.
Finally, for a bit of fun, we have also included a connector to directly drive 32 x 32 RGB LED panels. These are now available cheaply from several sources – and provide a very graphical way of seeing the output from the FPGA.
On Board ARM Microcontroller
As you can see from the pcb layout, we have included a microcontroller, to the left of the FPGA.
This is the popular STM32F103 part – an ARM Cortex M3, which gives the board a lot of its versatility and GPIO peripherals by providing 12-bit ADC channels and communications interfaces – including USB, UART, SPI and I2C.as well as providing a large flash array, into which a bitfile for programming the FPGA will be stored.
The STM32 is linked to the FPGA by an 8 bit wide bidirectional data bus, complete with handshaking lines.
The Lattice ICE40 series FPGA with a large SRAM attached, connected to an ARM M3/M4 Cortex microcontroller provides the ideal platform for developing soft core cpu designs.
The STM32 can be programmed using STM32Duino – a variant of the Arduino programming IDE.
Taking our inspiration from IceStick and the Olimex boards – they both use an ICE40 HX1K part which is about $1 cheaper, but we felt that this might ultimately prove to be a bit too small for hobbyist projects – so we opted for the HX4K part.
We have also made provision on the underside of the pcb for a 16-bit wide fast (10ns) SRAM. Olimex use a 256K x 16 SRAM, and we have stretched this out with an extra address line to allow for 512K x 16 SRAMs.
Some of the design features – summarised:
- Open Source Hardware and Software
- Low cost – suit even the smallest budget – about $30
- A Usb connector for direct programming from a PC or laptop.
- Compact 75 x 75mm – but with a useful range of connectivity signals available
- Lattice iCE40HX4K – 144pin LQFP package with up to 52 I/O lines – arranged on industry standard PMOD ports
- PMOD and double PMOD connectors on 0.1″ grid spacing for easy interfacing
- Arduino compatible shield headers – giving 5V tolerant GPIO, 12 bit ADC and peripherals
- An onboard ARM M3 for handling USB comms, GPIO and ADC channels and FPGA loading
- FPGA provided in an LQFP package – for easier layout and possibility of home assembly
- A fast 64K x 16 SRAM (512K x 16 maximum) – allows soft core cpu system
- Standard Pi 40 pin (2 x 20) GPIO header – allows optional attachment of Pi-Zero for programming and development – either using a cable or direct header connection to Raspberry Pi or Pi Zero
- A connector to directly drive 32 x 32 RGB LED panels
- The ARM Cortex M3 (M4) holds the bit-file for the FPGA in flash, and uploads it to the FPGA on power-up.
- Raspberry Pi 8-bit Host Port – an 8 bit bidirectional bus for high speed data transfers between the FPGA, the ARM Cortex M3 and the Pi.
- 3rd party development open source software – eg ICE Studio graphical design environment.
- ARM M3/M4 Cortex provides a USB interface to a PC, plus the following I/O and peripherals:
- 72MHz/120MHz 64 pin ARM Cortex M3/M4 processor:
- Arduino compatible with STM32-Duino extension
- 256Kbytes Flash
- 32Kbytes SRAM
- Up to 37 GPIO lines with 5V tolerance (20 digital I/O available on Arduino style headers)
- Up to 10 ADC inputs with 12bit 1MHz (2 ADCs)
- Three 16-bit differential input SD-ADCs (optional – with STM32F373 mcu)
- 3 UARTS
- 2 SPI
- 2 I2C
- Many 16/32 bitTimers
Following up the first myStorm builds can been perused at Brewing A Storm
Part 2 “A Strom in a pint pot” looks at the task of achieving the $30 price breakthrough