#!/bin/bash # Script by Al Williams (Hackaday) #### Things you might want to change: #### Note that none of these will clobber what's already there #### In the environment/env file/command line # Note: Yosys chokes on spaces in library directories (reported to yosys) # Library path if not overriden (environment) DEF_YOSYS_LIBDIR=".:library" # Default yosys options DEF_YOSYS_OPTS= # Default read_verilog options DEF_YOSYS_V_OPTS=-noautowire # default Arachne-pnr options DEF_ARACHNE_OPTS=-d\ 1k # default icetime options DEF_ICETIME_OPTS=-d\ hx1k # default project name DEF_YOSYS_PROJECT= # You probably don't need to change much below this line # for -n option. Put it here so you can override the default # in the env file but that's not likely to happen PROG=1 # Set per directory defaults # look for ice40flow.env in current directory if [ -f ice40flow.env ] then # Note that if you want to not clobber existing environment # You should set the DEF_ variables from above # If you set the others you will override command line/user environment # which is probably not what you want source ice40flow.env fi # Note: Yosys chokes on spaces in library directories (reported to yosys) # Library path if not overriden (environment) YOSYS_LIBDIR=${YOSYS_LIBDIR:-$DEF_YOSYS_LIBDIR} # Default yosys options YOSYS_OPTS=${YOSYS_OPTS:-$DEF_YOSYS_OPTS} # Default read_verilog options YOSYS_V_OPTS=${YOSYS_V_OPTS:-$DEF_YOSYS_V_OPTS} # default Arachne-pnr options ARACHNE_OPTS=${ARACHNE_OPTS:-$DEF_ARACHNE_OPTS} # default icetime options ICETIME_OPTS=${ICETIME_OPTS:-$DEF_ICETIME_OPTS} # Default project YOSYS_DEFPROJECT=${YOSYS_DEFPROJECT:-$DEF_YOSYS_PROJECT} # Handle -n options (didn't use getopts for one option) # Note the default is set before reading env # so if you wanted to never program you could # set PROG=0 in the env file # but there would be no good way to override # Maybe put PROG=${PROG:-0} so you could say # PROG=1 ice40flow to program? I don't know... if [ "$1" == "-n" ] then PROG=0 shift fi # If you provide project name in environment we will # use that unless you provide the name on the command line # No project is an error FN=${1-$YOSYS_DEFPROJECT} if [ ! -z "$FN" -a ! -f "$FN.v" ] then echo 1>&2 "Can't find $FN.v" unset FN fi if [ -z "$FN" ] then echo 1>&2 "Usage: ice40flow [-n] project" echo 1>&2 " -n = Do not program device" echo 1>&2 " Note: project name of foo implies foo.v exists" echo 1>&2 " do not supply the .v suffix on the project name" echo 1>&2 " You can set the following options in the environment or in ice40flow.env:" echo 1>&2 " YOSYS_DEFPROJECT = default project name if not specified on command line" echo 1>&2 " YOSYS_LIBDIR = Colon separated directories to search (no spaces)" echo 1>&2 " YOSYS_OPTS = Options to pass to yosys (try -Qq for quiet output)" echo 1>&2 " YOSYS_V_OPTS = Options to pass to yosys read_verilog (default -noautowire)" echo 1>&2 " ARACHNE_OPTS = Options to pass to Arachne-pnr (default -d 1k)" echo 1>&2 " ICETIME_OPTS = Options to pass to icetime (default -d hx1k)" exit 1 fi # temporary test to warn people about Yosys not liking spaces in the libdir if [[ "$YOSYS_LIBDIR" =~ " " ]] then echo 1>&2 "Error: Yosys currently won't accept spaces in library directory names!" echo 1>&2 "Please change the library path and try again." exit 99 fi if [[ "$FN" =~ " " ]] then echo 1>&2 "Error: Please do not use spaces in the project name!" exit 98 fi yosys $YOSYS_OPTS <&2 "Programming disabled by -n option" fi