C digo de Hamming
O código de Hamming é um código de bloco linear, foi desenvolvido por Richard Hamming, a sua utilização permite a transferência e armazenamento de dados de forma segura e eficiente.
P1 = X1 xor M1 xor M2 xor M4
P2 = X2 xor M1 xor M3 xor M4
P3 = X3 xor M2 xor M3 xor M4
Exemplo:
MSG: 0101
X1
Exemplo 1) Erro no bit M4 da mensagem:
X1
X2
M1
X3
0
1
0
0
1
2
3
4
X2
M1
X3
M2
M3
M4
0
1
0
1
1
2
3
4
5
6
7
Os bits de Hamming sempre ocupam as posições potência de 2 (1,2,4,8,..)
M1, M2, M3 e M4: são os bits da mensagem
M1 = posição 3 = 2 + 1 = X2 + X1
M2 = posição 5 = 4 + 1 = X3 + X1
M3 = posição 6 = 4 + 2 = X3 + X2
M4 = posição 7 = 4 + 2 + 1 = X3 + X2 + X1
X1, X2 e X3: são os bits de Hamming
X1 = M1 xor M2 xor M4
X2 = M1 xor M3 xor M4
X3 = M2 xor M3 xor M4
X1
X2
M1
X3
0
1
0
0
1
2
3
4
M2
1
5
M3
0
6
M4
0
7
P1 = 0 xor 0 xor 1 xor 0 = 1
P2 = 1 xor 0 xor 0 xor 0 = 1
P3 = 0 xor 1 xor 0 xor 0 = 1
(P3P2P1)2 ( 7 )10 posição decimal do bit incorreto.
Exemplo 2) Erro no bit X3 do Hamming:
X1
X2
M1
X3
0
1
0
1
1
2
3
4
P1 = X1 xor M1 xor M2 xor M4
P2 = X2 xor M1 xor M3 xor M4
P3 = X3 xor M2 xor M3 xor M4
M2
1
5
M3
0
6
M4
1
7
P1 = 0 xor 0 xor 1 xor 1 = 0
P2 = 1 xor 0 xor 0 xor 1 = 0
P3 = 1 xor 1 xor 0 xor 1 = 1
(P3P2P1)2 ( 4 )10 posição decimal do bit incorreto.
M2
1
5
P1 = X1 xor M1 xor M2 xor M4
P2 = X2 xor M1 xor M3 xor M4
P3 = X3 xor M2 xor M3 xor M4
Sem erros nem na mensagem nem no bits de Hamming.
P1 = 0 xor 0 xor 1 xor 1 = 0
P2 = 1 xor 0 xor 0 xor 1 = 0
P3 = 0 xor 1 xor 0 xor 1 = 0
M3
0
6
M4
1
7
TRABALHO 3) Faça um programa em VHDL que a partir de uma mensagem de 4 bits (QUALQUER, inseridas pelas teclas da placa) seja gerado os bits de Hamming. Estes bits devem ser escritos nos leds. Nas outras 4 chaves, será inserido uma mensagem (que seria a recebida no receptor). Essa mensagem pode apresentar erro ou não. No display de 7 segmentos deve aparecer a posição do bit errado (caso tenha). Conforme exemplos anteriores. Para fins de testes, não