Você está na página 1de 61

UNIVERSIDADE FEDERAL DO CEARÁ

CENTRO DE TECNOLOGIA
DEPARTAMENTO DE ENGENHARIA DE TELEINFORMÁTICA
PROGRAMA DE PÓS-GRADUAÇÃO EM ENGENHARIA DE TELEINFORMÁTICA
MESTRADO ACADÊMICO EM ENGENHARIA DE TELEINFORMÁTICA

MOABE FERREIRA DOMINGOS

FERRAMENTA PARA ANÁLISE E MONITORAMENTO DE ERROS EM


MEMÓRIAS PROTEGIDAS POR ECC

FORTALEZA
2020
MOABE FERREIRA DOMINGOS

FERRAMENTA PARA ANÁLISE E MONITORAMENTO DE ERROS EM MEMÓRIAS


PROTEGIDAS POR ECC

Dissertação apresentada ao Curso de Mestrado


Acadêmico em Engenharia de Teleinformática
do Programa de Pós-Graduação em Engenharia
de Teleinformática do Centro de Tecnologia
da Universidade Federal do Ceará, como
requisito parcial à obtenção do título de mestre
em Engenharia de Teleinformática. Área de
Concentração: Sinais e Sistemas

Orientador: Prof. Dr. Jarbas Aryel Nu-


nes da Silveira

FORTALEZA
2020
Dados Internacionais de Catalogação na Publicação
Universidade Federal do Ceará
Biblioteca Universitária
Gerada automaticamente pelo módulo Catalog, mediante os dados fornecidos pelo(a) autor(a)

D716f Domingos, Moabe Ferreira.


Ferramenta para análise e monitoramento de erros em memórias protegidas por ECC / Moabe Ferreira
Domingos. – 2020.
62 f. : il. color.

Dissertação (mestrado) – Universidade Federal do Ceará, Centro de Tecnologia, Programa de Pós-


Graduação em Engenharia de Teleinformática, Fortaleza, 2020.
Orientação: Prof. Dr. Jarbas Aryel Nunes da Silveira.

1. Códigos Corretores de Erro. 2. Memórias. 3. Tolerância a Falhas. I. Título.


CDD 621.38
MOABE FERREIRA DOMINGOS

FERRAMENTA PARA ANÁLISE E MONITORAMENTO DE ERROS EM MEMÓRIAS


PROTEGIDAS POR ECC

Dissertação apresentada ao Curso de Mestrado


Acadêmico em Engenharia de Teleinformática
do Programa de Pós-Graduação em Engenharia
de Teleinformática do Centro de Tecnologia
da Universidade Federal do Ceará, como
requisito parcial à obtenção do título de mestre
em Engenharia de Teleinformática. Área de
Concentração: Sinais e Sistemas

Aprovada em: 22 de dezembro de 2020

BANCA EXAMINADORA

Prof. Dr. Jarbas Aryel Nunes da Silveira (Orientador)


Universidade Federal do Ceará (UFC)

Prof. Dr. Giovanni Cordeiro Barroso


Universidade Federal do Ceará (UFC)

Prof. Dr. Cesar Augusto Missio Marcon


Pontifícia Universidade Católica do Rio Grande do
Sul (PUCRS)
Este trabalho é inteiramente dedicado à minha
família, que sempre me apoiou e incentivou.
AGRADECIMENTOS

Ao Prof. Dr. Jarbas Aryel Nunes da Silveira por me orientar em minha dissertação.
Ao Prof. Dr. Paulo César Cortez, pela oportunidade e confiança na realização do
mestrado e ao prof. Me. Ricardo Jardel Nunes da Silveira pelo apoio e incentivo
Aos meus amigos, que me incentivaram e me deram forças para conseguir finalizar.
Entre eles, mas não somente, a Alexandra Oliveira, a Marilene Freitas e a Gilderlane Ribeiro.
Agradeço também a valiosas pessoas que me são caras por estarem presentes no
decorrer dessa fase que se finaliza e por tantas outras.
Aos meus amigos e colegas de laboratório, em especial Felipe Gaspar e Harinson
Martins, pela ajuda e parceria nesse período, pois, sem dúvida, foram essenciais para conclusão
deste trabalho .
Aos professores participantes da banca, pelo tempo, sugestões e contribuições provi-
das a este trabalho.
Finalmente à CAPES, pelo apoio financeiro com a manutenção da bolsa de auxílio.
"Transition is always a relief. Destination means
death to me. If I could figure out a way to remain
forever in transition, in the disconnected and
unfamiliar, I could remain in a state of perpetual
freedom."
(David Wojnarowicz)
RESUMO

Devido ao encolhimento dos dispositivos integrados, memórias têm uma alta probabilidade de
apresentar erros em múltiplos bits, corrompendo os dados armazenados, representando uma
preocupação real para aplicações críticas, nas quais a confiabilidade dos dados é uma necessidade.
Assim sendo, algumas técnicas são conhecidas e implementadas com a finalidade de atenuar esse
real problema, entre as mais conhecidas e implementadas estão os códigos corretores de erros.
Esses códigos implementam algoritmos que aumentam a confiabilidade da memória por meio de
técnicas que permitem a identificação e, por vezes, a correção de falhas em células de memória.
Entre os motivos que torna essa técnica tão utilizada está a baixa complexibilidade de sua
implementação. No entanto, avaliar a eficácia desses códigos em nível de hardware pode ser uma
atribuição difícil. Sendo assim, foi proposta a criação de uma ferramenta, denominada Memory
Monitoring Software (MMS), que procura facilitar a análise desses códigos monitorando a
execução de alguns códigos corretores de erros em Memória. A ferramenta ajuda a avaliar o
desempenho desses códigos em memória de forma clara e objetiva, utilizando-se de gráficos e
dados de comparação. Para tanto, são implementados alguns códigos (Hamming, CLC, CLC
estendido e MRSC) no dispositivo microcontrolador TMS570LS0432. Entre os gráficos que
a ferramenta disponibiliza está a da curva de correções que pode ser comparada junto com a
quantidade de erros injetada. Apresenta, também, um comparativo de eficiência entre correções
feitas em cada código, sendo uma ferramenta útil para a análise, ou mesmo estudo, de técnicas
de proteção utilizadas em dispositivos, principalmente os ditos tolerantes a falhas.

Palavras-chave: Códigos Corretores de Erro. Memórias. Tolerância a Falha.


ABSTRACT

Due to the shrinkage of the integrated devices, memories have a high probability of presenting
multiple bit upset, corrupting the stored data, representing a real concern for critical applications,
in which data reliability is a necessity. Therefore, some techniques are known and implemented in
order to mitigate this real problem, among the best known and implemented are error-correcting
codes. These codes implement algorithms that increase memory reliability through techniques
that allow the identification and sometimes the correction of faults in memory cells. Among the
reasons that make this technique so used are the low complexity of its implementation. However,
assessing the effectiveness of these codes at the hardware level can be a difficult assignment.
Therefore, I propose the creation of a tool that seeks to facilitate the analysis of these codes
by monitoring the execution of some Error-Correcting Codes in Memory. The tool helps to
evaluate the performance of these codes in memory in a clear and objective way, using graphs
and comparison data. For that, some codes (Hamming, CLC, extended CLC and MRSC) are
implemented in the microcontroller device TMS570LS0432. Among the graphics provided by
the tool is the correction curve that can be compared with the number of errors injected. It also
presents a comparative of efficiency between corrections made in each code. Being a useful tool
for the analysis, or even study, of protection techniques used in devices, mainly the so-called
fault tolerant.

Keywords: Error Correcting Codes. Memory. Fault Tolerance.


LISTA DE FIGURAS

Figura 1 – Efeito causado pela passagem de um íon de alta energia em um transistor . . 19


Figura 2 – Partícula de carga atingindo uma superfície de silício e gerando um pulso de
corrente . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20
Figura 3 – Efeito do raio cósmico à medida que células diminuem fisicamente de tamanho 21
Figura 4 – Múltiplos bits induzidos por raio cósmico . . . . . . . . . . . . . . . . . . 21
Figura 5 – Blindagem Eletromagnética . . . . . . . . . . . . . . . . . . . . . . . . . . 22
Figura 6 – Interleaving em memória . . . . . . . . . . . . . . . . . . . . . . . . . . . 23
Figura 7 – Ilustração de uma Redundância Modular Tripla . . . . . . . . . . . . . . . 24
Figura 8 – Matriz de estrutura do CLC para 16 bits . . . . . . . . . . . . . . . . . . . 29
Figura 9 – Exemplo de codificação/decodificação CLC . . . . . . . . . . . . . . . . . 32
Figura 10 – Estrutura do código CLC, utilizando Hamming Estendido (8,13) para 16 bits 33
Figura 11 – Estrutura do código CLC, utilizando Hamming Estendido (2,6) para 16 bits 34
Figura 12 – Modelo de dados codificados MRSC . . . . . . . . . . . . . . . . . . . . . 35
Figura 13 – Descreve os principais elementos da operação de paridade do codificador
MRSC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37
Figura 14 – Regiões dos bits de dados do MRSC . . . . . . . . . . . . . . . . . . . . . 37
Figura 15 – Diagrama de blocos da decodificação MRSC . . . . . . . . . . . . . . . . . 38
Figura 16 – Exemplo de dado codificado com MRSC . . . . . . . . . . . . . . . . . . . 39
Figura 17 – Exemplo de dado decodificado com MRSC . . . . . . . . . . . . . . . . . . 39
Figura 18 – Visão geral da solução proposta . . . . . . . . . . . . . . . . . . . . . . . . 40
Figura 19 – Padrões de erros em células adjacentes . . . . . . . . . . . . . . . . . . . . 42
Figura 20 – Exemplo de padrões de erros em células adjacentes implementados e não
implementados . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43
Figura 21 – Rotina de codificação, inserção de erro e decodificação no microcontrolador 43
Figura 22 – Buffer de dados . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44
Figura 23 – Armazenamento dos dados na base de dados . . . . . . . . . . . . . . . . . 44
Figura 24 – Interface do software . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45
Figura 25 – Interface de controle . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 47
Figura 26 – Barra de informação em tempo real . . . . . . . . . . . . . . . . . . . . . . 48
Figura 27 – Desempenho com todos os quatros ECC . . . . . . . . . . . . . . . . . . . 50
Figura 28 – Desempenho utilizando apenas CLC . . . . . . . . . . . . . . . . . . . . . 51
Figura 29 – Desempenho utilizando apenas CLC estendido . . . . . . . . . . . . . . . . 52
Figura 30 – Desempenho utilizando apenas MRSC . . . . . . . . . . . . . . . . . . . . 52
Figura 31 – Desempenho utilizando apenas Hamming . . . . . . . . . . . . . . . . . . 53
Figura 32 – Desempenho utilizando os 60 últimos minutos de dados . . . . . . . . . . . 53
Figura 33 – Desempenho utilizando os 120 últimos minutos de dados . . . . . . . . . . 54
Figura 34 – Desempenho utilizando os 240 últimos minutos de dados . . . . . . . . . . 54
Figura 35 – Desempenho utilizando os 360 últimos minutos de dados . . . . . . . . . . 55
LISTA DE TABELAS

