Skip to content

Commit c223e4a

Browse files
committed
Improve how bit selects and memory ops are presented in graphviz
1 parent a621557 commit c223e4a

File tree

1 file changed

+22
-8
lines changed

1 file changed

+22
-8
lines changed

pyrtl/inputoutput.py

Lines changed: 22 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -760,13 +760,20 @@ def label(v):
760760
elif node.op == 'x':
761761
return '[label="%s", shape=invtrapezium]' % label("mux")
762762
elif node.op == 's':
763-
selEnd = node.op_param[0]
764-
if len(node.op_param) < 2:
765-
selBegin = selEnd
763+
# node.op_param is a tuple of the selected bits to pull from the argument wire,
764+
# so it could look something like (0,0,0,0,0,0,0), meaning dest wire is going
765+
# to be a concatenation of the zero-th bit of the argument wire, 7 times.
766+
selLower = node.op_param[0]
767+
selUpper = node.op_param[-1]
768+
if len(node.op_param) == 1:
769+
bits = "[%d]" % selLower
770+
elif node.op_param == tuple(range(selLower, selUpper + 1)): # consecutive
771+
bits = "[%d:%d]" % (selUpper, selLower)
772+
elif all([ix == node.op_param[0] for ix in node.op_param[1:]]): # all the same
773+
bits = "[%d]*%d" % (node.op_param[0], len(node.op_param))
766774
else:
767-
selBegin = node.op_param[len(node.op_param) - 1]
768-
return '[label="%s", height=.1, width=.1]' % \
769-
(label("bits(%s,%s)" % (selBegin, selEnd)))
775+
bits = "bits" + str(tuple(reversed(node.op_param)))
776+
return '[label="%s", fillcolor=azure1, height=.25, width=.25]' % label(bits)
770777
elif node.op in 'c':
771778
return '[label="%s", height=.1, width=.1]' % label("concat")
772779
elif node.op == 'r':
@@ -775,6 +782,13 @@ def label(v):
775782
return '[label="%s", shape=square, fillcolor=gold]' % label(name)
776783
elif node.op == 'w':
777784
return '[label="%s", height=.1, width=.1]' % label("")
785+
elif node.op in 'm@':
786+
name = node.op_param[1].name
787+
if name.startswith("tmp"):
788+
name = ""
789+
else:
790+
name = "(" + name + ")"
791+
return '[label="%s"]' % label(node.op + name)
778792
else:
779793
return '[label="%s"]' % label(node.op + str(node.op_param or ''))
780794
except AttributeError:
@@ -886,10 +900,10 @@ def block_to_graphviz_string(block=None, namer=_graphviz_default_namer, split_st
886900

887901
rstring = """\
888902
digraph g {\n
889-
graph [splines="spline"];
903+
graph [splines="spline", outputorder="edgesfirst"];
890904
node [shape=circle, style=filled, fillcolor=lightblue1,
891905
fontcolor=black, fontname=helvetica, penwidth=0,
892-
fixedsize=true];
906+
fixedsize=shape];
893907
edge [labelfloat=false, penwidth=2, color=deepskyblue, arrowsize=.5];
894908
"""
895909

0 commit comments

Comments
 (0)