Skip to content

Commit edc1d16

Browse files
committed
WIP: Integrate stages into the taskloop
1 parent bd88454 commit edc1d16

File tree

2 files changed

+72
-2
lines changed

2 files changed

+72
-2
lines changed

sbysrc/sby_core.py

+53-2
Original file line numberDiff line numberDiff line change
@@ -579,7 +579,7 @@ def run(self):
579579
self.tasks = []
580580
for task in tasks:
581581
task.check_timeout()
582-
if task.procs_pending or task.procs_running:
582+
if task.procs_pending or task.procs_running or task.stages_running:
583583
self.tasks.append(task)
584584
else:
585585
task.exit_callback()
@@ -619,6 +619,9 @@ def __init__(self, sbyconfig, workdir, early_logs, reusedir, taskloop=None, logf
619619
self.taskloop = taskloop or SbyTaskloop()
620620
self.taskloop.tasks.append(self)
621621

622+
self.base_dependencies = []
623+
self.stages_running = []
624+
622625
self.procs_running = []
623626
self.procs_pending = []
624627

@@ -803,7 +806,7 @@ def make_model(self, model_name):
803806
proc = SbyProc(
804807
self,
805808
model_name,
806-
[],
809+
self.base_dependencies,
807810
"cd {}/src; {} -ql ../model/design.log ../model/design.ys".format(self.workdir, self.exe_paths["yosys"])
808811
)
809812
proc.checkretcode = True
@@ -992,6 +995,8 @@ def handle_non_engine_options(self):
992995

993996
self.handle_str_option("make_model", None)
994997

998+
self.handle_str_option("stage_hack", None)
999+
9951000
def setup_procs(self, setupmode):
9961001
self.handle_non_engine_options()
9971002
if self.opt_smtc is not None:
@@ -1019,6 +1024,27 @@ def setup_procs(self, setupmode):
10191024
self.retcode = 0
10201025
return
10211026

1027+
if self.opt_stage_hack is not None:
1028+
# TODO replace with actual configs generated for the stages
1029+
self.setup_stage(setupmode, config=[
1030+
"[options]",
1031+
"mode bmc",
1032+
"[engines]",
1033+
"smtbmc",
1034+
"[script]",
1035+
"read_rtlil ../../model/design.il",
1036+
"setundef -zero"
1037+
], name="bmc_zero", depends=self.make_model("base"))
1038+
self.setup_stage(setupmode, config=[
1039+
"[options]",
1040+
"mode bmc",
1041+
"[engines]",
1042+
"smtbmc",
1043+
"[script]",
1044+
"read_rtlil ../../model/design.il",
1045+
"setundef -one"
1046+
], name="bmc_one", depends=self.make_model("base"))
1047+
10221048
if self.opt_make_model is not None:
10231049
for name in self.opt_make_model.split(","):
10241050
self.model(name.strip())
@@ -1049,6 +1075,12 @@ def setup_procs(self, setupmode):
10491075
if opt not in self.used_options:
10501076
self.error(f"Unused option: {opt}")
10511077

1078+
def setup_stage(self, setupmode, config, name, depends):
1079+
stage = SbyStage(config, self, name)
1080+
stage.base_dependencies.extend(depends)
1081+
self.stages_running.append(stage)
1082+
stage.setup_procs(setupmode)
1083+
10521084
def summarize(self):
10531085
total_clock_time = int(monotonic() - self.start_clock_time)
10541086

@@ -1179,3 +1211,22 @@ def print_junit_result(self, f, junit_ts_name, junit_tc_name, junit_format_stric
11791211
print('</system-err>', file=f)
11801212
print(f'</testsuite>', file=f)
11811213
print(f'</testsuites>', file=f)
1214+
1215+
1216+
class SbyStage(SbyTask):
1217+
def __init__(self, sbyconfig, main_task, name):
1218+
self.main_task = main_task
1219+
self.name = name
1220+
workdir = f"{main_task.workdir}/stage_{name}"
1221+
os.mkdir(workdir)
1222+
super().__init__(
1223+
sbyconfig, workdir=workdir, early_logs=[],
1224+
reusedir=False, taskloop=main_task.taskloop, logfile=main_task.logfile)
1225+
1226+
self.exit_callback = self.handle_stage_exit
1227+
1228+
1229+
def handle_stage_exit(self):
1230+
self.main_task.stages_running.remove(self)
1231+
1232+
# TODO pass the status back to the main task

tests/unsorted/stage_hack.sby

+19
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
[options]
2+
mode bmc
3+
4+
stage_hack yup
5+
6+
[engines]
7+
smtbmc
8+
9+
[script]
10+
read -formal stage_hack.sv
11+
prep -top top
12+
13+
[file stage_hack.sv]
14+
module top(input clk, output x);
15+
16+
assign x = 1;
17+
18+
endmodule
19+

0 commit comments

Comments
 (0)