Tabela 1 – Posição de correção . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27


Tabela 2 – Estados do Hamming Estendido (M, N+1) . . . . . . . . . . . . . . . . . . 28
Tabela 3 – Tabela de correção do CLC . . . . . . . . . . . . . . . . . . . . . . . . . . 32
Tabela 4 – Critério para seleção de região . . . . . . . . . . . . . . . . . . . . . . . . 38
LISTA DE ABREVIATURAS E SIGLAS

MMS Memory Monitoring Software


SEE Single Event Effect
SRAM Static Random Access Memory
SBU Single Bit Upset
SEC-DED Single Error Correction - Double Error Detection
MBU Multiple Bit Upset
ECC Error Correction Code
RAM Random Access Memory
TID Total Ionizing Dose
SET Single Event Transient
SEU Single Event Upset
SEFI Single Event Functional Interrupt
TMR Triple Modular Redundancy
XOR Exclusive Or
CLC Column-Line-Code
MRSC Matrix Region Section Code
IE Injetor de Erros
CSV Comma Separated Values
PDF Portable Document Format
SUMÁRIO

1 INTRODUÇÃO . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
1.1 Motivação . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
1.2 Objetivos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17
1.3 Organização . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17
2 SINGLE EVENT EFFECTS . . . . . . . . . . . . . . . . . . . . . . . . . 18
2.1 Conceitos básicos de SEE . . . . . . . . . . . . . . . . . . . . . . . . . . 18
2.2 SEE em memórias . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20
2.2.1 SBU e MBU . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20
2.2.2 Técnicas para proteção de memórias contra SEE . . . . . . . . . . . . . . 22
2.2.2.1 Blindagem eletromagnética . . . . . . . . . . . . . . . . . . . . . . . . . . 22
2.2.2.2 Interleaving . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22
2.2.2.3 Redundância Modular Tripla . . . . . . . . . . . . . . . . . . . . . . . . . 23
2.2.2.4 Códigos Corretores de Erros . . . . . . . . . . . . . . . . . . . . . . . . . 23
3 CÓDIGOS CORRETORES . . . . . . . . . . . . . . . . . . . . . . . . . 25
3.1 Código Hamming . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25
3.1.1 Codificação e Decodificação Hamming (4,7) . . . . . . . . . . . . . . . . . 25
3.1.2 Hamming Estendido . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28
3.2 Código CLC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29
3.2.1 Codificação e Decodificação CLC (16,40) . . . . . . . . . . . . . . . . . . 29
3.2.2 Exemplo de correção por CLC . . . . . . . . . . . . . . . . . . . . . . . . 32
3.3 Código CLC Estendido . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33
3.3.1 Codificação e Decodificação CLC Estendido . . . . . . . . . . . . . . . . . 33
3.4 Código MRSC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34
3.4.1 Codificação e decodificação MRSC . . . . . . . . . . . . . . . . . . . . . . 34
4 METODOLOGIA . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40
4.1 TMS570LS0432 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40
4.2 Injeção de falhas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41
4.3 Software de Monitoramento . . . . . . . . . . . . . . . . . . . . . . . . . 44
4.3.1 Banco de dados . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44
4.3.2 Interface . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45
4.3.2.1 Gráficos gerados . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46
4.3.2.2 Tabela de desempenho . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46
4.3.2.3 Opções de controle . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46
4.3.2.4 Código corretor de erro . . . . . . . . . . . . . . . . . . . . . . . . . . . . 47
4.3.2.5 Dados com indicação dos bits comprometidos . . . . . . . . . . . . . . . . 47
4.3.2.6 Barra de Menus . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 48
5 RESULTADOS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 49
5.1 Análise com todos os ECC . . . . . . . . . . . . . . . . . . . . . . . . . . 49
5.2 Análise dos ECC individualmente . . . . . . . . . . . . . . . . . . . . . . 51
5.3 Alteração do tempo de coleta de amostra . . . . . . . . . . . . . . . . . . 51
5.4 Relatório . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 55
6 CONCLUSÕES E TRABALHOS FUTUROS . . . . . . . . . . . . . . . 56
REFERÊNCIAS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 57
15

1 INTRODUÇÃO

A ocorrência de Single Event Effect (SEE) acabou se tornando uma preocupação


crucial para a confiabilidade dos dispositivos eletrônicos, principalmente quando se fala em
circuitos críticos, tais como os utilizados em missões espaciais e dispositivos médicos (FER-
REYRA et al., 2005; GURUN et al., 2012), e é ainda mais notável quando são expostos a
ambientes contendo alta presença de radiação (HAZUCHA; SVENSSON, 2001), destacando
uma preocupação principalmente com a Static Random Access Memory (SRAM) (KOHLER
et al., 2017). A ionização direta ou recuo nuclear está entre as principais fontes de radiação
responsáveis por afetar os circuitos integrados, provocando falhas transientes, especialmente
nesses dispositivos de memória, que podem acarretar diminuição da confiabilidade dos sistemas
(HENTSCHKE et al., 2002; NICOLAIDIS, 2011). Com isso, o uso de códigos corretores de
erro é bastante utilizado em memórias a fim de tratar essas falhas transientes, tendo em vista seu
baixo custo de implementação em relação a outras técnicas (CHEN; HSIAO, 1984) e levando
em consideração as sérias consequências que um erro em uma aplicação crítica pode levar, se
não tratado (LABEL et al., 2000).
Um aspecto importante no desenvolvimento de sistemas que demandam alta confia-
bilidade é, sem dúvida, sua validação. Para se alcançar uma certa confiança, qualquer sistema
deve ser submetido a uma intensa validação. E o que leva à confiança no sistema é o teste
(LITTLEWOOD, 1992). Uma das técnica que vem sendo reconhecida e aceita como método de
validação de mecanismos de tolerância a falhas é a injeção de falhas. A injeção pode ser feita de
diversas formas, dependendo do nível de abstração do sistema alvo e do tipo de falha injetada
(MARTINS; AMBROSIO, 2003). Neste trabalho, foi empregada a injeção de falha por software,
representado as falhas que podem ocorrer na memória.

1.1 Motivação

A proteção de dispositivos de memória contra soft errors, que é um tipo de erro


em que o sinal ou dado é alterado, é comumente assegurada pela ajuda de códigos de correção
de erro causadas por uma simples mudança de status do bit, denominado Single Bit Upset
(SBU), bem como por códigos de correção que detectam e corrigem um erro e, ao mesmo tempo,
detectam um duplo erro, Single Error Correction - Double Error Detection (SEC-DED) (CHEN;
HSIAO, 1984; HAMMING, 1950). Entretanto, esses códigos não conseguem corrigir múltiplos
16

erros (GHERMAN et al., 2011), isso porque quanto maior o nível de integração dos circuitos
integrados, maior a frequência de ocorrências de falhas transientes múltiplas em memórias,
também chamadas de Multiple Bit Upset (MBU) (CHUGG et al., 2005; RADAELLI et al.,
2006).
Dentre as possíveis técnicas capazes de tratar esse problema está a técnica de emba-
ralhamento de bits - interleaving (CUI; ZHANG, 2013). Ela consiste em reordenar a informação
em regiões diferentes de memória com a finalidade de dificultar a ocorrência de múltiplos erros
em dados pertencentes a uma mesma mensagem armazenada. Contudo, esse método pode
ocasionar um atraso relevante para os processos de escrita e leitura na memória, causando um de-
caimento na performance do sistema (DUTTA; TOUBA, 2007). Tendo em vista esse empecilho,
a utilização de robustos códigos corretores se faz necessário. Porém, deve-se atentar para que
o código não comprometa em demasia os recursos do sistema computacional, ou seja, deve-se
sempre procurar aumentar a detecção e correção de erros e diminuir seu custo computacional,
pois esses critérios são importantes em aplicações críticas (SAKATA et al., 2007).
Certas aplicações demandam um alto desempenho e confiabilidade do sistema,
tais como os que envolvem dispositivos voltados para ambientes hostis. Um exemplo desses
ambientes refere-se aos que são projetados para atuar em missões espaciais, um ambiente em
que exige uma alta robustez dos dispositivos, impondo testes de integração completos antes de
seu lançamento. Portanto, a validação da capacidade de um código de correção de erro, em
inglês Error Correction Code (ECC), em nível de hardware se faz extremamente necessária.
A escolha do ECC que atenda aos requisitos de robustez e confiança, aliada aos requisitos do
projeto, demanda um exame de desempenho adequado. Assim, uma ferramenta que contribua
para facilitar a extração e análise do desempenho de um ECC pode ser útil para melhorar o tempo
de projeto.
Como soluções para os problemas descritos, foi proposta a criação de um soft-
ware, chamado Memory Monitoring Software (MMS), designado para ajudar na avaliação
de performance de alguns ECC, checando a eficiência dos erros identificados e corrigidos, o
qual é implementado para proteger um dispositivo de memória. A ferramenta foi desenvol-
vida em Python e tem a implementação de alguns ECC embarcados em um microcontrolador
TMS570LS0432. Para emular as falhas ocorridas na memória, um injetor de erros foi embarcado
no dispositivo, de forma que padrões de falhas são injetados.
Os códigos corretores de erros utilizados neste trabalho para proteger a Random
17

Access Memory (RAM) do microcontrolador foram:


– Hamming Estendido;
– CLC;
– CLC Estendido;
– MRSC.
A ferramenta controla, a partir de sua interface gráfica, quais ECC serão utilizados,
bem como outras formas de combinação, tendo em vista que a comparação dos resultados de
performance também é um resultado a ser analisado.

1.2 Objetivos

O objetivo deste trabalho é desenvolver uma ferramenta que analise a eficiência e


a robustez dos códigos corretores de erros inseridos em dispositivos de memória, visando à
detecção e à correção de erros em dados armazenados em memória RAM. Assim, a ferramenta
recebe e trata os resultados obtidos, por meio de um canal de comunicação serial, de forma que
sejam melhor apresentados esses dados sempre visando à simplisidade e a objetividade a fim de
que os analistas venham a tomar decisões mais eficientes.

