Zero Backfill and Sign Extension

To move the 16-bit data into the 40-bit accumulator we first move the 16-bit value into the high byte, then backfill the low byte with 0's. Lastly, extend the sign bit (ACCxH<15>) into the upper byte. This maintains the sign bit, and the implicit radix point for fractional numbers that resides between bits 31 and 30 (1.15 format).

ZeroBackfill.png

The Zero Backfill and Sign Extension logic is used to interface the X Data Bus and the output of the multiplier to the 40-bit Accumulators, ACCA and ACCB. Each accumulator consists of three (3) adjacent registers: Accumulator Upper, which is the upper byte, bits 39 through 32, Accumulator High, which is the middle word, bits 31 through 16, and Accumulator Low, which is the lower word, bits 15 through 0. The implicit radix point for fractional numbers is set between bits 31 and 30. When an accumulator is loaded using the Load Accumulator, or LAC, instruction, Accumulator Lower will be set to zero from the zero backfill logic, and all bits in Accumulator Upper will take the value of accumulator bit 31 from the sign extension logic. For DSP multiply instructions, the 33-bit result of the Scaler serves as the input to the Sign Extend logic, which will sign extend the result to 40 bits.

Examples

These 2 examples demonstrate how the Zero Backfill and Sign Extension logic operates. The effects of the Zero Backfill logic are shown in green, and the effects of the Sign Extension logic are shown in red.

LAC W1,A; load ACCA with w1

  • If W1 = 0xFFF7, ACCA = OxFFFFF70000
    • W1<15> = 1, so ACCU = 0xFF, the extended sign bit
    • ACCAL is cleared - i.e. backfilled with zeros
ExampleA.png

In the first example, the contents of W1 are loaded into Accumulator A. Since W1 is negative (as bit 15 is 1), the Sign Extension logic sets Accumulator A Upper ACCAU to 0xFF. The Zero Backfill logic sets Accumulator A Lower ACCAL to zero for all LAC instructions.

LAC W2,B; load ACCB with w2

  • If W2 = 0x7FF7, ACCB = 0x007FF70000
    • W2<15> = 0, so ACCBU = 0x00, the extended sign bit
    • ACCBL is cleared – i.e. backfilled with zeros
ExampleB.png

In the second example, the contents of W2 are loaded into Accumulator B ACCB. Since W2 is positive (as bit 15 is 0), the Sign Extension logic sets Accumulator A Upper ACCAU to zero. The Zero Backfill logic sets Accumulator A Lower ACCAL to zero for all LAC instructions.

© 2024 Microchip Technology, Inc.
Notice: ARM and Cortex are the registered trademarks of ARM Limited in the EU and other countries.
Information contained on this site regarding device applications and the like is provided only for your convenience and may be superseded by updates. It is your responsibility to ensure that your application meets with your specifications. MICROCHIP MAKES NO REPRESENTATIONS OR WARRANTIES OF ANY KIND WHETHER EXPRESS OR IMPLIED, WRITTEN OR ORAL, STATUTORY OR OTHERWISE, RELATED TO THE INFORMATION, INCLUDING BUT NOT LIMITED TO ITS CONDITION, QUALITY, PERFORMANCE, MERCHANTABILITY OR FITNESS FOR PURPOSE. Microchip disclaims all liability arising from this information and its use. Use of Microchip devices in life support and/or safety applications is entirely at the buyer's risk, and the buyer agrees to defend, indemnify and hold harmless Microchip from any and all damages, claims, suits, or expenses resulting from such use. No licenses are conveyed, implicitly or otherwise, under any Microchip intellectual property rights.