1
0
rocket-chip/scripts/tracegen+check.sh
2016-07-28 11:36:55 -07:00

149 lines
3.6 KiB
Bash
Executable File

#!/bin/bash
# This file was originally written by Matthew Naylor, University of
# Cambridge.
#
# This software was partly developed by the University of Cambridge
# Computer Laboratory under DARPA/AFRL contract FA8750-10-C-0237
# ("CTSRD"), as part of the DARPA CRASH research programme.
#
# This software was partly developed by the University of Cambridge
# Computer Laboratory under DARPA/AFRL contract FA8750-11-C-0249
# ("MRC2"), as part of the DARPA MRC research programme.
#
# This software was partly developed by the University of Cambridge
# Computer Laboratory as part of the Rigorous Engineering of
# Mainstream Systems (REMS) project, funded by EPSRC grant
# EP/K008528/1.
# This script can be used to test the memory consistency of rocket
# chip in simulation when compiled with the 'TraceGenConfig'
# configuation.
###############################################################################
# Parameters
# ==========
# Arguments are taken from environment variables where available.
# Elsewhere, defaults values are chosen.
START_SEED=${START_SEED-0}
NUM_TESTS=${NUM_TESTS-100}
EMU=${EMU-emulator-Top-TraceGenConfig}
TRACE_GEN=${TRACE_GEN-tracegen.py}
TO_AXE=${TO_AXE-toaxe.py}
AXE=${AXE-axe}
MODEL=${MODEL-WMO}
LOG_DIR=${LOG_DIR-tracegen-log}
TRACE_STATS=${TRACE_STATS-tracestats.py}
###############################################################################
# Inferred parameters
# ===================
END_SEED=`expr \( $START_SEED + $NUM_TESTS \) - 1`
LOG=$LOG_DIR
PATH=$PATH:.
# Sanity check
# ============
if [ ! `command -v $EMU` ]; then
echo Can\'t find emulator: \'$EMU\'
exit -1
fi
if [ ! `command -v $TO_AXE` ]; then
echo Please add \'toaxe.py\' to your PATH
exit -1
fi
if [ ! `command -v $TRACE_GEN` ]; then
echo Please add \'tracegen.py\' to your PATH
exit -1
fi
if [ ! `command -v $AXE` ]; then
echo Please add \'axe\' to your PATH
exit -1
fi
if [ ! `command -v $TRACE_STATS` ]; then
echo Please add \'tracestats.py\' to your PATH
exit -1
fi
if [ "$MODEL" != SC -a \
"$MODEL" != TSO -a \
"$MODEL" != PSO -a \
"$MODEL" != WMO -a \
"$MODEL" != POW ]; then
echo Unknown consistency model \'$MODEL\'
exit -1
fi
# Setup log directory
# ===================
if [ ! -d $LOG ]; then
echo Creating log directory: $LOG
mkdir $LOG
fi
rm -f $LOG/errors.txt
rm -f $LOG/stats.txt
# Test loop
# =========
echo Testing against $MODEL model:
for (( I = $START_SEED; I <= $END_SEED; I++ )); do
SPACE=`expr $I \% 10`
if [ $SPACE -eq 0 ]; then
echo -n " "
fi
NEWLINE=`expr $I \% 50`
if [ $NEWLINE -eq 0 ]; then
printf "\n%8i: " $I
fi
# Generate trace
$TRACE_GEN $EMU $I > $LOG/trace.txt
if [ ! $? -eq 0 ]; then
echo -e "\n\nError: emulator returned non-zero exit code"
echo See $LOG/trace.txt for details
exit -1
fi
# Convert to axe format
$TO_AXE $LOG/trace.txt $LOG/stats.txt 2>> $LOG/errors.txt > $LOG/trace.axe
if [ ! $? -eq 0 ]; then
echo -e "\n\nError during trace generation with seed $I"
echo "See $LOG/errors.txt"
exit -1
else
# Check trace
OUTCOME=`$AXE check $MODEL $LOG/trace.axe 2>> $LOG/errors.txt`
if [ "$OUTCOME" == "OK" ]; then
echo -n .
else
if [ "$OUTCOME" == "NO" ]; then
echo -e "\n\nFailed $MODEL with seed $I"
echo "See $LOG/trace.txt and $LOG/trace.axe for counterexample"
exit -1
else
echo -e "\n\nError during trace generation with seed $I"
echo "See $LOG/errors.txt for details"
exit -1
fi
fi
fi
done
echo -e "\n\nOK, passed $NUM_TESTS tests"
$TRACE_STATS $LOG/stats.txt