GeneralDotProduct constructor
- List<
Logic> multiplicands, - List<
Logic> multipliers, { - dynamic signedMultiplicand,
- dynamic signedMultiplier,
- int treeRadix = 2,
- Adder adderGen(}) = NativeAdder.new,
- Multiplier multiplierGen(
- Logic a,
- Logic b, {
- Logic? clk,
- Logic? enable,
- Logic? reset,
- dynamic signedMultiplicand,
- dynamic signedMultiplier,
- String name = 'dotproduct',
- bool reserveName = false,
- bool reserveDefinitionName = false,
- String? definitionName,
Construct a GeneralDotProduct with a List of multiplicands
and
multipliers
, a multiplierGen
for constructing products, and an
adderGen
function to generate Adders for use in a ReductionTree for
the final addition of the products.
Implementation
GeneralDotProduct(super.multiplicands, super.multipliers,
{super.signedMultiplicand,
super.signedMultiplier,
int treeRadix = 2,
this.adderGen = NativeAdder.new,
Multiplier Function(Logic a, Logic b,
{Logic? clk,
Logic? reset,
Logic? enable,
dynamic signedMultiplicand,
dynamic signedMultiplier})
multiplierGen = NativeMultiplier.new,
super.name = 'dotproduct',
super.reserveName = false,
super.reserveDefinitionName = false,
String? definitionName})
: super(
definitionName: definitionName ??
'DotProductNative_W${multipliers[0].width}_') {
final dotResults = [
for (var i = 0; i < multipliers.length; i++)
multiplierGen(multiplicands[i], multipliers[i],
signedMultiplicand: signedMultiplicandParameter.getLogic(this),
signedMultiplier: signedMultiplierParameter.getLogic(this))
.product
];
// TODO(desmonddak): add sign extension option for use with unsigned
// multipliers and multiplicands.
final prefixAdd = ReductionTree(dotResults, addReduceAdders,
signExtend: true,
radix: treeRadix,
name: 'dotproduct_reduction_tree',
definitionName: 'DotProductReductionTree_W${multiplicands[0].width}_'
'${multipliers[0].width}_R$treeRadix');
addOutput('product', width: prefixAdd.out.width) <= prefixAdd.out;
}