Parity Bit
7 bits of data
|
(count of 1 bits)
|
8 bits including parity
|
|
even
|
odd
|
||
0000000
|
0
|
00000000
|
00000001
|
1010001
|
3
|
10100011
|
10100010
|
1101001
|
4
|
11010010
|
11010011
|
1111111
|
7
|
11111111
|
11111110
|
A parity
bit, or check bit is a bit added to the end of a string of binary code
that indicates whether the number of bits in the string with the value one is even or odd. Parity bits are used as the simplest form of error detecting code. There are two variants of
parity bits: even parity bit and odd parity bit.
In the case of even parity,
the number of bits whose value is 1 in a given set are counted. If that total
is odd, the parity bit value is set to 1, making the total count of 1's in the
set an even number. If the count of ones in a given set of bits is already
even, the parity bit's value remains 0.
In the case of odd parity, the
situation is reversed. Instead, if the sum of bits with a value of 1 is odd,
the parity bit's value is set to zero. And if the sum of bits with a value of 1
is even, the parity bit value is set to 1, making the total count of 1's in the
set an odd number.
Even
parity is a special case of a cyclic redundancy check
(CRC), where the 1-bit CRC is generated by the polynomial x+1. If the parity bit is present but not
used, it may be referred to as mark parity (when the parity bit is
always 1) or space parity (the bit is always 0).
Parity
In mathematics, parity refers to the
evenness or oddness of an integer, which for a binary number is
determined only by the least significant bit. In
telecommunications and computing, parity refers to the evenness or oddness of
the number of bits with value one within a given set of bits, and is thus
determined by the value of all the bits. It can be calculated via an XOR
sum of the bits, yielding 0 for even parity and 1 for odd parity. This property
of being dependent upon all the bits and changing value if any one bit changes
allow for its use in error detection
schemes.
Error detection
If an odd number of bits
(including the parity bit) are transmitted incorrectly,
the parity bit will be incorrect, thus indicating that a parity error
occurred in the transmission. The parity bit is only suitable for detecting
errors; it cannot correct any errors,
as there is no way to determine which particular bit is corrupted. The data
must be discarded entirely, and re-transmitted from scratch.
On a noisy transmission medium, successful transmission can therefore take a
long time, or even never occur. However, parity has the advantage that it uses
only a single bit and requires only a number of XOR gates to generate. See Hamming code for an example of an error-correcting code. Parity
bit checking is used occasionally for transmitting ASCII
characters, which have 7 bits, leaving the 8th bit as a parity bit. For
example, the parity bit can be computed as follows, assuming we are sending
simple 4-bit values 1001.
Type of bit parity
|
Successful transmission scenario
|
Even parity
|
A wants to
transmit: 1001
A computes parity
bit value: 1+0+0+1 (mod 2) = 0
A adds parity bit
and sends: 10010
B receives: 10010
B computes parity:
1+0+0+1+0 (mod 2) = 0
B reports correct
transmission after observing expected even result.
|
Odd parity
|
A wants to
transmit: 1001
A computes parity
bit value: 1+0+0+1 + 1 (mod 2) = 1
A adds parity bit
and sends: 10011
B receives: 10011
B computes overall
parity: 1+0+0+1+1 (mod 2) = 1
B reports correct
transmission after observing expected result.
|
This mechanism enables the
detection of single bit errors, because if one bit gets flipped due to line
noise, there will be an incorrect number of ones in the received data. In the
two examples above, B's calculated parity value matches the parity bit in its
received value, indicating there are no single bit errors. Consider the
following example with a transmission error in the second bit using XOR:
Type of bit parity error
|
Failed transmission scenario
|
Even parity
Error in the second bit
|
A wants to transmit: 1001
A computes parity bit value: 1^0^0^1 = 0
A adds parity bit and sends: 10010
...TRANSMISSION ERROR...
B receives: 11010
B computes overall parity: 1^1^0^1^0 = 1
B reports incorrect transmission after
observing unexpected odd result.
|
Even parity
Error in the parity bit
|
A wants to transmit: 1001
A computes even parity value: 1^0^0^1 = 0
A sends: 10010
...TRANSMISSION ERROR...
B receives: 10011
B computes overall parity: 1^0^0^1^1 = 1
B reports incorrect transmission after
observing unexpected odd result.
|
There is a limitation to parity schemes. A parity bit is only guaranteed to detect an odd number of bit errors. If an even number of bits have errors, the parity bit records the correct number of ones, even though the data is corrupt. (See also error detection and correction.) Consider the same example as before with an even number of corrupted bits:
Type of bit parity error
|
Failed transmission scenario
|
Even parity
Two corrupted bits
|
A wants to transmit: 1001
A computes even parity value: 1^0^0^1 = 0
A sends: 10010
...TRANSMISSION ERROR...
B receives: 11011
B computes overall parity: 1^1^0^1^1 = 0
B reports correct transmission though
actually incorrect.
|
B observes even parity, as expected,
thereby failing to catch the two bit errors.
Usage
Because of its simplicity,
parity is used in many hardware applications
where an operation can be repeated in case of difficulty, or where simply
detecting the error is helpful. For example, the SCSI
and PCI buses use parity to detect transmission errors, and many microprocessor instruction caches include parity protection. Because the I-cache data is just a copy of main memory, it can be disregarded and re-fetched if it is
found to be corrupted.
In serial data transmission, a common format is 7 data bit, an even
parity bit, and one or two stop bits. This format neatly accommodates
all the 7-bit ASCII characters in a convenient 8-bit byte. Other formats are
possible; 8 bits of data plus a parity bit can convey all 8-bit byte values.
In serial communication
contexts, parity is usually generated and checked by interface hardware (e.g.,
a UART) and, on reception, the result made available to the CPU
(and so to, for instance, the operating system) via a status bit in a hardware register in the interface hardware. Recovery from the
error is usually done by retransmitting the data, the details of which are
usually handled by software (e.g., the operating system I/O routines).