1.3 Organização

Este trabalho estrutura-se da seguinte forma:


No Capítulo 2, são apresentados conceitos básicos relativos aos SEE focando nos
tipos mais importantes e que afetam as memórias, bem como as principais técnicas aplicadas
em sua proteção. O Capítulo 3 apresenta os 4 códigos corretores de erros utilizados neste
trabalho. No Capítulo 4, é mostrada a metodologia utilizada, bem como a estrutura do software
proposto para análise dos ECC indicados por este trabalho. O Capítulo 5 descreve e discute
os experimentos realizados, além de apresentar os resultados obtidos. Por fim, o Capítulo 6
apresenta as conclusões e os trabalhos futuros.
18

2 SINGLE EVENT EFFECTS

A evolução das tecnologias aplicadas aos dispositivos integrados leva à redução


das tensões de threshold com altas frequências de operações. Essa evolução trouxe maior
suscetibilidade a falhas transientes e permanentes. Em um cenário que envolve aplicações
críticas em ambientes hostis, tal qual no ambiente espacial, tornou as memórias mais propensas
a interferências eletromagnéticas devido a partículas carregadas geradas pelas explosões solares
(RADAELLI et al., 2006).
Para ambientes espaciais, consideramos duas classes de efeitos causados por interfe-
rências eletromagnéticas (LABEL et al., 1996):
– Dose total ionizante ou Total Ionizing Dose (TID);
– Eventos singulares ou Single Event Effects (SEE).
TID é o efeito que causa a degradação a longo prazo dos circuitos eletrônicos
devido ao acúmulo de carga depositada em um material . A mais, destaca-se que dispositivos
eletrônicos sofrem efeitos de radiação de longo prazo, principalmente devido a elétrons e prótons
(BARNABY, 2007). A proteção do dispositivo pode ajudar a diminuir esse efeito. Os elétrons
podem ser atenuados de forma eficaz pela blindagem de alumínio, mesmo em altas energias.
Entretanto, ele é ineficaz para os prótons de alta energia, que provocam falha permanente do
dispositivo.
SEE é o efeito transitório que é induzido pela invasão de uma única partícula
carregada por meio do silício. É causado por uma única partícula carregada que atinge o material,
ioniza-o e provoca um pulso de corrente, podendo causar falhas transientes ou permanentes
(O’BRYAN et al., 2000; HEIJMEN, 2011).

2.1 Conceitos básicos de SEE

Esses efeitos podem causar danos sérios aos dispositivos. Na Figura 1, pode-se
observar que o íon de alta energia, ao incidir transversalmente em uma região sensível do
transistor (Figura 1(a)), produz um desequilíbrio de cargas que induz a criação de um caminho
com formato cilíndrico temporário, em que as cargas são rapidamente coletadas pelo campo
elétrico dessa região (Figura 1(b)). O processo de coleção de cargas é chamado de drift. O funil
formado é desfeito e os íons resultantes são equilibrados pelo processo de difusão (Figura 1(c)).
O gráfico da Figura 1 ilustra o comportamento do pulso de corrente gerado após o deslocamento
19

líquido das cargas e as respectivas correntes de deriva e de difusão. (BAUMANN, 2005).

Figura 1 – Efeito causado pela passagem de um íon de alta energia em um transistor

Fonte: (BAUMANN, 2005)

Podemos dividir os eventos que causam o mau funcionamento dos componentes em :


– Hard Errors;
– Soft Errors.
Os chamados Hard Errors causam um mau funcionamento permanente. Já os Soft
Errors são temporários (HEIJMEN, 2011) e podem ser classificados como se segue:
– Single Event Transient (SET). Quando partículas atingem circuitos podendo, assim, causar
inversão de valor de tensão. Isso acontece quando uma partícula afeta uma porta da lógica
combinacional do circuito, criando uma falha (LOVELESS et al., 2012).
– Single Event Upset (SEU). São produzidas pela inversão ou alteração na lógica de bit
único, do inglês bit-flip, da memória ou registrador. Quando uma partícula carregada
atinge um elemento do circuito integrado resulta em uma trilha ionizada densa na região
que, por sua vez, causa um pulso de corrente transiente (BESSOT, 1993). A Figura 2
ilustra esse evento.
Observa-se que o evento SEU pode apresentar-se em 3 formas:
– Single Bit Upset (SBU). Inversão de apenas 1 bit armazenado em uma célula de memória;
– Multiple Bit Upset (MBU). Inversão de múltiplas células de memórias;
– Single Event Functional Interrupt (SEFI). Coloca o dispositivo num tempo de interrupção
temporária ou para um estado indefinido.
É importante observar que, segundo pesquisas envolvendo efeitos de partículas de
energia, a ocorrência de SEE podem ser observadas ao nível do mar, ao contrário do que se
imaginava. Trabalhos envolvendo efeitos de partículas de energia em dispositivos aos níveis do
20

Figura 2 – Partícula de carga atingindo uma superfície de silício e gerando um pulso de corrente

Fonte: (O’BRYAN et al., 2000)

mar e atmosférico começaram a ser apresentados em meados da década de 1990 (EUGENE-


NORMAND, 2011; HEIJMEN, 2011) e experimentos com memórias identificaram que no nível
do mar é possível observar uma presença significativa de raios cósmicos capazes de causar falhas
em memórias (O’GORMAN, 1994). Ou seja, tais efeitos devem ser levados em consideração
não apenas em ambientes fora da atmosfera, mais suscetíveis a intercorrências eletromagnéticas,
mas também em outros ambientes considerados menos hostis.

2.2 SEE em memórias

As memórias estão entre os componentes eletrônicos com maior suscetibilidade de


ocorrências de efeitos causados pelo impacto de partículas ionizadas (Baumann, 2002). No caso
de ocorrências desse tipo, o impacto de uma única partícula pode acarretar falhas em todo um
sistema. Nesta seção, são apresentados os principais SEE que afetam memórias em aplicações
que são consideradas críticas.

2.2.1 SBU e MBU

A ocorrência de upsets em bits de memória é algo que ocorre e, por consequência,


se observa desde as primeiras aplicações críticas que envolvem tais dispositivos (GUENZER et
al., 1982). Assim sendo, pela sua alta ocorrência, esse foi um dos principais objetos de estudo
em aplicações espaciais, inclusive sendo considerado em projetos de desenvolvimento para
21

componentes ditos tolerantes a SEU (GUENZER et al., 1982).


À medida que as tecnologias aplicadas aos circuitos foram diminuindo, essa mesma
partícula de carga passou a afetar não somente uma, mas várias células fisicamente próximas. A
Figura 3 mostra esse efeito. Por consequência, procurou-se identificar, por meio de estudos, os
principais padrões de células que são diretamente afetadas durante essas ocorrências (RADAELLI
et al., 2006).

Figura 3 – Efeito do raio cósmico à medida que células diminuem fisicamente de tamanho

Fonte: (LI et al., 2017)

A Figura 4 representa a incidência de um raio cósmico, representado pela área


sombreada, em um chip de memória. É possível ver na imagem que duas células são afetadas
por esse raio. Por consequência, diminuindo o espaçamento físico entre essas células, uma maior
quantidade seria afetada pelo mesmo raio.

Figura 4 – Múltiplos bits induzidos por raio cósmico

Fonte: (SATOH et al., 2000)


22

2.2.2 Técnicas para proteção de memórias contra SEE

2.2.2.1 Blindagem eletromagnética

A blindagem eletromagnética é uma espécie de escudo protetor que impede a livre


passagem das ondas eletromagnéticas com um material condutivo ou magnético, de modo que as
cargas se depositem nele e não no componente ao qual se deseja proteger. A Figura 5 ilustra esse
escudo protetor.

Figura 5 – Blindagem Eletromagnética

Fonte: Elaborado pelo autor.

Uma blindagem robusta em dispositivo para missões espaciais possui impacto im-
portante na diminuição de SEE (SMITH, 1995). Entretanto, observa-se que, apesar de uma
blindagem eficiente, nêutrons passariam pelo condutor, acarretando problemas, logo tornando a
técnica pouco eficiente (ARGYRIDES et al., 2010).

2.2.2.2 Interleaving

A técnica de interleaving em memórias consiste no embaralhamento dos endereços de


memória a fim de evitar a ocorrência de erros adjacentes na mesma palavra ou região de memória.
A Figura 6 representa a técnica de interleaving em uma memória, em que é apresentado o
entrelaçamento de quatro palavras (W0 a W3 ), cada uma composta por três bits. O entrelaçamento
23

faz com que cada bit da palavra seja afastado de três bits de outras palavras. As linhas em cinza
associam os bits de cada palavra.

Figura 6 – Interleaving em memória

Fonte: Elaborado pelo autor.

A técnica de interleaving é usada junto com códigos corretores de erros para diminuir
as chances de múltiplos erros que se apresentam em memórias (RADAELLI et al., 2006; SATOH
et al., 2000; LAI et al., 2010).

2.2.2.3 Redundância Modular Tripla

A redundância modular tripla, do inglês Triple Modular Redundancy (TMR), é uma


técnica de tolerância a falhas proposta por Von Neumann, aplicada em circuitos eletrônicos que
consistem em replicar um componente eletrônico, ou seja, a unidade de hardware é triplicada,
fazendo com que o trabalho seja feito em paralelo. Essas unidades geram entradas para um
circuito de votação que decide, a partir do voto da maioria, uma saída. Ou seja, se um dos
sistemas falhar, os outros dois podem estar corretos e mascarar o erro.
Na Figura 7, observa-se o entrelaçamento de quatro palavras. A saída é feita a partir
de uma votação da maioria, assim pode garantir a confiabilidade da informação. Entretanto, é
importante ressaltar que a implementação de um TMR pode acarretar um aumento do custo tanto
físico, quanto financeiro de um projeto.

2.2.2.4 Códigos Corretores de Erros

Uma das técnicas que é mais utilizada em sistemas ditos tolerantes a falhas é o
código de correção de erro, do inglês Error Correction Code (ECC). O ECC procura detectar e
corrigir erros na informação utilizando operações lógicas. Essa técnica, comparada às anteriores,
tem baixo custo de aplicação (CHEN; HSIAO, 1984). Cumpre destacar que essa técnica já
24

Figura 7 – Ilustração de uma Redundância Modular Tripla

Fonte: Elaborado pelo autor.

era utilizada em sistemas de transmissão de dados com o intuito de garantir a proteção e a


