cd tests/simple && bash run-test.sh
cd tests/hana && bash run-test.sh
cd tests/asicworld && bash run-test.sh
+ cd tests/sat && bash run-test.sh
install: $(TARGETS) $(EXTRA_TARGETS)
$(INSTALL_SUDO) mkdir -p $(DESTDIR)/bin
--- /dev/null
+// http://www.reddit.com/r/yosys/comments/1vljks/new_support_for_systemveriloglike_asserts/
+module test(input clk, input rst, output y);
+reg [2:0] state;
+always @(posedge clk) begin
+ if (rst || state == 3) begin
+ state <= 0;
+ end else begin
+ assert(state < 3);
+ state <= state + 1;
+ end
+end
+assign y = state[2];
+assert property (y !== 1'b1);
+endmodule
--- /dev/null
+module test_001(clk, a, a_old, b);
+ // test case taken from:
+ // http://www.reddit.com/r/yosys/comments/1wvpj6/trouble_with_assertions_and_sat_solver/
+
+ input wire clk;
+ input wire a;
+
+ output reg a_old = 0;
+ output reg b = 1;
+ wire assertion = (a_old != b);
+
+ always @(posedge clk) begin
+ a_old <= a;
+ b <= !a;
+
+ assert(a_old != b);
+ end
+endmodule
+
+module test_002(clk, a, a_old, b);
+ // copy from test_001 with modifications
+
+ input wire clk;
+ input wire a;
+
+ output reg a_old = 0;
+ output reg b = 0; // <-- this will fail
+ wire assertion = (a_old != b);
+
+ always @(posedge clk) begin
+ a_old <= a;
+ b <= !a;
+ assert(a_old != b);
+ end
+endmodule
+
+module test_003(clk, a, a_old, b);
+ // copy from test_001 with modifications
+
+ input wire clk;
+ input wire a;
+
+ output reg a_old = 0;
+ output reg b; // <-- this will fail
+ wire assertion = (a_old != b);
+
+ always @(posedge clk) begin
+ a_old <= a;
+ b <= !a;
+ assert(a_old != b);
+ end
+endmodule
+
+module test_004(clk, a, a_old, b);
+ // copy from test_001 with modifications
+
+ input wire clk;
+ input wire a;
+
+ output reg a_old = 0;
+ output reg b = 1;
+ wire assertion = (a_old != b);
+
+ always @(posedge clk) begin
+ a_old <= a;
+ b <= !a;
+ assert(a_old == b); // <-- this will fail
+ end
+endmodule
+
+module test_005(clk, a, a_old, b);
+ // copy from test_001 with modifications
+
+ input wire clk;
+ input wire a;
+
+ output reg a_old = 1; // <-- inverted, no problem
+ output reg b = 0;
+ wire assertion = (a_old != b);
+
+ always @(posedge clk) begin
+ a_old <= a;
+ b <= !a;
+ assert(a_old != b);
+ end
+endmodule
+
--- /dev/null
+read_verilog asserts_seq.v
+hierarchy; proc; opt
+
+sat -verify -prove-asserts -tempinduct -seq 1 test_001
+sat -falsify -prove-asserts -tempinduct -seq 1 test_002
+sat -falsify -prove-asserts -tempinduct -seq 1 test_003
+sat -falsify -prove-asserts -tempinduct -seq 1 test_004
+sat -verify -prove-asserts -tempinduct -seq 1 test_005
+
+sat -verify -prove-asserts -seq 2 test_001
+sat -falsify -prove-asserts -seq 2 test_002
+sat -falsify -prove-asserts -seq 2 test_003
+sat -falsify -prove-asserts -seq 2 test_004
+sat -verify -prove-asserts -seq 2 test_005
+