blob: 2b4975a817bbadda957418eb37d7c985b012ad08 [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
# Utility script to load MEM contents into BRAM FPGA bitfile
# Usage:
# cd $REPO_TOP
# ./util/fpga/splice_nexysvideo.sh
# Updated bitfile located at the same place as raw vivado bitfile at
# $REPO_TOP/build/lowrisc_systems_chip_earlgrey_nexysvideo_0.1/synth-vivado/
# lowrisc_systems_chip_earlgrey_nexysvideo_0.1.bit
# A copy of the original bitfile is created at
# $REPO_TOP/build/lowrisc_systems_chip_earlgrey_nexysvideo_0.1/synth-vivado/
# lowrisc_systems_chip_earlgrey_nexysvideo_0.1.bit.orig
set -e
. util/build_consts.sh
TARGET_PREFIX="sw/device/boot_rom/"
TARGET_EXPORT="${TARGET_PREFIX}/boot_rom_export_fpga_nexysvideo"
TARGET="${BIN_DIR}/${TARGET_PREFIX}/boot_rom_fpga_nexysvideo"
FPGA_BUILD_DIR=build/lowrisc_systems_chip_earlgrey_nexysvideo_0.1/synth-vivado/
FPGA_BIT_NAME=lowrisc_systems_chip_earlgrey_nexysvideo_0.1
./meson_init.sh
ninja -C "${OBJ_DIR}" "${TARGET_EXPORT}"
srec_cat "${TARGET}.bin" -binary -offset 0x0 -o "${TARGET}.brammem" \
-vmem -Output_Block_Size 4;
util/fpga/addr4x.py -i "${TARGET}.brammem" -o "${TARGET}.mem"
# The --debug flag is undocumented and causes updatemem to print out the INIT_XX
# values of the four BRAM cells. These values are also oberservable when opening
# the implemented design in Vivado and then inspecting the cell properties of
# the corresponding BRAM cells. This information is very useful when debugging
# the splicing flow.
updatemem -force --meminfo util/fpga/bram_load.mmi \
--data "${TARGET}.mem" \
--bit "${FPGA_BUILD_DIR}/${FPGA_BIT_NAME}.bit" --proc dummy \
--out "${FPGA_BUILD_DIR}/${FPGA_BIT_NAME}.splice.bit" \
--debug
mv ${FPGA_BUILD_DIR}/${FPGA_BIT_NAME}.bit ${FPGA_BUILD_DIR}/${FPGA_BIT_NAME}.bit.orig
mv ${FPGA_BUILD_DIR}/${FPGA_BIT_NAME}.splice.bit ${FPGA_BUILD_DIR}/${FPGA_BIT_NAME}.bit