SEC (Single Error Correction)
Código de Hamming
Arquitetura de
Computadores
SEC (Single Error Correction)






Código de Hamming
Problema
Solução
Custos
Geração de Dados
Conclusões
Código de Hamming





Simples Correção de Erro (SEC)
Expansível : Dupla Detecção de Erro (SECDED)
Garantia maior de consistência dos dados
Verificações redundantes
Identificação única
Código de Hamming
Bits de Dados
1
1
1
1
0
Bits de verificação
(redundantes)
1
1
0
Erro
1 0
0
0
1
1
1
0
0
0
Código de Hamming
Exemplo:
Check
bit
12 1100
11 1011
10 1010
9 1001
8 1000 C8
7 0111
6 0110
5 0101
4 0100 C4
3 0011
2 0010 C2
1 0001 C1
Data
bit
M12
M11
M10
M9
M bits de dados
K bits de verificação devem ser capazes de
codificar erros em M+K posições, quando houver
erro, mais uma posição que indica que não houve
erro.
=> 2k
M7
M6
M5
M3
 M + K + 1
C1 = M3 +
+ M7 O
+ M9 +
O M5 O
O M11
C2 = M3 +
+ M7 O
+ M10 +
O M6 O
O M11
C4 = M5 +
+ M7 O
+ M12
O M6 O
C8 = M9 +
+ M11 O
+ M12
O M10 O
Problema




Implementar o código de Hamming para uma
palavra de 8 bits
Utilizar CI’s em proto-board com algum
visualizador
A princípio, portas XOR seriam utilizadas
Utilização da lógica XOR em paridade
Solução

Utilização de XOR:
–
–

Utilização de Memória:
–
–

Dificuldades: Montagem e Tamanho do Circuito
Facilidades: Implementação pronta
Dificuldades: Programação
Facilidades: Montagem e Tamanho do Circuito
Programação:
–
Utilização de um gerador (programa que gera a
programação da memória)
Custos (outra vantagem)



Xor = US$ 0,50
Mem (27C512) = US$ 1,80
Utilização:
–
–
–
–
2 mem = US$ 3,60 = 7,2 xor = 7 xor = 28 portas
Hamming = 12 portas
Comparador = 4 portas
Inversor xor = 8 portas
Custos (outra vantagem)
Total = 2 hamming (gerador e corretor) + 1
comparador + 1 inversor + codificador + ...
Total = 2 x 12 + 4 + 8 + ... = 36 + ... portas

Custo c\ memória: US$ 3,60 = R$
10,80
Fonte Futurlec:
http://www.futurlec.com/ICEPROM.shtml
http://www.futurlec.com/IC7400Series.shtml
Geração de Dados (Programação)

Identificar:
–
–
–
–

Etapas do processo
Estruturas de dados
Atividades comuns
Formas de representação
Gerar:
–
–
–
–
Arquivos de Gravação
Classes
Métodos
Atributos e saídas
Etapas do Processo

Gerar Código
–

Identificar Erro
–

A partir do dado correto¹ gerar o seu código de
Hamming
A partir do dado alterado² e o código de Hamming
identificar o bit onde houve alteração
Corrigir
–
A partir do dado alterado² e o código de Hamming
realizar a correção se existir um único erro (SEC)
1 – teoricamente imune ao erro, dado de entrada
2 – teoricamente susceptível ao erro, dado de saída
Arquivos de Gravação

Composição em 2 arquivos
–
–

Geração
–

Geração
Identificação e Correção (mesmas entradas)
ham1.txt
Identificação e Correção
–
–
ham2.txt
Etapas multiplexadas internamente
Estruturas de Dados - Classes


Estrutura que comporte a relação entre os bits de
um vetor de bits e um número inteiro
Classe Bits
–
Atributos:


–

Métodos de Conversão
Classe Gerador (programa gerador)
–

boolean[] bits – vetor de bits
int valor – valor correspondente inteiro
Métodos de Geração Estáticos¹
Classe Arquivo (auxilia gravação em arquivo)
1 – independe de um objeto, sobre uma classe
Classe Bits
import
java.util.Vector;
import
java.lang.Boolean;
public class Bits{
public int valor;
public boolean[]
bits;
public Bits(int v){
this.valor = v;
this.resolveBits();
}
public Bits(boolean[] b){
this.bits = b;
this.resolveValor();
}
...
}
Atividades Comuns – Métodos (Bits)

Gets (obter bit do vetor):
–

Mod2 (quociente e resto da divisão por 2):
–

int[] mod2(int)
Conversão (utilizado no construtor)
–

boolean getBooleanIn(int), int getIntIn(int)
resolveBits(), resolveValor()
Xor
Classe Gerador


Métodos e Atributos Estáticos
Identificar erro
–

Correção do erro
–

char corrected(int, int)
Código Hamming
–

char correctionOut(int, int), int correction(int, int)
char hamming(int)
Auxiliares
–
int adjustOut(int), int decide(int), char int2Char(int),
boolean xor (boolean, boolean)
Ex.: char hamming(int)
public static char hamming(int v){
Bits bt = new Bits(v);
boolean[] ret = new boolean[4];
ret[0] =
Gerador.xor(bt.getBooleanIn(0),
Gerador.xor(bt.getBooleanIn(1),
Gerador.xor(bt.getBooleanIn(3),
Gerador.xor(bt.getBooleanIn(4),
bt.getBooleanIn(6)))));
//C1 = M1 + M2 + M4 + M5 + M7
ret[1] =
Gerador.xor(bt.getBooleanIn(0),
Gerador.xor(bt.getBooleanIn(2),
Gerador.xor(bt.getBooleanIn(3),
Gerador.xor(bt.getBooleanIn(5),
bt.getBooleanIn(6)))));
//C2 = M1 + M3 + M4 + M6 + M7
ret[2] =
Gerador.xor(bt.getBooleanIn(1),
Gerador.xor(bt.getBooleanIn(2),
Gerador.xor(bt.getBooleanIn(3),
bt.getBooleanIn(7))));
//C4 = M2 + M3 + M4 + M8
ret[3] =
Gerador.xor(bt.getBooleanIn(4),
Gerador.xor(bt.getBooleanIn(5),
Gerador.xor(bt.getBooleanIn(6),
bt.getBooleanIn(7))));
//C8 = M5 + M6 + M7 + M8
bt = new Bits(ret);
return Gerador.int2Char(bt.valor);
}
Classe Arquivo


Classe desenvolvida pelos monitores da
disciplina de Algoritmos e Estruturas de
Dados, para auxiliar leitura e escrita de
arquivos (entradas e saídas)
Leitura: Tipo readTipo()
–

(e.g. int readInt())
Escrita: print(Tipo), println(Tipo)
–
(e.g. println(String), print(int))
Formas de Representação



Entradas (para a geração) Inteiros
Saídas (para o arquivo) Caracteres
Conversão Direta (Cast):
char c;
int i;
c = (char) 21;
i = (int) ‘b’

Problema
–
caracteres não representados: 81, 8D, 8F, 90, 9D (hex)
Conclusões



Implementações com memória
Programação Conveniente (Resultado)
Vantagens:
–
–
–

Montagem
Tamanho
Custo
Objetivo prático:
–
–
–
Análise
Implementação
Montagem
Mais Informações

www.cin.ufpe.br/~bemaf/arquivos/arq/
–
–
–
–
SEC.ppt (esta apresentação)
Bits.java
Gerador.java
Arquivo.java
Download

SEC