diff options
Diffstat (limited to 'tests')
| -rwxr-xr-x | tests/asicworld/run-test.sh | 2 | ||||
| -rw-r--r-- | tests/asicworld/xfirrtl | 24 | ||||
| -rw-r--r-- | tests/simple/xfirrtl | 26 | ||||
| -rw-r--r-- | tests/tools/autotest.mk | 6 | ||||
| -rwxr-xr-x | tests/tools/autotest.sh | 43 | 
5 files changed, 93 insertions, 8 deletions
| diff --git a/tests/asicworld/run-test.sh b/tests/asicworld/run-test.sh index d5708c456..c22ab6928 100755 --- a/tests/asicworld/run-test.sh +++ b/tests/asicworld/run-test.sh @@ -11,4 +11,4 @@ do  done  shift "$((OPTIND-1))" -exec ${MAKE:-make} -f ../tools/autotest.mk $seed EXTRA_FLAGS="-e" *.v +exec ${MAKE:-make} -f ../tools/autotest.mk $seed EXTRA_FLAGS+="-e" *.v diff --git a/tests/asicworld/xfirrtl b/tests/asicworld/xfirrtl new file mode 100644 index 000000000..c782a2bd6 --- /dev/null +++ b/tests/asicworld/xfirrtl @@ -0,0 +1,24 @@ +# This file contains the names of verilog files to exclude from verilog to FIRRTL regression tests due to known failures. +code_hdl_models_arbiter.v	error: reg rst; cannot be driven by primitives or continuous assignment. +code_hdl_models_clk_div_45.v	yosys issue: 2nd PMUXTREE pass yields: ERROR: Negative edge clock on FF clk_div_45.$procdff$49. +code_hdl_models_d_ff_gates.v	combinational loop +code_hdl_models_d_latch_gates.v	combinational loop +code_hdl_models_dff_async_reset.v	$adff +code_hdl_models_tff_async_reset.v	$adff +code_hdl_models_uart.v	$adff +code_specman_switch_fabric.v	subfield assignment (bits() <= ...) +code_tidbits_asyn_reset.v	$adff +code_tidbits_reg_seq_example.v	$adff +code_verilog_tutorial_always_example.v	empty module +code_verilog_tutorial_escape_id.v	make_id issues (name begins with a digit) +code_verilog_tutorial_explicit.v	firrtl backend bug (empty module) +code_verilog_tutorial_first_counter.v	error: reg rst; cannot be driven by primitives or continuous assignment. +code_verilog_tutorial_fsm_full.v	error: reg reset; cannot be driven by primitives or continuous assignment. +code_verilog_tutorial_if_else.v	empty module (everything is under 'always @ (posedge clk)') +[code_verilog_tutorial_n_out_primitive.v	empty module +code_verilog_tutorial_parallel_if.v	empty module (everything is under 'always @ (posedge clk)') +code_verilog_tutorial_simple_function.v	empty module (no hardware) +code_verilog_tutorial_simple_if.v	empty module (everything is under 'always @ (posedge clk)') +code_verilog_tutorial_task_global.v	empty module (everything is under 'always @ (posedge clk)') +code_verilog_tutorial_v2k_reg.v		empty module +code_verilog_tutorial_which_clock.v	 $adff diff --git a/tests/simple/xfirrtl b/tests/simple/xfirrtl new file mode 100644 index 000000000..00e89b389 --- /dev/null +++ b/tests/simple/xfirrtl @@ -0,0 +1,26 @@ +# This file contains the names of verilog files to exclude from verilog to FIRRTL regression tests due to known failures. +arraycells.v	inst id[0] of +dff_different_styles.v +generate.v	combinational loop +hierdefparam.v	inst id[0] of +i2c_master_tests.v   $adff +macros.v	drops modules +mem2reg.v	drops modules +mem_arst.v	$adff +memory.v	$adff +multiplier.v	inst id[0] of +muxtree.v	drops modules +omsp_dbg_uart.v	$adff +operators.v	$pow +paramods.v	subfield assignment (bits() <= ...) +partsel.v	drops modules +process.v	drops modules +realexpr.v	drops modules +scopes.v	original verilog issues ( -x where x isn't declared signed) +sincos.v	$adff +specify.v	no code (empty module generates error +subbytes.v	$adff +task_func.v	drops modules +values.v	combinational loop +vloghammer.v	combinational loop +wreduce.v	original verilog issues ( -x where x isn't declared signed) diff --git a/tests/tools/autotest.mk b/tests/tools/autotest.mk index c68678929..e0f2bcdc1 100644 --- a/tests/tools/autotest.mk +++ b/tests/tools/autotest.mk @@ -1,7 +1,7 @@ -EXTRA_FLAGS= -SEED= - +# Don't bother defining default values for SEED and EXTRA_FLAGS. +# Their "natural" default values should be sufficient, +#   and they may be overridden in the environment.  ifneq ($(strip $(SEED)),)  SEEDOPT=-S$(SEED)  endif diff --git a/tests/tools/autotest.sh b/tests/tools/autotest.sh index d6216244f..218edf931 100755 --- a/tests/tools/autotest.sh +++ b/tests/tools/autotest.sh @@ -17,12 +17,18 @@ scriptfiles=""  scriptopt=""  toolsdir="$(cd $(dirname $0); pwd)"  warn_iverilog_git=false +# The following are used in verilog to firrtl regression tests. +# Typically these will be passed as environment variables: +#EXTRA_FLAGS="--firrtl2verilog 'java -cp /.../firrtl/utils/bin/firrtl.jar firrtl.Driver'" +# The tests are skipped if firrtl2verilog is the empty string (the default). +firrtl2verilog="" +xfirrtl="../xfirrtl"  if [ ! -f $toolsdir/cmp_tbdata -o $toolsdir/cmp_tbdata.c -nt $toolsdir/cmp_tbdata ]; then  	( set -ex; ${CC:-gcc} -Wall -o $toolsdir/cmp_tbdata $toolsdir/cmp_tbdata.c; ) || exit 1  fi -while getopts xmGl:wkjvref:s:p:n:S:I: opt; do +while getopts xmGl:wkjvref:s:p:n:S:I:-: opt; do  	case "$opt" in  		x)  			use_xsim=true ;; @@ -59,8 +65,24 @@ while getopts xmGl:wkjvref:s:p:n:S:I: opt; do  			include_opts="$include_opts -I $OPTARG"  			xinclude_opts="$xinclude_opts -i $OPTARG"  			minclude_opts="$minclude_opts +incdir+$OPTARG" ;; +		-) +			case "${OPTARG}" in +			    xfirrtl) +			    	xfirrtl="${!OPTIND}" +				OPTIND=$(( $OPTIND + 1 )) +				;; +			    firrtl2verilog) +			    	firrtl2verilog="${!OPTIND}" +				OPTIND=$(( $OPTIND + 1 )) +				;; +			    *) +			    	if [ "$OPTERR" == 1 ] && [ "${optspec:0:1}" != ":" ]; then +				    echo "Unknown option --${OPTARG}" >&2 +				fi +				;; +			esac;;  		*) -			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 +			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] [--xfirrtl FIRRTL test exclude file] [--firrtl2verilog command to generate verilog from firrtl] verilog-files\n" >&2  			exit 1  	esac  done @@ -109,6 +131,8 @@ do  		fn=$(basename $fn)  		bn=$(basename $bn) +		rm -f ${bn}_ref.fir +  		egrep -v '^\s*`timescale' ../$fn > ${bn}_ref.v  		if [ ! -f ../${bn}_tb.v ]; then @@ -148,6 +172,13 @@ do  		else  			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 +			if [ -n "$firrtl2verilog" ]; then +			    if test -z "$xfirrtl" || ! grep "$fn" "$xfirrtl" ; then +				"$toolsdir"/../../yosys -b "firrtl" -o ${bn}_ref.fir -f "$frontend $include_opts" -p "prep -nordff; proc; opt; memory; opt; fsm; opt -full -fine; pmuxtree" ${bn}_ref.v +				$firrtl2verilog -i ${bn}_ref.fir -o ${bn}_ref.fir.v  -X verilog +				test_passes -f "$frontend $include_opts" -p "hierarchy; proc; opt; memory; opt; fsm; opt -full -fine" ${bn}_ref.fir.v +			    fi +			fi  		fi  		touch ../${bn}.log  	} @@ -160,14 +191,18 @@ do  		( set -ex; body; ) > ${bn}.err 2>&1  	fi +	did_firrtl="" +	if [ -f ${bn}.out/${bn}_ref.fir ]; then +	    did_firrtl="+FIRRTL " +	fi  	if [ -f ${bn}.log ]; then  		mv ${bn}.err ${bn}.log -		echo "${status_prefix}-> ok" +		echo "${status_prefix}${did_firrtl}-> ok"  	elif [ -f ${bn}.skip ]; then  		mv ${bn}.err ${bn}.skip  		echo "${status_prefix}-> skip"  	else -		echo "${status_prefix}-> ERROR!" +		echo "${status_prefix}${did_firrtl}-> ERROR!"  		if $warn_iverilog_git; then  			echo "Note: Make sure that 'iverilog' is an up-to-date git checkout of Icarus Verilog."  		fi | 
