From: Luke Kenneth Casson Leighton Date: Sat, 17 Aug 2019 08:24:20 +0000 (+0100) Subject: stash intermediaries for output into temp signals X-Git-Tag: ls180-24jan2020~512 X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=6a6cb52331240d566b524ce2d30ae6a568090820;p=ieee754fpu.git stash intermediaries for output into temp signals --- diff --git a/src/ieee754/part_mul_add/multiply.py b/src/ieee754/part_mul_add/multiply.py index ee28d403..31fe9d97 100644 --- a/src/ieee754/part_mul_add/multiply.py +++ b/src/ieee754/part_mul_add/multiply.py @@ -626,34 +626,41 @@ class Mul8_16_32_64(Elaboratable): # create _output_32 ol = [] for i in range(2): - ol.append( + op = Signal(32, reset_less=True, name="op32_%d" % i) + m.d.comb += op.eq( Mux(self._delayed_part_ops[-1][4 * i] == OP_MUL_LOW, self._intermediate_output.part(i * 64, 32), self._intermediate_output.part(i * 64 + 32, 32))) + ol.append(op) m.d.comb += self._output_32.eq(Cat(*ol)) # create _output_16 ol = [] for i in range(4): - ol.append( + op = Signal(16, reset_less=True, name="op16_%d" % i) + m.d.comb += op.eq( Mux(self._delayed_part_ops[-1][2 * i] == OP_MUL_LOW, self._intermediate_output.part(i * 32, 16), self._intermediate_output.part(i * 32 + 16, 16))) + ol.append(op) m.d.comb += self._output_16.eq(Cat(*ol)) # create _output_8 ol = [] for i in range(8): - ol.append( + op = Signal(8, reset_less=True, name="op8_%d" % i) + m.d.comb += op.eq( Mux(self._delayed_part_ops[-1][i] == OP_MUL_LOW, self._intermediate_output.part(i * 16, 8), self._intermediate_output.part(i * 16 + 8, 8))) + ol.append(op) m.d.comb += self._output_8.eq(Cat(*ol)) # final output ol = [] for i in range(8): - ol.append( + op = Signal(8, reset_less=True, name="op%d" % i) + m.d.comb += op.eq( Mux(self._delayed_part_8[-1][i] | self._delayed_part_16[-1][i // 2], Mux(self._delayed_part_8[-1][i], @@ -662,6 +669,7 @@ class Mul8_16_32_64(Elaboratable): Mux(self._delayed_part_32[-1][i // 4], self._output_32.part(i * 8, 8), self._output_64.part(i * 8, 8)))) + ol.append(op) m.d.comb += self.output.eq(Cat(*ol)) return m