@@ -760,13 +760,20 @@ def label(v):
760
760
elif node .op == 'x' :
761
761
return '[label="%s", shape=invtrapezium]' % label ("mux" )
762
762
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 ))
766
774
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 )
770
777
elif node .op in 'c' :
771
778
return '[label="%s", height=.1, width=.1]' % label ("concat" )
772
779
elif node .op == 'r' :
@@ -775,6 +782,13 @@ def label(v):
775
782
return '[label="%s", shape=square, fillcolor=gold]' % label (name )
776
783
elif node .op == 'w' :
777
784
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 )
778
792
else :
779
793
return '[label="%s"]' % label (node .op + str (node .op_param or '' ))
780
794
except AttributeError :
@@ -886,10 +900,10 @@ def block_to_graphviz_string(block=None, namer=_graphviz_default_namer, split_st
886
900
887
901
rstring = """\
888
902
digraph g {\n
889
- graph [splines="spline"];
903
+ graph [splines="spline", outputorder="edgesfirst" ];
890
904
node [shape=circle, style=filled, fillcolor=lightblue1,
891
905
fontcolor=black, fontname=helvetica, penwidth=0,
892
- fixedsize=true ];
906
+ fixedsize=shape ];
893
907
edge [labelfloat=false, penwidth=2, color=deepskyblue, arrowsize=.5];
894
908
"""
895
909
0 commit comments