3
0
Fork 0
mirror of https://github.com/YosysHQ/sby.git synced 2025-08-25 22:26:07 +00:00

sby: core: fixed the setup script generation and ensured the model for the setup was implemented

This commit is contained in:
Aki Van Ness 2022-10-04 06:26:12 -04:00
parent 19061bc422
commit b53bcf8c11
No known key found for this signature in database
GPG key ID: C629E8EC06327BEE

View file

@ -548,25 +548,29 @@ class SbyConfig:
def gen_setup_script(self): def gen_setup_script(self):
script = '# Autogenerated by SBY stage setup\n' script = '# Autogenerated by SBY stage setup\n'
script += 'select *' script += 'read_ilang design.il\n'
script += 'select *\n'
def cutpoint(v): def cutpoint(v):
return f"cutpoint {v}" return f"cutpoint {v}\n"
def disable(v): def disable(v):
return f"select -del {v}" return f"select -del {v}\n"
def enable(v): def enable(v):
return f"select -add {v}" return f"select -add {v}\n"
def assume(v): def assume(v):
return f"chformal -assert2assume {v}" return f"chformal -assert2assume {v}\n"
def define(v): def define(v):
return f"select -set {v}" defines = str()
for defn in v:
defines += f"select -set {v}\n"
return defines
def invoke(v): def invoke(v):
return f"{v}" return f"{v}\n"
for k, v in self.setup.items(): for k, v in self.setup.items():
script += { script += {
@ -576,11 +580,12 @@ class SbyConfig:
'assume': assume(v), 'assume': assume(v),
'define': define(v), 'define': define(v),
'invoke': invoke(v) 'invoke': invoke(v)
}.get(k, '') + '\n' }.get(k, '')
script += 'select -set _setup %\n' script += 'select -set _setup %\n'
script += 'select @_setup %n\n' script += 'select @_setup %n\n'
script += 'chformal -assert -remove %\n' script += 'chformal -assert -remove %\n'
script += 'write_ilang design_setup.il\n'
return script return script
@ -1015,8 +1020,13 @@ class SbyTask(SbyConfig):
os.makedirs(f"{self.workdir}/model") os.makedirs(f"{self.workdir}/model")
if model_name == "prep": if model_name == "prep":
has_setup = len(self.setup) > 0
with open(f"""{self.workdir}/model/design_prep.ys""", "w") as f: with open(f"""{self.workdir}/model/design_prep.ys""", "w") as f:
print(f"# running in {self.workdir}/model/", file=f) print(f"# running in {self.workdir}/model/", file=f)
if has_setup:
print(f"""read_ilang design_setup.il""", file=f)
else:
print(f"""read_ilang design.il""", file=f) print(f"""read_ilang design.il""", file=f)
print("scc -select; simplemap; select -clear", file=f) print("scc -select; simplemap; select -clear", file=f)
print("memory_nordff", file=f) print("memory_nordff", file=f)
@ -1045,7 +1055,7 @@ class SbyTask(SbyConfig):
proc = SbyProc( proc = SbyProc(
self, self,
model_name, model_name,
self.model("base"), self.model("setup" if has_setup else "base"),
"cd {}/model; {} -ql design_{s}.log design_{s}.ys".format(self.workdir, self.exe_paths["yosys"], s=model_name) "cd {}/model; {} -ql design_{s}.log design_{s}.ys".format(self.workdir, self.exe_paths["yosys"], s=model_name)
) )
proc.checkretcode = True proc.checkretcode = True
@ -1195,6 +1205,19 @@ class SbyTask(SbyConfig):
return [proc] return [proc]
if model_name == "setup":
with open(f"{self.workdir}/model/design_setup.ys", "w") as f:
f.write(self.gen_setup_script())
proc = SbyProc(
self,
"setup",
self.model("base"),
f"""cd {self.workdir}/model; {self.exe_paths["yosys"]} -ql design_setup.log design_setup.ys"""
)
return [proc]
self.error(f"Invalid model name: {model_name}") self.error(f"Invalid model name: {model_name}")
def model(self, model_name): def model(self, model_name):