Permalink
Browse files

fhdl: better signal naming heuristic

  • Loading branch information...
1 parent b6763c2 commit cdd9977a40be0160ada60b70d1f0e8d1ac51052a @sbourdeauducq sbourdeauducq committed Jan 7, 2012
Showing with 36 additions and 9 deletions.
  1. +36 −9 migen/fhdl/structure.py
View
@@ -131,20 +131,47 @@ def _cst(x):
else:
return x
+def _try_class_name(frame):
+ while frame is not None:
+ try:
+ cl = frame.f_locals['self']
+ prefix = cl.__class__.__name__.lower()
+ if prefix != 'inst' and prefix != 'source' and prefix != 'sink':
+ return prefix
+ except KeyError:
+ pass
+ frame = frame.f_back
+ return None
+
+def _try_module_name(frame):
+ modules = frame.f_globals["__name__"]
+ if modules != "__main__":
+ modules = modules.split('.')
+ prefix = modules[len(modules)-1]
+ return prefix
+ else:
+ return None
+
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_\.]+)[\t ]*=', line)
if m is None:
- return "anonymous"
- name = m.group(1)
- name = name.split('.')
- name = name[len(name)-1]
- modules = frame.f_globals["__name__"]
- if modules != "__main__":
- modules = modules.split('.')
- name = modules[len(modules)-1] + "_" + name
- return name
+ name = "anonymous"
+ else:
+ names = m.group(1).split('.')
+ name = names[len(names)-1]
+
+ prefix = _try_class_name(frame)
+ if prefix is None:
+ prefix = _try_module_name(frame)
+ if prefix is None:
+ prefix = ""
+ else:
+ prefix += "_"
+
+ return prefix + name
class Signal(Value):
def __init__(self, bv=BV(), name=None, variable=False, reset=0):

0 comments on commit cdd9977

Please sign in to comment.