confiabilidade dos dados (VARGHESE et al., 2013).
Essa técnica, apesar de possuir vantagem em relação às outras, apresenta lógicas
muito complexas, o que implica a utilização de muitos recursos de computação para operar. A
mais, os impactos em área, potência e atraso podem prejudicar o desempenho do sistema em
aplicações que, geralmente, já possuem recursos limitados (CARDARILLI et al., 2005).
Como o foco deste trabalho se refere, entre outros, aos códigos corretores de erros,
no próximo capítulo, são apresentados os ECC utilizados neste trabalho.
25

3 CÓDIGOS CORRETORES

Códigos corretores de erros são algoritmos que possuem a finalidade de identificar e,


eventualmente, corrigir erros que porventura tenham ocorrido na informação salva na memória.
Atualmente, com o intuito de garantir a máxima fidelidade dessas informações, tem havido uma
ampla utilização desses algoritmos nas mais diversas áreas, tais quais: aplicações espaciais,
sistemas de telecomunicações, sistemas embarcados, entre outros. No caso específico dos
sistemas embarcados, seu uso tem aumentado a cada dia, impulsionado principalmente pelo seu
baixo custo de implementação em relação a outros métodos que garantem um sistema tolerante a
falhas.

3.1 Código Hamming

Richard Wesley Hamming desenvolveu um dos primeiros ECC para aplicação em


sistemas computacionais. Chamado de Código Hamming Ham (M, N), seu algoritmo tem o
objetivo principal de corrigir erros simples (HAMMING, 1950) e é caracterizado pelos pontos
observados a seguir:
– M representa o número de bits de dados, e N o número de bits totais;
– N está definido por meio da equação N = M + k, em que k representa o número de bits de
Hamming;
– A distância do código de Hamming é 3, dessa forma ele detecta e corrige 1 erro;
– Um código de Hamming precisa respeitar as relações apresentadas em 3.1 e 3.2.

2k ≥ k + M + 1 (3.1)

M2N
2 ≥ (3.2)
N +1

3.1.1 Codificação e Decodificação Hamming (4,7)

O código Hamming (4,7) é um algoritmo para correções de erros lineares, pois


codifica 4 bits de dados em 7 bits, sendo os 3 bits a mais destinados à paridade. Seu algoritmo
26

tem início na determinação de uma matriz geradora G que é encontrada a partir da Equação 3.3

G = [Im Q] (3.3)

Em que Im é uma matriz identidade quadrada de ordem 2m − m − 1, Q é a matriz


formada por 2m − m − 1 colunas em que há dois ou mais vetores de peso dois ou superior, e m
é o número de bits de verificação de paridade (MOREIRA; FARRELL, 2006), o qual, no caso
específico, é 3.
Logo, considerando os valores possíveis para os vetores de peso dois ou maior que
dois, tem-se que Q corresponde: 000, 001, 010, 011, 100, 101, 110, 111, em que a matriz
geradora será

1 0 0 0 1 1 1
0 1 0 0 1 1 0
G(4, 7) = (3.4)
0 0 1 0 1 0 1
0 0 0 1 0 1 1

Com a matriz geradora G é possível realizar o processo de codificação do vetor. Para


realizar esse processo de decodificação, é necessário realizar o produto entre o vetor ao qual se
deseja codificar M (1,4) e a matriz geradora G (4,7).

N = M·G (3.5)

Para exemplificar essa operação, pode-se considerar M = 1010 para o obter como
resultado

1 0 0 0 1 1 1
0 1 0 0 1 1 0
N= 1 0 1 0 · (3.6)
0 0 1 0 1 0 1
0 0 0 1 0 1 1

N= 0 1 0 1 0 1 0 (3.7)
27

Já para decodificar a palavra codificada o processo deve validar a mensagem à


procura de erros que porventura possam ter ocorrido, por exemplo, durante uma transmissão
de dados. A Equação 3.8 apresenta a forma segundo a qual o algoritmo faz essa verificação.
Basicamente, é o produto entre a matriz de paridade H e a mensagem codificada N, em que H é
definido como 3.9.

M = H · NT (3.8)

H = QT Im (3.9)

Se o vetor resultante tiver como resultado apenas zeros, significa que a mensagem
está íntegra. Caso contrário, ela estará comprometida, necessitando, assim, de correção, sendo
que a correção se dará pela realização da operação Exclusive Or (XOR) entre a mensagem
codificada e o vetor de correção apresentado na Tabela 1.

Tabela 1 – Posição de correção


H · NT Vetor de correção
000 0000000
001 0000001
010 0000010
011 1000000
100 0000100
101 0100000
110 0010000
111 0001000
Fonte: Elaborado pelo autor.

MCORRIGIDO = MCODIFICADA ⊕VCORREO (3.10)


28

A fim de exemplificar esse processo, temos

1
0
1 1 1 0 1 0 0 1
M= 1 1 0 1 0 1 0 · 0 (3.11)
1 0 1 1 0 0 1 0
1
0

0
M= 0 (3.12)
0

3.1.2 Hamming Estendido

O código de Hamming Estendido (M, N+1) é formado pela adição de um bit em


que o valor é obtido a partir da paridade entre os bits da mensagem. Essa adição da paridade
incrementa sua distância de Hamming para 4, podendo corrigir 1 erro e tendo capacidade de
detectar 2 erros. A Tabela 2 apresenta os estados a partir dos resultados de checagem.

Tabela 2 – Estados do Hamming Estendido (M, N+1)


Síndrome Bits de Hamming Síndrome Paridade Estado
Sem Erro Sem Erro Sem Erro
Sem Erro Erro Erro Simples na Paridade
Erro Sem Erro Erro Simples
Erro Erro Erro Duplo
Fonte: Elaborado pelo autor.

Vale ressaltar que a paridade consiste em adicionar um bit, chamado de bit de


paridade, após ou antes da sequência de bits. O bit adicional é calculado a partir da operação
XOR ⊕ entre os bits da mensagem original. Tomando como exemplo M = [1 0 0 0], temos:
– Para M, o bit de paridade é calculado seguindo a fórmula 1 ⊕ 0 ⊕ 0 ⊕ 0 = 1, obtendo,
assim, a mensagem codificada 10001
Para a verificação de ocorrência de erros, é feito um novo cálculo do bit de paridade.
Em seguida, é feita uma operação com a paridade armazenada. Em caso de operação resultar em
29

nulo, indicará que um erro foi detectado.

3.2 Código CLC

O Column-Line-Code (CLC) (CASTRO et al., 2016; SILVA et al., 2017; SILVA et


al., 2018) foi desenvolvido utilizando os conceitos de Hamming Estendido e Paridade, a fim de
formar um código matricial capaz de corrigir múltiplos erros. O algoritmo utiliza uma tabela de
correção que determina o tipo de erro que ele corrigirá, sendo a tabela gerada a partir do valor
coletado das síndromes.

3.2.1 Codificação e Decodificação CLC (16,40)

O código CLC (16,40) codifica 16 bits de dados para uma mensagem de 40 bits. A
Figura 8 ilustra o formato de uma mensagem CLC codificada.

Figura 8 – Matriz de estrutura do CLC para 16 bits

Fonte: Elaborado pelo autor.

Na Figura 8, tem-se 16 bits de dados (D), 12 bits de checagem (C), 4 bits de paridade
da palavra (PR ) e 8 bits de paridade da coluna. A disposição dos bits codificados foi orientada de
acordo com o código Matrix (16,32) (COSTAS et al., 2007).
Na codificação CLC, os bits de dados são divididos em grupos de 4 bits, sendo que
esses grupos são codificados utilizando Hamming Estendido (4,8). A mais, é importante destacar
que, nos bits gerados nesse algoritmo de codificação, obtemos os 3 bits de checagem C e 1 bit
de paridade Pr. Por fim, a última linha da matriz será formada pelos bits de paridade da coluna
,utilizando a operação XOR, importante para detecção de padrões de erros mais complexos.
30

Para o cálculo dos bits de checagem, são utilizadas as relações:

C0,3,6,9 = D4·(i−1)+2 ⊕ D4·(i−1)+3 ⊕ D4·(i−1)+4 (3.13)

C1,4,7,10 = D4·(i−1)+1 ⊕ D4·(i−1)+3 ⊕ D4·(i−1)+4 (3.14)

C2,5,8,11 = D4·(i−1)+1 ⊕ D4·(i−1)+2 ⊕ D4·(i−1)+4 (3.15)

em que i varia de 1 a 4.
Já os bits Pr são calculados da seguinte forma:

Pri−1 = D4·(i−1)+1 ⊕ D4·(i−1)+2 ⊕ D4·(i−1)+3 ⊕C3·(i−1)+1 ⊕C3·(i−1)+2 ⊕C3·(i−1)+3 (3.16)

Por fim, a última linha será formada pelo bits de paridade de coluna gerados como
se segue:

Pc0 = D0 ⊕ D4 ⊕ D8 ⊕ D12 (3.17)

Pc1 = D1 ⊕ D5 ⊕ D9 ⊕ D13 (3.18)

Pc2 = D2 ⊕ D6 ⊕ D10 ⊕ D14 (3.19)

Pc3 = D3 ⊕ D7 ⊕ D11 ⊕ D15 (3.20)

Pc4 = C0 ⊕C3 ⊕C6 ⊕C9 (3.21)


31

Pc5 = C1 ⊕C4 ⊕C7 ⊕C10 (3.22)

Pc6 = C2 ⊕C5 ⊕C8 ⊕C11 (3.23)

Pc7 = Pr0 ⊕ Pr1 ⊕ Pr2 ⊕ Pr3 (3.24)

Para o processo de decodificação do CLC é feito o cálculo das síndromes dos bits
de redundância. Para tal, o primeiro passo é gerar as síndromes dos bits de checagem (SC), de
paridade da coluna (SPc) e de paridade de linha (SPr), utilizando-se as Equações 3.25, 3.26 e
3.27

SC = C ⊕ RC (3.25)

SPc = Pc ⊕ RPc (3.26)

SPr = Pr ⊕ RPr (3.27)

Em que RC, RPc e RPr correspondem ao recálculo dos bits C, Pc e Pr, utilizando os
bits C na mensagem. As equações 3.25 e 3.26 são utilizadas para a detecção de erros nas linhas
correspondentes. Além disso, a Equação 3.27 é calculada para utilização na detecção e correção
de erros triplos em uma mesma linha.
A Tabela 3 mostra a correção utilizada de acordo com os erros que ocorrerem em
cada linha da matriz codificada pelo algoritmo CLC. Quando todos os bits de síndrome são 0,
significa que não houve erros detectados. Já quando há valores de bits sendo 1, erros foram
detectados, e a correção pode ser aplicada de acordo com a situação.
32

