diff options
Diffstat (limited to 'tests')
| -rw-r--r-- | tests/arch/anlogic/dffs.ys | 3 | ||||
| -rw-r--r-- | tests/arch/ecp5/fsm.ys | 6 | ||||
| -rw-r--r-- | tests/arch/efinix/adffs.ys | 6 | ||||
| -rw-r--r-- | tests/arch/efinix/dffs.ys | 3 | ||||
| -rw-r--r-- | tests/arch/gowin/init.ys | 19 | ||||
| -rw-r--r-- | tests/arch/intel_alm/adffs.ys | 10 | ||||
| -rw-r--r-- | tests/arch/intel_alm/fsm.ys | 12 | ||||
| -rw-r--r-- | tests/simple/const_branch_finish.v | 39 | ||||
| -rw-r--r-- | tests/simple/generate.v | 85 | ||||
| -rw-r--r-- | tests/simple/string_format.v | 7 | ||||
| -rw-r--r-- | tests/svtypes/struct_array.sv | 22 | ||||
| -rwxr-xr-x | tests/tools/autotest.sh | 6 | ||||
| -rw-r--r-- | tests/various/const_func.v | 12 | ||||
| -rw-r--r-- | tests/various/const_func_block_var.v | 23 | ||||
| -rw-r--r-- | tests/various/const_func_block_var.ys | 1 | 
15 files changed, 219 insertions, 35 deletions
diff --git a/tests/arch/anlogic/dffs.ys b/tests/arch/anlogic/dffs.ys index d3281ab89..deb90e051 100644 --- a/tests/arch/anlogic/dffs.ys +++ b/tests/arch/anlogic/dffs.ys @@ -15,6 +15,5 @@ proc  equiv_opt -assert -map +/anlogic/cells_sim.v synth_anlogic # equivalency check  design -load postopt # load the post-opt design (otherwise equiv_opt loads the pre-opt design)  cd dffe # Constrain all select calls below inside the top module -select -assert-count 1 t:AL_MAP_LUT3  select -assert-count 1 t:AL_MAP_SEQ -select -assert-none t:AL_MAP_LUT3 t:AL_MAP_SEQ %% t:* %D +select -assert-none t:AL_MAP_SEQ %% t:* %D diff --git a/tests/arch/ecp5/fsm.ys b/tests/arch/ecp5/fsm.ys index ba91e5fc0..a77986bbc 100644 --- a/tests/arch/ecp5/fsm.ys +++ b/tests/arch/ecp5/fsm.ys @@ -10,8 +10,8 @@ sat -verify -prove-asserts -show-public -set-at 1 in_reset 1 -seq 20 -prove-skip  design -load postopt # load the post-opt design (otherwise equiv_opt loads the pre-opt design)  cd fsm # Constrain all select calls below inside the top module -select -assert-count 1 t:L6MUX21 -select -assert-count 15 t:LUT4 -select -assert-count 6 t:PFUMX +select -assert-max 1 t:L6MUX21 +select -assert-max 16 t:LUT4 +select -assert-max 7 t:PFUMX  select -assert-count 6 t:TRELLIS_FF  select -assert-none t:L6MUX21 t:LUT4 t:PFUMX t:TRELLIS_FF %% t:* %D diff --git a/tests/arch/efinix/adffs.ys b/tests/arch/efinix/adffs.ys index 49dc7f256..86d446439 100644 --- a/tests/arch/efinix/adffs.ys +++ b/tests/arch/efinix/adffs.ys @@ -32,9 +32,8 @@ design -load postopt # load the post-opt design (otherwise equiv_opt loads the p  cd dffs # Constrain all select calls below inside the top module  select -assert-count 1 t:EFX_FF  select -assert-count 1 t:EFX_GBUFCE -select -assert-count 1 t:EFX_LUT4 -select -assert-none t:EFX_FF t:EFX_GBUFCE t:EFX_LUT4 %% t:* %D +select -assert-none t:EFX_FF t:EFX_GBUFCE %% t:* %D  design -load read @@ -45,6 +44,5 @@ design -load postopt # load the post-opt design (otherwise equiv_opt loads the p  cd ndffnr # Constrain all select calls below inside the top module  select -assert-count 1 t:EFX_FF  select -assert-count 1 t:EFX_GBUFCE -select -assert-count 1 t:EFX_LUT4 -select -assert-none t:EFX_FF t:EFX_GBUFCE t:EFX_LUT4 %% t:* %D +select -assert-none t:EFX_FF t:EFX_GBUFCE %% t:* %D diff --git a/tests/arch/efinix/dffs.ys b/tests/arch/efinix/dffs.ys index af787ab67..f9111873c 100644 --- a/tests/arch/efinix/dffs.ys +++ b/tests/arch/efinix/dffs.ys @@ -19,6 +19,5 @@ design -load postopt # load the post-opt design (otherwise equiv_opt loads the p  cd dffe # Constrain all select calls below inside the top module  select -assert-count 1 t:EFX_FF  select -assert-count 1 t:EFX_GBUFCE -select -assert-count 1 t:EFX_LUT4 -select -assert-none t:EFX_FF t:EFX_GBUFCE t:EFX_LUT4 %% t:* %D +select -assert-none t:EFX_FF t:EFX_GBUFCE %% t:* %D diff --git a/tests/arch/gowin/init.ys b/tests/arch/gowin/init.ys index 88e88c15a..fba7c2fa5 100644 --- a/tests/arch/gowin/init.ys +++ b/tests/arch/gowin/init.ys @@ -45,24 +45,25 @@ flatten  synth_gowin -run coarse:  # check the flops mapped as expected -select -assert-count 1 t:DFF +select -assert-count 2 t:DFF  select -assert-count 1 t:DFFC  select -assert-count 1 t:DFFCE -select -assert-count 1 t:DFFE -select -assert-count 1 t:DFFN +select -assert-count 0 t:DFFE +select -assert-count 2 t:DFFN  select -assert-count 1 t:DFFNC  select -assert-count 1 t:DFFNCE -select -assert-count 1 t:DFFNE +select -assert-count 0 t:DFFNE  select -assert-count 1 t:DFFNP  select -assert-count 1 t:DFFNPE  select -assert-count 0 t:DFFNR  select -assert-count 0 t:DFFNRE -select -assert-count 2 t:DFFNS -select -assert-count 2 t:DFFNSE +select -assert-count 3 t:DFFNS +select -assert-count 1 t:DFFNSE  select -assert-count 1 t:DFFP  select -assert-count 1 t:DFFPE  select -assert-count 0 t:DFFR  select -assert-count 0 t:DFFRE -select -assert-count 2 t:DFFS -select -assert-count 2 t:DFFSE -select -assert-count 12 t:LUT2 +select -assert-count 3 t:DFFS +select -assert-count 1 t:DFFSE +select -assert-count 4 t:LUT2 +select -assert-count 4 t:LUT4 diff --git a/tests/arch/intel_alm/adffs.ys b/tests/arch/intel_alm/adffs.ys index 04fa2ad24..4565dcc64 100644 --- a/tests/arch/intel_alm/adffs.ys +++ b/tests/arch/intel_alm/adffs.ys @@ -77,10 +77,9 @@ equiv_opt -async2sync -assert -map +/intel_alm/common/alm_sim.v -map +/intel_alm  design -load postopt # load the post-opt design (otherwise equiv_opt loads the pre-opt design)  cd ndffnr # Constrain all select calls below inside the top module  select -assert-count 1 t:MISTRAL_FF -select -assert-count 1 t:MISTRAL_NOT -select -assert-count 1 t:MISTRAL_ALUT2 +select -assert-count 2 t:MISTRAL_NOT -select -assert-none t:MISTRAL_FF t:MISTRAL_NOT t:MISTRAL_ALUT2 %% t:* %D +select -assert-none t:MISTRAL_FF t:MISTRAL_NOT %% t:* %D  design -load read @@ -90,7 +89,6 @@ equiv_opt -async2sync -assert -map +/intel_alm/common/alm_sim.v -map +/intel_alm  design -load postopt # load the post-opt design (otherwise equiv_opt loads the pre-opt design)  cd ndffnr # Constrain all select calls below inside the top module  select -assert-count 1 t:MISTRAL_FF -select -assert-count 1 t:MISTRAL_NOT -select -assert-count 1 t:MISTRAL_ALUT2 +select -assert-count 2 t:MISTRAL_NOT -select -assert-none t:MISTRAL_FF t:MISTRAL_NOT t:MISTRAL_ALUT2 %% t:* %D +select -assert-none t:MISTRAL_FF t:MISTRAL_NOT %% t:* %D diff --git a/tests/arch/intel_alm/fsm.ys b/tests/arch/intel_alm/fsm.ys index 6491b2e08..e54b5c21e 100644 --- a/tests/arch/intel_alm/fsm.ys +++ b/tests/arch/intel_alm/fsm.ys @@ -12,12 +12,13 @@ design -load postopt # load the post-opt design (otherwise equiv_opt loads the p  cd fsm # Constrain all select calls below inside the top module  select -assert-count 6 t:MISTRAL_FF +select -assert-max 1 t:MISTRAL_NOT  select -assert-max 2 t:MISTRAL_ALUT2 # Clang returns 2, GCC returns 1 -select -assert-count 1 t:MISTRAL_ALUT3 -select -assert-max 1 t:MISTRAL_ALUT4 # Clang returns 0, GCC returns 1 +select -assert-max 1 t:MISTRAL_ALUT3 +select -assert-max 2 t:MISTRAL_ALUT4 # Clang returns 0, GCC returns 1  select -assert-max 6 t:MISTRAL_ALUT5 # Clang returns 5, GCC returns 4  select -assert-max 2 t:MISTRAL_ALUT6 # Clang returns 1, GCC returns 2 -select -assert-none t:MISTRAL_FF t:MISTRAL_ALUT2 t:MISTRAL_ALUT3 t:MISTRAL_ALUT4 t:MISTRAL_ALUT5 t:MISTRAL_ALUT6 %% t:* %D +select -assert-none t:MISTRAL_FF t:MISTRAL_NOT t:MISTRAL_ALUT2 t:MISTRAL_ALUT3 t:MISTRAL_ALUT4 t:MISTRAL_ALUT5 t:MISTRAL_ALUT6 %% t:* %D  design -reset  read_verilog ../common/fsm.v @@ -34,9 +35,10 @@ design -load postopt # load the post-opt design (otherwise equiv_opt loads the p  cd fsm # Constrain all select calls below inside the top module  select -assert-count 6 t:MISTRAL_FF +select -assert-max 1 t:MISTRAL_NOT  select -assert-max 2 t:MISTRAL_ALUT2 # Clang returns 2, GCC returns 1  select -assert-max 2 t:MISTRAL_ALUT3 # Clang returns 2, GCC returns 1 -select -assert-max 1 t:MISTRAL_ALUT4 # Clang returns 0, GCC returns 1 +select -assert-max 2 t:MISTRAL_ALUT4 # Clang returns 0, GCC returns 1  select -assert-max 6 t:MISTRAL_ALUT5 # Clang returns 5, GCC returns 4  select -assert-max 2 t:MISTRAL_ALUT6 # Clang returns 1, GCC returns 2 -select -assert-none t:MISTRAL_FF t:MISTRAL_ALUT2 t:MISTRAL_ALUT3 t:MISTRAL_ALUT4 t:MISTRAL_ALUT5 t:MISTRAL_ALUT6 %% t:* %D +select -assert-none t:MISTRAL_FF t:MISTRAL_NOT t:MISTRAL_ALUT2 t:MISTRAL_ALUT3 t:MISTRAL_ALUT4 t:MISTRAL_ALUT5 t:MISTRAL_ALUT6 %% t:* %D diff --git a/tests/simple/const_branch_finish.v b/tests/simple/const_branch_finish.v new file mode 100644 index 000000000..8166688e6 --- /dev/null +++ b/tests/simple/const_branch_finish.v @@ -0,0 +1,39 @@ +`define CONSTANT_CHECK \ +	if (WIDTH === 'bx) begin \ +		$display("FAIL"); \ +		$finish; \ +	end + +module top; +	parameter WIDTH = 32; +	integer j; +	initial begin +		`CONSTANT_CHECK +		if (WIDTH == 32) begin : procedural_conditional_block +			`CONSTANT_CHECK +		end +		case (WIDTH) +			32: `CONSTANT_CHECK +			default: ; +		endcase +		for (j = 0; j < 2; j = j + 1) begin : procedural_loop_block +			`CONSTANT_CHECK +		end +	end +	generate +		begin : unconditional_block +			initial `CONSTANT_CHECK +		end +		if (WIDTH == 32) begin : conditional_block +			initial `CONSTANT_CHECK +		end +		case (WIDTH) +			32: initial `CONSTANT_CHECK +			default: ; +		endcase +		genvar i; +		for (i = 0; i < 2; i = i + 1) begin : loop_block +			initial `CONSTANT_CHECK +		end +	endgenerate +endmodule diff --git a/tests/simple/generate.v b/tests/simple/generate.v index 0e353ad9b..dcd450e47 100644 --- a/tests/simple/generate.v +++ b/tests/simple/generate.v @@ -159,3 +159,88 @@ generate      end  endgenerate  endmodule + +// ------------------------------------------ + +module gen_test7; +	reg [2:0] out1; +	reg [2:0] out2; +	wire [2:0] out3; +	generate +		begin : cond +			reg [2:0] sub_out1; +			reg [2:0] sub_out2; +			wire [2:0] sub_out3; +			initial begin : init +				reg signed [31:0] x; +				x = 2 ** 2; +				out1 = x; +				sub_out1 = x; +			end +			always @* begin : proc +				reg signed [31:0] x; +				x = 2 ** 1; +				out2 = x; +				sub_out2 = x; +			end +			genvar x; +			for (x = 0; x < 3; x = x + 1) begin +				assign out3[x] = 1; +				assign sub_out3[x] = 1; +			end +		end +	endgenerate + +// `define VERIFY +`ifdef VERIFY +	assert property (out1 == 4); +	assert property (out2 == 2); +	assert property (out3 == 7); +	assert property (cond.sub_out1 == 4); +	assert property (cond.sub_out2 == 2); +	assert property (cond.sub_out3 == 7); +`endif +endmodule + +// ------------------------------------------ + +module gen_test8; + +// `define VERIFY +`ifdef VERIFY +	`define ASSERT(expr) assert property (expr); +`else +	`define ASSERT(expr) +`endif + +	wire [1:0] x = 2'b11; +	generate +		begin : A +			wire [1:0] x; +			begin : B +				wire [1:0] x = 2'b00; +				`ASSERT(x == 0) +				`ASSERT(A.x == 2) +				`ASSERT(A.C.x == 1) +				`ASSERT(A.B.x == 0) +			end +			begin : C +				wire [1:0] x = 2'b01; +				`ASSERT(x == 1) +				`ASSERT(A.x == 2) +				`ASSERT(A.C.x == 1) +				`ASSERT(A.B.x == 0) +			end +			assign x = B.x ^ 2'b11 ^ C.x; +			`ASSERT(x == 2) +			`ASSERT(A.x == 2) +			`ASSERT(A.C.x == 1) +			`ASSERT(A.B.x == 0) +		end +	endgenerate + +	`ASSERT(x == 3) +	`ASSERT(A.x == 2) +	`ASSERT(A.C.x == 1) +	`ASSERT(A.B.x == 0) +endmodule diff --git a/tests/simple/string_format.v b/tests/simple/string_format.v new file mode 100644 index 000000000..ce45ca1e9 --- /dev/null +++ b/tests/simple/string_format.v @@ -0,0 +1,7 @@ +module top; +	parameter STR = "something interesting"; +	initial begin +		$display("A: %s", STR); +		$display("B: %0s", STR); +	end +endmodule diff --git a/tests/svtypes/struct_array.sv b/tests/svtypes/struct_array.sv index 022ad56c6..873f7befd 100644 --- a/tests/svtypes/struct_array.sv +++ b/tests/svtypes/struct_array.sv @@ -1,7 +1,7 @@  // test for array indexing in structures  module top; -	 +  	struct packed {  		bit [5:0] [7:0] a;	// 6 element packed array of bytes  		bit [15:0] b;		// filler for non-zero offset @@ -19,4 +19,24 @@ module top;  	always_comb assert(s==64'h4200_0012_3400_FFFC); +	struct packed { +		bit [7:0] [7:0] a;	// 8 element packed array of bytes +		bit [15:0] b;		// filler for non-zero offset +	} s2; + +	initial begin +		s2 = '0; + +		s2.a[2:1] = 16'h1234; +		s2.a[5] = 8'h42; + +		s2.a[7] = '1; +		s2.a[7][1:0] = '0; + +		s2.b = '1; +		s2.b[1:0] = '0; +	end + +	always_comb assert(s2==80'hFC00_4200_0012_3400_FFFC); +  endmodule diff --git a/tests/tools/autotest.sh b/tests/tools/autotest.sh index 4d3478628..72a3d51eb 100755 --- a/tests/tools/autotest.sh +++ b/tests/tools/autotest.sh @@ -193,13 +193,13 @@ do  		elif [ "$frontend" = "verific_gates" ]; then  			test_passes -p "verific -vlog2k ${bn}_ref.${refext}; verific -import -gates -all; opt; memory;;"  		else -			test_passes -f "$frontend $include_opts" -p "hierarchy; proc; opt; memory; opt; fsm; opt -full -fine" ${bn}_ref.${refext} +			test_passes -f "$frontend $include_opts" -p "hierarchy; proc; opt -nodffe -nosdff; fsm; opt; memory; opt -full -fine" ${bn}_ref.${refext}  			test_passes -f "$frontend $include_opts" -p "hierarchy; synth -run coarse; techmap; opt; abc -dff" ${bn}_ref.${refext}  			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.${refext} +				"$toolsdir"/../../yosys -b "firrtl" -o ${bn}_ref.fir -f "$frontend $include_opts" -p "prep -nordff; proc; opt -nodffe -nosdff; fsm; opt; memory; opt -full -fine; pmuxtree" ${bn}_ref.${refext}  				$firrtl2verilog -i ${bn}_ref.fir -o ${bn}_ref.fir.v -				test_passes -f "$frontend $include_opts" -p "hierarchy; proc; opt; memory; opt; fsm; opt -full -fine" ${bn}_ref.fir.v +				test_passes -f "$frontend $include_opts" -p "hierarchy; proc; opt -nodffe -nosdff; fsm; opt; memory; opt -full -fine" ${bn}_ref.fir.v  			    fi  			fi  		fi diff --git a/tests/various/const_func.v b/tests/various/const_func.v index 76cdc385d..541e63b19 100644 --- a/tests/various/const_func.v +++ b/tests/various/const_func.v @@ -53,6 +53,15 @@ module top(out);          c1, c2, c3, c4,          d1, d2, d3, d4}; +    function signed [31:0] negate; +        input integer inp; +        negate = ~inp; +    endfunction +    parameter W = 10; +    parameter X = 3; +    localparam signed Y = $floor(W / X); +    localparam signed Z = negate($floor(W / X)); +  // `define VERIFY  `ifdef VERIFY      assert property (a1 == 0); @@ -71,5 +80,8 @@ module top(out);      assert property (d2 == 0);      assert property (d3 == 1);      assert property (d4 == 1); + +    assert property (Y == 3); +    assert property (Z == ~3);  `endif  endmodule diff --git a/tests/various/const_func_block_var.v b/tests/various/const_func_block_var.v new file mode 100644 index 000000000..98e83aa5b --- /dev/null +++ b/tests/various/const_func_block_var.v @@ -0,0 +1,23 @@ +module top(out); +	function integer operation; +		input integer num; +		begin +			operation = 0; +			begin : op_i +				integer i; +				for (i = 0; i < 2; i = i + 1) +				begin : op_j +					integer j; +					for (j = i; j < i * 2; j = j + 1) +						num = num + 1; +				end +				num = num * 2; +			end +			operation = num; +		end +	endfunction + +	localparam res = operation(4); +	output wire [31:0] out; +	assign out = res; +endmodule diff --git a/tests/various/const_func_block_var.ys b/tests/various/const_func_block_var.ys new file mode 100644 index 000000000..7c2e85c64 --- /dev/null +++ b/tests/various/const_func_block_var.ys @@ -0,0 +1 @@ +read_verilog const_func_block_var.v  | 
