diff options
author | Clifford Wolf <clifford@clifford.at> | 2016-11-22 21:21:13 +0100 |
---|---|---|
committer | Clifford Wolf <clifford@clifford.at> | 2016-11-22 21:21:13 +0100 |
commit | f257ccf22eadc68ab34ccb8639fdc4eda11af0c1 (patch) | |
tree | 194916c6c629461b13314bc11a0d090119a626f7 /backends/smt2 | |
parent | 3b73d3f140b1ebf211847fe5ece9d8b01b971bc2 (diff) | |
download | yosys-f257ccf22eadc68ab34ccb8639fdc4eda11af0c1.tar.gz yosys-f257ccf22eadc68ab34ccb8639fdc4eda11af0c1.tar.bz2 yosys-f257ccf22eadc68ab34ccb8639fdc4eda11af0c1.zip |
Added "yosys-smtbmc --append"
Diffstat (limited to 'backends/smt2')
-rw-r--r-- | backends/smt2/smtbmc.py | 22 |
1 files changed, 20 insertions, 2 deletions
diff --git a/backends/smt2/smtbmc.py b/backends/smt2/smtbmc.py index 04c25f914..3384789ee 100644 --- a/backends/smt2/smtbmc.py +++ b/backends/smt2/smtbmc.py @@ -25,6 +25,7 @@ from collections import defaultdict skip_steps = 0 step_size = 1 num_steps = 20 +append_steps = 0 vcdfile = None cexfile = None vlogtbfile = None @@ -92,13 +93,18 @@ yosys-smtbmc [options] <yosys_smt2_output> when using -g or -i, create a dump file for each step. The character '%' is replaces in all dump filenames with the step number. + + --append <num_steps> + add <num_steps> time steps at the end of the trace + when creating a counter example (this additional time + steps will still be constrained by assumtions) """ + so.helpmsg()) sys.exit(1) try: opts, args = getopt.getopt(sys.argv[1:], so.shortopts + "t:igm:", so.longopts + - ["final-only", "assume-skipped=", "smtc=", "cex=", "dump-vcd=", "dump-vlogtb=", "dump-smtc=", "dump-all", "noinfo"]) + ["final-only", "assume-skipped=", "smtc=", "cex=", "dump-vcd=", "dump-vlogtb=", "dump-smtc=", "dump-all", "noinfo", "append="]) except: usage() @@ -134,6 +140,8 @@ for o, a in opts: dumpall = True elif o == "--noinfo": noinfo = True + elif o == "--append": + append_steps = int(a) elif o == "-i": tempind = True elif o == "-g": @@ -668,10 +676,20 @@ else: # not tempind if smt.check_sat() == "sat": print("%s BMC failed!" % smt.timestamp()) + if append_steps > 0: + for i in range(last_check_step+1, last_check_step+1+append_steps): + print_msg("Appending additional step %d." % i) + smt.write("(declare-fun s%d () |%s_s|)" % (i, topmod)) + smt.write("(assert (|%s_u| s%d))" % (topmod, i)) + smt.write("(assert (|%s_h| s%d))" % (topmod, i)) + smt.write("(assert (|%s_t| s%d s%d))" % (topmod, i-1, i)) + smt.write("(assert %s)" % get_constr_expr(constr_assumes, i)) + print_msg("Re-solving with appended steps..") + assert smt.check_sat() == "sat" print_anyconsts(step) for i in range(step, last_check_step+1): print_failed_asserts(i) - write_trace(0, last_check_step+1, '%') + write_trace(0, last_check_step+1+append_steps, '%') retstatus = False break |