Tabela 3 – Tabela de correção do CLC


SC SPr SPc Tipo de erro Método de correção
0 0 0 Sem erro Nenhum método aplicado
0 0 1 Erro detectado Nenhum método aplicado
0 1 0 Erro detectado Nenhum método aplicado
0 1 1 Erro triplo detectado SPc bits
1 0 0 Erro detectado Nenhum método aplicado
1 0 1 Número par de erros detectados SPc bits
1 1 0 Número ímpar de erros detectados Hamming
Número ímpar de erros detectados
1 1 1 Hamming/SPc
(Caso especial)
Fonte: Elaborado pelo autor.

3.2.2 Exemplo de correção por CLC

A seguir é exemplificado o algoritmo de codificação e decodificação CLC. Para tanto,


foi utilizado o dado de exemplo 11001010111111102 . A Figura 9(a) apresenta a matriz contendo
os 16 bits de dados (D), os 12 bits de checagem (C), os 4 bits de paridade da palavra (Pr) e os 8
bits de paridade da coluna (Pc).

Figura 9 – Exemplo de codificação/decodificação CLC

Fonte: Elaborado pelo autor.

Aplicando o algoritmo de decodificação detalhado na seção anterior obtém-se os


resultados apresentados na Figura 9(b). O resultado indica um erro no bit da célula [0,0]. Não
apenas isso, mostra que o algoritmo identificou esse erro, porém não conseguiu corrigir. Essa
afirmação pode ser comprovada pelo padrão Sc, SPr, SPc = 010 que, sendo consultado na Tabela
3, indica ação.
Portanto, o dado, que originalmente é CAFE16 , foi corrompido. O algoritmo identifi-
cou a alteração da palavra original, porém não pôde corrigi-la. Assim sendo, tendo em vista a
impossibilidade de correção, o resultado final ficou sendo 4AFE16 .
33

3.3 Código CLC Estendido

Além do algoritmo CLC padrão, o qual realiza a correção ao verificar a síndrome


apenas uma vez, tem-se o modo Estendido, que realiza uma dupla correção. Sendo assim, sua
correção é dividida em duas partes, havendo a verificação de síndromes duas vezes, o que permite,
com isso, a correção de padrões mais agressivos de erro. É importante evidenciar que o modo
Estendido apresenta um acréscimo de custo para sua operação (SILVA, 2018).
Diferente do CLC (16,40) apresentado na seção anterior, este utiliza o Hamming
Estendido (8,13) ou Hamming Estendido (2,6) (SILVA, 2018). Utilizando o primeiro, obtém-se a
estrutura apresentada na Figura 10. Já utilizando o segundo caso, obtém-se a estrutura de acordo
com a Figura 11.

Figura 10 – Estrutura do código CLC, utilizando Hamming Estendido


(8,13) para 16 bits

Fonte: Elaborado pelo autor.

De forma geral, a adição do Hamming Estendido traz uma diminuição do custo


geral de sintetização, tendo um potencial para aplicações críticas, mesmo o número de bits
de redundância para a palavra de 16 bits sendo grande, o que o torna um fator de limite para
determinadas aplicações, principalmente as que possuem limitados recursos (CASTRO et al.,
2016).

3.3.1 Codificação e Decodificação CLC Estendido

De forma semelhante, o mesmo algoritmo de codificação e correção de erros do CLC


(16,40), que foi apresentado a Seção 3.2, é utilizado aqui, mudando apenas a matriz de estrutura
do código. Ou seja, diferentemente do que foi apresentado na Seção 3.2.1, apenas a Figura 8 é
substituída pelas estruturas apresentadas nas Figuras 10 ou 11, permanecendo as equações já
apresentadas na seção anterior.
34

Figura 11 – Estrutura do código CLC, uti-


lizando Hamming Estendido (2,6) para 16
bits

Fonte: Elaborado pelo autor.

3.4 Código MRSC

O Matrix Region Section Code (MRSC) é baseado em códigos bidimensionais (2D),


como os códigos matrix , que visam a corrigir e detectar erros em múltiplos bits nas memórias
(ARGYRIDES et al., 2010). O algoritmo codifica 16 bits de dados em 32 bits.
Esse algoritmo analisa as síndromes dos bits de redundância, escolhendo uma das
regiões a serem corrigida. Devido a certas características, o MRSC é adequado à correção de
erros adjacentes. Entre essas características, podemos citar a capacidade de detectar alguns
padrões de erros na mesma coluna e a correção de MBU agressivos de uma mesma região (SILVA
et al., 2020).

3.4.1 Codificação e decodificação MRSC

A Figura 12 mostra a estrutura codificada por MRSC de 32 bits de um dado. As


células-dado são divididas em 4 grupos, sendo cada um com 4 bits. Também há 4 bits diagonai,
e 4 bits de paridade e, por fim, 8 bits de checagem.
35

Figura 12 – Modelo de dados codificados MRSC

Fonte: Elaborado pelo autor.

Os 4 bits diagonais (Di) são calculados pelas equações abaixo:

Di0 = A0 ⊕ B1 ⊕C0 ⊕ D1 (3.28)

Di1 = A1 ⊕ B0 ⊕C1 ⊕ D0 (3.29)

Di2 = A2 ⊕ B3 ⊕C2 ⊕ D3 (3.30)

Di3 = A3 ⊕ B2 ⊕C3 ⊕ D2 (3.31)

As células de bits de paridade (P), pelas equações que se seguem:

P0 = A0 ⊕ B0 ⊕C0 ⊕ D0 (3.32)

P1 = A1 ⊕ B1 ⊕C1 ⊕ D1 (3.33)

P2 = A2 ⊕ B2 ⊕C2 ⊕ D2 (3.34)

P3 = A3 ⊕ B3 ⊕C3 ⊕ D3 (3.35)
36

Já os bits de checagem (Cb), como se seguem:

CbA02 = A0 ⊕ A2 (3.36)

CbA13 = A1 ⊕ A3 (3.37)

CbB02 = B0 ⊕ B2 (3.38)

CbB13 = B1 ⊕ B3 (3.39)

CbC02 = C0 ⊕C2 (3.40)

CbA13 = C1 ⊕C3 (3.41)

DbB02 = D0 ⊕ D2 (3.42)

DbB13 = D1 ⊕ D3 (3.43)

A Figura 13 descreve os principais elementos da operação de paridade do codificador


MRSC.
Para o processo de decodificação, pode-se dividir em 3 fases (SILVA et al., 2017)
– A primeira fase é a estimativa da síndrome para os bits de redundância, a saber: as equações
3.44, 3.45 e 3.46:

SDi = D1 ⊕ RDi (3.44)


37

Figura 13 – Descreve os principais elementos da operação


de paridade do codificador MRSC

Fonte: (SILVA et al., 2017)

SP = P ⊕ RP (3.45)

SCb = Cb ⊕ RCb (3.46)

– Depois do cálculo da síndrome, uma das seguintes condições precisa ser satisfeita: A
primeira, ambos os vetores SDi e SP precisam ter, ao menos, um valor igual a 1; A segunda,
mas de um valor SCb igual a 1. Essas condições permitem a detecção de erros na região
dos bits de dados;
– Os bits de dados são divididos em 3 regiões com a finalidade de selecionar um grupo
específico de bits para a operação de correção. A Figura 14 ilustra as 3 regiões:

Figura 14 – Regiões dos bits de dados do MRSC

Fonte: (SILVA et al., 2017)

A Tabela 4 apresenta o grupo de equações com os critérios necessários para selecionar


a região do MRSC.
38

Tabela 4 – Critério para seleção de região


Região selecionada Critério para seleção
Região 1 (SD1 + SD2 + P1 + P2 ) >(SD3 + SD4 + P3 + P4 )
Região 2 (SD1 + SD2 + P1 + P2 ) <(SD3 + SD4 + P3 + P4 )
Região 3 (SD1 + SD2 + P1 + P2 ) =(SD3 + SD4 + P3 + P4 )
Fonte: (SILVA et al., 2017)

A Figura 15 representa, de forma resumida e ilustrada, o processo de decodificação


do algoritmo MRSC.

Figura 15 – Diagrama de blocos da decodificação MRSC

Fonte: (SILVA et al., 2017)

Nesta seção, são apresentados alguns exemplos que demonstram o algoritmo de


decodificação MRSC. A mais, nas outras seções de exemplos, foi utilizado o dado de 16 bits
contendo o padrão 1100101011111110. A Figura 16 exibe o dado codificado pelo código MRSC.
A Figura 17 mostra uma falha ocorrendo na terceira coluna. Os valores de SDi , SP
e SCb são mostrados na mesma figura. Note que SD123 e SP0 contém valores iguais a 1 e que
a análise da Tabela 4 indica a região 1 dos dados da matriz os quais foram selecionados para
correção de SCb.
O terceiro passo, como pode ser visto na Figura 15, é realizar a operação XOR entre
SCb e a região selecionada. Também na Figura 17 é apresentado o resultado desse processo.
Pode-se observar que não foi possível corrigir o dado, sendo o resultado A4FE16 .
39

Figura 16 – Exemplo de dado codificado com MRSC

Fonte: Elaborado pelo autor.

Figura 17 – Exemplo de dado decodificado com MRSC

Fonte: Elaborado pelo autor.


40

4 METODOLOGIA

No Capítulo 3, foram discutidos, em detalhes, os quatros códigos corretores de erros


utilizados neste trabalho: Hamming, CLC, CLC Estendido e MRSC. Todos esses códigos fazem
parte de uma das principais formas de proteção de memórias com SEE, em especial aqueles
submetidos a ambientes de muita hostilidade e que precisam de uma alta confiabilidade. Neste
capítulo, é apresentado o Memory Monitoring Software (MMS), que trabalha na análise desses
códigos de maneira objetiva e de fácil apresentação. Cumpre destacar ainda que a simulação
de inserção de falhas foi feita em um dispositivo de memória, no caso, a do microcontrolador
TMS570LS0432.

Figura 18 – Visão geral da solução proposta

Fonte: Elaborado pelo autor.

A Figura 18 apresenta uma visão geral da solução proposta que é detalhada nas
seções seguintes.

4.1 TMS570LS0432

O dispositivo utilizado, neste trabalho, para inserir os códigos corretores de erros,


