addReduceAdders method
Reduction tree adder generator for the final addition.
Implementation
Logic addReduceAdders(List<Logic> inputs,
{int? depth, Logic? control, String name = 'prefix'}) {
var level = inputs;
var stage = 0;
while (level.length > 1) {
final nextLevel = <Logic>[];
for (var i = 0; i < level.length; i += 2) {
if (i + 1 == level.length) {
nextLevel.add(level[i]);
continue;
}
final inputWidth = level[i].width > level[i + 1].width
? level[i].width
: level[i + 1].width;
final resultWidth = inputWidth + 1;
final a = _extendForSum(level[i], resultWidth, control);
final b = _extendForSum(level[i + 1], resultWidth, control);
final sum = adderGen(a, b, name: '${name}_s${stage}_add${i ~/ 2}').sum;
nextLevel.add(sum.slice(resultWidth - 1, 0));
}
level = nextLevel;
stage++;
}
return level.single;
}