Skip to content

Project IceStorm

Project IceStorm is a reverse-engineering effort that fully documents the bitstream format of Lattice iCE40 FPGAs and provides a suite of open-source tools for analyzing, creating, and programming bitstream files. Created by Claire Wolf and Mathias Lasser, it was first presented at the 32nd Chaos Communication Congress in Hamburg, Germany in 2015.

For evolvable hardware research, Project IceStorm is the foundational enabler --- it is the reason intrinsic analog EHW on FPGAs is possible again after the discontinuation of the Xilinx XC6200 series. The fully documented bitstream allows the Bitstream Evolution toolkit to read, mutate, and write bitstreams programmatically at the individual bit level.

Official Website GitHub Repository

Key Tools

Tool Description
icepack / iceunpack Convert between human-readable ASCII (.asc) and binary bitstream (.bin) formats. Critical for EHW — enables programmatic mutation of bitstreams.
iceprog Programs bitstream files directly to iCE40 FPGAs over USB for rapid iterative evaluation.
icetime Performs timing analysis on bitstreams, estimating propagation delays.
icebox Python library for bitstream analysis; useful for understanding the mapping between bitstream bits and physical FPGA resources.
icepll Configures PLL (phase-locked loop) parameters.
icebram Handles Block RAM content manipulation within bitstreams.
icemulti Manages multi-image bitstream configurations.

Role in the Toolchain

Project IceStorm sits at the end of the open-source FPGA synthesis flow and is the entry point for evolutionary manipulation:

Yosys (synthesis) → nextpnr (place & route) → IceStorm/icepack (bitstream generation)
                                                   Seed Bitstream (.asc / .bin)
                                              Evolutionary Algorithm
                                         (mutate .asc via iceunpack/icepack)
                                                   iceprog → FPGA
                                                 Fitness Evaluation

Supported Chips

Project IceStorm documents the complete bitstream format for:

  • iCE40 LP/HX 1K, 4K, 8K
  • iCE40 UltraPlus (UP5K) — including DSPs, oscillators, RGB LED drivers, and SPRAM

Project Use

The icepack/iceunpack tools are essential to the Bitstream Evolution evolutionary loop: bitstreams are unpacked to ASCII, mutated by the evolutionary algorithm, repacked to binary, and then loaded onto the FPGA via iceprog for fitness evaluation. The icebox tools are also used for analyzing the structure of evolved circuits.