From a7beca37286621f81f518cd6e93316c59d7d9a9e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fin=20Maa=C3=9F?= Date: Mon, 20 Jan 2025 11:01:30 +0100 Subject: [PATCH] litex: gen: fhdl: verilog.py: bring back lower_complex_slices() MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit bring back lower_complex_slices() as it is sometimes needed. for example, when a Slice of a Cat() is done. Signed-off-by: Fin Maaß --- litex/gen/fhdl/verilog.py | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/litex/gen/fhdl/verilog.py b/litex/gen/fhdl/verilog.py index 91c9c929f4..4d6a3e4ed9 100644 --- a/litex/gen/fhdl/verilog.py +++ b/litex/gen/fhdl/verilog.py @@ -23,6 +23,7 @@ from migen.fhdl.structure import * from migen.fhdl.structure import _Operator, _Slice, _Assign, _Fragment from migen.fhdl.tools import * +from migen.fhdl.tools import _apply_lowerer, _Lowerer from migen.fhdl.conv_output import ConvOutput from migen.fhdl.specials import Instance, Memory @@ -415,6 +416,25 @@ def _generate_specials(name, overrides, specials, namespace, add_data_file, attr r += pr return r +# ------------------------------------------------------------------------------------------------ # +# LOWERER # +# ------------------------------------------------------------------------------------------------ # + +class _ComplexSliceLowerer(_Lowerer): + def visit_Slice(self, node): + if not (isinstance(node.value, Signal) or isinstance(node.value, _Slice)): + slice_proxy = Signal(value_bits_sign(node.value)) + if self.target_context: + a = _Assign(node.value, slice_proxy) + else: + a = _Assign(slice_proxy, node.value) + self.comb.append(self.visit_Assign(a)) + node = _Slice(slice_proxy, node.start, node.stop) + return NodeTransformer.visit_Slice(self, node) + +def lower_complex_slices(f): + return _apply_lowerer(_ComplexSliceLowerer(), f) + # ------------------------------------------------------------------------------------------------ # # FHDL --> VERILOG # # ------------------------------------------------------------------------------------------------ #