PartialProductGeneratorBase constructor
Construct a PartialProductGeneratorBase -- the partial product matrix.
signedMultiplier
generates a fixed signed encoder versus using
selectSignedMultiplier
which is a runtime sign selection Logic
in which case signedMultiplier
must be false.
Implementation
PartialProductGeneratorBase(
Logic multiplicand, Logic multiplier, RadixEncoder radixEncoder,
{this.signedMultiplicand = false,
this.signedMultiplier = false,
this.selectSignedMultiplicand,
this.selectSignedMultiplier,
super.name = 'ppg'}) {
if (signedMultiplicand && (selectSignedMultiplicand != null)) {
throw RohdHclException('multiplicand sign reconfiguration requires '
'signedMultiplicand=false');
}
if (signedMultiplier && (selectSignedMultiplier != null)) {
throw RohdHclException('sign reconfiguration requires signed=false');
}
selector = MultiplicandSelector(radixEncoder.radix, multiplicand,
signedMultiplicand: signedMultiplicand,
selectSignedMultiplicand: selectSignedMultiplicand);
encoder = MultiplierEncoder(multiplier, radixEncoder,
signedMultiplier: signedMultiplier,
selectSignedMultiplier: selectSignedMultiplier);
if (multiplicand.width < selector.shift) {
throw RohdHclException('multiplicand width must be greater than '
'or equal to ${selector.shift}');
}
if (multiplier.width < (selector.shift + (signedMultiplier ? 1 : 0))) {
throw RohdHclException('multiplier width must be greater than '
'or equal to ${selector.shift + (signedMultiplier ? 1 : 0)}');
}
_build();
}