diff options
| author | Jim Lawson <ucbjrl@berkeley.edu> | 2019-02-25 16:04:20 -0800 | 
|---|---|---|
| committer | Jim Lawson <ucbjrl@berkeley.edu> | 2019-02-25 16:04:20 -0800 | 
| commit | 81abb2517c3d6e8fd2b31ff6d9d019d956a6bc14 (patch) | |
| tree | c64df65f19414b166128231218f0f595d93fa58a /tests | |
| parent | 970f854c2ad271098b841e61b1d37a61cd04e252 (diff) | |
| parent | c258b99040c8414952a3aceae874dc47563540dc (diff) | |
| download | yosys-81abb2517c3d6e8fd2b31ff6d9d019d956a6bc14.tar.gz yosys-81abb2517c3d6e8fd2b31ff6d9d019d956a6bc14.tar.bz2 yosys-81abb2517c3d6e8fd2b31ff6d9d019d956a6bc14.zip  | |
Merge remote-tracking branch 'upstream/master'
Diffstat (limited to 'tests')
| -rwxr-xr-x | tests/asicworld/run-test.sh | 2 | ||||
| -rw-r--r-- | tests/asicworld/xfirrtl | 24 | ||||
| -rw-r--r-- | tests/opt/opt_ff.v | 21 | ||||
| -rw-r--r-- | tests/opt/opt_ff.ys | 3 | ||||
| -rw-r--r-- | tests/simple/dff_init.v | 42 | ||||
| -rw-r--r-- | tests/simple/hierdefparam.v | 2 | ||||
| -rw-r--r-- | tests/simple/xfirrtl | 26 | ||||
| -rw-r--r-- | tests/tools/autotest.mk | 6 | ||||
| -rwxr-xr-x | tests/tools/autotest.sh | 43 | ||||
| -rw-r--r-- | tests/various/hierarchy.sh | 59 | ||||
| -rwxr-xr-x | tests/various/run-test.sh | 10 | 
11 files changed, 229 insertions, 9 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/opt/opt_ff.v b/tests/opt/opt_ff.v new file mode 100644 index 000000000..a01b64b61 --- /dev/null +++ b/tests/opt/opt_ff.v @@ -0,0 +1,21 @@ +module top( +    input clk, +    input rst, +    input [2:0] a, +    output [1:0] b +); +    reg [2:0] b_reg; +    initial begin +        b_reg <= 3'b0; +    end + +    assign b = b_reg[1:0]; +    always @(posedge clk or posedge rst) begin +        if(rst) begin +            b_reg <= 3'b0; +        end else begin +            b_reg <= a; +        end +    end +endmodule + diff --git a/tests/opt/opt_ff.ys b/tests/opt/opt_ff.ys new file mode 100644 index 000000000..704c7acf3 --- /dev/null +++ b/tests/opt/opt_ff.ys @@ -0,0 +1,3 @@ +read_verilog opt_ff.v +synth_ice40 +ice40_unlut diff --git a/tests/simple/dff_init.v b/tests/simple/dff_init.v new file mode 100644 index 000000000..be947042e --- /dev/null +++ b/tests/simple/dff_init.v @@ -0,0 +1,42 @@ +module dff0_test(n1, n1_inv, clk); +  input clk; +  output n1; +  reg n1 = 32'd0; +  output n1_inv; +  always @(posedge clk) +      n1 <= n1_inv; +  assign n1_inv = ~n1; +endmodule + +module dff1_test(n1, n1_inv, clk); +  input clk; +  (* init = 32'd1 *) +  output n1; +  reg n1 = 32'd1; +  output n1_inv; +  always @(posedge clk) +      n1 <= n1_inv; +  assign n1_inv = ~n1; +endmodule + +module dff0a_test(n1, n1_inv, clk); +  input clk; +  (* init = 32'd0 *) // Must be consistent with reg initialiser below +  output n1; +  reg n1 = 32'd0; +  output n1_inv; +  always @(posedge clk) +      n1 <= n1_inv; +  assign n1_inv = ~n1; +endmodule + +module dff1a_test(n1, n1_inv, clk); +  input clk; +  (* init = 32'd1 *) // Must be consistent with reg initialiser below +  output n1; +  reg n1 = 32'd1; +  output n1_inv; +  always @(posedge clk) +      n1 <= n1_inv; +  assign n1_inv = ~n1; +endmodule diff --git a/tests/simple/hierdefparam.v b/tests/simple/hierdefparam.v index ff92c38bd..c9368ca7a 100644 --- a/tests/simple/hierdefparam.v +++ b/tests/simple/hierdefparam.v @@ -1,3 +1,5 @@ +`default_nettype none +  module hierdefparam_top(input [7:0] A, output [7:0] Y);    generate begin:foo      hierdefparam_a mod_a(.A(A), .Y(Y)); 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 diff --git a/tests/various/hierarchy.sh b/tests/various/hierarchy.sh new file mode 100644 index 000000000..d33a247be --- /dev/null +++ b/tests/various/hierarchy.sh @@ -0,0 +1,59 @@ +#!/usr/bin/env bash +# Simple test of hierarchy -auto-top. + +set -e + +echo -n "  TOP first - " +../../yosys -s - <<- EOY | grep "Automatically selected TOP as design top module" +  read_verilog << EOV +    module TOP(a, y); +      input a; +      output [31:0] y; + +      aoi12 p [31:0] (a, y); +    endmodule + +    module aoi12(a, y); +      input a; +      output y; +      assign y = ~a; +    endmodule +  EOV +  hierarchy -auto-top +EOY + +echo -n "  TOP last - " +../../yosys -s - <<- EOY | grep "Automatically selected TOP as design top module" +  read_verilog << EOV +    module aoi12(a, y); +      input a; +      output y; +      assign y = ~a; +    endmodule + +    module TOP(a, y); +      input a; +      output [31:0] y; + +      aoi12 foo (a, y); +    endmodule +  EOV +  hierarchy -auto-top +EOY + +echo -n "  no explicit top - " +../../yosys -s - <<- EOY | grep "Automatically selected noTop as design top module." +  read_verilog << EOV +    module aoi12(a, y); +      input a; +      output y; +      assign y = ~a; +    endmodule + +    module noTop(a, y); +      input a; +      output [31:0] y; +    endmodule +  EOV +  hierarchy -auto-top +EOY diff --git a/tests/various/run-test.sh b/tests/various/run-test.sh index 67e1beb23..d49553ede 100755 --- a/tests/various/run-test.sh +++ b/tests/various/run-test.sh @@ -1,6 +1,14 @@ -#!/bin/bash +#!/usr/bin/env bash  set -e  for x in *.ys; do  	echo "Running $x.."  	../../yosys -ql ${x%.ys}.log $x  done +# Run any .sh files in this directory (with the exception of the file - run-test.sh +shell_tests=$(echo *.sh | sed -e 's/run-test.sh//') +if [ "$shell_tests" ]; then +    for s in $shell_tests; do +        echo "Running $s.." +        bash $s +    done +fi  | 