bem como a emulação do injetor de falhas na memória, foi o TMS570LS0432. Ele foi esco-
lhido por ser um microcontrolador utilizado para aplicações críticas, logo traz um ambiente de
desenvolvimento propício para o estudo e para a validação da ferramenta proposta neste trabalho.
O TMS570LS0432 é um microcontrolador de alto desempenho para sistemas de
segurança. Sua arquitetura de segurança possui, entre outras características, ECC na memória
flash e na SRAM, além de paridade nas memórias periféricas, bem como capacidade de loopback
nos I/Os periféricos (TEXAS INSTRUMENTS INCORPORATED, 2012).
41

O microcontrolador possui uma CPU ARM Cortex-R4 que opera a 80 MHz além de
384kb de Memória Flash e 32kb de memória RAM (TEXAS INSTRUMENTS INCORPORA-
TED, 2012). O microcontrolador é usado por meio do LaunchPadT M TMS570LS04 da Texas
Instruments, que é um kit de desenvolvimento projetado para ajudar os usuários avaliar e iniciar
o desenvolvimento com a plataforma de microcontrolador HerculesT M, este launchpad é uma
plataforma de avaliação econômica baseada no TMS570LS04.

4.2 Injeção de falhas

Uma rotina de injeção de falhas em memória foi projetada em linguagem C e


embarcada em um microcontrolador com o intuito de validar o software proposto. Essa rotina foi
desenvolvida considerando que a memória RAM do dispositivo estará sujeita a ocorrências de
SEE, mas protegida por um dos diferentes ECC, o qual também foi implementado em linguagem
C.
Tendo a finalidade de estimar os desempenhos dos códigos em relação aos SEE,
emulamos esses eventos por meio de um Injetor de Erros (IE). Antes de incorporar a rotina de
teste, desabilitamos o SEC-DED interno do microcontrolador, para não haver interferência nos
resultados dos ECC.
Importante observar que o injetor foi pensado considerando os resultados observa-
dos em pesquisas que mostram os padrões que mais ocorrem na memória. Esses padrões de
ocorrências de SEE afetam células adjacentes em uma SRAM (RAO et al., 2014).
O injetor de erros desenvolvido gera de 1 a 5 padrões de erros adjacentes, uma vez
que esses padrões representam cerca de 98% dos erros mais comuns (RAO et al., 2014). A
Figura 19 apresenta alguns exemplos de padrões de erro produzidos (a) e não produzidos (b)
pelo IE, respectivamente.
Após a rotina de injeção de erros, codificação e decodificação utilizando um dos
ECC, um registro, com as informações do processo, é enviado via comunicação serial para ser
lido, armazenado e analisado pela aplicação. Essa rotina de codificação, inserção de erro e
decodificação é ilustrada de acordo com a Figura 21. Em que:
– DO é o Dado original;
– DC é o Dado codificado;
– DCe é o Dado codificador adicionado de erro;
– DD é o Dado decodificado.
42

Figura 19 – Padrões de erros em células adjacentes

Fonte: (RAO et al., 2014)

A rotina apresentada na Figura 21 gera um buffer seguindo o formato Comma


Separated Values (CSV) em que cada coluna é separada por um “;”. A Figura 22 mostra um
exemplo desse buffer, em que a primeira coluna informa o ECC utilizado, no caso o 1 representa
CLC Estendido. A segunda coluna informa a quantidade de erros gerados, no exemplo foram 5.
A terceira coluna traz o dado original em formato hexadecimal (0xCAFE). A quarta coluna é
preenchida com o dado original no formato binário. A quinta coluna vem com o dado original
já com os erros no formato binário. Na sexta coluna, traz o dado após passar pelo processo
de decodificação. Na sétima coluna é informado o tempo gasto no processo de decodificação
em milissegundos. Por fim, na oitava coluna, é informado apenas um valor indicando o fim do
buffer.
Esse buffer, após ser montado, é enviado via comunicação serial para o software que
se encarrega em armazenar no banco de dados, podendo, assim, ser analisado pela ferramenta.
43

Figura 20 – Exemplo de padrões de erros em células adjacentes implementados e


não implementados

Fonte: Elaborado pelo autor.

Figura 21 – Rotina de codificação, inserção de erro e decodificação no


microcontrolador

Fonte: Elaborado pelo autor.


44

Figura 22 – Buffer de dados

Fonte: Elaborado pelo autor.

4.3 Software de Monitoramento

Na seção anterior foram discutidos os processos para a geração dos dados a serem
enviados pelo microcontrolador à interface. Nesta etapa, será vista a apresentação dos valores
pela ferramenta propriamente dita.
Portanto, o software desenvolvido controla, a partir do envio de comandos pelo
barramento serial, o microcontrolador. Por exemplo, indica qual o tipo de erro a ser inserido e
quais ECC serão utilizados.
A seguir, serão apresentadas as etapas que são executadas pela ferramenta desen-
volvida, denominada MMS. É importante começar descrevendo como esses dados, vindos do
barramento serial, são armazenados para, em seguida, descrever os principais pontos da interface
gráfica, seus gráficos e informações apresentados.

4.3.1 Banco de dados

De forma a facilitar o trabalho de consulta e análise dos resultados, os dados que


chegam por meio do canal de comunicação serial, em formato CSV, (Discutido na Seção 4.2)
são armazenados primeiramente em Banco de Dados.

Figura 23 – Armazenamento dos dados na base de dados

Fonte: Elaborado pelo autor.

A Figura 23 apresenta um pequeno fragmento da tabela de consulta do banco de


45

dados. Na figura, é possível observar os mesmos campos do buffer CSV com a adição da data de
criação no banco. Essa data é importante para análises que envolvem tempos na interface.
O campo “clc_code” representa o tipo de código corretor utilizado. Esse padrão é
de conhecimento tanto pela aplicação quanto pelo microcontrolador. O campo “erros_inserted”
informa a quantidade de erros que foram injetados. Essa informação é controlada pela aplicação.

4.3.2 Interface

Nesta seção são apresentas as principais características da interface de controle da


ferramenta MMS. A interface apresenta os resultados obtidos por meio da emulação de erros
inseridos na memória do microcontrolador, como apresentado na Seção 4.2. A ferramenta foi
desenvolvida utilizando a linguagem Python.

Figura 24 – Interface do software

Fonte: Elaborado pelo autor.

Assim sendo, de posse dos valores gerados e armazenados na base, o MMS apresenta
os resultados em gráficos e tabelas a fim de fornecer uma visão geral de como os ECC atuaram
na proteção da RAM.
A seguir, serão apresentados os principais pontos da interface. Esses pontos estão
destacados na Figura 24.
46

4.3.2.1 Gráficos gerados

São 4 os gráficos gerados, como pode ser observado na Figura 24, os quais serão
descritos a seguir.
O primeiro, localizado na parte superior esquerda, é o gráfico de barras contendo
as proporções de acordo com a quantidade de erros. Como visto, na Figura 19 da sessão 4.2,
são englobados de 1 a 5 erros, perfazendo os principais padrões de erros em células de memória
adjacentes. Assim, esse gráfico representa essas quantidades.
Na parte superior direita está o gráfico contendo a curva de acertos, ou seja, a
porcentagem por meio da qual o algoritmo detecta e corrige o erro dependendo da quantidade de
erros que forem inseridos. Esse gráfico pode conter todos os ECC ao mesmo tempo, de forma
que a comparação se torne mais clara.
O terceiro, localizado na parte inferior esquerda, refere-se a um gráfico em pizza,
o qual apresenta das falhas corrigidas de acordo com a quantidade de erros. A intenção desse
gráfico é apresentar a proporcionalidade de correções de acordo com a falha.
Por fim, o quarto gráfico apresenta, tal qual o terceiro, o gráfico em pizza dos erros
que não foram corrigidos. Desse gráfico pode-se ter uma ideia de quais tipos de erro menos se
pode corrigir.

4.3.2.2 Tabela de desempenho

Essa tabela apresenta o desempenho dos ECC quando comparados ao total de


amostras. Ou seja, é possível observar quais estão atuando melhor em comparação com os
demais. Em cada coluna, tem-se a porcentagem de correção (em verde) e de não correção (em
vermelho), como visto na Figura 24.

4.3.2.3 Opções de controle

Os gráficos e a tabela de desempenho podem ser configurados de acordo com alguns


parâmetros de controle. Esses parâmetros podem mostrar detalhes específicos de uma quantidade
de tempo, por exemplo, ou de um código específico, ou ainda de um tipo de erro. Assim, análises
mais representativas poderão ser geradas de acordo com esses controles.
A Figura 25 apresenta um exemplo que traz os campos de controle da interface
configurados de forma a analisar apenas o CLC Estendido, tendo o limite de tempo configurado
47

para 30 minutos e como tipo único de erro os de tipo 3.


O armazenamento dos dados no banco apenas se dá quando o botão START/STOP é
acionado. Ele é o responsável por enviar os comandos para o microcontrolador.

Figura 25 – Interface de controle

Fonte: Elaborado pelo autor.

4.3.2.4 Código corretor de erro

Durante a recepção do buffer CSV, a interface apresenta em tempo real o ECC que
está sendo aplicado. Assim, essa barra tem a finalidade apenas de informar ao operador o código
aplicado naquele exato momento.

4.3.2.5 Dados com indicação dos bits comprometidos

A Figura 26 também traz a informação, em tempo de execução, do status dos bits


de dados que foram corrigidos ou não. Caso ocorra de o ECC não ser capaz de corrigir um
determinado erro, ele será apresentado nesta barra. A Figura 26 apresenta um exemplo dessas
informações. Nela é possível ver que o código hamming não conseguiu corrigir alguns bits, os
quais estão representados pela cor vermelha.
48

Figura 26 – Barra de informação em tempo real

Fonte: Elaborado pelo autor.

4.3.2.6 Barra de Menus

A barra de menus possui algumas funcionalidades da interface que podem ser


utilizadas. Entre as mais importantes está a criação de um arquivo pdf contendo um pequeno
relatório dos testes quando estiverem finalizados. Cumpre destacar que opções como fechar a
aplicação e ajuda também podem ser encontradas nessa barra.
49

5 RESULTADOS

Neste capítulo, serão apresentados os resultados dos experimentos gerados para


analisar a ferramenta proposta. Os experimentos estão divididos em:
– Análise com todos os ECC;
– Análise com os ECC de forma individual;
– Análise com alteração do período de amostra.

5.1 Análise com todos os ECC

