From: Luke Kenneth Casson Leighton Date: Sat, 17 Aug 2019 07:31:24 +0000 (+0100) Subject: add intermediate values as signals X-Git-Tag: ls180-24jan2020~519 X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=b173c51289ee7b1813e48ebd9c900ace8fc03406;p=ieee754fpu.git add intermediate values as signals --- diff --git a/src/ieee754/part_mul_add/multiply.py b/src/ieee754/part_mul_add/multiply.py index 0fe18051..aa4fafb6 100644 --- a/src/ieee754/part_mul_add/multiply.py +++ b/src/ieee754/part_mul_add/multiply.py @@ -465,16 +465,24 @@ class Mul8_16_32_64(Elaboratable): .eq(self._delayed_part_ops[j][i]) for j in range(len(self.register_levels))] + def add_intermediate_value(value): + intermediate_value = Signal(len(value), reset_less=True) + m.d.comb += intermediate_value.eq(value) + return intermediate_value + for parts, delayed_parts in [(self._part_64, self._delayed_part_64), (self._part_32, self._delayed_part_32), (self._part_16, self._delayed_part_16), (self._part_8, self._delayed_part_8)]: byte_count = 8 // len(parts) for i in range(len(parts)): - value = self._part_byte(i * byte_count - 1) + pb = self._part_byte(i * byte_count - 1) + value = add_intermediate_value(pb) for j in range(i * byte_count, (i + 1) * byte_count - 1): - value &= ~self._part_byte(j) - value &= self._part_byte((i + 1) * byte_count - 1) + pb = add_intermediate_value(~self._part_byte(j)) + value = add_intermediate_value(value & pb) + pb = self._part_byte((i + 1) * byte_count - 1) + value = add_intermediate_value(value & pb) m.d.comb += parts[i].eq(value) m.d.comb += delayed_parts[0][i].eq(parts[i]) m.d.sync += [delayed_parts[j + 1][i].eq(delayed_parts[j][i])