blob: 212e10acb6eec222ad98d4bee6c91fb3b140a7e5 [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
# Script to run fpv (formal property verification) using Jasper Gold
#
# Usage: To run fpv on module foo, type
# fpv foo
#
# Here are some examples:
# fpv rv_plic_fpv
# fpv gpio
#
# More options:
# -p: provide core file path
# -gui: run JasperGold GUI
# -cov: run coverage
# -chk: run checks for assumptions: deadlock, conflict, live chks
# -t: choose which formal tool to use, default using jaspergold, also support
# vcf(VC Formal)
#
# Example:
# fpv pinmux_fpv -p vip:pinmux_fpv -gui -cov -t jg
#
# Note that the module to be tested needs to have an _fpv testbench
# and a corresponding core file for this to work.
export FPV_TOP=$1
shift
gui=0
tool="jg"
export COV=0
export CHECK=0
while [ "$1" != "" ]; do
case "$1" in
"-p")
shift
CORE_PATH=$1
;;
"-gui")
gui=1
echo "using jasper gold GUI"
;;
"-cov")
COV=1
echo "enable FPV coverage"
;;
"-chk")
CHECK=1
echo "enable assumption checks"
;;
"-t")
shift
tool=$1
echo "running in tool: $tool"
;;
esac
shift
done
echo "-------------------------------------------------------------------------"
echo "-- Generate file list using FuseSoC"
echo "-------------------------------------------------------------------------"
echo ""
echo "Top: $FPV_TOP"
echo ""
\rm -Rf build jgproject
# we just run the setup for the default target in order to generate the filelist
if [ "${CORE_PATH}" == "" ]; then
if [[ $FPV_TOP == *"_fpv" ]]; then
CORE_PATH="fpv:${FPV_TOP}"
else
CORE_PATH="ip:${FPV_TOP}"
fi
fi
echo "core_file path: lowrisc:${CORE_PATH}"
fusesoc --cores-root ../.. run --tool=icarus --target=formal --setup "lowrisc:${CORE_PATH}"
echo "-------------------------------------------------------------------------"
echo "-- Run JasperGold"
echo "-------------------------------------------------------------------------"
cd build/*${FPV_TOP}*/formal-icarus
if [ "${tool}" == "jg" ]; then
if [ "${gui}" == "1" ]; then
jg ../../../tools/jaspergold/fpv.tcl \
-proj ../../../jgproject \
-allow_unsupported_OS \
| tee ../../../fpv.log
else
jg -batch \
../../../tools/jaspergold/fpv.tcl \
-proj ../../../jgproject \
-allow_unsupported_OS \
-command exit \
| tee ../../../fpv.log
fi
elif [ "${tool}" == "vcf" ]; then
vcf -f fpv_vcf.tcl
fi
cd -
echo "-------------------------------------------------------------------------"
echo "-- Done"
echo "-------------------------------------------------------------------------"