aboutsummaryrefslogtreecommitdiffstats
path: root/backends
diff options
context:
space:
mode:
authorJannis Harder <me@jix.one>2022-06-03 16:24:09 +0200
committerJannis Harder <me@jix.one>2022-06-03 16:24:09 +0200
commit0207d7b0cfa24b7fe688b5e9458762dd8678ae52 (patch)
tree33acb9f074ef4e540c93c5e6b23e98f4a519c95e /backends
parentd88a5d26b7849e25dceb3854070dd56f9044c7ee (diff)
downloadyosys-0207d7b0cfa24b7fe688b5e9458762dd8678ae52.tar.gz
yosys-0207d7b0cfa24b7fe688b5e9458762dd8678ae52.tar.bz2
yosys-0207d7b0cfa24b7fe688b5e9458762dd8678ae52.zip
smtbmc: recognize cvc5 and fix unrolling for cvc4/cvc5
Diffstat (limited to 'backends')
-rw-r--r--backends/smt2/smtio.py16
1 files changed, 13 insertions, 3 deletions
diff --git a/backends/smt2/smtio.py b/backends/smt2/smtio.py
index 14feec30d..4bbf3b4fb 100644
--- a/backends/smt2/smtio.py
+++ b/backends/smt2/smtio.py
@@ -123,6 +123,7 @@ class SmtIo:
self.forall = False
self.timeout = 0
self.produce_models = True
+ self.recheck = False
self.smt2cache = [list()]
self.smt2_options = dict()
self.p = None
@@ -189,11 +190,12 @@ class SmtIo:
if self.timeout != 0:
self.popen_vargs.append('-T:%d' % self.timeout);
- if self.solver == "cvc4":
+ if self.solver in ["cvc4", "cvc5"]:
+ self.recheck = True
if self.noincr:
- self.popen_vargs = ['cvc4', '--lang', 'smt2.6' if self.logic_dt else 'smt2'] + self.solver_opts
+ self.popen_vargs = [self.solver, '--lang', 'smt2.6' if self.logic_dt else 'smt2'] + self.solver_opts
else:
- self.popen_vargs = ['cvc4', '--incremental', '--lang', 'smt2.6' if self.logic_dt else 'smt2'] + self.solver_opts
+ self.popen_vargs = [self.solver, '--incremental', '--lang', 'smt2.6' if self.logic_dt else 'smt2'] + self.solver_opts
if self.timeout != 0:
self.popen_vargs.append('--tlimit=%d000' % self.timeout);
@@ -404,6 +406,8 @@ class SmtIo:
stmt = re.sub(r" *;.*", "", stmt)
if stmt == "": return
+ recheck = None
+
if unroll and self.unroll:
stmt = self.unroll_buffer + stmt
self.unroll_buffer = ""
@@ -415,6 +419,9 @@ class SmtIo:
s = self.parse(stmt)
+ if self.recheck and s and s[0].startswith("get-"):
+ recheck = self.unroll_idcnt
+
if self.debug_print:
print("-> %s" % s)
@@ -440,6 +447,9 @@ class SmtIo:
stmt = self.unparse(self.unroll_stmt(s))
+ if recheck is not None and recheck != self.unroll_idcnt:
+ self.check_sat(["sat"])
+
if stmt == "(push 1)":
self.unroll_stack.append((
copy(self.unroll_sorts),