Inversion encoding
Inversion encoding is an encoding technique used for encoding bus transmissions for low power systems. It is based on the fact that a large amount of power is wasted because of transitions, especially in external buses, and thus reducing these transitions aids optimization of power dissipation. This is done introducing an additional signal line named INV to the bus lines. This signal determines whether the other lines should be inverted or not.
Overview
The bus-invert encoding technique uses an extra signal to indicate the "polarity" of the data. Having a bus-invert code word INV@x where @ is the concatenation operator and x denotes either the source word or its ones' complement, the bus-invert decoder takes the code word and produces the corresponding source word. If the INV signal is 1, the result is ones' complement of x, otherwise it is x.Usage scenarios
- High capacitance lines
- High switching activity
Bus-invert method
- The Hamming distance between the present bus value and the next data value is computed.
- If the Hamming distance is larger than n/2, invert is set to 1, and the next bus value is made equal to the inverted next data value.
- Otherwise invert is set to 0, and the next bus value is equal to the next data value.
- At the receiver side the contents of the bus must be conditionally inverted according to the invert line, unless the data is not stored encoded as it is. In any case, the value of invert must be transmitted over the bus.
Example
Considering an example of a system which gets one of its data from a sensor, most of the time the sensor may be measuring some noise. For this example, the values being measured should be assumed to be and alternatively. For a 32-bit data bus, value 0 translates to 0x00000000 while translates to 0xFFFFFFFF in a two's complement representation. The Hamming distance in this case is 32. The Hamming distance is much smaller using the sign bit representation. However, even using two's complement, inversion encoding reduces the activity necessary. In this case 0 would be represented as 0x00000000 with INV=0 and -1 would be represented as 0x00000000 with INV=1. Since INV=1, the receiver would invert the data before consuming it, thereby converting it to 0xFFFFFFFF internally. In this case, only 1 bit is changed in the bus, leading to an activity of factor 1, which is even better than sign bit representation.Performance analysis
The bus-invert method generates a code that has the property that the maximum number of transitions per time-slot is reduced from n to n/2+1 and thus the peak power dissipation for input/output is reduced by nearly the half. From the coding theory point of view, the bus-invert code is a time-dependent Markovian code.While the maximum number of transitions is reduced by half, the average number has a smaller decrease. For an 8-bit bus for example, the average number of transitions, using bus-invert coding becomes 3.27, or 0.41 transitions per bus-line per time-slot. This means that the average number of transitions is 81.8% of the number with an unencoded bus. This is because the invert line contributes some transitions and the distribution of the Hamming distances is not uniform.