O documento descreve a implementação de somadores auto-verificadores no FemtoJava usando códigos aritméticos para detecção de falhas. Os somadores são implementados usando código residual para gerar sinais de interrupção quando erros são detectados, permitindo tratamento por software.
Boas práticas de programação com Object Calisthenics
Julio Silvello - Femtojava - Self Checking Adders
1. UNIVERSIDADE FEDERAL DO RIO GRANDE DO SULUNIVERSIDADE FEDERAL DO RIO GRANDE DO SUL
Tolerância a Falhas no Femto-Java:Tolerância a Falhas no Femto-Java:
Implementação baseada em Código ResidualImplementação baseada em Código Residual
CMP114 – Arquitetura e Projeto de Sistemas VLSI I
Júlio César Silvello (silvello@inf.ufrgs.br)
Professor: Flávio Rech Wagner
Julho/2004
2. FemtoJava – Implementação baseada em Código ResidualFemtoJava – Implementação baseada em Código Residual
1. Introdução
2. Códigos Aritméticos
3. FemtoJava Multiciclo
A. Características Gerais
B. Sistema de Interrupções
C. SASHIMI
4. Implementação de Self-Checking Adders
A. Visão Geral
B. Encoder
C. mod_add
D. Checker
5. Tratamento de Falhas
6. Conclusões e Trabalhos Futuros
RoteiroRoteiro
3. Sistemas computacionais estão sujeitos a falhas
A confiabilidade é uma aspecto essencial em sistemas críticos
Controle automotivo
Sistemas médicos
Satélites (ambientes hostis)
Teste online e circuitos self-checking podem aumentar a
confiabilidade de sistemas eletrônicos
Erros são detectados logo que ocorrem
Tratamento do erro pode ser feito mais rapidamente
Custo associado
• Hadware adicional, desempenho, consumo de potência
1. Introdução1. Introdução
FemtoJava – Implementação baseada em Código ResidualFemtoJava – Implementação baseada em Código Residual
4. Unidades aritméticas são elementos essenciais em muitos sistemas
computacionais
As operações aritméticas básicas são a adição e a subtração
Multiplicação e divisão são implementadas através de iterações das
operações básicas e da operação de deslocamento
• Erros nessas operações se manifestam como erros nas operações básicas ou
como erros de controle
Detecção de erros em operações aritméticas básicas códigos aritméticos
1. Introdução1. Introdução
FemtoJava – Implementação baseada em Código ResidualFemtoJava – Implementação baseada em Código Residual
5. 2. Códigos Aritméticos2. Códigos Aritméticos
FemtoJava – Implementação baseada em Código ResidualFemtoJava – Implementação baseada em Código Residual
São preservados em operações aritméticas básicas
A soma ou subtração de um dado codificado resulta em um dado
corretamente codificado
Permitem a detecção de falhas simples ou múltiplas, dependendo
da distância adotada (custo associado)
Em operações aritméticas, a falha de 1 bit na entrada pode resultar
em diversos bits incorretos na saída
1 1 1 1
+ 0 0 0 0
0 1 1 1 1
1 1 1 1
+ 0 0 0 1
1 0 0 0 0
Entradas
Saída
6. 2. Códigos Aritméticos2. Códigos Aritméticos
FemtoJava – Implementação baseada em Código ResidualFemtoJava – Implementação baseada em Código Residual
O dado codificado consiste de uma parte não codificada (dado
original) concatenado com um Check Symbol, que é uma função
do dado original
X é um dado com m-bits
C(X) é o Check Symbol, com a-bits
C(X) = X mod A
A = 2a
– 1 (ou seja, todos os a-bits em 1)
X’(X) = <C(X), X>, dado codificado com (m+a)-bits
f(X + Y) = <C(X) +A C(Y), X + Y>
- Código Residual
7. 3. FemtoJava Multiciclo3. FemtoJava Multiciclo
FemtoJava – Implementação baseada em Código ResidualFemtoJava – Implementação baseada em Código Residual
Arquitetura de Pilha
RAM e ROM integradas
Portas de IO mapeadas em memória
2 timers
Mecanismo de tratamento de interrupções
Interrupções para timers
Interrupções externas (pinos)
A. Características Gerais
8. FemtoJava – Implementação baseada em Código ResidualFemtoJava – Implementação baseada em Código Residual
9. 3. FemtoJava Multiciclo3. FemtoJava Multiciclo
FemtoJava – Implementação baseada em Código ResidualFemtoJava – Implementação baseada em Código Residual
A JVM não define mecanismos para manipulação de interrupções, mas o
FemtoJava Multiciclo provê sistema de interrupções, por ser uma característica
desejável em microcontroladores
2 níveis de prioridades no tratamento de interrupções
Os registradores que programam o sistema estão mapeados em memória RAM e
podem ser acessados através de bytecodes estendidos (load_idx e store_idx)
Interrupções podem ser desabilitadas individualmente ou globalmente
5 interrupções: INT0, TF0, INT1, TF1, SP1
B. Sistema de Interrupções
10. 3. FemtoJava Multiciclo3. FemtoJava Multiciclo
FemtoJava – Implementação baseada em Código ResidualFemtoJava – Implementação baseada em Código Residual
O SASHIMI é um ambiente que permite a especificação em Java de um
microcontrolador FemtoJava dedicado a uma aplicação específica (ASIC)
Há restrições impostas sobre a linguagem Java para que a especificação seja
sintetizável
Basicamente o ambiente modifica o conteúdo da ROM, conjunto de instruções
disponíveis e o Bloco de Controle (FSM). O Bloco Operacional não é
modificado, mesmo que alguns componentes não sejam necessários para a
aplicação
Existem classes Java auxiliares que permitem a programação e controle do
comportamento do sistema a ser modelado (ex.: FemtoJavaInterruptSystem)
C. SASHIMI
11. 4. Implementação de4. Implementação de Self-Checking AddersSelf-Checking Adders
FemtoJava – Implementação baseada em Código ResidualFemtoJava – Implementação baseada em Código Residual
Substituição dos somadores do FemtoJava, por somadores com
self-checking online
Falha é detectada imediatamente quando ocorre
Implementação de baixo custo do Código Residual
Sinalização de falhas através da INT0 (que deixou de estar
disponível para interrupções externas)
Tratamento de falhas é feito por software, de acordo com a
especificação do usuário/projetista
Flexibilidade no tratamento de falhas
12. 4. Implementação de4. Implementação de Self-Checking AddersSelf-Checking Adders
FemtoJava – Implementação baseada em Código ResidualFemtoJava – Implementação baseada em Código Residual
+
+A
Encoder
Equality
checker
X
C(X)
Y
C(Y)
c
X + Y
Sinalização de
interrupção
(se diferentes)
Encoder
Encoder
13. 4. Implementação de4. Implementação de Self-Checking AddersSelf-Checking Adders
FemtoJava – Implementação baseada em Código ResidualFemtoJava – Implementação baseada em Código Residual
Implementação de baixo custo do Encoder
O encoder é responsável pela custosa operação (X mod A)
No caso de A = 2a
– 1, essa operação pode ser implementada pelo
encadeamento de mod_adder`s de a-bits
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
Palavra de 16 bits
mod_adder mod_adder
mod_adder
X mod A Check Symbol, 4 bits
14. 4. Implementação de4. Implementação de Self-Checking AddersSelf-Checking Adders
FemtoJava – Implementação baseada em Código ResidualFemtoJava – Implementação baseada em Código Residual
Implementação de MOD_ADDER
Adder
HAdder
input0
(4 bits)
input1
(4 bits)
carry_in
(1 bit)carry
(1 bit)
4 bits
input0 +A input1
(4 bits)
1 1 0 0
+A 0 1 1 0
0 0 0 1 1
Carry out é sempre 0 em
operações mod_adder
15. 4. Implementação de4. Implementação de Self-Checking AddersSelf-Checking Adders
FemtoJava – Implementação baseada em Código ResidualFemtoJava – Implementação baseada em Código Residual
Implementação de Checker
NXOR
OR
input0
(4 bits)
input1
(4 bits)
4 bits
Checker
(1 bit)
16. 4. Implementação de4. Implementação de Self-Checking AddersSelf-Checking Adders
FemtoJava – Implementação baseada em Código ResidualFemtoJava – Implementação baseada em Código Residual
Declaração dos componentes usa GENERICS, da mesma forma
que os Adders do FemtoJava já utilizavam
Não requer modificações para outros tamanhos de operandos 8, 16, 32
bits
Pode ser trivialmente adaptado para outras versões do FemtoJava, desde
que elas possuam sistema de interrupções
As portas do Adder_residue são as mesmas do Adder do FemtoJava, só foi
inserido um sinal de interrupção a mais, que precisa ser conectado ao pino
da INT0
Operação de subtração com código residual é feita da mesma
forma, pode ser vista como uma soma com entrada
complementada
17. FemtoJava – Implementação baseada em Código ResidualFemtoJava – Implementação baseada em Código Residual
18. 5. Tratamento de Falhas5. Tratamento de Falhas
FemtoJava – Implementação baseada em Código ResidualFemtoJava – Implementação baseada em Código Residual
O tratamento de falhas é feito por software através da chamada de
Interrupção INT0 do FemtoJava
O usuário ganha flexibilidade na decisão sobre o que fazer em caso de falha
Uma das interrupções externas foi retirada, para uso no tratamento de falhas
• Esse problema pode ser corrigido através de modificação no Sistema de
Interrupções do FemtoJava, para contemplar uma nova categoria de
interrupções
• Chamadas de métodos para tratamento de interrupções têm endereços fixos na
memória (são executadas através de invokestatic). Mapeamento de memória
sofreria mudanças
Aplicação não tem conhecimento do componente que falhou, o que dificulta
implementação de rollback de estágio
• Ainda assim a aplicação pode prover mecanismos para rollback
19. 5. Tratamento de Falhas5. Tratamento de Falhas
FemtoJava – Implementação baseada em Código ResidualFemtoJava – Implementação baseada em Código Residual
Funcionamento:
Um dos componentes sinaliza uma falha através do sinal INT0
Execução da aplicação é interrompida e o Sistema de Interrupções do
FemtoJava é acionado
Sistema de Interrupções desvia o fluxo de execução para endereço de
tratamento da interrupção INT0 (fixo na RAM)
Método de tratamento da interrupção é executado através de um
invokestatic
Sistema de Interrupções sinaliza término do tratamento da interrupção
através do sinal INTA
Fluxo de execução é retomado
20. 5. Tratamento de Falhas5. Tratamento de Falhas
FemtoJava – Implementação baseada em Código ResidualFemtoJava – Implementação baseada em Código Residual
Todas as interrupções do FemtoJava podem ser desabilitadas, individual ou
globalmente
Nesse caso, todo o sistema de codificação e verificação de check symbol
continua ativo, mas nada é feito após a sinalização de falha
Registrador IE
Registrador IP
21. 5. Tratamento de Falhas5. Tratamento de Falhas
FemtoJava – Implementação baseada em Código ResidualFemtoJava – Implementação baseada em Código Residual
No SASHIMI, a especificação do tratamento de falhas é feito
através da implementação do método
public void int0Method()
A habilitação das interrupções é feita através dos métodos
FemtoJavaInterruptSystem.globalEnable();
FemtoJavaInterruptSystem.enable(1);
22. 6. Conclusões e Trabalhos Futuros6. Conclusões e Trabalhos Futuros
FemtoJava – Implementação baseada em Código ResidualFemtoJava – Implementação baseada em Código Residual
A validação foi parcial, através de injeção de falhas nos
componentes, mas precisaria ser mais ampla
A validação não foi feita seguindo o fluxo SASHIMI completo (da
especificação Java ao microcontrolador)
A implementação do Encoder não está genérica o suficiente para
ser utilizada com qualquer tamanho de palavra e de check symbol.
Especificamente só está adequada para dados com 4 vezes o
tamanho do check symbol
A implementação do Equality Checker poderia ser melhorada,
pois é simples
23. 6. Conclusões e Trabalhos Futuros6. Conclusões e Trabalhos Futuros
FemtoJava – Implementação baseada em Código ResidualFemtoJava – Implementação baseada em Código Residual
O sistema de interrupções poderia ser modificado para incluir uma
nova categoria de interrupções
Implica em modificar o mapeamento de memória
Implica em modificar o ambiente SASHIMI
Implementação de verificação da RAM
Código Residual não seria o mais adequado nesse caso
Endereçamento dos componentes, para identificação desses no
tratamento de falhas
Facilitaria rollback de estágio
Implementação de Totally Self-Checking Checkers
24. Avizienis, A. (1971). “Arithmetic codes: Cost and effectiveness studies for application in digital systems design”,
IEEE Trans. Comput., Vol. C-20, No. 11, pp 1322-1331
Avizienis, A. (1973). “Arithmetic algorithms for error-coded operands”, IEEE Trans. Comput. Vol C-22, No. 16,
pp. 567-572
Mattos, Julio C. B.; Carro, Luigi. (2002). “Efficient Architecture for FPGA-based Microcontrollers”. Porto Alegre
Nikolos, D.; Paschalis, A.M.; Philokyprou, G. (1998). "Efficient design of totally self-checking checkers for all low-
cost arithmetic codes", In Computers, IEEE Transactions on , Volume: 37 , Issue: 7 , Pages:807 – 814
Mandelbaum, D. (1967). "Arithmetic codes with large distance", In Information Theory, IEEE Transactions on ,
Volume: 13 , Issue: 2 , pp. 237-242
Carro, L.; Mattos, J.C.B.;Krapf, R.C.; Spellmeier, G. (2002). “Manual do SASHIMI”, disponível em
http://www.inf.ufrgs.br/sashimi/
Bibliografia ConsultadaBibliografia Consultada
FemtoJava – Implementação baseada em Código ResidualFemtoJava – Implementação baseada em Código Residual