blob: 5f296d49b91f878a8fa38093e4a649399d123c18 [file] [log] [blame]
#!/bin/bash
# Copyright lowRISC contributors.
# Licensed under the Apache License, Version 2.0, see LICENSE for details.
# SPDX-License-Identifier: Apache-2.0
set -e
usage() {
echo >&2 "ERROR: $1"
echo >&2 ""
echo >&2 "Usage: build-bitstream-vivado.sh <toplevel> <target>"
echo >&2 ""
echo >&2 " toplevel should be something like 'top_earlgrey'."
echo >&2 " target should be something like 'cw310' or 'cw305'"
exit 1
}
if [ $# != 2 ]; then
usage "Unexpected number of arguments"
fi
TOPLEVEL=$1
TARGET=$2
case x"$TOPLEVEL" in
xtop_earlgrey)
HAS_SCRAMBLED_ROM=1
HAS_OTP=1
RUN_TOPGEN_FUSESOC=0
;;
xtop_englishbreakfast)
HAS_SCRAMBLED_ROM=0
HAS_OTP=0
RUN_TOPGEN_FUSESOC=1
;;
*)
usage "Unknown toplevel: $TOPLEVEL"
;;
esac
# Convert "top_earlgrey" to just the tea flavour: "earlgrey"
FLAVOUR=${TOPLEVEL:4}
case x"$TARGET" in
xcw310)
ROM_TARGET=cw310
;;
xcw305)
ROM_TARGET=cw305
;;
*)
usage "Unknown target: $TARGET"
;;
esac
. util/build_consts.sh
TOPLEVEL_BIN_DIR="$BIN_DIR/hw/$TOPLEVEL"
mkdir -p "$OBJ_DIR/hw"
mkdir -p "$TOPLEVEL_BIN_DIR"
if [ $HAS_SCRAMBLED_ROM == 1 ]; then
BOOTROM_SUFFIX=.scr.39.vmem
else
BOOTROM_SUFFIX=.32.vmem
fi
BOOTROM_VMEM_FNAME="test_rom_fpga_$ROM_TARGET$BOOTROM_SUFFIX"
BOOTROM_VMEM="$BIN_DIR/sw/device/lib/testing/test_rom/$BOOTROM_VMEM_FNAME"
test -f "$BOOTROM_VMEM" || {
echo >&2 "No such file: $BOOTROM_VMEM"
exit 1
}
if [ $HAS_OTP == 1 ]; then
OTP_VMEM_FNAME="otp_img_fpga_$TARGET.vmem"
OTP_VMEM="$BIN_DIR/sw/device/otp_img/$OTP_VMEM_FNAME"
test -f "$OTP_VMEM" || {
echo >&2 "No such file: $OTP_VMEM"
exit 1
}
OTP_ARG=--OtpCtrlMemInitFile="$OTP_VMEM"
else
OTP_ARG=""
fi
if [ $RUN_TOPGEN_FUSESOC == 1 ]; then
util/topgen-fusesoc.py --files-root=. --topname="$TOPLEVEL"
FILESET=topgen
else
FILESET=top
fi
CORE_NAME="lowrisc:systems:chip_${FLAVOUR}_${TARGET}"
fusesoc --verbose --cores-root=. \
run --flag=fileset_$FILESET --target=synth --setup --build \
--build-root="$OBJ_DIR/hw" \
"$CORE_NAME" \
--BootRomInitFile="$BOOTROM_VMEM" \
$OTP_ARG
BITSTREAM_FNAME="lowrisc_systems_chip_${FLAVOUR}_${TARGET}_0.1.bit"
BITSTREAM_PATH="$OBJ_DIR/hw/synth-vivado/$BITSTREAM_FNAME"
cp "$BITSTREAM_PATH" "$TOPLEVEL_BIN_DIR"
cp "$OBJ_DIR/hw/synth-vivado/rom.mmi" "$TOPLEVEL_BIN_DIR"
if [ $HAS_OTP == 1 ]; then
cp "$OBJ_DIR/hw/synth-vivado/otp.mmi" "$TOPLEVEL_BIN_DIR"
fi