Bus encoding: Difference between revisions

Content deleted Content added
References: improved ref
proper capitalization of Hamming distance
Line 1:
'''Bus encoding''' refers to converting/encoding a piece of data to another form before launching on the [[bus (computing)|bus]]. While bus encoding can be used to serve various purposes like reducing the number of pins, compressing the data to be transmitted, reducing cross-talk between bit lines, etc., it is one of the popular techniques used in system design to reduce dynamic power consumed by the [[system bus]].<ref name="RTL"/><ref name="devdasmalik"/> Bus encoding aims to reduce the [[hammingHamming distance]] between 2 consecutive values on the bus. Since the activity is directly proportional to the hammingHamming distance, bus encoding proves to be effective in reducing the overall activity factor thereby reducing the dynamic power consumption in the system.
 
In the context of this article, a system can refer to anything where data is transferred from one element to another over bus (viz. [[System on a Chip]] (SoC), a computer system, an [[embedded system]] on board, etc.).
Line 13:
== Examples of bus encoding to achieve low power==
Following are some of the implementations to use Bus Encoding for reducing dynamic power consumption in different scenarios:
# ''[[Gray encoding]]'':<ref name="massoud"/> The address lines of a bus in most of the computing systems increase in consecutive numerical values due to [[Locality of reference|spatial locality]]. If we use regular binary coding for the bus, we are not assured of minimal hammingHamming distance between 2 consecutive addresses. Using Gray codes for encoding the address lines will lead to a hammingHamming distance of 1 between any 2 consecutive address bus values (as long as spatial locality holds). There are variations to this scheme named Shifted Gray encoding to reduce the delay overhead.<ref name="Shifted_Gray"/>
# ''Sequential addressing or T0 codes'':<ref name="Zero-Transition_1997"/> In case of address bus, due to spatial locality that exists in programs, most of the transitions involve changing the address to the next consecutive value. A possible encoding scheme is to use an additional line, INC, in the bus indicating whether the current transition is the next increment address or not. If it is not a consecutive address, then the receiver can use the value on the bus. But if it is a consecutive address, the transmitter need not change the value in the bus, but just assert the INC line to 1. In such case, for a continuous addressing scheme, there is no transition at all on the bus, leading to a bus activity factor of 0.
# ''Number representation'': Let us consider an example of a system which gets one of its data from a sensor. Most of the times, the sensor may be measuring some noise and for this example, let us consider that the values being measured are (0) and (-1) alternatively. For a 32-bit data bus, value 0 translates to 0x00000000 (0000 0000 0000 0000 0000 0000 0000 0000) while (-1) translates to 0xFFFFFFFF (1111 1111 1111 1111 1111 1111 1111 1111) in a 2’s complement representation. We see that the hammingHamming distance in this case is 32 (since all 32-bits are changing their state). Instead, if we encode the bus to use signed integer representation (MSB is sign bit), we can represent 0 as 0x00000000 (0000 0000 0000 0000 0000 0000 0000 0000) and -1 as 0x80000001 (1000 0000 0000 0000 0000 0000 0000 0001) . In this case, we see that the hammingHamming distance between the numbers is just 2. Hence by using a 2’s complement to signed arithmetic encoding, we are able to reduce the activity from a factor of 32 to 2.
# ''[[Inversion encoding]]'':<ref name="Stan_1995"/><ref name="Inversion"/> This is another implementation of bus encoding where an additional line named INV is added to the bus lines. Depending on the value of the INV line, the other lines will be used with or without inversion. e.g. if INV line is 0, the data on the bus is sampled as it is but if INV line is 1, the data on the bus is inverted before any processing on it. Referring to the example used in 3, instead of using a signed integer representation, we could continue using 2’s complement and achieve the same activity reduction using inversion encoding. So, 0 will be represented as 0x00000000 with INV=0 and -1 will be represented as 0x00000000 with INV=1. Since INV=1, receiver will invert the data before consuming it, thereby converting it to 0xFFFFFFFF internally. In this case, only 1 bit (INV bit) is changed over bus leading to an activity of factor 1. In general, in inversion encoding, the encoder computes the hammingHamming distance between the current value and next value and based on that, determines whether to use INV=0 or INV=1.
# ''Value cache'':<ref name="Yang"/> This is another form of Bus encoding, primarily used for external (off-chip) Busses. A dictionary (value cache) is maintained at both the sender and receiver end about some of the commonly shared data patterns. Instead of passing the data patterns each time, the sender just toggles one bit indicating which entry from value cache to be used at the receiver end. Only for values which are not present in the value cache, the complete data is sent over the bus. There has been various modified implementations of this technique with an intent to maximize the hits for the value cache, but the underlying idea is the same.<ref name="Basu"/><ref name="Lin"/>
# ''Other techniques'' like sector-based encoding,<ref name="Sector"/> variations of inversion coding, have also been proposed. There has been work on using bus encodings which lower the leakage power consumption as well along with reducing the crosstalk with minimal impact on path delays.<ref name="Deogun"/><ref name="Khan"/>