1
0
Fork 0
2023-fpga-computer/build.sh

59 lines
1.3 KiB
Bash
Raw Normal View History

2023-01-04 02:26:45 +00:00
#!/usr/bin/env bash
set -e
SRC_DIR=$(pwd)/src
BUILD_DIR=$(pwd)/.build
APIO_HOME_DIR=$(pwd)/.apio
BIN_DIR=$APIO_HOME_DIR/packages/tools-oss-cad-suite/bin
COMMAND=$1
VERSION=$2
MODULES="
$SRC_DIR/adder.v
$SRC_DIR/clock.v
$SRC_DIR/controller.v
$SRC_DIR/ir.v
$SRC_DIR/memory.v
$SRC_DIR/pc.v
$SRC_DIR/reg_a.v
$SRC_DIR/reg_b.v"
TOP=$SRC_DIR/top.v
TB=$SRC_DIR/top_tb.v
if [ -z "$COMMAND" ]; then
mkdir -p $BUILD_DIR
pushd $BUILD_DIR > /dev/null
$BIN_DIR/yosys -q -p "synth_ice40 -json hardware.json" $MODULES $TOP
$BIN_DIR/nextpnr-ice40 --lp8k --package cm81 --json hardware.json --asc hardware.asc --pcf $SRC_DIR/pins.pcf -q
$BIN_DIR/icepack hardware.asc hardware.bin
popd > /dev/null
elif [ "$COMMAND" == "init" ]; then
virtualenv .env
source .env/bin/activate
pip install apio tinyprog
export APIO_HOME_DIR=$APIO_HOME_DIR
apio install oss-cad-suite
elif [ "$COMMAND" == "clean" ]; then
rm -r $BUILD_DIR
elif [ "$COMMAND" == "program" ]; then
source .env/bin/activate
sudo tinyprog -p $BUILD_DIR/hardware.bin
elif [ "$COMMAND" == "sim" ]; then
mkdir -p $BUILD_DIR
pushd $SRC_DIR > /dev/null
$BIN_DIR/iverilog -o $BUILD_DIR/top_tb $MODULES $TB
$BIN_DIR/vvp $BUILD_DIR/top_tb
mv top_tb.vcd $BUILD_DIR/
popd > /dev/null
gtkwave $BUILD_DIR/top_tb.vcd $BUILD_DIR/top_tb.gtkw
else
echo "Invalid arguments"
fi