This invention relates to a multiplier, and in particular to a multiplier for multiplying input data by multiple constants.
In many digital signal processing applications, it is necessary to multiply input data by multiple constants. For example, in the case of a finite impulse response (FIR) filter, or a fast fourier transform (FFT) processor, it is necessary to multiply input data by constant coefficients. FIR filters and FFT processors are used in many digital signal processing applications, for example in wireless communications applications.
Since it is computationally expensive to perform multiplications, it is known to perform the required calculations by representing the coefficients by means of canonical signed digit (CSD) multipliers. This allows the required multiplication to be performed by means of a sequence of shift operations and add operations. A number is said to be in CSD format if it is in the form b0b1b2 . . . bN−1, where each bi, for i=0, 1, 2, . . . , N−1, takes one of the values 0, +1, −1, and where no two consecutive bi are non-zero.
The document “Implementation of Orthogonal Frequency Division Multiplexing Modem Using Radix-N Pipeline Fast Fourier Transform (FFT) Processor”, Oh, et al, Jpn. J. Appl. Phys. Vol. 42 (2003) pp. 1-6 discloses a hardware structure for implementation of a CSD-encoded multiplier. An input signal is applied to a switching network through a set of right shift elements in parallel. The switching network then operates to apply the right-shifted inputs to a set of output multiplexers, based on the required multiplication constants. The output multiplexers are controlled by a select signal to allow the processed data to be output sequentially.
This structure becomes complex when the number of required multiplication constants increases. Specifically, the design of the switching network becomes complex as the number of required multiplication constants increases, while the size of each of the output multiplexers also increases as the number of required multiplication constants increases.
This structure also has the disadvantage that, since the low order bits are discarded before the output values are accumulated, the structure leads to relatively large truncation errors.
According to the present invention, there is provided a multiplier, for multiplying an input data value by a selected constant value in CSD form, wherein the selected constant value is made up of pairs of bits, the multiplier comprising:
a plurality of multiplexers, wherein each of said multiplexers is controlled by a respective pair of bits of the selected constant value, and wherein each of said multiplexers has a plurality of inputs, and is connected to receive the input data value, the inverse of the input data value, and all zeros on said inputs, and being controlled such that it outputs either the input data value, the inverse of the input data value, or all zeros, depending on the values of the respective pair of bits of the selected constant value;
a plurality of variable shift blocks, each connected to receive an input from a respective one of said multiplexers, and each being adapted to shift its received input by a first bit shift value or a second bit shift value, depending on the values of the respective pair of bits of the selected constant value, wherein the first bit shift value and the second bit shift value differ by 1; and
combination circuitry, for receiving the outputs from the plurality of shift blocks, and for combining the outputs from the plurality of shift blocks and applying further bit shifts, to form an output value equal to the result of multiplying the input data value by the selected constant value.
This has the advantage that it allows implementation of a CSD-encoded multiplier efficiently in hardware, with an acceptable level of truncation error.
Thus, the CSD multiplier must be able to receive an input data value, and multiply it by a selected one of the predetermined constant values, and then supply the result as an output value.
The result of the multiplication is d0d1d2 . . . dM−1×b0b1b2 . . . bN−1, and, as is conventional, the multiplier 10 calculates this result by means of appropriate additions and shift operations.
In
A second input line 16 carries m zeros in parallel, and these are applied to respective second inputs of the multiplexers 140, 141, . . . , 14n−1.
The input data values received on the data line 12 are also applied to an inverter 18, to form the twos-complement of the input data values, and the resulting twos-complemented version of the input data values are applied on the inverse line 20 to respective third inputs of the multiplexers 140, 141, . . . , 14n−1.
The multiplexers 140, 141, . . . , 14n−1 are controlled by a control signal on a first control line 22. As mentioned above, there are n multiplexers 140, 141, . . . , 14n−1, and this is the case when the constant values in CSD format each have 2n bits. That is, the constant values are in the form b0b1b2 . . . b2n−2b2n−1, where each bi, for i=0, 1, 2, . . . , 2n−1, takes one of the values 0, +1, −1, and where no two consecutive bi are non-zero.
Thus, the first multiplexer 140 is controlled by the first two bits b0b1, of the constant value which is in use at this moment, the second multiplexer 141, is controlled by the third and fourth bits b2b3 of the constant value which is in use at this moment, and so on, while the final multiplexer 14n−1 is controlled by the penultimate and final bits b2n−2b2n−1 of the constant value which is in use at this moment.
In the constant value which is in use at this moment, it can be taken that no two consecutive bits are non-zero, because this is a condition of the CSD format. Therefore, taking as an example the first multiplexer 140, this is controlled by the combination of the two bits b0b1, and this combination has five possible values in the CSD representation, namely: 0 0, 0 1, 1 0, −1 0 and 0 −1.
If b0b1 equals 0 0, the first multiplexer 140 is controlled such that it passes to its output the value on its second input, namely all zeros. If b0b1 equals 0 1 or 1 0, the first multiplexer 140 is controlled such that it passes to its output the value on its first input, namely the input data value. If b0b1 equals 0 −1 or −1 0, the first multiplexer 140 is controlled such that it passes to its output the value on its third input, namely the twos-complemented version of the input data value.
The other multiplexers are controlled by their respective pairs of bits from the constant value which is in use at this moment, in a corresponding way.
The outputs from the multiplexers 140, 141, . . . , 14n−1 are passed to respective variable shift blocks 240, 241, . . . , 24n−1, and the variable shift blocks 240, 241, . . . , 24n−1 are controlled by a control signal on a second control line 26.
Specifically, the first variable shift block 240 is controlled on the basis of the first two bits b0b1 of the constant value which is in use at this moment, the second variable shift block 241 is controlled on the basis of the third and fourth bits b2b3 of the constant value which is in use at this moment, and so on, while the final variable shift block 24n−1 is controlled on the basis of the penultimate and final bits.
The variable shift blocks 240, 241, . . . , 24n−1, can be right shifters, or left shifters, or a combination of right shifters and left shifters. In any event, the input to each of the variable shift blocks 240, 241, . . . , 24n−1, is the output from the respective one of the multiplexers 140, 141, . . . , 14n−1. In each case, it is desired that the output of the variable shift block should be proportional to the result of multiplying the input data value by the appropriate pair of bits of the constant value.
The sign of this output is determined by the control of the multiplexer, while the magnitude of the output is determined by the control of the shift that is applied by the variable shift block 24. Each of the variable shift blocks 240, 241, . . . , 24n−1, is controlled such that it applies a respective shift value of S0, S1, . . . , Sn−1, and each of these shift values can take either a first or a second value, which differ by one, depending on whether the non-zero bit in the appropriate pair of bits of the constant value is the more significant bit or the less significant bit.
Thus, considering the variable shift block 240, this shifts the input data based on the value of the bit pair b0b1. If the more significant bit b0 is nonzero, it does not perform any right shift, but simply passes through its input. If the less significant bit b1 is nonzero, it performs a right shift by 1 bit position. If b0 and b1 are both zero, it is irrelevant whether the shifter performs a right shift by 1 bit position or just passes through its input because, as described above, that input will consist entirely of zeros.
It should be noted that although, as described here, the variable shift block 240 does not perform any right shift if the more significant bit b0 is nonzero, and performs a right shift by 1 bit position if the less significant bit b1 is nonzero, it is the relative sizes of these two possible shift values that is important, rather than their absolute values. Thus, for example, the variable shift block 240 could perform a right shift by 2 bit positions if the more significant bit b0 is nonzero, and could then perform a right shift by 3 bit positions if the less significant bit b1 is nonzero. Alternatively, the variable shift block 240 could perform a left shift by 3 bit positions if the more significant bit b0 is nonzero, and could then perform a left shift by 2 bit positions if the less significant bit b1 is nonzero. In each case, the bit shift if the more significant bit b0 is nonzero is one bit more to the left (or one bit less to the right) than the bit shift if the less significant bit b1 is nonzero.
Exactly the same applies to the other variable shift blocks 241, . . . , 24n−1.
The outputs of the variable shift blocks 240, 241, . . . , 24n−1 are then passed to combination circuitry 28, where they are combined, and then to an output line 30. The function of the combination circuitry 28 is to add together the outputs of the variable shift blocks 240, 241, . . . , 24n−1, while applying appropriate further bit shifts so that the correct final result is obtained.
The variable shift block 240 is providing the result of multiplying the input data by the two most significant bits of the constant value, while the variable shift block 241 is providing the result of multiplying the input data by the next two most significant bits of the constant value, and so on, and the variable shift block 24n−1 is providing the result of multiplying the input data by the two least significant bits of the constant value. Therefore, the output of the variable shift block 240 must be shifted to the left by two bits more (or to the right by two bits less) in total than the output of the variable shift block 241, and so on, until the output of the variable shift block 240 is shifted to the left by 2(n−2) bits more (or to the right by 2(n−2) bits less) in total than the output of the variable shift block 24n−1.
This can be achieved by setting different possible shift values for the variable shift blocks 240, 241, . . . , 24n−1, or by applying different shift values to the outputs of the variable shift blocks, or by a combination of these two elements.
The result is thus a multiplier which uses relatively little hardware, and can be controlled as desired to produce the required result.
In
A second input line 216 carries all zeros, and these are applied to respective second inputs of the multiplexers 2140, 2141, . . . , 2143. The input data values received on the data line 212 are also applied to an inverter 218, to form the twos-complement of the input data values, and the resulting twos-complemented version of the input data values are applied on the inverse line 220 to respective third inputs of the multiplexers 2140, 2141, . . . , 2143.
The multiplexers 2140, 2141, . . . , 2143 are controlled by a control signal on a control line (not shown), as described with reference to
If b0b1 equals 0 0, the first multiplexer 2140 is controlled such that it passes to its output the value on its second input, namely all zeros. If b0b1 equals 0 1 or 1 0, the first multiplexer 2140 is controlled such that it passes to its output the value on its first input, namely the input data value. If b0b1 equals 0 −1 or −1 0, the first multiplexer 2140 is controlled such that it passes to its output the value on its third input, namely the twos-complemented version of the input data value.
The other multiplexers are controlled by their respective pairs of bits from the constant value which is in use at this moment, in a corresponding way.
The outputs from the multiplexers 2140, 2141, . . . , 2143 are passed to respective variable shift blocks 2240, 2241, . . . , 2243, and the variable shift blocks 2240, 2241, . . . , 2243 are controlled by a control signal on a control line (not shown) as described above with reference to
Specifically, the first variable shift block 2240 is controlled on the basis of the first two bits b0b1 of the constant value which is in use at this moment, the second variable shift block 2241 is controlled on the basis of the third and fourth bits b2b3 of the constant value which is in use at this moment, and so on.
The variable shift blocks 2240, 2241, . . . , 2243 can be right shifters, or left shifters, or a combination of right shifters and left shifters, as described above.
The outputs of the first and second variable shift blocks 2240 and 2241 are passed to a first adder 232, while the outputs of the third and fourth variable shift blocks 2242 and 2243 are passed to a second adder 234.
The output of the first adder 232 is passed to a first fixed shift block 236, which applies a first fixed shift value. The output of the second adder 234 is passed to a second fixed shift block 238, which applies a second fixed shift value. The outputs of the first fixed shift block 236 and the second fixed shift block 238 are passed to a third adder 240, and the output of the third adder 240 is supplied as a data output on the output line 242.
The shift values applied by the four variable shift blocks 2240, 2241, . . . , 2243 and the two fixed shift blocks 236, 238 are then set such that the output of the first variable shift block 2240 is shifted to the left by two bits more (or to the right by two bits less) in total than the output of the second variable shift block 2241, the output of the second variable shift block 2241 is shifted to the left by two bits more (or to the right by two bits less) in total than the output of the third variable shift block 2242, and the output of the third variable shift block 2242 is shifted to the left by two bits more (or to the right by two bits less) in total than the output of the fourth variable shift block 2243.
In
A second input line 316 carries all zeros, and these are applied to respective second inputs of the multiplexers 3140, 3141, . . . , 3145. The input data values received on the data line 312 are also applied to an inverter 318, to form the twos-complement of the input data values, and the resulting twos-complemented version of the input data values are applied on the inverse line 320 to respective third inputs of the multiplexers 3140, 3141, . . . , 3145.
The multiplexers 3140, 3141, . . . , 3145 are controlled by a control signal on a control line (not shown), as described with reference to
If b0b1 equals 0 0, the first multiplexer 3140 is controlled such that it passes to its output the value on its second input, namely all zeros. If b0b1 equals 0 1 or 1 0, the first multiplexer 3140 is controlled such that it passes to its output the value on its first input, namely the input data value. If b0b1 equals 0 −1 or −1 0, the first multiplexer 3140 is controlled such that it passes to its output the value on its third input, namely the twos-complemented version of the input data value.
The other multiplexers are controlled by their respective pairs of bits from the constant value which is in use at this moment, in a corresponding way.
The outputs from the multiplexers 3140, 3141, . . . , 3145 are passed to respective variable shift blocks 3240, 3241, . . . , 3245, and the variable shift blocks 3240, 3241, . . . , 3245 are controlled by a control signal on a control line (not shown) as described above with reference to
Specifically, the first variable shift block 3240 is controlled on the basis of the first two bits b0b1 of the constant value which is in use at this moment, the second variable shift block 3241 is controlled on the basis of the third and fourth bits b2b3 of the constant value which is in use at this moment, and so on.
The variable shift blocks 3240, 3241, . . . , 3245 can be right shifters, or left shifters, or a combination of right shifters and left shifters, as described above.
The outputs of the first and second variable shift blocks 3240 and 3241 are passed to a first adder 332, while the outputs of the third and fourth variable shift blocks 3242 and 3243 are passed to a second adder 334, and the outputs of the fifth and sixth variable shift blocks 3244 and 3245 are passed to a third adder 336.
The output of the first adder 332 is passed to a first fixed shift block 338, which applies a first fixed shift value. The output of the second adder 334 is passed to a second fixed shift block 340, which applies a second fixed shift value. The output of the third adder 336 is passed to a third fixed shift block 342, which applies a third fixed shift value.
The outputs of the first fixed shift block 336 and the second fixed shift block 340 are passed to a fourth adder 344. The outputs of the third fixed shift block 342 and of the fourth adder 344 are passed to a fifth adder 346, and the output of the fifth adder 346 is supplied as a data output on the output line 348.
The shift values applied by the six variable shift blocks 3240, 3241, . . . , 3245 and the three fixed shift blocks 338, 340, 342 are then set such that the output of the first variable shift block 3240 is shifted to the left by two bits more (or to the right by two bits less) in total than the output of the second variable shift block 3241, the output of the second variable shift block 3241 is shifted to the left by two bits more (or to the right by two bits less) in total than the output of the third variable shift block 3242, the output of the third variable shift block 3242 is shifted to the left by two bits more (or to the right by two bits less) in total than the output of the fourth variable shift block 3243, the output of the fourth variable shift block 3243 is shifted to the left by two bits more (or to the right by two bits less) in total than the output of the fifth variable shift block 3244, and the output of the fifth variable shift block 3244 is shifted to the left by two bits more (or to the right by two bits less) in total than the output of the sixth variable shift block 3245.
In
A second input line 416 carries all zeros, and these are applied to respective second inputs of the multiplexers 4140, 4141, . . . , 4143. The input data values received on the data line 412 are also applied to an inverter 418, to form the twos-complement of the input data values, and the resulting twos-complemented version of the input data values are applied on the inverse line 420 to respective third inputs of the multiplexers 4140, 4141, . . . , 4143.
The multiplexers 4140, 4141, . . . , 4143 are controlled by a control signal on a control line (not shown), as described with reference to
If b0b1 equals 0 0, the first multiplexer 4140 is controlled such that it passes to its output the value on its second input, namely all zeros. If b0b1 equals 0 1 or 1 0, the first multiplexer 4140 is controlled such that it passes to its output the value on its first input, namely the input data value. If b0b1 equals 0 −1 or −1 0, the first multiplexer 4140 is controlled such that it passes to its output the value on its third input, namely the twos-complemented version of the input data value.
The other multiplexers are controlled by their respective pairs of bits from the constant value which is in use at this moment, in a corresponding way.
The outputs from the multiplexers 4140, 4141, . . . , 4143 are passed to respective variable shift blocks 4240, 4241, . . . , 4243, and the variable shift blocks 4240, 4241, . . . , 4243 are controlled by a control signal on a control line (not shown) as described above with reference to
Specifically, the first variable shift block 4240 is controlled on the basis of the first two bits b0b1 of the constant value which is in use at this moment, the second variable shift block 4241 is controlled on the basis of the third and fourth bits b2b3 of the constant value which is in use at this moment, and so on.
The first variable shift block 2240 can either apply no shift, or can shift the data to the right by one bit, the second variable shift block 2241 can either shift the data to the right by two bits or by three bits, the third variable shift block 2242 can either apply no shift, or can shift the data to the right by one bit, and the fourth variable shift block 2243 can either shift the data to the right by two bits or by three bits.
The outputs of the first and second variable shift blocks 4240 and 4241 are passed to a first adder 432, while the outputs of the third and fourth variable shift blocks 4242 and 4243 are passed to a second adder 434.
No fixed shift is applied to the output of the first adder 232. The output of the second adder 434 is passed to a fixed shift block 438, which applies a fixed shift of four bits to the right. The outputs of the first adder 432 and the fixed shift block 438 are passed to a third adder 440, and the output of the third adder 440 is supplied as a data output on the output line 442.
Thus, as required, the output of the first variable shift block 4240 is shifted to the right by 0 bits or 1 bit; the output of the second variable shift block 4241 is shifted to the right by 2 bits or 3 bits; the output of the third variable shift block 4242 is shifted to the right by 4 bits or 5 bits (by means of the variable shift block 4242 and the fixed shift block 438); and the output of the fourth variable shift block 4243 is shifted to the right by 6 bits or 7 bits.
This structure has a lower truncation error than some conventional devices. However, in accordance with the invention, the truncation error can be reduced further.
In
A second input line 516 carries all zeros, and the input data values received on the data line 512 are also applied to an inverter 518, with the inverter output being applied on the inverse line 520 to respective third inputs of the multiplexers 5140, 5141, . . . , 5143.
The operation of the multiplexers 5140, 5141, . . . , 5143 is exactly the same as that of the multiplexers 4140, 4141, . . . , 4143 in
The outputs from the multiplexers 5140, 5141, . . . , 5143 are passed to respective variable shift blocks 5240, 5241, . . . , 5243, and the principle of operation of the variable shift blocks 5240, 5241, . . . , 5243 is exactly the same as that of the variable shift blocks 4240, 4241, . . . , 4243 in
However, in this case, the first variable shift block 5240 can either shift the data to the left by three bits or by two bits, without truncation, the second variable shift block 5241 can either shift the data to the left by one bit, without truncation, or can apply no bit shift, the third variable shift block 5242 can either shift the data to the right by one bit or by two bits, and the fourth variable shift block 2243 can either shift the data to the right by three bits or by four bits.
The fact that the first variable shift block 5240 and the second variable shift block 5241 can shift the data to the left, without truncation, improves the precision of the device, albeit at the cost of slightly more complex hardware.
The outputs of the first and second variable shift blocks 5240 and 5241 are passed to a first adder 532, while the outputs of the third and fourth variable shift blocks 5242 and 5243 are passed to a second adder 534.
No fixed shift is applied to the output of either the first adder 532 or the second adder 534. The outputs of the first adder 532 and the second adder 534 are passed to a third adder 540, and the output of the third adder 540 is supplied as a data output on the output line 542.
Thus, as required, the output of the first variable shift block 5240 is shifted to the left by 3 bits or 2 bits; the output of the second variable shift block 5241 is shifted to the left by 1 bits or 0 bits; the output of the third variable shift block 5242 is shifted to the right by 1 bit or 2 bits; and the output of the fourth variable shift block 5243 is shifted to the right by 3 bits or 4 bits.
In
A second input line 616 carries all zeros, and the input data values received on the data line 612 are also applied to an inverter 618, with the inverter output being applied on the inverse line 620 to respective third inputs of the multiplexers 6140, 6141, . . . , 6143.
The operation of the multiplexers 6140, 6141, . . . , 6143 is exactly the same as that of the multiplexers 4140, 4141, . . . , 4143 in
The outputs from the multiplexers 6140, 6141, . . . , 6143 are passed to respective variable shift blocks 6240, 6241, . . . , 6243, and the principle of operation of the variable shift blocks 6240, 6241, . . . , 6243 is exactly the same as that of the variable shift blocks 4240, 4241, . . . , 4243 in
However, in this case, the first variable shift block 6240 can either shift the data to the left by three bits or by two bits, without truncation, the second variable shift block 6241 can either shift the data to the left by one bit, without truncation, or can apply no bit shift, the third variable shift block 6242 can either shift the data to the left by three bits or by two bits, without truncation, and the fourth variable shift block 6243 can either shift the data to the left by one bit, without truncation, or can apply no bit shift.
Again, the fact that the first variable shift blocks 6240-6243 can shift the data to the left, without truncation, improves the precision of the device, albeit at the cost of slightly more complex hardware.
The outputs of the first and second variable shift blocks 6240 and 6241 are passed to a first adder 632, while the outputs of the third and fourth variable shift blocks 6242 and 6243 are passed to a second adder 634.
No fixed shift is applied to the output of the first adder 632, while the output of the second adder 634 is applied to a fixed shift block 638, which applies a shift of 4 bits to the right. The outputs of the first adder 632 and the fixed shift block 638 are passed to a third adder 640, and the output of the third adder 640 is supplied as a data output on the output line 642.
Thus, as required, the output of the first variable shift block 6240 is shifted to the left by 3 bits or 2 bits; the output of the second variable shift block 6241 is shifted to the left by 1 bits or 0 bits; the output of the third variable shift block 6242 is shifted to the right by 1 bit or 2 bits (considering the effect of the third variable shift block 6242 and the fixed shift block 638 together); and the output of the fourth variable shift block 6243 is shifted to the right by 3 bits or 4 bits (considering the effect of the fourth variable shift block 6243 and the fixed shift block 638 together).
It is also possible to use a structure which suffers from no truncation errors, again at a cost of slightly further increased hardware complexity, because the bit precision of the outputs must be increased.
In
A second input line 716 carries all zeros, and the input data values received on the data line 712 are also applied to an inverter 718, with the inverter output being applied on the inverse line 720 to respective third inputs of the multiplexers 7140, 7141, . . . , 7143.
The operation of the multiplexers 7140, 7141, . . . , 7143 is exactly the same as that of the multiplexers 4140, 4141, . . . , 4143 in
The outputs from the multiplexers 7140, 7141, . . . , 7143 are passed to respective variable shift blocks 7240, 7241, . . . , 7243, and the principle of operation of the variable shift blocks 7240, 7241, . . . , 7243 is exactly the same as that of the variable shift blocks 4240, 4241, . . . , 4243 in
However, in this case, the first variable shift block 7240 can either shift the data to the left by three bits or by two bits, without truncation, the second variable shift block 7241 can either shift the data to the left by one bit, without truncation, or can apply no bit shift, the third variable shift block 7242 can either shift the data to the left by three bits or by two bits, without truncation, and the fourth variable shift block 7243 can either shift the data to the left by one bit, without truncation, or can apply no bit shift.
The outputs of the first and second variable shift blocks 7240 and 7241 are passed to a first adder 732, while the outputs of the third and fourth variable shift blocks 7242 and 7243 are passed to a second adder 734.
No fixed shift is applied to the output of the second adder 734, while the output of the first adder 732 is applied to a fixed shift block 736, which applies a shift of 4 bits to the left.
Again, the fact that the variable shift blocks 7240-7243 and the fixed shift block 736 can shift the data to the left, without truncation, improves the precision of the device, albeit at the cost of slightly more complex hardware.
The outputs of the second adder 734 and the fixed shift block 736 are passed to a third adder 740, and the output of the third adder 740 is supplied as a data output on the output line 742.
Thus, as required, the output of the first variable shift block 7240 is shifted to the left by 7 bits or 6 bits (considering the effect of the first variable shift block 7240 and the fixed shift block 736 together); the output of the second variable shift block 6241 is shifted to the left by 5 bits or 4 bits (considering the effect of the second variable shift block 7241 and the fixed shift block 736 together); the output of the third variable shift block 7242 is shifted to the left by 3 bits or 2 bits; and the output of the fourth variable shift block 7243 is shifted to the left by 1 bit or has no bit shift applied.
There are thus described specific embodiments for multiplying data by any set of 8-bit constants, and it will be appreciated that the same principle can be applied to constants of any length.
When the multiplier is to be used with a set of constants that is known in advance, some simplifications can be made, since the multiplier may not need to be able to operate with some of the possible values.
Specifically, each pair of two consecutive bits (i.e. b2nb2n+1) should be checked, for the entire set of constants to be supported by the CSD multiplier. For each value of n (i.e. n=0, 1, 2, 3 in the case of 8-bit constants), all of the values of b2nb2n+1 can be listed. Then, again for each value of n, the listed values are examined, to determine whether any simplification of the corresponding multiplexer, shifter and adder can be made.
With regard to the multiplexer, it was mentioned above that there are five possible pairs of values for two consecutive bits. These can be divided into three subsets: subset0={0 0}; subset1={1 0, 0 1}; subset2={−1 0, 0 −1}. If the listed values of b2nb2n+1 come from just one of the above subsets, the respective multiplexer can be removed, as the required multiplexer output is always zeros, or the data input, or the twos-complement of the data input, depending on the subset. If the listed values come from two of the above subsets, the corresponding multiplexer is reduced from 3:1 to 2:1, since one of the possible multiplexer inputs is never selected.
With regard to the variable bit shifter, the five possible pairs of values for two consecutive bits can again be divided into three subsets, though these are different from the subsets mentioned above, namely subset0={0 0}; subset1*={1 0, −1 0}; subset2*={0 1, 0 −1}. If only values in one of subset1* and subset2* are contained in the listed values, the shifter controlled by the bit pair b2nb2n+1 is optimized to a fixed shifter, since only one shift value is ever applied. If the listed values only come from subset0, the shifter can be removed.
With regard to the adder, then, if a shifter is removed as described above, the corresponding adder, that would have received one of its inputs from that shifter, can also be removed.
There is thus described a multiplier that can provide outputs at a required degree of precision, without excessive hardware requirements.
Number | Date | Country | Kind |
---|---|---|---|
05102546 | Mar 2005 | EP | regional |
Filing Document | Filing Date | Country | Kind | 371c Date |
---|---|---|---|---|
PCT/IB2006/050892 | 3/23/2006 | WO | 00 | 10/23/2008 |
Publishing Document | Publishing Date | Country | Kind |
---|---|---|---|
WO2006/103601 | 10/5/2006 | WO | A |
Number | Name | Date | Kind |
---|---|---|---|
4967388 | Tate | Oct 1990 | A |
5262974 | Hausman et al. | Nov 1993 | A |
5313414 | Yang et al. | May 1994 | A |
6609143 | Kanakogi et al. | Aug 2003 | B1 |
6687726 | Schneider | Feb 2004 | B1 |
7080115 | Parhi et al. | Jul 2006 | B2 |
7164712 | Wittig | Jan 2007 | B2 |
7257609 | Kosunen et al. | Aug 2007 | B1 |
7680872 | Saado | Mar 2010 | B2 |
7711761 | Lo Iacono et al. | May 2010 | B2 |
7912891 | Cho et al. | Mar 2011 | B2 |
20030220956 | Parhi et al. | Nov 2003 | A1 |
20060215615 | Maeda | Sep 2006 | A1 |
Number | Date | Country |
---|---|---|
1288545 | Mar 2001 | CN |
42 23 999 | Jul 1993 | DE |
10-049347 | Feb 1998 | JP |
10-187767 | Jul 1998 | JP |
2000-066878 | Mar 2000 | JP |
2003-516692 | May 2003 | JP |
2004-320253 | Nov 2004 | JP |
0233537 | Apr 2002 | WO |
Number | Date | Country | |
---|---|---|---|
20090070394 A1 | Mar 2009 | US |