fhdl: automatic signal name from assignment
authorSebastien Bourdeauducq <sebastien@milkymist.org>
Sun, 18 Dec 2011 20:26:51 +0000 (21:26 +0100)
committerSebastien Bourdeauducq <sebastien@milkymist.org>
Sun, 18 Dec 2011 20:26:51 +0000 (21:26 +0100)
migen/fhdl/structure.py

index 92f767a82fc45624f7398d8d8ccbb508265e101f..9148e46e3ee60c51a1fb200b6b92e6b963d34635 100644 (file)
@@ -1,4 +1,6 @@
 import math
+import inspect
+import re
 
 def bits_for(n):
        if isinstance(n, Constant):
@@ -123,11 +125,27 @@ def _cst(x):
        else:
                return x
 
+def _make_signal_name():
+       frame = inspect.currentframe().f_back.f_back
+       line = inspect.getframeinfo(frame).code_context[0]
+       m = re.match('[\t ]*([0-9A-Za-z_]+) =', line)
+       if m is None: return None
+       name = m.group(1)
+       modules = frame.f_globals["__name__"]
+       if modules != "__main__":
+               modules = modules.split('.')
+               name = modules[len(modules)-1] + "_" + name
+       return name
+
 class Signal(Value):
-       def __init__(self, bv=BV(), name="anonymous", variable=False, reset=0):
+       def __init__(self, bv=BV(), name=None, variable=False, reset=0):
                self.bv = bv
                self.variable = variable
                self.name = name
+               if self.name is None:
+                       self.name = _make_signal_name()
+                       if self.name is None:
+                               self.name = "anonymous"
                self.reset = Constant(reset, bv)
 
        def __hash__(self):