summaryrefslogtreecommitdiff
path: root/tests/tools/autotest.sh
diff options
context:
space:
mode:
Diffstat (limited to 'tests/tools/autotest.sh')
-rwxr-xr-xtests/tools/autotest.sh59
1 files changed, 30 insertions, 29 deletions
diff --git a/tests/tools/autotest.sh b/tests/tools/autotest.sh
index 76668bed..d0b0a89d 100755
--- a/tests/tools/autotest.sh
+++ b/tests/tools/autotest.sh
@@ -10,16 +10,19 @@ makejmode=false
frontend="verilog"
backend_opts="-noattr -noexpr"
autotb_opts=""
+include_opts=""
+xinclude_opts=""
+minclude_opts=""
scriptfiles=""
scriptopt=""
toolsdir="$(cd $(dirname $0); pwd)"
warn_iverilog_git=false
if [ ! -f $toolsdir/cmp_tbdata -o $toolsdir/cmp_tbdata.c -nt $toolsdir/cmp_tbdata ]; then
- ( set -ex; gcc -Wall -o $toolsdir/cmp_tbdata $toolsdir/cmp_tbdata.c; ) || exit 1
+ ( set -ex; ${CC:-gcc} -Wall -o $toolsdir/cmp_tbdata $toolsdir/cmp_tbdata.c; ) || exit 1
fi
-while getopts xmGl:wkjvref:s:p:n: opt; do
+while getopts xmGl:wkjvref:s:p:n:S:I: opt; do
case "$opt" in
x)
use_xsim=true ;;
@@ -50,34 +53,32 @@ while getopts xmGl:wkjvref:s:p:n: opt; do
scriptopt="$OPTARG" ;;
n)
autotb_opts="$autotb_opts -n $OPTARG" ;;
+ S)
+ autotb_opts="$autotb_opts -seed $OPTARG" ;;
+ I)
+ include_opts="$include_opts -I $OPTARG"
+ xinclude_opts="$xinclude_opts -i $OPTARG"
+ minclude_opts="$minclude_opts +incdir+$OPTARG" ;;
*)
- echo "Usage: $0 [-x|-m] [-w] [-k] [-j] [-v] [-r] [-e] [-l libs] [-f frontend] [-s script] [-p cmdstring] verilog-files\n" >&2
+ echo "Usage: $0 [-x|-m] [-G] [-w] [-k] [-j] [-v] [-r] [-e] [-l libs] [-f frontend] [-s script] [-p cmdstring] [-n iters] [-S seed] [-I incdir] verilog-files\n" >&2
exit 1
esac
done
-create_ref() {
- cp "$1" "$2.v"
-}
-
compile_and_run() {
exe="$1"; output="$2"; shift 2
if $use_modelsim; then
altver=$( ls -v /opt/altera/ | grep '^[0-9]' | tail -n1; )
/opt/altera/$altver/modelsim_ase/bin/vlib work
- /opt/altera/$altver/modelsim_ase/bin/vlog "$@"
- /opt/altera/$altver/modelsim_ase/bin/vsim -c -do 'run -all; exit;' testbench | grep '#OUT#' > "$output"
+ /opt/altera/$altver/modelsim_ase/bin/vlog $minclude_opts +define+outfile=\"$output\" "$@"
+ /opt/altera/$altver/modelsim_ase/bin/vsim -c -do 'run -all; exit;' testbench
elif $use_xsim; then
- (
- set +x
- files=( "$@" )
- xilver=$( ls -v /opt/Xilinx/Vivado/ | grep '^[0-9]' | tail -n1; )
- /opt/Xilinx/Vivado/$xilver/bin/xvlog "${files[@]}"
- /opt/Xilinx/Vivado/$xilver/bin/xelab -R work.testbench | grep '#OUT#' > "$output"
- )
+ xilver=$( ls -v /opt/Xilinx/Vivado/ | grep '^[0-9]' | tail -n1; )
+ /opt/Xilinx/Vivado/$xilver/bin/xvlog $xinclude_opts -d outfile=\"$output\" "$@"
+ /opt/Xilinx/Vivado/$xilver/bin/xelab -R work.testbench
else
- iverilog -s testbench -o "$exe" "$@"
- vvp -n "$exe" > "$output"
+ iverilog $include_opts -Doutfile=\"$output\" -s testbench -o "$exe" "$@"
+ vvp -n "$exe"
fi
}
@@ -108,15 +109,15 @@ do
fn=$(basename $fn)
bn=$(basename $bn)
- cp ../$fn $fn
+ egrep -v '^\s*`timescale' ../$fn > ${bn}_ref.v
+
if [ ! -f ../${bn}_tb.v ]; then
- "$toolsdir"/../../yosys -b "test_autotb $autotb_opts" -o ${bn}_tb.v $fn
+ "$toolsdir"/../../yosys -f "$frontend $include_opts" -b "test_autotb $autotb_opts" -o ${bn}_tb.v ${bn}_ref.v
else
cp ../${bn}_tb.v ${bn}_tb.v
fi
if $genvcd; then sed -i 's,// \$dump,$dump,g' ${bn}_tb.v; fi
- create_ref $fn ${bn}_ref
- compile_and_run ${bn}_tb_ref ${bn}_out_ref ${bn}_tb.v ${bn}_ref.v $libs
+ compile_and_run ${bn}_tb_ref ${bn}_out_ref ${bn}_tb.v ${bn}_ref.v $libs
if $genvcd; then mv testbench.vcd ${bn}_ref.vcd; fi
test_count=0
@@ -131,22 +132,22 @@ do
test_count=$(( test_count + 1 ))
}
- if [ "$frontend" = "verific" -o "$frontend" = "verific_gates" ] && grep -q VERIFIC-SKIP $fn; then
+ if [ "$frontend" = "verific" -o "$frontend" = "verific_gates" ] && grep -q VERIFIC-SKIP ${bn}_ref.v; then
touch ../${bn}.skip
return
fi
if [ -n "$scriptfiles" ]; then
- test_passes $fn $scriptfiles
+ test_passes -f "$frontend $include_opts" ${bn}_ref.v $scriptfiles
elif [ -n "$scriptopt" ]; then
- test_passes -f "$frontend" -p "$scriptopt" $fn
+ test_passes -f "$frontend $include_opts" -p "$scriptopt" ${bn}_ref.v
elif [ "$frontend" = "verific" ]; then
- test_passes -p "verific -vlog2k $fn; verific -import -all; opt; memory;;"
+ test_passes -p "verific -vlog2k ${bn}_ref.v; verific -import -all; opt; memory;;"
elif [ "$frontend" = "verific_gates" ]; then
- test_passes -p "verific -vlog2k $fn; verific -import -gates -all; opt; memory;;"
+ test_passes -p "verific -vlog2k ${bn}_ref.v; verific -import -gates -all; opt; memory;;"
else
- test_passes -f "$frontend" -p "hierarchy; proc; opt; memory; opt; fsm; opt -full -fine" $fn
- test_passes -f "$frontend" -p "hierarchy; synth -run coarse; techmap; opt; abc -dff" $fn
+ test_passes -f "$frontend $include_opts" -p "hierarchy; proc; opt; memory; opt; fsm; opt -full -fine" ${bn}_ref.v
+ test_passes -f "$frontend $include_opts" -p "hierarchy; synth -run coarse; techmap; opt; abc -dff" ${bn}_ref.v
fi
touch ../${bn}.log
}