From 592f6a10dcae25a8ae5fd4b92dace71fc5e27f5e Mon Sep 17 00:00:00 2001 From: Jevin Sweval Date: Mon, 23 May 2022 12:21:38 -0700 Subject: [PATCH] Add get_signals function (w/ optional recursion) for litescope usage --- litex/gen/fhdl/utils.py | 26 ++++++++++++++++++++++++++ 1 file changed, 26 insertions(+) create mode 100644 litex/gen/fhdl/utils.py diff --git a/litex/gen/fhdl/utils.py b/litex/gen/fhdl/utils.py new file mode 100644 index 000000000..020789538 --- /dev/null +++ b/litex/gen/fhdl/utils.py @@ -0,0 +1,26 @@ +# +# This file is part of LiteX. +# +# Copyright (c) 2022 Jevin Sweval +# SPDX-License-Identifier: BSD-2-Clause + +from migen.genlib.record import Record +from migen.fhdl.module import Module +from migen.fhdl.structure import Signal + +def get_signals(obj, recurse=False): + signals = set() + for attr_name in dir(obj): + if attr_name[:2] == "__" and attr_name[-2:] == "__": + continue + attr = getattr(obj, attr_name) + if isinstance(attr, Signal): + signals.add(attr) + elif isinstance(attr, Record): + for robj in attr.flatten(): + if isinstance(robj, Signal): + signals.add(robj) + elif recurse and isinstance(attr, Module): + signals |= get_signals(attr, recurse=True) + + return signals