Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
CORE
main.sv
reset1.sv
--module top --bound 10 --reset reset_n
^EXIT=0$
^SIGNAL=0$
Expand Down
7 changes: 7 additions & 0 deletions regression/ebmc/CLI/reset2.desc
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
CORE
reset2.sv
--module top --bound 10 --reset ~reset_n
^\[top\.p1\] always \(disable iff \(!top\.reset_n\) top\.data >= 0 && top\.data <= 10\): PROVED .*$
^EXIT=0$
^SIGNAL=0$
--
15 changes: 15 additions & 0 deletions regression/ebmc/CLI/reset2.sv
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
module top(input reset_n, clk);

reg [7:0] data;

always @(posedge clk) begin
if(!reset_n)
data = 0;
else if(data != 10)
data++;
end

// the below holds if the design is reset properly
p1: assert property (disable iff (!reset_n) data >=0 && data <= 10);

endmodule
4 changes: 4 additions & 0 deletions src/ebmc/build_transition_system.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -276,6 +276,10 @@ int get_transition_system(
exprt reset_constraint = to_expr(
ns, transition_system.main_symbol->name, cmdline.get_value("reset"));

// we want the constraint to be boolean
reset_constraint =
typecast_exprt::conditional_cast(reset_constraint, bool_typet{});

// true in initial state
transt new_trans_expr = transition_system.trans_expr;
new_trans_expr.init() = and_exprt(new_trans_expr.init(), reset_constraint);
Expand Down
Loading