diff --git a/litex/gen/fhdl/hierarchy.py b/litex/gen/fhdl/hierarchy.py index 911e6aa8b..b30b2f724 100644 --- a/litex/gen/fhdl/hierarchy.py +++ b/litex/gen/fhdl/hierarchy.py @@ -8,22 +8,30 @@ from migen import * from litex.gen import * - # LiteX Hierarchy Explorer ------------------------------------------------------------------------- class LiteXHierarchyExplorer: + tree_ident = "│ " + tree_entry = "└─── " + def __init__(self, top, depth=None): - self.top = top - self.depth = depth + self.top = top + self.depth = depth def get_tree(self, module, ident=0, with_modules=True, with_instances=True): r = "" + names = set() + names.add(None) # Modules / SubModules. for name, mod in module._submodules: if name is None: - name = "Unnamed" + n = 0 + while name in names: + name = mod.__class__.__name__.lower() + f"_{n}*" + n += 1 + names.add(name) if with_modules: - r += f"{'│ '*ident}├─── {colorer(name, 'cyan')} ({mod.__class__.__name__})\n" + r += f"{self.tree_ident*ident}{self.tree_entry}{colorer(name, 'cyan')} ({mod.__class__.__name__})\n" if (self.depth is None) or (ident < self.depth): r += self.get_tree(mod, ident + 1) @@ -36,11 +44,13 @@ class LiteXHierarchyExplorer: if s in v._fragment.specials: show = False if show: - r += f"{'│ '*ident}├─── {colorer(s.of, 'bright')}\n" + r += f"{self.tree_ident*ident}{self.tree_entry}{colorer(s.of + '*', 'yellow')}\n" return r def __repr__(self): r = "\n" - r += f"{colorer(self.top.__class__.__name__, 'green')}\n" + r += f"{colorer(self.top.__class__.__name__, 'underline')}\n" r += self.get_tree(self.top) + r += f"{colorer('*', 'cyan')}: Generated name.\n" + r += f"{colorer('*', 'yellow')}: BlackBox.\n" return r