Skip to content

Commit 728005d

Browse files
committed
draw_graph for custom accumulator
1 parent b075fd7 commit 728005d

File tree

1 file changed

+16
-7
lines changed

1 file changed

+16
-7
lines changed

veriloggen/lib/dataflow.py

Lines changed: 16 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -83,12 +83,12 @@ def acc_mod(self, data, initval=0, resetcond=None, width=None):
8383
def acc_max(self, data, initval=0, resetcond=None, width=None):
8484
def op(left, right):
8585
return vtypes.Cond(left > right, left, right)
86-
return self._accumulate([op], data, width, initval, resetcond)
86+
return self._accumulate([op], data, width, initval, resetcond, 'max')
8787

8888
def acc_min(self, data, initval=0, resetcond=None, width=None):
8989
def op(left, right):
9090
return vtypes.Cond(left < right, left, right)
91-
return self._accumulate([op], data, width, initval, resetcond)
91+
return self._accumulate([op], data, width, initval, resetcond, 'min')
9292

9393
def acc_custom(self, data, ops, initval=0, resetcond=None, width=None):
9494
if not isinstance(ops, (tuple, list)):
@@ -119,14 +119,14 @@ def draw_graph(self, filename='out.png', prog='dot'):
119119
_draw_graph(self, filename, prog)
120120

121121
#---------------------------------------------------------------------------
122-
def _accumulate(self, ops, data, width=None, initval=0, resetcond=None):
122+
def _accumulate(self, ops, data, width=None, initval=0, resetcond=None, oplabel=None):
123123
if width is None: width = self.width
124124
stage_id, raw_data, raw_valid, raw_ready = self.data_visitor.visit(data)
125125
tmp_data, tmp_valid, tmp_ready = self._make_tmp(raw_data, raw_valid, raw_ready,
126126
width, initval, acc_ops=ops)
127127
next_stage_id = stage_id + 1 if stage_id is not None else None
128128
ret = _DataflowVariable(self, next_stage_id, tmp_data, tmp_valid, tmp_ready,
129-
data, ops, resetcond)
129+
data, ops, resetcond, initval, oplabel)
130130
if resetcond is not None:
131131
ret.reset(resetcond, initval)
132132
self.vars.append(ret)
@@ -331,7 +331,7 @@ class _DataflowNumeric(vtypes._Numeric): pass
331331

332332
class _DataflowVariable(_DataflowNumeric):
333333
def __init__(self, df, stage_id, data, valid=None, ready=None,
334-
src_data=None, ops=None, resetcond=None, initval=None):
334+
src_data=None, ops=None, resetcond=None, initval=None, oplabel=None):
335335
self.df = df
336336
self.stage_id = stage_id
337337
self.data = data
@@ -342,6 +342,7 @@ def __init__(self, df, stage_id, data, valid=None, ready=None,
342342
self.ops = ops
343343
self.resetcond = resetcond
344344
self.initval = initval
345+
self.oplabel= oplabel
345346
self.prev_dict = {}
346347
self.preg_dict = {}
347348
if self.ready is not None:
@@ -698,8 +699,16 @@ def visit__DataflowVariable(self, node):
698699
label = [ str(node.stage_id) ]
699700
label.append(':')
700701
label.append( str(node.data) )
701-
for op in node.ops:
702-
label.append(vtypes.op2mark(op.__name__))
702+
if node.oplabel is not None:
703+
label.append(' ')
704+
label.append(node.oplabel)
705+
else:
706+
for op in node.ops:
707+
if isinstance(op, type):
708+
label.append(' ')
709+
label.append(vtypes.op2mark(op.__name__))
710+
else:
711+
label.append(' C')
703712
label.append('=')
704713
self._add_node(node, label=''.join(label), shape='box', style='rounded')
705714
self.visit(node.src_data)

0 commit comments

Comments
 (0)