Skip to content

Commit eeb0376

Browse files
authored
Merge pull request #64 from YosysHQ/sby-options
Support setting arbitrary SBY options for the SBY strategy
2 parents b3e5464 + 95ff52c commit eeb0376

File tree

2 files changed

+16
-1
lines changed

2 files changed

+16
-1
lines changed

docs/source/strategies.rst

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -83,6 +83,10 @@ Strategy Options
8383
``xprop`` pass, but may prevent proving partitions equivalent when they
8484
contain uninitialized state or don't-care values. (default value: on)
8585

86+
``option <option_name> <option_value>``
87+
Set arbitrary option in the generated ``.sby`` files. Can be used multiple
88+
times.
89+
8690
Example Configurations
8791
......................
8892

src/eqy.py

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -816,6 +816,12 @@ def string_opt_parser(self, name, value):
816816
return "expected option value"
817817
setattr(self.scfg, name, value)
818818

819+
def multi_string_opt_parser(self, name, value):
820+
if name not in self.options_seen:
821+
self.options_seen.add(name)
822+
setattr(self.scfg, name, [])
823+
getattr(self.scfg, name).append(value)
824+
819825
def bool_opt_parser(self, name, value):
820826
if name in self.options_seen:
821827
return "repeated option"
@@ -889,11 +895,12 @@ def write(self, job, partition):
889895

890896

891897
class EqySbyStrategy(EqyStrategy):
892-
default_scfg = dict(engine='smtbmc', depth=5, xprop=True, timeout=None)
898+
default_scfg = dict(engine='smtbmc', depth=5, xprop=True, timeout=None, option=())
893899
parse_opt_engine = EqyStrategy.string_opt_parser
894900
parse_opt_depth = EqyStrategy.int_opt_parser
895901
parse_opt_xprop = EqyStrategy.bool_opt_parser
896902
parse_opt_timeout = EqyStrategy.int_opt_parser
903+
parse_opt_option = EqyStrategy.multi_string_opt_parser
897904

898905
def write(self, job, partition):
899906
with open(self.path(partition.name, f"{partition.name}.sby"), "w") as sby_f:
@@ -907,6 +914,9 @@ def write(self, job, partition):
907914
if self.scfg.timeout:
908915
print(f"timeout {self.scfg.timeout}", file=sby_f)
909916

917+
for option in self.scfg.option:
918+
print(option, file=sby_f)
919+
910920
print(textwrap.dedent(f"""
911921
912922
[engines]
@@ -921,6 +931,7 @@ def write(self, job, partition):
921931

922932
if self.scfg.xprop:
923933
print(textwrap.dedent(f"""
934+
async2sync
924935
formalff -clk2ff -ff2anyinit gate.{partition.name}
925936
setundef -anyseq gate.{partition.name}
926937
flatten -wb; dffunmap; opt_expr -keepdc -undriven; opt_clean

0 commit comments

Comments
 (0)