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