Skip to content

Commit 4b73053

Browse files
committed
EBMC: basic engine selection heuristic
This adds a trivial engine selection heuristic, as follows: 1) First, try 1-induction, which may refute (base case) or prove (step case) the property. 2) If still unresolved, try BMC with bound 5. The heuristic is activated when no engine is specified on the command line.
1 parent 4b0c862 commit 4b73053

File tree

184 files changed

+422
-353
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

184 files changed

+422
-353
lines changed

CHANGELOG

+2
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
# EBMC 5.5
22

3+
* If no engine is given, EBMC now selects an engine heuristically, instead
4+
of doing BMC with k=1
35
* Verilog: bugfix for $onehot0
46
* Verilog: fix for primitive gates with more than two inputs
57
* Verilog: Support $past when using AIG-based engines

regression/ebmc/example1/test.desc

+2-2
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
CORE
22
example1.sv
3-
--bound 10
4-
PROVED up to bound 10$
3+
4+
^\[.*\] always 2'\(main\.a\) \+ main\.b == main\.result: PROVED$
55
^EXIT=0$
66
^SIGNAL=0$

regression/smv/smv/bmc_unsupported_property1.desc

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
CORE
22
bmc_unsupported_property1.smv
3-
3+
--bound 1
44
^EXIT=10$
55
^SIGNAL=0$
66
^\[spec1\] EG x = FALSE: FAILURE: property not supported by BMC engine$

regression/smv/smv/bmc_unsupported_property2.desc

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
CORE
22
bmc_unsupported_property2.smv
3-
3+
--bound 1
44
^EXIT=10$
55
^SIGNAL=0$
66
^\[spec1\] EG x = FALSE: FAILURE: property not supported by BMC engine$

regression/verilog/SVA/immediate2.desc

+2-2
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
CORE
22
immediate2.sv
3-
--bound 0
3+
44
^\[main\.assume\.1\] assume always 0: ASSUMED$
5-
^\[main\.assert\.2\] always main\.index < 10: PROVED up to bound 0$
5+
^\[main\.assert\.2\] always main\.index < 10: PROVED$
66
^\[main\.assert\.3\] always 0: REFUTED$
77
^EXIT=10$
88
^SIGNAL=0$

regression/verilog/SVA/immediate3.desc

