MultiplyOnly constructor
Construct a MultiplyAccumulate that only multiplies to enable
using the same tester with zero accumulate addend c.
The optional outputWidth parameter configures the width of
accumulate, as described in MultiplyAccumulate.
Implementation
MultiplyOnly(
super.a,
super.b,
super.c,
Multiplier Function(Logic a, Logic b,
{dynamic signedMultiplicand, dynamic signedMultiplier})
mulGen, {
super.signedMultiplicand,
super.signedMultiplier,
super.signedAddend,
super.outputWidth,
}) // Will be overrwridden by multiplyGenerator
: super(
name: 'multiply_only_${_genName(
mulGen,
a,
b,
signedMultiplicand,
signedMultiplier,
)}',
) {
// Copy the configuration using this module's internal runtime input.
final multiply = mulGen(a, b,
signedMultiplicand: StaticOrRuntimeParameter(
name: 'selectSignedMultiplicand',
runtimeConfig: signedMultiplicandParameter.tryRuntimeInput(this),
staticConfig: signedMultiplicandParameter.runtimeConfig == null
? signedMultiplicandParameter.staticConfig
: null),
signedMultiplier: StaticOrRuntimeParameter(
name: 'selectSignedMultiplier',
runtimeConfig: signedMultiplierParameter.tryRuntimeInput(this),
staticConfig: signedMultiplierParameter.runtimeConfig == null
? signedMultiplierParameter.staticConfig
: null));
accumulate <=
// The wrapper needs the generated multiplier's signedness metadata.
// ignore: invalid_use_of_protected_member
fitAccumulateWidth(multiply.product, signed: multiply.isProductSigned);
}