Project Popsicle Stick v1 - ICE40 STM32 board

ICE40 + STM32 development board

Similar projects worth following
Achieve simple and low cost general purpose ICE40 development board with STM32 MCU. Under CERN OHL V1.2.


ICE40 + STM32 development board
Popsicle STick


Popsicle stick is a simple FPGA development board. The schematics and PCBs are open hardware (CERN OHL V1.2) are free to use in any other project. The board is meant to be easily soldered using a hot air gun. The components are cheap and have lots of stock. ICE40HX1K-TQ144 (FPGA) is the heart of the project and has a small amount of logic gates. This makes the FPGA perfect for beginners. STM32F070CBT6 (MCU) is used to configure and aid the FPGA. The MCU has 128 KB of flash and can store bit streams. The MCU has many interfaces and ADC. ADC can be used to read analog signals and relay it to the FPGA. The motivation behind the project is to learn how to do PCB design.

Main components:

  • STM32F070CBT6
  • ICE40HX1K-TQ144
  • 5V Micro USB connector
  • Crystal oscillators
  • Linear voltage regulators


  • Power/Data from 5V Micro USB
  • SWD
  • Configure ICE40 from STM32 using SPI
  • 36 IO pins for FPGA
  • 17 IO pins for STM32
  • I2C
  • SPI
  • ADC
  • Support IceStorm
  • Cost $40 USD <

System Design

The STM32 is programmed using SWD (header pin) or micro USB. Then the MCU configures ICE40 using SPI. Once configuration is complete, the ICE40 will able to communicate with STM32 using IO. ICE40 is directly connected to 36 header pins. The STM32 has I2C, SPI, UART/USART, and ADC. With the power of ICE40 and STM32 you can drive motors, LEDs and sample analog signals.



  • Learn how to use FPGAs and MCUs
  • Create simple processors
  • Telemetry
  • Real time data processing

Zip Archive - 879.54 kB - 02/10/2016 at 02:59


  • 1 × STM32F070CBT6
  • 1 × ICE40HX1K-TQ144 Logic ICs / Programmable Logic: FPGAs
  • 1 × NX3225SA-32.000MHZ-STD-CSR-1 Frequency Control / Crystals
  • 1 × CDBU0520 Electronic Components / Misc. Electronic Components
  • 1 × LD1117S33CTR Power Management ICs / Linear Voltage Regulators and LDOs

