MultiplyOnly constructor
Construct a MultiplyAccumulate that only multiplies to enable
using the same tester with zero accumulate addend c
.
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,
}) // Will be overrwridden by multiplyGenerator
: super(
// ignore: prefer_interpolation_to_compose_strings
name: 'multiply_only_' +
_genName(mulGen, a, b, signedMultiplicand, signedMultiplier)) {
// Here we need to copy the Config and make sure we access our module's
// input by calling .logic(this) on the runtimeConfig.
// TODO(desmonddak): try using tryRuntimeInput instead of getLogic.
final multiply = mulGen(a, b,
signedMultiplicand: StaticOrRuntimeParameter(
name: 'selectSignedMultiplicand',
runtimeConfig: signedMultiplicandParameter.runtimeConfig != null
? signedMultiplicandParameter.getLogic(this)
: null,
staticConfig: signedMultiplicandParameter.runtimeConfig == null
? signedMultiplicandParameter.staticConfig
: null),
signedMultiplier: StaticOrRuntimeParameter(
name: 'selectSignedMultiplier',
runtimeConfig: signedMultiplierParameter.runtimeConfig != null
? signedMultiplierParameter.getLogic(this)
: null,
staticConfig: signedMultiplierParameter.runtimeConfig == null
? signedMultiplierParameter.staticConfig
: null));
accumulate <=
mux(
// ignore: invalid_use_of_protected_member
multiply.isProductSigned,
multiply.product.signExtend(accumulate.width),
multiply.product.zeroExtend(accumulate.width));
}