Number representation: Consider 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 and for this example, 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 Hamming 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 Hamming 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:[6][7] 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 Hamming distance between the current value and next value and based on that, determines whether to use INV=0 or INV=1.
Value cache encoding:[8] 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.[9][10]
↑ Guo, Hui; Parameswaran, Sri (2010年4月~6月)「低消費電力組み込みシステムにおける命令メモリアドレスバススイッチングを削減するためのシフトグレイ符号化」Journal of Systems Architecture . 56 ( 4–6 ): 180–190 . doi : 10.1016/j.sysarc.2010.03.003 .
↑ Benini, Luca; De Micheli, Giovanni; Macii, Enrico; Sciuto, D. ; Silvano, C. (1997 年 3 月). "低消費電力マイクロプロセッサベースシステムのアドレスバスに対する漸近ゼロ遷移アクティビティ符号化". Proceedings Seventh Great Lakes Symposium on VLSI : 77– 82.
↑ Stan, Mircea R.; Burleson, Wayne P. (1995 年 3 月). "低電力 I/O 用バス反転符号化". IEEE Transactions on Very Large Scale Integration (VLSI) Systems . 3 (1): 49–58 . Bibcode : 1995ITVL....3...49S . CiteSeerX 10.1.1.89.2154 . doi : 10.1109/92.365453 . 1063-8210/95$04.00.