+2-2
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
CORE
22
immediate3.sv
3-
--bound 0
4-
^\[full_adder\.assert\.1\] always \{ full_adder\.carry, full_adder\.sum \} == \{ 1'b0, full_adder\.a \} \+ full_adder\.b \+ full_adder\.c: PROVED up to bound 0$
3+
4+
^\[full_adder\.assert\.1\] always \{ full_adder\.carry, full_adder\.sum \} == \{ 1'b0, full_adder\.a \} \+ full_adder\.b \+ full_adder\.c: PROVED$
55
^EXIT=0$
66
^SIGNAL=0$
77
--

regression/verilog/SVA/named_property1.desc

+2-2
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
CORE
22
named_property1.sv
3-
--bound 0
4-
^\[main\.assert\.1\] always main\.x_is_ten: PROVED up to bound 0$
3+
4+
^\[main\.assert\.1\] always main\.x_is_ten: PROVED$
55
^EXIT=0$
66
^SIGNAL=0$
77
--

regression/verilog/SVA/named_sequence1.desc

+2-2
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
CORE
22
named_sequence1.sv
3-
--bound 0
4-
^\[main\.assert\.1\] always main\.x_is_ten: PROVED up to bound 0$
3+
4+
^\[main\.assert\.1\] always main\.x_is_ten: PROVED up to bound 5$
55
^EXIT=0$
66
^SIGNAL=0$
77
--

regression/verilog/SVA/sequence5.desc

+2-2
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
CORE
22
sequence5.sv
3-
--bound 0
4-
^\[main\.p0\] 1: PROVED up to bound 0$
3+
4+
^\[main\.p0\] 1: PROVED up to bound 5$
55
^\[main\.p1\] 0: REFUTED$
66
^\[main\.p2\] 1'bx: REFUTED$
77
^\[main\.p3\] 1'bz: REFUTED$

regression/verilog/SVA/sequence_first_match1.desc

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
CORE
22
sequence_first_match1.sv
3-
3+
--bound 5
44
^\[.*\] first_match\(main\.x == 0\): FAILURE: property not supported by BMC engine$
55
^EXIT=10$
66
^SIGNAL=0$

regression/verilog/SVA/sequence_within1.desc

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
CORE
22
sequence_within1.sv
3-
3+
--bound 5
44
^\[.*\] main\.x == 0 within main\.x == 1: FAILURE: property not supported by BMC engine$
55
^EXIT=10$
66
^SIGNAL=0$

regression/verilog/SVA/static_final1.desc

+2-2
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
CORE
22
static_final1.sv
3-
--bound 0
4-
^\[full_adder\.p0\] always \{ full_adder\.carry, full_adder\.sum \} == \{ 1'b0, full_adder\.a \} \+ full_adder\.b \+ full_adder\.c: PROVED up to bound 0$
3+
4+
^\[full_adder\.p0\] always \{ full_adder\.carry, full_adder\.sum \} == \{ 1'b0, full_adder\.a \} \+ full_adder\.b \+ full_adder\.c: PROVED$
55
^EXIT=0$
66
^SIGNAL=0$
77
--

regression/verilog/SVA/sva_and1.desc

+2-2
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
CORE
22
sva_and1.sv
3-
--bound 0
4-
^\[main\.p0\] always \(1 and 1\): PROVED up to bound 0$
3+
4+
^\[main\.p0\] always \(1 and 1\): PROVED$
55
^\[main\.p1\] always \(1 and 0\): REFUTED$
66
^\[main\.p2\] always \(1 and 32'b0000000000000000000000000000000x\): REFUTED$
77
^EXIT=10$

regression/verilog/SVA/sva_iff1.desc

+2-2
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
CORE
22
sva_iff1.sv
3-
--bound 0
4-
^\[main\.p0\] always \(1 iff 1\): PROVED up to bound 0$
3+
4+
^\[main\.p0\] always \(1 iff 1\): PROVED$
55
^\[main\.p1\] always \(1 iff 0\): REFUTED$
66
^\[main\.p2\] always \(1 iff 32'b0000000000000000000000000000000x\): REFUTED$
77
^EXIT=10$

regression/verilog/SVA/sva_implies1.desc

+2-2
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
CORE
22
sva_implies1.sv
3-
--bound 0
4-
^\[main\.p0\] always \(1 implies 1\): PROVED up to bound 0$
3+
4+
^\[main\.p0\] always \(1 implies 1\): PROVED$
55
^\[main\.p1\] always \(1 implies 0\): REFUTED$
66
^\[main\.p2\] always \(1 implies 32'b0000000000000000000000000000000x\): REFUTED$
77
^EXIT=10$

regression/verilog/SVA/sva_until1.desc

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
CORE
22
sva_until1.sv
3-
--bound 1
3+
44
^\[main\.p0\] always \(main.a until_with main.b\): REFUTED$
55
^\[main\.p1\] always \(main.a until main.b\): REFUTED$
66
^\[main\.p2\] always \(main.a s_until main.b\): REFUTED$

regression/verilog/SVA/system_verilog_assertion3.desc

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
CORE
22
system_verilog_assertion3.sv
3-
--module main --bound 0
3+
--module main
44
^EXIT=0$
55
^SIGNAL=0$
66
--

regression/verilog/UDPs/multiplexer1.desc

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
CORE
22
multiplexer1.sv
3-
--bound 0 --module main
3+
--module main
44
^no properties$
55
^EXIT=10$
66
^SIGNAL=0$

regression/verilog/arrays/array1.desc

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
CORE
22
array1.sv
3-
--module main --bound 0
3+
--module main
44
^EXIT=0$
55
^SIGNAL=0$
66
--

regression/verilog/arrays/packed_real1.desc

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
CORE
22
packed_real1.sv
3-
--module main --bound 0
3+
--module main
44
^file .* line 6: packed array must use packed element type$
55
^EXIT=2$
66
^SIGNAL=0$

regression/verilog/arrays/packed_typedef1.desc

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
CORE
22
packed_typedef1.sv
3-
--module main --bound 0
3+
--module main
44
^EXIT=0$
55
^SIGNAL=0$
66
--

regression/verilog/assignments/procedural_assignments1.desc

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
CORE
22
procedural_assignments1.sv
3-
--bound 0
3+
44
^EXIT=0$
55
^SIGNAL=0$
66
--
+2-2
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
CORE
22
nested_case1.v
3-
--bound 0
3+
44
^EXIT=0$
55
^SIGNAL=0$
6-
^\[main.property.p1\] .* PROVED up to bound 0$
6+
^\[main.property.p1\] .* PROVED$
77
--
88
^warning: ignoring

regression/verilog/case/riscv-alu.desc

+11-11
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,16 @@
11
CORE
22
riscv-alu.sv
3-
--module alu --bound 0
4-
^\[alu\.pADD\] always alu\.op == \{ 7'b0000000, 3'b000 \} -> alu\.out == alu\.a \+ alu\.b: PROVED up to bound 0$
5-
^\[alu\.pSUB\] always alu\.op == \{ 7'b0100000, 3'b000 \} -> alu\.out == alu\.a - alu\.b: PROVED up to bound 0$
6-
^\[alu\.pSLL\] always alu\.op == \{ 7'b0000000, 3'b001 \} -> alu\.out == alu\.a << alu\.b\[4:0\]: PROVED up to bound 0$
7-
^\[alu\.pSLT\] always alu\.op == \{ 7'b0000000, 3'b010 \} -> alu\.out == \$signed\(alu\.a\) < \$signed\(alu\.b\): PROVED up to bound 0$
8-
^\[alu\.pSLTU\] always alu\.op == \{ 7'b0000000, 3'b011 \} -> alu\.out == alu\.a < alu\.b: PROVED up to bound 0$
9-
^\[alu\.pXOR\] always alu\.op == \{ 7'b0000000, 3'b100 \} -> alu\.out == \(alu\.a \^ alu\.b\): PROVED up to bound 0$
10-
^\[alu\.pSRL\] always alu\.op == \{ 7'b0000000, 3'b101 \} -> alu\.out == alu\.a >> alu\.b\[4:0\]: PROVED up to bound 0$
11-
^\[alu\.pSRA\] always alu\.op == \{ 7'b0100000, 3'b101 \} -> alu\.out == \$signed\(alu\.a\) >>> alu\.b\[4:0\]: PROVED up to bound 0$
12-
^\[alu\.pOR\] always alu\.op == \{ 7'b0000000, 3'b110 \} -> alu\.out == \(alu\.a | alu\.b\): PROVED up to bound 0$
13-
^\[alu\.pAND\] always alu\.op == \{ 7'b0000000, 3'b111 \} -> alu\.out == \(alu\.a & alu\.b\): PROVED up to bound 0$
3+
--module alu
4+
^\[alu\.pADD\] always alu\.op == \{ 7'b0000000, 3'b000 \} -> alu\.out == alu\.a \+ alu\.b: PROVED$
5+
^\[alu\.pSUB\] always alu\.op == \{ 7'b0100000, 3'b000 \} -> alu\.out == alu\.a - alu\.b: PROVED$
6+
^\[alu\.pSLL\] always alu\.op == \{ 7'b0000000, 3'b001 \} -> alu\.out == alu\.a << alu\.b\[4:0\]: PROVED$
7+
^\[alu\.pSLT\] always alu\.op == \{ 7'b0000000, 3'b010 \} -> alu\.out == \$signed\(alu\.a\) < \$signed\(alu\.b\): PROVED$
8+
^\[alu\.pSLTU\] always alu\.op == \{ 7'b0000000, 3'b011 \} -> alu\.out == alu\.a < alu\.b: PROVED$
9+
^\[alu\.pXOR\] always alu\.op == \{ 7'b0000000, 3'b100 \} -> alu\.out == \(alu\.a \^ alu\.b\): PROVED$
10+
^\[alu\.pSRL\] always alu\.op == \{ 7'b0000000, 3'b101 \} -> alu\.out == alu\.a >> alu\.b\[4:0\]: PROVED$
11+
^\[alu\.pSRA\] always alu\.op == \{ 7'b0100000, 3'b101 \} -> alu\.out == \$signed\(alu\.a\) >>> alu\.b\[4:0\]: PROVED$
12+
^\[alu\.pOR\] always alu\.op == \{ 7'b0000000, 3'b110 \} -> alu\.out == \(alu\.a | alu\.b\): PROVED$
13+
^\[alu\.pAND\] always alu\.op == \{ 7'b0000000, 3'b111 \} -> alu\.out == \(alu\.a & alu\.b\): PROVED$
1414
^EXIT=0$
1515
^SIGNAL=0$
1616
--

regression/verilog/data-types/associative_array1.desc

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
KNOWNBUG
22
associative_array1.sv
3-
--bound 0
3+
44
^EXIT=0$
55
^SIGNAL=0$
66
--
+3-3
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
CORE
22
chandle1.sv
3-
--bound 0
4-
^\[main\.p0\] always main\.some_handle == null: PROVED up to bound 0$
5-
^\[main\.p1\] always \$typename\(main\.some_handle\) == "chandle": PROVED up to bound 0$
3+
4+
^\[main\.p0\] always main\.some_handle == null: PROVED$
5+
^\[main\.p1\] always \$typename\(main\.some_handle\) == "chandle": PROVED$
66
^EXIT=0$
77
^SIGNAL=0$
88
--

regression/verilog/data-types/integer_atom_types1.desc

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
CORE
22
integer_atom_types1.sv
3-
--module main --bound 0
3+
--module main
44
^EXIT=0$
55
^SIGNAL=0$
66
--

regression/verilog/data-types/queue1.desc

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
KNOWNBUG
22
queue1.sv
3-
--bound 0
3+
44
^EXIT=0$
55
^SIGNAL=0$
66
--
+1-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
CORE
22
signed1.sv
3-
--bound 0
3+
44
^EXIT=0$
55
^SIGNAL=0$
66
--
+1-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
CORE
22
signed2.sv
3-
--bound 0
3+
44
^EXIT=0$
55
^SIGNAL=0$
66
--

regression/verilog/data-types/type_operator.desc

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
CORE
22
type_operator.sv
3-
--bound 0
3+
44
^EXIT=0$
55
^SIGNAL=0$
66
--
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
CORE
22
vector_types1.sv
3-
--bound 0
3+
44
^EXIT=0$
55
^SIGNAL=0$
66
--
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
CORE
22
vector_types2.sv
3-
--bound 0
4-
^\[.*\] always \$bits\(main\.x\) == \(1 << main\.p\) \+ 1: PROVED up to bound 0$
3+
4+
^\[.*\] always \$bits\(main\.x\) == \(1 << main\.p\) \+ 1: PROVED$
55
^EXIT=0$
66
^SIGNAL=0$
77
--

regression/verilog/elaboration/type_operator.desc

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
CORE
22
type_operator.sv
3-
--bound 0
3+
44
^EXIT=0$
55
^SIGNAL=0$
66
--

regression/verilog/elaboration/var_bits.desc

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
CORE
22
var_bits.sv
3-
--bound 0
3+
44
^EXIT=0$
55
^SIGNAL=0$
66
--

regression/verilog/elaboration/wire_bits.desc

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
CORE
22
wire_bits.v
3-
--bound 0
3+
44
^EXIT=0$
55
^SIGNAL=0$
66
--

regression/verilog/enums/enum4.desc

+2-2
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
CORE
22
enum4.sv
3-
--bound 0
3+
44
^EXIT=0$
55
^SIGNAL=0$
6-
^\[main\.p1\] always main\.A == \[7:0\]'\(1\): PROVED up to bound 0$
6+
^\[main\.p1\] always main\.A == \[7:0\]'\(1\): PROVED$
77
--

regression/verilog/enums/enum5.desc

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
CORE
22
enum5.sv
3-
--bound 0
3+
44
^file .* line 6: expected constant expression, but got `main\.some_wire'$
55
^EXIT=2$
66
^SIGNAL=0$
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
CORE
22
enum_base_type1.sv
3-
--bound 0
3+
44
^EXIT=0$
55
^SIGNAL=0$
6-
^\[.*\] always \$bits\(main\.A\) == 8: PROVED up to bound 0$
6+
^\[.*\] always \$bits\(main\.A\) == 8: PROVED$
77
--
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
CORE
22
enum_base_type2.sv
3-
--bound 0
3+
44
^EXIT=0$
55
^SIGNAL=0$
6-
^\[.*\] always \$bits\(main\.A\) == main\.p: PROVED up to bound 0$
6+
^\[.*\] always \$bits\(main\.A\) == main\.p: PROVED$
77
--
+3-3
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
CORE
22
enum_cast1.sv
3-
--bound 0
3+
44
^EXIT=0$
55
^SIGNAL=0$
6-
^\[main\.p1\] always main.A == signed \[31:0\]'\(1\): PROVED up to bound 0$
7-
^\[main\.p2\] always main.B == signed \[31:0\]'\(2\): PROVED up to bound 0$
6+
^\[main\.p1\] always main.A == signed \[31:0\]'\(1\): PROVED$
7+
^\[main\.p2\] always main.B == signed \[31:0\]'\(2\): PROVED$
88
--

regression/verilog/enums/enum_initializers1.desc

+3-3
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
CORE
22
enum_initializers1.sv
3-
--bound 0
4-
^\[main\.pA\] always main.A == 1: PROVED up to bound 0$
5-
^\[main\.pB\] always main.B == 11: PROVED up to bound 0$
3+
4+
^\[main\.pA\] always main.A == 1: PROVED$
5+
^\[main\.pB\] always main.B == 11: PROVED$
66
^EXIT=0$
77
^SIGNAL=0$
88
--

0 commit comments

Comments
 (0)