print("# running in %s/src/" % self.workdir, file=f)
for cmd in self.script:
print(cmd, file=f)
+ if self.opt_mode in ["bmc", "prove"]:
+ print("chformal -live -fair -cover -remove", file=f)
+ if self.opt_mode == "cover":
+ print("chformal -live -fair -remove", file=f)
+ if self.opt_mode == "live":
+ print("chformal -assert2assume", file=f)
+ print("chformal -cover -remove", file=f)
print("opt_clean", file=f)
print("write_ilang ../model/design.il", file=f)
def run(self):
self.handle_str_option("mode", None)
- assert self.opt_mode in ["bmc", "prove", "cover"]
+ assert self.opt_mode in ["bmc", "prove", "cover", "live"]
self.expect = ["PASS"]
if "expect" in self.options:
import sby_mode_prove
sby_mode_prove.run(self)
+ elif self.opt_mode == "live":
+ import sby_mode_live
+ sby_mode_live.run(self)
+
elif self.opt_mode == "cover":
import sby_mode_cover
sby_mode_cover.run(self)
assert False
if solver_args[0] == "suprove":
+ if mode == "live" and (len(solver_args) == 1 or solver_args[1][0] != "+"):
+ solver_args.insert(1, "+simple_liveness")
solver_cmd = " ".join([job.exe_paths["suprove"]] + solver_args[1:])
elif solver_args[0] == "avy":
--- /dev/null
+#
+# SymbiYosys (sby) -- Front-end for Yosys-based formal verification flows
+#
+# Copyright (C) 2016 Clifford Wolf <clifford@clifford.at>
+#
+# Permission to use, copy, modify, and/or distribute this software for any
+# purpose with or without fee is hereby granted, provided that the above
+# copyright notice and this permission notice appear in all copies.
+#
+# THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+# WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+# MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+# ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+# ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+# OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+#
+
+import re, os, getopt
+from sby_core import SbyTask
+
+def run(job):
+ job.handle_str_option("aigsmt", "z3")
+
+ job.status = "UNKNOWN"
+
+ for engine_idx in range(len(job.engines)):
+ engine = job.engines[engine_idx]
+ assert len(engine) > 0
+
+ job.log("engine_%d: %s" % (engine_idx, " ".join(engine)))
+ os.makedirs("%s/engine_%d" % (job.workdir, engine_idx))
+
+ if engine[0] == "aiger":
+ import sby_engine_aiger
+ sby_engine_aiger.run("live", job, engine_idx, engine)
+
+ else:
+ assert False
+