From 874c316ad9fdedcbfcd44eb2525042459ef3ec19 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fin=20Maa=C3=9F?= Date: Mon, 20 Jan 2025 11:41:45 +0100 Subject: [PATCH] fhdl: tools: _ComplexSliceLowerer: resolve slices completly MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit resolve slices of slices completly in _ComplexSliceLowerer. Signed-off-by: Fin Maaß --- migen/fhdl/tools.py | 17 ++++++++++++----- 1 file changed, 12 insertions(+), 5 deletions(-) diff --git a/migen/fhdl/tools.py b/migen/fhdl/tools.py index 5373785e9..a93fc3477 100644 --- a/migen/fhdl/tools.py +++ b/migen/fhdl/tools.py @@ -226,14 +226,21 @@ def visit_ResetSignal(self, node): class _ComplexSliceLowerer(_Lowerer): def visit_Slice(self, node): - if not isinstance(node.value, Signal): - slice_proxy = Signal(value_bits_sign(node.value)) + length = len(node) + start = 0 + while isinstance(node, _Slice): + start += node.start + node = node.value + if isinstance(node, Signal): + node = _Slice(node, start, start + length) + else: + slice_proxy = Signal(value_bits_sign(node)) if self.target_context: - a = _Assign(node.value, slice_proxy) + a = _Assign(node, slice_proxy) else: - a = _Assign(slice_proxy, node.value) + a = _Assign(slice_proxy, node) self.comb.append(self.visit_Assign(a)) - node = _Slice(slice_proxy, node.start, node.stop) + node = _Slice(slice_proxy, start, start + length) return NodeTransformer.visit_Slice(self, node) class _ComplexPartLowerer(_Lowerer):