Como é possível observar na Figura 27, quando o usuário opta por analisar todos os
ECC ao mesmo tempo, indicando no painel de controle a opção ALL, a ferramenta apresenta de
forma aleatória o ECC e a quantidade de erro inseridos.
Nesse cenário, 27% do total de 6319 amostras, submetidas aos códigos CLC Esten-
dido, foram corrigidas; 26% e 25% dos códigos CLC e MRSC foram corrigidos, respectivamente
e 20% do Hamming. Sendo, portanto, o Hamming a menor taxa de correção do universo de
amostras e o CLC Estendido o maior. Além disso, o código Hamming possui a maior quantidade
de amostras não corrigidas contra 22% do CLC Estendido e do MRSC e 21% do CLC. Assim,
de forma geral, é possível inferir que o código Hamming obteve piores resultado de desempenho
na correção.
Analisando de forma particular como foram distribuídos os erros, pode-se inferir,
pelos gráficos, que praticamente todos os cenários de erros foram contemplados quase que
uniformemente. Essa afirmação pode ser corroborada pelo auxílio do gráfico superior esquerdo.
Nele é possível observar que, do total de amostras, em média 1250 foram distribuídas para cada
tipo. Ou seja, não houve uma preferência visível pelo padrão, sendo o resultado uniforme.
Também pode-se afirmar que alguns códigos desempenham melhor ou pior a correção
de acordo com a quantidade de erros inseridos. Isso pode ser claramente observado no gráfico
superior direito em que se tem a curva de correção. Nesse cenário, em especial, pode-se concluir,
apenas olhando o gráfico resultante, que os códigos CLC, CLC Estendido e MRSC foram
ligeiramente melhores que o Hamming Estendido. Especificamente, não há muita diferença entre
os algoritmos CLC, CLC Estendido e MRSC quando o padrão de erro contém apenas 1 ou 2
falhas. Essa diferença começa a ser mais nítida quando se aumenta a quantidade de erros.
O reflexo dessas curvas pode ser também analisado quando se olha apenas para a
50

porcentagem de erros corrigidos ou não. Ou seja, quando se olha para o tipo de erro e não para
o código corretor. Os gráficos inferiores esquerdo e direito têm esse objetivo. No primeiro, é
possível destacar que 31, 5% dos erros seguem o padrão SBU, ou seja, apenas um único bit de
falha é corrigido, sendo, no cenário em questão, uma quantidade de 1299 amostras. Isso contra
29, 7% no padrão 2, caindo para 19, 2% no padrão 3 e tão somente 7, 5% no padrão 5, o que
claramente indica a dificuldade que os ECC têm em corrigir falhas mais complexas.
Com relação ao tempo gasto para a decodificação em cada algoritmo, pode-se
observar que o CLC Estendido é o que, em média, gasta mais para a sua decodificação, e o
Hamming, o que gasta menos tempo. Na Figura 27, é possível ver essa diferença: 0,025ms, em
média, para decodificar por meio do CLC Estendido, contra 0,009ms no Hamming. Isso pode
ser explicado pela maior complexidade do primeiro em ao relação ao segundo.
Logo, de forma geral, pode-se afirmar que nesse cenário o CLC Estendido foi o
algoritmo que melhor atuou. Em contrapartida, ele é o algoritmo que leva mais tempo e, portanto,
mais recursos do microcontrolador para a decodificação. Já o Hamming foi o menos eficaz,
porém o mais rápido.

Figura 27 – Desempenho com todos os quatros ECC

Fonte: Elaborado pelo autor.


51

5.2 Análise dos ECC individualmente

Quando se deseja analisar apenas um determinado ECC, individualmente, o painel


de controle deve ser configurado de forma a refletir essa vontade. Como é possível observar nas
imagens que se seguem, a ferramenta oferece a opção de analisar individualmente cada ECC.
Observando-se os gráficos resultantes das Figuras 28, 29, 30 e 31, pode-se infe-
rir as mesmas conclusões apresentadas na seção anterior. Contudo, é importante observar
que as porcentagens de dados que obtiveram sucesso permanecem ligeiramente proporcionais,
excetuando-se, apenas, o código Hamming devido a sua dificuldade em corrigir erros do tipo 2,
ou seja, com 2 erros inseridos.

Figura 28 – Desempenho utilizando apenas CLC

Fonte: Elaborado pelo autor.

5.3 Alteração do tempo de coleta de amostra

Uma outra opção oferecida ao operador para análise dos resultados é quando se
deseja limitar o tempo de coleta de amostras. Ou seja, pode-se limitar as amostras dentro de um
espaço de tempo determinado. Dependendo desse tempo pode-se chegar a resultados diferentes.
Quanto maior o tempo limite e, como consequência, a quantidade de amostras,
melhor é a análise. Ou seja, o resultado torna-se mais estável, sem muitas alterações. As figuras
a seguir trazem um recorte temporal para exemplificar essa afirmação.
A Figura 32 apresenta as amostras referentes aos 60 últimos minutos. É possível
52

Figura 29 – Desempenho utilizando apenas CLC estendido

Fonte: Elaborado pelo autor.

Figura 30 – Desempenho utilizando apenas MRSC

Fonte: Elaborado pelo autor.

afirmar que o gráfico da curva de correção ainda não é o que poderia se chamar de um estado
estável, ou seja, as mudanças não são mais significativas a ponto de alterar muito o resultado.
Mesmo assim, pode-se dizer que já apresenta semelhanças do que poderia ser uma quase
estabilidade.
Os resultados com 120 minutos de amostras coletadas estão mais próximos dos
que se espera. Inclusive, as porcentagens são bastante semelhantes quando se compara com o
resultado em que há 6319 amostras da Figura 27.
53

Figura 31 – Desempenho utilizando apenas Hamming

Fonte: Elaborado pelo autor.

Quando se olha para os resultados das Figuras 34 e 35 pode-se afirmar que uma
certa estabilidade nos resultados foi atingida. Ou seja, a partir de uma tempo limite para coleta
de amostras ou quantidade de amostras, os resultados não irão se alterar drasticamente pois já
atingiram um certo grau de estabilidade.

Figura 32 – Desempenho utilizando os 60 últimos minutos de dados

Fonte: Elaborado pelo autor.


54

Figura 33 – Desempenho utilizando os 120 últimos minutos de dados

Fonte: Elaborado pelo autor.

Figura 34 – Desempenho utilizando os 240 últimos minutos de dados

Fonte: Elaborado pelo autor.

Também é interessante notar que a quantidade de amostras não interfere no tempo


médio de decodificação gasto por cada algoritmo, sendo o CLC Estendido o mais lento, ou seja,
55

Figura 35 – Desempenho utilizando os 360 últimos minutos de dados

Fonte: Elaborado pelo autor.

0,025ms e o Hamming o mais rápido, 0,009ms. Em contrapartida, ela interfere na eficácia dos
códigos em relação ao demais. Por exemplo, o MRSC com 60 minutos de amostras obteve 30%
de correções (Figura 32) e com 360 minutos de amostras obteve 26% (Figura 35).

5.4 Relatório

A ferramenta oferece a opção de gerar um relatório Portable Document Format


(PDF), contendo as principais informações relativas às análises geradas durante o monitoramento.
O relatório gerado pela ferramenta contém informações como:
– Cabeçalho;
– Data;
– Operador;
– Tipo de código utilizado;
– Quantidade total de amostras;
– Quantidade de amostras corrigidas e não corrigidas;
– Tempo médio de decodificação dos algoritmos.
Esse relatório arquiva as informações obtidas durante a utilização da ferramenta.
56

6 CONCLUSÕES E TRABALHOS FUTUROS

Este trabalho apresentou a criação da ferramenta de monitoramento de erros em


memória chamada MMS, criada para auxiliar na análise dos dados gerados a partir da inserção
de falhas em memória de um dispositivo desenvolvido para aplicações ditas tolerantes a falhas.
O software facilita a avaliação de uma implementação ECC nos dispositivos de memória, sendo
uma ferramenta para ser usada em pesquisas e em desenvolvimento de aplicações, envolvendo,
por exemplo, computador de bordo em missões espaciais ou outros ambientes hostis. A va-
lidação desse software foi feita adicionando códigos corretores de erros no microcontrolador
TMS570LS0432, com a finalidade de proteger dados contidos na memória RAM. O MMS
provou ter ferramentas capazes de apresentar, ao usuário, os resultados de desempenho de um
código corretor de erro desejado.
A estrutura proposta foi criada para facilitar o armazenamento dos logs dos testes
realizados no microcontrolador TMS570LS0432, o qual é responsável pela inserção de erros, pela
codificação e decodificação dos dados, utilizando quatro códigos corretores de erros, bem como
pela sua análise simplificada e objetiva por meio de gráficos e tabelas gerados automaticamente
e em tempo de execução. Foram realizados mais de 6 mil testes utilizando diferentes tipos de
erros com padrões adjacentes mais encontrados em aplicações tolerantes a falha. Esses erros
foram submetidos a 4 tipos diferentes de ECC, tendo o objetivo de detectar e corrigir as falhas.
A partir de uma interface simples, a ferramenta proporciona ao pesquisador, mudar
parâmetros que lhe atendam na busca de encontrar o ECC que mais esteja de acordo com o seu
projeto ou simplesmente permite uma forma de comparação com outros códigos corretores de
erros existentes.
Especificamente com base nos resultados obtidos, pôde-se afirmar que o MRSC ob-
teve melhores resultados comparando-o aos demais ECC. Entretanto, a depender dos parâmetros
que vierem a ser configurados, poderão vir a obter resultados diferentes.
Portanto, a ferramenta desenvolvida trouxe dinamicidade aos testes e as análises
feitas, obtendo resultados, em tempo de execução, dos principais parâmetros que levam à escolha
do ECC em projetos que exigem tolerância a falhas.
Por fim, este trabalho atingiu seus objetivos que são a criação de uma ferramenta de
monitoramento de memórias capaz de analisar, de forma clara e ojetiva, os resultados de erros
inseridos de forma aleatória na memória de um microcontrolador e apresentar os resultados ao
usuário, podendo tirar melhores conclusões sobre os códigos implementados.
57

REFERÊNCIAS

ARGYRIDES, C.; REVIRIEGO, P.; PRADHAN, D.; MAESTRO, J. Matrix-based codes for
adjacent error correction. Nuclear Science, IEEE Transactions on, v. 57, p. 2106 – 2111, set.
2010.

BARNABY, H. Total-ionizing-dose effects in modern cmos technologies. Nuclear Science,


IEEE Transactions on, v. 53, p. 3103 – 3121, jan. 2007.

Baumann, R. The impact of technology scaling on soft error rate performance and limits to the
efficacy of error correction. In: Digest. International Electron Devices Meeting,. [S. l.: s. n.],
2002. p. 329–332.

