self._resized_inputs = self.i.inputs
self.register_levels = list(register_levels)
self.output = Signal(output_width)
self.partition_points = PartitionPoints(partition_points)
if not self.partition_points.fits_in_width(output_width):
raise ValueError("partition_points doesn't fit in output_width")
self._resized_inputs = self.i.inputs
self.register_levels = list(register_levels)
self.output = Signal(output_width)
self.partition_points = PartitionPoints(partition_points)
if not self.partition_points.fits_in_width(output_width):
raise ValueError("partition_points doesn't fit in output_width")
self.intermediate_terms = []
def elaborate(self, platform):
self.intermediate_terms = []
def elaborate(self, platform):
# base case for adding 2 inputs
assert self.n_inputs == 2
adder = PartitionedAdder(len(self.output),
# base case for adding 2 inputs
assert self.n_inputs == 2
adder = PartitionedAdder(len(self.output),
m.submodules.final_adder = adder
m.d.comb += adder.a.eq(self._resized_inputs[0])
m.d.comb += adder.b.eq(self._resized_inputs[1])
m.submodules.final_adder = adder
m.d.comb += adder.a.eq(self._resized_inputs[0])
m.d.comb += adder.b.eq(self._resized_inputs[1])
self.output_width = output_width
self.i = AddReduceData(partition_points, n_inputs,
output_width, n_parts)
self.output_width = output_width
self.i = AddReduceData(partition_points, n_inputs,
output_width, n_parts)
self._resized_inputs = self.i.inputs
self.register_levels = list(register_levels)
self.partition_points = PartitionPoints(partition_points)
if not self.partition_points.fits_in_width(output_width):
raise ValueError("partition_points doesn't fit in output_width")
self._resized_inputs = self.i.inputs
self.register_levels = list(register_levels)
self.partition_points = PartitionPoints(partition_points)
if not self.partition_points.fits_in_width(output_width):
raise ValueError("partition_points doesn't fit in output_width")
for (value, term) in self._intermediate_terms:
m.d.comb += term.eq(value)
for (value, term) in self._intermediate_terms:
m.d.comb += term.eq(value)
next_levels, partition_points)
mods.append(next_level)
next_levels = list(AddReduce.next_register_levels(next_levels))
next_levels, partition_points)
mods.append(next_level)
next_levels = list(AddReduce.next_register_levels(next_levels))
for i in range(len(part_ops))]
if 0 in mcur.register_levels:
m.d.sync += copy_part_ops
m.d.sync += inassign
for i in range(len(part_ops))]
if 0 in mcur.register_levels:
m.d.sync += copy_part_ops
m.d.sync += inassign
- m.d.comb += mcur._reg_partition_points.eq(partition_points)
- partition_points = mcur._reg_partition_points
+ m.d.comb += mcur.i.reg_partition_points.eq(partition_points)
+ partition_points = mcur.i.reg_partition_points
- out_part_ops = add_reduce.levels[-1].out_part_ops
- out_part_pts = add_reduce.levels[-1]._reg_partition_points
+ out_part_ops = add_reduce.levels[-1].i.part_ops
+ out_part_pts = add_reduce.levels[-1].i.reg_partition_points