View all 19 components

  • Plans for Project Popsicle Stick v2.0

    Brosnan Yuen05/18/2016 at 01:40 0 comments

    I am thinking about designing version 2.0 of Project Popsicle Stick. However, I have trouble deciding how to pick a new ICE40 chip. The ICE40LP is pretty cost effective for the amount of LUTs. The downside is that I need a 4 layer board. That adds complexity and cost. iCE40-HX4K-TQ144 doesn't require a 4 layer board. The downside is that I need a bigger board and iCE40-HX4K-TQ144 has less LUTs. Anyone have advice?

    I also created a poll if anyone want to help me decide.

  • Design is not successful

    Brosnan Yuen05/05/2016 at 02:34 1 comment

    Well I failed to program the STM32 with STLinkV2. Not matter what I do, the STLinkV2 doesn't detect the STM32.

    List of things checked:

    • All VDD pins are 3.3V
    • All ground pins are grounded
    • There are no shorts to ground
    • Ripple in VDD is minimal
    • BOOT0 is grounded
    • NSRT is connect to VDD
    • STLinkV2 is connected using SWD
    • All PCB traces are continuous
    • Power for STM32 is 3.63 mW (1.1 mA at 3.3V). Seems reasonable.
    • STM32 is in the correct orientation
    • STLinkV2 works on other STM32
    • All STM32 pins were checked
    • Supplier didn't give a faulty STM32 as I un-soldered it and replaced it with a new one

  • Testing the MCU

    Brosnan Yuen05/02/2016 at 04:09 0 comments

    I soldered the MCU on the board. Now to test the MCU. The MCU is need for storing the bit stream of the FPGA. It also relays the data from the USB. Firstly, code needs to be generation. STM32CubeMX is used to configure the clock, internal PLLs, and GPIO. Secondly, code was generated for OpenSTM32's IDE. I added some code to test the GPIO. Finally, OpenSTM32's IDE was configured for STLinkV2. I tried to flash the MCU. However, it failed. I looked around for answers. Then I realized the board doesn't have STLinkV2 built in. I feel kinda stupid....

    Each STM32 development board has STLinkV2 built in it's circuit. To flash and debug a STM32, you need STLink. I thought STLinkV2 was built into the MCU and not the circuit itself. I have to go order a STLinkV2 now.

  • Problems with LDO

    Brosnan Yuen04/30/2016 at 02:35 2 comments

    I have been away for a while since I was studying for exams. Now that exams are over, I can continue the project. I finished soldering the power section of the board. When I tested the 3.3V rail it gave 3.297V. When I tested the 1.2V rail it gave 4.33V. Huh, something is wrong with the LDO.

    It might have been my soldering skills. I am kinda new to SMD soldering. So I remove LD1117S12CTR and replaced it with a new one. Then I checked 1.2V and it gave me 4.33V. Something is still wrong. So I check the part number and the datasheet for LD1117S12CTR. The LD1117S12CTR is failing to produce the correct output voltage. I have no idea what is wrong with my circuit.

  • PCB arrives

    Brosnan Yuen02/27/2016 at 02:47 3 comments

    I used attiny85 as a reference for size.

    I got my PCBs from smart-protoptyping and they seem to be good. I did continuity checks on power and ground and they are fine. The micro USB has enough clearance to fit. Drill sizes and alignment seems fine under microscope.

    I have never soldered any SMD parts before and some of the pad sizes seem too small. I guess I should increase the pad size next time. Also, I made a mistake putting solder mask over via but it works.

    However, my parts haven't arrived yet :/ because of back orders. So I can't build it yet.

  • Delays and reflection

    Brosnan Yuen02/19/2016 at 01:16 0 comments

    I ordered all the parts on Digikey and unfortunately STM32F070CBT6 has a huge backorder. If I ever redesign this again I would pick a ARM processor that has a bigger stock. STM32F070CBT6 is pretty limited in flash size too.

    For the PCB design. I think I need to move mirco USB closer to edge of the board. Also Kicad's edge cuts are very thick(0.15 mm). I think I need to reduce the size of edge cuts next time to avoid the PCB manufacturer messing up.

    The position of the STM32F070CBT6 is bad as I need long vias from data to reach it. The STM32F070CBT6 would be positioned better if it were rotated too. Some of captivators need to positioned closer to the STM32F070CBT6.

    The ground plane is bad because of vias and analog signals. The vias cut up the ground plane increasing resistance. The analog signals from STM32F070CBT6 need to be separated from the digital signals. I need to place a star ground to isolate them.

    The traces going from STM32F070CBT6 to ICE40HX1K-TQ144 is not ideal. I need to look at pin outs befprce I do circuit design.

    Finally, the silkscreen doesn't have labels from pinouts.

  • Final PCB design

    Brosnan Yuen02/09/2016 at 23:00 0 comments

    Final PCB is checked and sent to smart prototyping to be manufactured.

  • More logic gates

    Brosnan Yuen02/09/2016 at 00:23 0 comments

    I just realized ICE40HX4K-TQ144 will work with the board. However the STM32 doesn't have enough space to fit the bit stream. So it might work with a compression algorithm.

    Yay, we get more logic gates!

  • Preliminary PCB design

    Brosnan Yuen02/08/2016 at 06:09 0 comments

    A very rough version of the PCB design. I need to look it over to see if it works. The pinouts have changed to make PCB design easier. I should probally do teardrops for USB . After this, I might manufacture it at smart prototyping.

  • Components

    Brosnan Yuen02/06/2016 at 19:46 0 comments

    Footprints and components are picked time to make the PCB.

View all 11 project logs

Enjoy this project?



MachineHum wrote 07/06/2017 at 03:29 point

Two of my favorite parts on the same board!!

  Are you sure? yes | no

julien wrote 02/23/2016 at 08:59 point

Most STM32 parts are pin compatable and pretty software compatible. Is there not another chip in the series you can use instead of the STM32F070CBT6.

  Are you sure? yes | no

Brosnan Yuen wrote 02/23/2016 at 16:49 point

When I went to order it at Digikey. It said it had 1000 stock. However, when my order was processed, they ran out of stock. I didn't want to pay multiple shipping fees so I'll wait a long time. I ordered it at Feb 14 and Digikey says stock will arrive on March 25.

The lesson here is that you never order anything under 10,000 stock... unless you want to wait.

  Are you sure? yes | no

julien wrote 02/24/2016 at 00:38 point

Thats quite odd. I haven't had that happen before. Most MCUs wont usually ever have that much stock. I think you just had bad luck on that one.

  Are you sure? yes | no

Similar Projects

Does this project spark your interest?

Become a member to follow this project and never miss any updates