From: Clifford Wolf Date: Wed, 1 Mar 2017 10:09:14 +0000 (+0100) Subject: Add "mode live" support X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=774849a6edfd2f1adf8bd6148da0672ffc81b708;p=SymbiYosys.git Add "mode live" support --- diff --git a/sbysrc/sby_core.py b/sbysrc/sby_core.py index 015f172..3a1ba62 100644 --- a/sbysrc/sby_core.py +++ b/sbysrc/sby_core.py @@ -330,6 +330,13 @@ class SbyJob: 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) @@ -422,7 +429,7 @@ class SbyJob: 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: @@ -451,6 +458,10 @@ class SbyJob: 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) diff --git a/sbysrc/sby_engine_aiger.py b/sbysrc/sby_engine_aiger.py index d8f634d..e5e8311 100644 --- a/sbysrc/sby_engine_aiger.py +++ b/sbysrc/sby_engine_aiger.py @@ -27,6 +27,8 @@ def run(mode, job, engine_idx, engine): 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": diff --git a/sbysrc/sby_mode_live.py b/sbysrc/sby_mode_live.py new file mode 100644 index 0000000..dd81ffa --- /dev/null +++ b/sbysrc/sby_mode_live.py @@ -0,0 +1,40 @@ +# +# SymbiYosys (sby) -- Front-end for Yosys-based formal verification flows +# +# Copyright (C) 2016 Clifford Wolf +# +# 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 +