BAUMANN, R. Radiation-induced soft errors in advanced semiconductor technologies. IEEE


Transactions on Device and Materials Reliability, v. 5, p. 305–316, 2005.

BESSOT, D. Conception de Deux Points Memoire Statiques CMOS durcis Contre L’effet
des Aleas Logiques Provoques par L’environment Radiatif Spatial. [S. l.]: INPG, 1993.

CARDARILLI, G. C.; OTTAVI, M.; PONTARELLI, S.; RE, M.; SALSANO, A. Fault tolerant
solid state mass memory for space applications. Aerospace and Electronic Systems, IEEE
Transactions on, v. 41, p. 1353 – 1372, nov. 2005.

CASTRO, H. S.; SILVEIRA, J.; COELHO, A.; SILVA, F. G. A. e; MAGALHÃES, P.


D. S.; LIMA, O. A. de. A correction code for multiple cells upsets in memory devices for
space applications. 2016 14th IEEE International New Circuits and Systems Conference
(NEWCAS), p. 1–4, 2016.

CHEN, C.; HSIAO, M.-Y. Error-correcting codes for semiconductor memory applications: A
state-of-the-art review. IBM Journal of Research and Development, v. 28, p. 124–134, mar.
1984.

CHUGG, A.; MOUTRIE, M.; JONES, R. Broadening of the variance of the number of upsets in
a read-cycle by mbus. Nuclear Science, IEEE Transactions on, v. 51, p. 3701 – 3707, jan.
2005.

COSTAS, A.; HAMID, Z.; PRADHAN, D. Matrix codes: Multiple bit upsets tolerant method for
sram memories. In: 22nd IEEE International Symposium on Defect and Fault Tolerance in
VLSI Systems. Roma: [S. n.], 2007. p. 340–348.

CUI, Y.; ZHANG, X. Research and implemention of interleaving grouping hamming code
algorithm. In: . [S. l.: s. n.], 2013. p. 1–4.

DUTTA, A.; TOUBA, N. Multiple bit upset tolerant memory using a selective cycle avoidance
based sec-ded-daec code. In: . [S. l.: s. n.], 2007. p. 349–354.

EUGENENORMAND. Single event effects in avionics and on the ground. International


Journal of High Speed Electronics and Systems, nov. 2011.

FERREYRA, P.; MARQUES, C.; FERREYRA, R.; GASPAR, J. Failure map functions and
accelerated mean time to failure tests: New approaches for improving the reliability estimation
in systems exposed to single event upsets. Nuclear Science, IEEE Transactions on, v. 52, p.
494 – 500, mar. 2005.
58

GHERMAN, V.; EVAIN, S.; AUZANNEAU, F.; BONHOMME, Y. Programmable extended


sec-ded codes for memory errors. In: . [S. l.: s. n.], 2011. p. 140–145.
GUENZER, C.; III, A. C.; SHAPIRO, P. Single event upsets in nmos microprocessors. Nuclear
Science, IEEE Transactions on, v. 28, p. 3955 – 3958, jan. 1982.
GURUN, G.; ZAHORIAN, J.; SISMAN, A.; KARAMAN, M.; HASLER, P.; DEGERTEKIN, F.
An analog integrated circuit beamformer for high-frequency medical ultrasound imaging. IEEE
transactions on biomedical circuits and systems, v. 6, p. 454–67, out. 2012.
HAMMING, R. W. Error detecting and error correcting codes. Bell Syst. Tech. J, v. 29, n. 2, p.
147–160, 1950.
HAZUCHA, P.; SVENSSON, C. Impact of cmos technology scaling on the atmospheric neutron
soft error rate. Nuclear Science, IEEE Transactions on, v. 47, p. 2586 – 2594, jan. 2001.
HEIJMEN, T. Soft Errors In Modern Electronic Systems. [S. l.: s. n.], 2011. 1-25 p.
HENTSCHKE, R.; MARQUES, F.; KASTENSMIDT, F.; CARRO, L.; SUSIN, A.; REIS, R.
Analyzing area and performance penalty of protecting different digital modules with hamming
code and triple modular redundancy. p. 95– 100, fev. 2002.
KOHLER, P.; POUGET, V.; WROBEL, F.; SAIGNE, F.; WANG, P.-X.; VASSAL, M.-C.
Analysis of single-event effects in ddr3 and ddr3l sdrams using laser testing and monte-carlo
simulations. IEEE Transactions on Nuclear Science, p. 1–1, dez. 2017.
LABEL, K.; BARNES, C.; MARSHALL, P.; MARSHALL, C.; JOHNSTON, A.; REED, R.;
BARTH, J.; SEIDLECK, C.; KAYALI, S.; O’BRYAN, M. A roadmap for nasa’s radiation effects
research in emerging microelectronics and photonics. In: . [S. l.: s. n.], 2000. v. 5, p. 535 – 545
vol.5.
LABEL, K.; GATES, M. M.; MORAN, A.; MARSHALL, P.; BARTH, J.; STASSINOPOULOS,
E.; SEIDLECK, C.; DALE, C. Commercial microelectronics technologies for applications
in the satellite radiation environment. 1996 IEEE Aerospace Applications Conference.
Proceedings, v. 1, p. 375–390 vol.1, 1996.
LAI, Y.-K.; CHEN, L.-F.; CHIOU, W.-C. A memory interleaving and interlacing architecture for
deblocking filter in h.264/avc. Consumer Electronics, IEEE Transactions on, v. 56, p. 2812 –
2818, dez. 2010.
LI, J.; REVIRIEGO, P.; XIAO, L.; ARGYRIDES, C. Extending 3-bit burst error-correction
codes with quadruple adjacent error correction. IEEE Transactions on Very Large Scale
Integration (VLSI) Systems, v. 26, nov. 2017.
LITTLEWOOD, B. The risk of software. In: Scientific American. [S. l.: s. n.], 1992. p. 62–75.
LOVELESS, D.; KAUPPILA, J.; JAGANNATHAN, S.; BALL, D.; ROWE, J.; GASPARD,
N.; ATKINSON, N.; BLAINE, R.; REECE, T.; AHLBIN, J.; HAEFFNER, T.; ALLES,
M.; HOLMAN, W.; BHUVA, B.; MASSENGILL, L. On-chip measurement of single-event
transients in a 45 nm silicon-on-insulator technology. IEEE Transactions on Nuclear Science,
v. 59, p. 2748–2755, dez. 2012.
MARTINS, E.; AMBROSIO, A. M. Testes de tolerância a falhas em sistemas de comunicação.
In: VII Simpósio de Computadores Tolerantes a Falhas. [S. l.: s. n.], 2003.
59

MOREIRA, J.; FARRELL, P. Essentials of Error-Control Coding. The Atrium, Southern


Gate, Chichester, West Sussex, England.: Wiley, 2006. 64-65 p.

NICOLAIDIS, M. Soft Errors In Modern Electronic Systems. [S. l.: s. n.], 2011.

O’BRYAN, M.; LABEL, K.; REED, R.; JR, J.; LADBURY, R.; BARTH, J.; KNIFFIN, S.;
SEIDLECK, C.; MARSHALL, P.; MARSHALL, C.; KIM, H.; HAWKINS, D.; SANDERS, A.;
CARTS, M.; FORNEY, J.; ROTH, D.; KINNISON, J.; NHAN, E.; SAHU, K. Radiation damage
and single event effect results for candidate spacecraft electronics. In: . [S. l.: s. n.], 2000. p. 106
– 122.

O’GORMAN, T. Effect of cosmic rays on the soft error rate of a dram at ground level. Electron
Devices, IEEE Transactions on, v. 41, p. 553 – 557, maio 1994.

RADAELLI, D.; PUCHNER, H.; WONG, S.; DANIEL, S. Investigation of multi-bit upsets in
a 150 nm technology sram device. Nuclear Science, IEEE Transactions on, v. 52, p. 2433 –
2437, jan. 2006.

RAO, P.; EBRAHIMI, M.; SEYYEDI, R.; TAHOORI, M. Protecting sram-based fpgas against
multiple bit upsets using erasure codes. In: . [S. l.: s. n.], 2014.

SAKATA, T.; HIROTSU, T.; YAMADA, H.; KATAOKA, T. A cost-effective dependable


microcontroller architecture with instruction-level rollback for soft error recovery. In: . [S. l.: s.
n.], 2007. p. 256–265.

SATOH, S.; TOSAKA, Y.; WENDER, S. A. Geometric effect of multiple-bit soft errors induced
by cosmic ray neutrons on dram’s. IEEE Electron Device Letters, v. 21, p. 310–312, 2000.

SILVA, F.; ALCâNTARA, O.; FREITAS, W.; VARGAS, F.; SILVEIRA, J.; MARCON, C. An
efficient, low-cost ecc approach for critical-application memories. In: . [S. l.: s. n.], 2017. p.
198–203.

SILVA, F.; FREITAS, W.; SILVEIRA, J.; MARCON, C.; VARGAS, F. Extended matrix region
selection code: An ecc for adjacent multiple cell upset in memory arrays. Microelectronics
Reliability, v. 106, p. 113582, mar. 2020.

SILVA, F.; MAGALHAES, W.; SILVEIRA, J.; FERREIRA, J. M.; MAGALHÃES, P. D. S.;
LIMA, O. A. de; MARCON, C. Evaluation of multiple bit upset tolerant codes for nocs
buffering. 2017 IEEE 8th Latin American Symposium on Circuits & Systems (LASCAS),
p. 1–4, 2017.

SILVA, F.; SILVEIRA, J.; SILVEIRA, J.; MARCON, C.; VARGAS, F.; LIMA, O. A. de. An
extensible code for correcting multiple cell upset in memory arrays. Journal of Electronic
Testing, v. 34, p. 417–433, 2018.

SILVA, F. G. A. Um código extensível para correção de multiple bit upsets em memórias.


Fortaleza- Ceará: UFC, 2018.

SMITH, E. Effects of realistic satellite shielding on see rates. Nuclear Science, IEEE
Transactions on, v. 41, p. 2396 – 2399, jan. 1995.

TEXAS INSTRUMENTS INCORPORATED. TMS570LS0x32 16- and 32-BitRISC Flash


Microcontroller. [S. l.], 2012.
60

VARGHESE, B.; SREELAL, S.; VINOD, P.; KRISHNAN, A. Multiple bit error correction for
high data rate aerospace applications. In: . [S. l.: s. n.], 2013. p. 1086–1090.

Você também pode gostar