Skip to content

Commit d0ba3bd

Browse files
committed
MultiCycle operators are supported.
1 parent c4878de commit d0ba3bd

File tree

3 files changed

+599
-51
lines changed

3 files changed

+599
-51
lines changed

veriloggen/stream/scheduler.py

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -88,6 +88,8 @@ def visit__BinaryOperator(self, node):
8888
node._set_start_stage(mine)
8989
if getattr(node, 'variable_latency', None):
9090
node.latency = getattr(node, node.variable_latency)()
91+
if getattr(node, 'variable_iteration_interval', None):
92+
node.iteration_interval = getattr(node, node.variable_iteration_interval)()
9193
end = self.next_stage(node, mine)
9294
node._set_end_stage(end)
9395
return end
@@ -99,6 +101,10 @@ def visit__UnaryOperator(self, node):
99101
mine = self.max_stage(right)
100102
node.right = self.fill_gap(node.right, mine)
101103
node._set_start_stage(mine)
104+
if getattr(node, 'variable_latency', None):
105+
node.latency = getattr(node, node.variable_latency)()
106+
if getattr(node, 'variable_iteration_interval', None):
107+
node.iteration_interval = getattr(node, node.variable_iteration_interval)()
102108
end = self.next_stage(node, mine)
103109
node._set_end_stage(end)
104110
return end
@@ -113,6 +119,10 @@ def visit__SpecialOperator(self, node):
113119
mine = self.max_stage(*ret)
114120
node.args = [self.fill_gap(var, mine) for var in node.args]
115121
node._set_start_stage(mine)
122+
if getattr(node, 'variable_latency', None):
123+
node.latency = getattr(node, node.variable_latency)()
124+
if getattr(node, 'variable_iteration_interval', None):
125+
node.iteration_interval = getattr(node, node.variable_iteration_interval)()
116126
end = self.next_stage(node, mine)
117127
node._set_end_stage(end)
118128
return end
@@ -147,6 +157,10 @@ def visit__Accumulator(self, node):
147157
node.reset = self.fill_gap(node.reset, mine)
148158
node.reg_initval = self.fill_gap(node.reg_initval, mine)
149159
node._set_start_stage(mine)
160+
if getattr(node, 'variable_latency', None):
161+
node.latency = getattr(node, node.variable_latency)()
162+
if getattr(node, 'variable_iteration_interval', None):
163+
node.iteration_interval = getattr(node, node.variable_iteration_interval)()
150164
end = self.next_stage(node, mine)
151165
node._set_end_stage(end)
152166
return end

0 commit comments

Comments
 (0)