MultiplyOnly constructor

MultiplyOnly(
  1. Logic a,
  2. Logic b,
  3. Logic c,
  4. Multiplier mulGen(
    1. Logic a,
    2. Logic b, {
    3. dynamic signedMultiplicand,
    4. dynamic signedMultiplier,
    }), {
  5. dynamic signedMultiplicand,
  6. dynamic signedMultiplier,
  7. dynamic signedAddend,
})

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));
}