Skip to content

Commit 8c4ecb8

Browse files
committed
draw_graph method for Substream with input port names
1 parent bda51d7 commit 8c4ecb8

File tree

4 files changed

+42
-2
lines changed

4 files changed

+42
-2
lines changed

tests/extension/thread_/stream_graph_substream/thread_stream_graph_substream.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -187,7 +187,7 @@ def comp(size):
187187
fsm = th.start(32)
188188

189189
try:
190-
strm.draw_graph()
190+
actstrm.draw_graph()
191191
except:
192192
pass
193193

veriloggen/stream/graph.py

Lines changed: 23 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -191,7 +191,7 @@ def visit__SpecialOperator(self, node):
191191

192192
for i, arg in enumerate(node.args):
193193
a = self.visit(arg)
194-
self.graph.add_edge(a, node, label='p%d' % i)
194+
self.graph.add_edge(a, node, label='a%d' % i)
195195

196196
if node.start_stage is not None:
197197
self._set_rank(node.start_stage + 1, node)
@@ -231,6 +231,28 @@ def visit__Accumulator(self, node):
231231
self._add_output(node, prev)
232232
return prev
233233

234+
def visit_Substream(self, node):
235+
label = self._get_label(node)
236+
shape = self._get_shape(node)
237+
color = self._get_color(node)
238+
style = self._get_style(node)
239+
peripheries = self._get_peripheries(node)
240+
self.graph.add_node(node,
241+
label=label, shape=shape,
242+
color=color, style=style,
243+
peripheries=peripheries)
244+
245+
for arg, name in zip(node.args, node.conds.keys()):
246+
a = self.visit(arg)
247+
self.graph.add_edge(a, node, label=name)
248+
249+
if node.start_stage is not None:
250+
self._set_rank(node.start_stage + 1, node)
251+
252+
prev = self._add_gap(node, label)
253+
self._add_output(node, prev)
254+
return prev
255+
234256
def visit_RingBuffer(self, node):
235257
label = self._get_label(node)
236258
shape = self._get_shape(node)

veriloggen/stream/scheduler.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -136,6 +136,9 @@ def visit__Accumulator(self, node):
136136
node._set_end_stage(end)
137137
return end
138138

139+
def visit_Substream(self, node):
140+
return self.visit__SpecialOperator(node)
141+
139142
def visit_RingBuffer(self, node):
140143
if node._has_start_stage():
141144
return node._get_end_stage()

veriloggen/stream/visitor.py

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,9 @@ def visit(self, node):
2727
return rslt
2828

2929
def _visit(self, node):
30+
if isinstance(node, stypes.Substream):
31+
return self.visit_Substream(node)
32+
3033
if isinstance(node, stypes.RingBuffer):
3134
return self.visit_RingBuffer(node)
3235

@@ -76,6 +79,9 @@ def visit__SpecialOperator(self, node):
7679
def visit__Accumulator(self, node):
7780
raise NotImplementedError()
7881

82+
def visit_Substream(self, node):
83+
raise NotImplementedError()
84+
7985
def visit_RingBuffer(self, node):
8086
raise NotImplementedError()
8187

@@ -125,6 +131,9 @@ def visit__Accumulator(self, node):
125131
reset = self.visit(node.reset) if node.reset is not None else set()
126132
return right | size | initval | enable | reset
127133

134+
def visit_Substream(self, node):
135+
return self.visit__SpecialOperator(node)
136+
128137
def visit_RingBuffer(self, node):
129138
right = self.visit(node.right)
130139
enable = self.visit(node.enable) if node.enable is not None else set()
@@ -192,6 +201,9 @@ def visit__Accumulator(self, node):
192201
mine = set([node]) if node._has_output() else set()
193202
return right | size | initval | enable | reset | mine
194203

204+
def visit_Substream(self, node):
205+
return self.visit__SpecialOperator(node)
206+
195207
def visit_RingBuffer(self, node):
196208
right = self.visit(node.right)
197209
enable = self.visit(node.enable) if node.enable is not None else set()
@@ -267,6 +279,9 @@ def visit__Accumulator(self, node):
267279
mine = set([node])
268280
return right | size | initval | enable | reset | mine
269281

282+
def visit_Substream(self, node):
283+
return self.visit__SpecialOperator(node)
284+
270285
def visit_RingBuffer(self, node):
271286
right = self.visit(node.right)
272287
enable = self.visit(node.enable) if node.enable is not None else set()

0 commit comments

Comments
 (0)