Components

icepack

icepack packs and unpacks iCE40 bitstream files. It converts between the binary .bin format (written to flash) and the text .asc format used by icetime and icebox:

icepack design.asc design.bin       # pack to binary
icepack -u design.bin design.asc    # unpack to text

icebox

icebox is both a Python library and a collection of command-line utilities for introspecting iCE40 netlists. It provides:

  • icebox_chipdb — generate chip database files

  • icebox_hlc — convert bitstream to high-level connectivity description

  • icebox_stat — print bitstream resource utilisation statistics

  • icebox_vlog — convert bitstream to Verilog netlist

As a Python library it exposes the full chip database and bitstream manipulation API:

import icebox
ic = icebox.iceconfig()
ic.read_file("design.asc")

icetime

icetime performs static timing analysis on an iCE40 .asc bitstream and reports the maximum clock frequency for each clock domain:

icetime -d hx8k design.asc

icemulti

icemulti combines multiple iCE40 bitstreams into a single file for multi-boot configurations:

icemulti -v -o multi.bin boot0.bin boot1.bin

icepll

icepll is an interactive PLL configuration calculator. Given a desired output frequency it computes the PLL divider settings for the target iCE40 device:

icepll -i 12 -o 48

icebram

icebram replaces the BRAM initialisation data in an existing .asc bitstream without a full re-synthesis, which is useful for updating firmware images:

icebram firmware_old.hex firmware_new.hex < design.asc > updated.asc