Vous êtes sur la page 1sur 67

Pontifcia Universidade Catlica do Rio Grande do Sul

Faculdade de Engenharia Faculdade de Informtica


Curso de Engenharia de Computao

Implementao de uma Arquitetura Reed-Solomon para uso em


Redes OTN 10.7 Gbps
Volume Final do Trabalho de Concluso

Autores:
Alzemiro Henrique Lucas da Silva
Taciano Ares Rodolfo

Orientador:
Prof. Dr. Fernando Gehm Moraes

Porto Alegre, Dezembro de 2007.

ii

ndice
1

INTRODUO............................................................................................................................ 1
1.1
1.2
1.3
1.4

MOTIVAO.............................................................................................................................. 2
OBJETIVOS ................................................................................................................................ 2
CONTRIBUIES ........................................................................................................................ 3
ORGANIZAO DO DOCUMENTO ............................................................................................... 3

PADRO OTN............................................................................................................................. 4
2.1 TAXAS DE TRANSMISSO .......................................................................................................... 4
2.2 ESTRUTURA DO FRAME G.709 OTN ......................................................................................... 5
2.3 OVERHEAD................................................................................................................................ 5
2.3.1 Alinhamento ....................................................................................................................... 5
2.3.2 OTU Overhead................................................................................................................... 6
2.3.3 ODU Overhead .................................................................................................................. 6
2.3.4 OPU Overhead................................................................................................................... 7
2.4 FEC .......................................................................................................................................... 7

ALGORITMO DE REED-SOLOMON ..................................................................................... 9


3.1 CAMPOS FINITOS ....................................................................................................................... 9
3.2 CODIFICAO REED-SOLOMON .............................................................................................. 13
3.2.1 Codificao Reed-Solomon Atravs de Registrador de Deslocamento ........................... 15
3.3 DECODIFICAO REED-SOLOMON .......................................................................................... 16
3.3.1 Clculo da Sndrome........................................................................................................ 17
3.3.2 Localizao dos Erros ..................................................................................................... 19
3.3.3 Valores dos Erros ............................................................................................................ 21
3.4 CONCLUSES .......................................................................................................................... 22

ARQUITETURA DESENVOLVIDA ...................................................................................... 23


4.1 MULTIPLICADOR GENRICO PARA GF(2M).............................................................................. 23
4.2 CODIFICADOR ......................................................................................................................... 25
4.3 DECODIFICADOR ..................................................................................................................... 26
4.3.1 Unidade de Clculo da Sndrome .................................................................................... 28
4.3.2 Mdulo Berlekamp-Massey.............................................................................................. 30
4.3.2.1 O Algoritmo de Berlekamp-Massey ...................................................................... 31
4.3.2.2 Implementao do Berlekamp-Massey.................................................................. 33
4.3.3 Chien Search e Forney..................................................................................................... 37
4.3.4 Viso Geral do Decodificador ......................................................................................... 41

VALIDAO DO CODIFICADOR E DECODIFICADOR................................................. 43


5.1 VALIDAO FUNCIONAL ......................................................................................................... 43
5.2 VALIDAO FUNCIONAL COM TEMPOS DE ATRASO ................................................................ 45
5.3 VALIDAO EM HARDWARE ................................................................................................... 46
5.3.1 MainBus ........................................................................................................................... 47
5.3.1.1 mb_write e mb_read............................................................................................... 47
5.3.1.2 MB_target.v e Slave.v............................................................................................ 47
5.3.1.3 Software AEtest ..................................................................................................... 48
5.3.2 Estrutura de Teste ............................................................................................................ 50
5.3.3 Resultados ........................................................................................................................ 52

iii

INTEGRAO .......................................................................................................................... 55

CONCLUSES E TRABALHOS FUTUROS ........................................................................ 57

REFERNCIAS BIBLIOGRFICAS..................................................................................... 59

iv

ndice de Figuras
FIGURA 1 ESTRUTURA FRAME G.709 OTN. .......................................................................................5
FIGURA 2 CAMPOS DO ODU OVERHEAD............................................................................................6
FIGURA 3 ELEMENTOS DE UM CAMPO DESENVOLVIDO EM GF(2). ...................................................10
FIGURA 4 CIRCUITO LFSR GERADOR DO CAMPO GF(23), S0 ESTADO INICIAL................................13
FIGURA 5 CODIFICADOR REED-SOLOMON PARA RS(7,3). ................................................................15
FIGURA 6 DIAGRAMA DE BLOCOS DO DECODIFICADOR REED-SOLOMON..........................................17
FIGURA 7 MULTIPLICADOR GENRICO PARA GF(28)........................................................................24
FIGURA 8 ARQUITETURA DO CODIFICADOR DESENVOLVIDO.............................................................25
FIGURA 9 INCIO DO PROCESSO DE CODIFICAO. ............................................................................25
FIGURA 10 ENVIO DOS SMBOLOS DE PARIDADE...............................................................................26
FIGURA 11 ARQUITETURA DO DECODIFICADOR RS(255,239) DESENVOLVIDO. ................................28
FIGURA 12 ARQUITETURA DO BLOCO DESENVOLVIDO PARA O CLCULO DA SNDROME...................29
FIGURA 13 FUNCIONAMENTO DO MDULO DE CLCULO DA SNDROME. ..........................................30
FIGURA 14 IMPLEMENTAO DO MDULO BERLEKAMP-MASSEY....................................................33
FIGURA 15 FUNCIONAMENTO DA PARTE INFERIOR DO MDULO BERLEKAMP-MASSEY....................34
FIGURA 16 FUNCIONAMENTO DA PARTE SUPERIOR DO MDULO BERLEKAMP-MASSEY. ..................35
FIGURA 17 MQUINA DE CONTROLE DO MDULO BERLEKAMP-MASSEY.........................................36
FIGURA 18 CLCULO DO POLINMIO AVALIADOR DE ERROS. ...........................................................36
FIGURA 19 ARQUITETURA DO MDULO CHIEN SEARCH LOCATION..................................................37
FIGURA 20 ARQUITETURA DO MDULO CHIEN SEARCH VALUE. ......................................................38
FIGURA 21 ESTRUTURA DO MDULO FORNEY ALGORITHM. ............................................................39
FIGURA 22 FUNCIONAMENTO DO LTIMO ESTGIO DE DECODIFICAO. .........................................40
FIGURA 23 VISO GERAL DO FUNCIONAMENTO DO DECODIFICADOR................................................41
FIGURA 24 ESTRUTURA DE SIMULAO DO CODIFICADOR E DECODIFICADOR. .................................43
FIGURA 25 ARQUIVOS TEXTO SUBFRAME.TXT E ERROR.TXT.............................................................44
FIGURA 26 VERIFICAO DO FEC GERADO PELO CODIFICADOR. .....................................................44
FIGURA 27 ERROS DO SUB-FRAME CORRIGIDOS NO DECODIFICADOR................................................45
FIGURA 28 SIMULAO COM ATRASO DO CODIFICADOR RS NO DISPOSITIVO XCV4FX100-10. ......46
FIGURA 29 INTERFACE DE COMUNICAO DO MDULO MB_TARGET. .............................................48
FIGURA 30 INTERFACE DE COMUNICAO DO MDULO SLAVE.........................................................48
FIGURA 31 EXECUTANDO O TERMINAL VISUAL STUDIO 2005 COMMAND PROMPT..........................50
FIGURA 32 ESTRUTURA DE TESTE PARA VALIDAO EM HARDWARE. ..............................................50
FIGURA 33 INTERFACE DE COMUNICAO DO MDULO FSM_IN. ...................................................51
FIGURA 34 MQUINA DE ESTADOS FINITA DO MDULO FSM_IN.....................................................51
FIGURA 35 FEC GERADO PELO CODIFICADOR...................................................................................52
FIGURA 36 ERROS DO SUB-FRAME CORRIGIDOS PELO DECODIFICADOR. ...........................................52
FIGURA 37 CAMINHO CRTICO DO SUB-MDULO BERLEKAMP_MASSEY. .............................................53
FIGURA 38 INTEGRAO DOS MDULOS DO TRANSPONDER...............................................................55
FIGURA 39 MDULOS DECODER RS E ENCODER RS........................................................................56

ndice de Tabelas
TABELA 1 TAXAS DE TRANSMISSO PREVISTAS PELA RECOMENDAO G.709. ...............................4
TABELA 2 DIVISO DO FRAME EM SUB-FRAMES. ................................................................................8
TABELA 3 POLINMIOS PRIMITIVOS.................................................................................................11
TABELA 4 CONSTRUO DO CAMPO GF(23).....................................................................................12
TABELA 5 ADIO E MULTIPLICAO SOBRE O CAMPO GF(23)........................................................13
TABELA 6 CONTEDO DOS REGISTRADORES DO CIRCUITO LFSR DURANTE A CODIFICAO............16
TABELA 7 - FREQNCIA MXIMA DE OPERAO DE TODOS OS MDULOS E SUB-MDULOS...............53
TABELA 8 OCUPAO DE REA NO FPGA VIRTEX4 XCV4FX100. .................................................54

vi

Lista de Siglas
APS/PCC
ATM
CD
CRC
DMA
DVD
ECC
FAS
FEC
FPGA
FTFL
GAPH
GCC
GF
GFP
HD
ITU-T
JC
LFSR
LUT
MFAS
NJO
ODU
OPU
OTN
OTU
PJO
PM
PSI
RS
SDH
SM
SONET
TCM
WAN

Automatic Protection Switching / Protection Communication Channel


Asynchronous Transfer Mode
Compact Disc
Cyclic Redundancy Check
Direct Memory Access
Digital Video Disc
Error Correction Coding
Frame Alignment Signal
Forward Error Correction
Field Programmable Gate Array
Fault Type and Fault Location
Grupo de Apoio ao Projeto de Hardware
General Communication Channel
Galois Field
Generic Framing Procedure
Hard Disk
International Telecommunications Union Telecommunication
Justification Control
Linear Feedback Shift Register
Look-Up Table
Multi Frame Alignment Signal
Negative Justification Opportunity
Optical channel Data Unit
Optical channel Payload Unit
Optical Transport Network
Optical channel Transport Unit
Positive Justification Opportunity
Path Monitoring
Payload Structure Identifier
Reed-Solomon
Synchronous Digital Hierarchy
Session Monitoring
Synchronous Optical Networking
Tandem Connection Monitoring
Wide Area Network

vii

1 Introduo
Observa-se, no cenrio mundial, uma crescente demanda por largura de banda e qualidade
de servio, principalmente em redes de longo alcance (WANs). Esta demanda evidenciada, cada
vez mais, pelo uso de tcnicas de transmisso de voz e vdeo em tempo real, o que proporciona
economia e aumento de rendimento para diversas instituies.
A crescente necessidade de banda incentivou a criao da recomendao G.709 OTN
(Optical Transport Network), pela ITU-T (International Telecommunications Union
Telecomunications), que define interfaces de rede para enlaces de fibra ptica de at 40Gbps [1]. A
recomendao G.709 foi construda a partir da experincia e dos benefcios dos protocolos SONET
e SDH, para proporcionar a base para as redes de fibra ptica da prxima gerao [2]. Porm,
alguns elementos foram adicionados para aumentar o seu desempenho e reduzir custos. O elemento
mais importante e mais justificativo para a criao desta nova recomendao a incluso de um
mecanismo de controle de erros mais robusto, o que aumenta o desempenho e possibilita enlaces
mais longos de fibra ptica.
Codificao de deteco de erros um mecanismo onde o receptor capaz apenas de
detectar a presena de erros em uma mensagem recebida. Coletivamente, a codificao de deteco
de erros e a codificao de correo de erros, so chamadas de codificao de controle de erros. A
codificao de controle de erros tem um papel significativo na evoluo dos sistemas de
telecomunicaes e de armazenamento digital.
A recomendao G.709 define um frame dividido em trs campos: overhead, payload e
FEC. O campo overhead prov funes de monitoramento, gerenciamento e proteo de roteamento
em canais pticos, o campo payload pode transportar dados teis provenientes de diversos
protocolos, e o campo FEC possui informaes redundantes codificadas para realizar a correo de
erros no momento da recepo da mensagem. A codificao de canal adotada pela recomendao
G.709 o Reed-Solomon (RS), que possui excelentes propriedades de correo de erros e usado
na maioria dos sistemas que aplicam correo de erro na atualidade.
O algoritmo RS utiliza o conceito de campos finitos, tambm conhecidos como campos de
Galois, e seus algoritmos funcionam basicamente atravs de clculos sobre polinmios, uma vez
que as mensagens so vistas como polinmios pertencentes a um campo finito pr-determinado.
Cdigos Reed-Solomon pertencem a uma classe de cdigos corretores de erro, chamada de cdigos
cclicos no binrios [3], pois sua construo orientada a smbolos de m bits, onde m pode ser
qualquer inteiro positivo maior que 2, normalmente 8 para aplicaes de comunicao de dados,
onde cada smbolo representa um byte.

O algoritmo RS serve tanto para a correo de alguns bits com erro em lugares aleatrios,
quanto para a correo de erros em rajada, desde que a quantidade de smbolos com erro no
ultrapasse a capacidade de correo do cdigo. Desta forma, possvel melhorar significativamente
a relao sinal rudo de um canal, inclusive aumentando a distncia de um enlace sem que seja
necessria regenerao [4].
Cdigos RS tm sido utilizados no somente em sistemas de transmisso de dados, mas
tambm em comunicao wireless, sistemas de armazenamento de grandes volumes de dados, tais
como Hard Disk (HD), Compact Disc (CD) e Digital Video Disc (DVD), e tambm em TV digital e
sistemas espaciais.
1.1

Motivao

O domnio da tecnologia de transmisso de dados em alta velocidade utilizando fibra


ptica, com tecnologia nacional, pode trazer ao Brasil a possibilidade de aumento de suas redes de
comunicao e tambm um forte potencial para a exportao de equipamentos eletrnicos.
Utilizando os conhecimentos adquiridos ao longo de nosso curso, acreditamos que seja possvel
desenvolver mdulos de hardware que possibilitem a produo nacional de equipamentos de alta
tecnologia.
Este trabalho motivado pela parceria entre a TERACOM Telemtica Ltda, empresa
brasileira que desenvolve equipamentos de telecomunicaes, e o Grupo de Apoio ao Projeto de
Hardware (GAPH), da Faculdade de Informtica desta Universidade, do qual os autores fazem
parte, para o desenvolvimento de um transponder OTN 10.7Gbps, o que deve aumentar ainda mais
a competitividade desta empresa em mbito nacional e internacional.
1.2

Objetivos

Este trabalho tem como principal objetivo desenvolver uma arquitetura de codificador e
decodificador Reed-Solomon, capaz de fazer deteco e correo de erro em um sistema de
transmisso de dados em alta velocidade, sendo completamente compatvel com a recomendao
G.709, para interoperabilidade com equipamentos de diferentes fabricantes. Os mdulos
desenvolvidos devem ser capazes de operar em conjuno com o framer, trabalho que est sendo
desenvolvido paralelamente, responsvel por fazer o alinhamento e a montagem dos frames OTN.
Outro importante objetivo do presente trabalho colocar em prtica alguns dos
conhecimentos adquiridos ao longo do curso, tais como estruturas algbricas para a construo dos
cdigos, redes de comunicao dados, arquiteturas de sistemas computacionais, desenvolvimento
em linguagem de descrio de hardware e prototipao em FPGAs.

1.3

Contribuies
Este trabalho prope o desenvolvimento de uma arquitetura de Reed-Solomon capaz de

realizar a deteco e correo de erros de acordo com o padro OTN. A arquitetura desenvolvida
baseada nas vantagens e desvantagens das implementaes propostas em diversos artigos sobre o
assunto.
As principais contribuies deste trabalho se do no estudo das diversas arquiteturas
existentes que implementam o algoritmo RS em hardware e no desenvolvimento de uma arquitetura
que satisfaz os requisitos de desempenho de um sistema de transmisso de dados em 10.7 Gbps,
aplicando paralelismo e utilizando uma alta freqncia de operao.
1.4

Organizao do Documento
Este trabalho dividido em 8 captulos. Alm da presente introduo, h 2 captulos

tericos: um sobre o padro OTN e o outro sobre o algoritmo de Reed-Solomon, 3 captulos sobre o
projeto desenvolvido, um captulo de concluso e, por ltimo, as referncias bibliogrficas
utilizadas.
No captulo 2 feito um levantamento terico do padro OTN, pois a arquitetura alvo de
Reed-Solomon que desenvolvida ao longo deste trabalho deve ser compatvel com este padro.
Neste captulo apresentada a estrutura do frame OTN, um resumo sobre as funes dos subcampos que compem o frame, bem como uma breve explicao de como realizada a correo de
erros neste padro. O captulo 3 aborda a teoria de campos finitos utilizada na construo dos
cdigos Reed-Solomon, bem como os algoritmos de codificao e decodificao, explicados de
maneira terica.
No captulo 4 feito um pequeno levantamento bibliogrfico sobre as implementaes
existentes de Reed-Solomon em hardware que puderam ser encontradas na literatura, onde so
discutidas as vantagens e desvantagens de cada uma destas implementaes. Neste captulo tambm
apresentamos os mdulos desenvolvidos atravs de esquemticos e formas de onda, justificando
tambm a escolha da arquitetura que foi desenvolvida. O captulo 5 trata da validao dos mdulos
tanto em simulao quanto em hardware, utilizando uma FPGA como arquitetura alvo. No captulo
5 tambm so apresentados os resultados obtidos com o presente trabalho. O captulo 6 apresenta
alguns dados sobre a integrao com o framer, mdulo que faz a interface com a rede de fibra
ptica. Para finalizar, no captulo 7 discutiremos as concluses obtidas pelo grupo ao trmino do
trabalho, bem como os trabalhos futuros que podero ser realizados.

2 Padro OTN
O padro OTN inclui uma srie de recomendaes criadas a partir da necessidade de
aumentar o desempenho e padronizar o funcionamento das redes de comunicao de dados em fibra
ptica. A ITU-T define uma rede OTN como um conjunto de elementos de redes pticas,
conectados atravs de enlaces de fibra ptica, capazes de prover funcionalidades de transporte,
multiplexao, roteamento, gerenciamento, superviso e sobrevivncia de canais pticos,
transportando sinais de diversos protocolos.
Este trabalho tem como foco a recomendao G.709 do padro OTN, que define as
interfaces para o transporte de dados em redes pticas, sem especificar o comportamento eltrico e
mecnico do padro. Esta recomendao define principalmente a estrutura do frame que trafega na
rede, as taxas de transmisso suportadas pelo padro e a definio da codificao de canal, que o
foco do presente trabalho.
A principal vantagem do padro OTN em relao aos seus antecessores, SONET e SDH,
reside justamente na melhoria das tcnicas de correo de erro, que permitem enlaces mais longos,
reduo na potncia de transmisso e uma melhora significativa na taxa de erros de um canal.
Outras vantagens que tornam este padro mais evoludo em relao aos anteriores so: a
transparncia no transporte de diferentes protocolos e algumas melhorias realizadas para facilitar o
gerenciamento de canais ticos. A nica desvantagem que pode ser citada a sua maior
complexidade de implementao [4].
2.1

Taxas de Transmisso
A recomendao G.709 oferece atualmente trs diferentes taxas de transmisso: OTU-1,

OTU-2 e OTU-3. Essas velocidades so derivadas das taxas j existentes nos padres SONET e
SDH. A Tabela 1 lista as taxas de transmisso de acordo com a interface G.709 e a interface
correspondente em SONET e SDH [5].
Tabela 1 Taxas de Transmisso Previstas Pela Recomendao G.709.

Interface

Taxa de

Interface

G.709

Transmisso
Total

Correspondente Correspondente Transmisso


em SONET
em SDH
do payload

OTU-1

2.666 Gbps

OC-48

STM-16

2.488 Gbps

OTU-2

10.709 Gbps

OC-192

STM-64

9.953 Gbps

OTU-3

43.018 Gbps

OC-768

STM-256

39.813 Gbps

Interface

Taxa de

2.2

Estrutura do Frame G.709 OTN


O frame definido pela recomendao G.709 constitudo de trs partes: overhead, payload

e FEC. Dois destes campos, overhead e payload, j faziam parte dos protocolos SONET e SDH. A
novidade do padro OTN a incluso de um campo exclusivo para FEC, pois seus antecessores
utilizavam apenas alguns bytes do overhead para realizar esta tcnica, o que limitava a capacidade
de correo de erro.
A Figura 1 apresenta a estrutura detalhada do frame G.709 OTN, destacando seus campos
e ilustrando sua organizao em linhas e colunas.

Figura 1 Estrutura Frame G.709 OTN.

O frame G.709 OTN, tambm chamado de multi-frame, composto de 4 frames de 4080


bytes. Cada frame contm 16 bytes de overhead, 3808 bytes de payload e 256 bytes de FEC. Os
dados so transmitidos serialmente pelo canal, iniciando-se pelo primeiro frame, seguido pelo envio
do segundo frame e assim sucessivamente. O tamanho total do multi-frame, 4x4080, permanece
inalterado para qualquer uma das taxas de transmisso vistas anteriormente, diferentemente dos
padres SONET e SDH.
2.3

Overhead
As sesses a seguir apresentaro uma breve explicao sobre os campos que compem o

overhead de um frame G.709 OTN.


2.3.1 Alinhamento
Como os dados so transmitidos serialmente em alta velocidade atravs da fibra ptica,
necessrio que o receptor seja capaz de identificar corretamente o incio e o fim de um frame [2]. A
capacidade de detectar o incio de frame no padro OTN feita atravs do campo Frame
Alignment, primeiro campo do frame, conforme a Figura 1.
A rea reservada para alinhamento possui 3 campos. Um sinal de alinhamento de 6 bytes
(FAS), um byte para indicar alinhamento de mltiplos frames (MFAS) e um campo reservado.
Dado que o byte MFAS incrementado a cada multi-frame, este campo permite realizar o
alinhamento de at 256 multi-frames consecutivos, permitindo atribuir diferentes definies a
5

alguns campos do overhead de acordo com seu valor. O sinal de alinhamento (FAS) reconhecido
pelo valor 0xF6F6F6282828, e a nica parte do pacote que enviada sem a tcnica de
embaralhamento (scrambling). O propsito da tcnica de embaralhamento impedir longos pulsos
de 0s ou 1s, permitindo a regenerao do clock e perodos mais longos de transmisso sem
alinhamento.
O receptor precisa achar o incio do frame antes de comear a processar os dados de
controle, e ainda deve ter a capacidade de identificar ausncia de sinal, ausncia de frame e perda de
frame.
2.3.2 OTU Overhead
OTU significa unidade de transporte do canal ptico, do ingls Optical channel Transport
Unit. Este campo prov funes de superviso entre dois pontos conectados por um nico canal
ptico, que possuem em suas extremidades elementos chamados de 3R (Regenerao,
Reformatao e Retemporizao), responsveis pela regenerao do sinal. Est localizado no
primeiro frame, entre as colunas 8 e 14.
O OTU overhead consiste em um campo de trs bytes para monitoramento de sesso (SM),
dois bytes para o campo GCC0 (General Communication Channel 0), utilizado para troca de
mensagens entre duas terminaes OTU, e um campo de dois bytes reservado para uso futuro. O
propsito do campo GCC ainda no est completamente definido, porm provavelmente ser usado
para gerenciamento de rede ou para sinalizao completa de protocolos como o G-MPLS (Generic
Multi Protocol Label Switching).
2.3.3 ODU Overhead
O campo ODU overhead est localizado entre as colunas 1 e 14, nos frames 2, 3 e 4 de um
multi-frame. A informao contida neste campo prov funes de gerenciamento de rede e
superviso fim-a-fim de canais pticos. A Figura 2 ilustra os campos que constituem o ODU
overhead.

Figura 2 Campos do ODU Overhead.

A maioria dos campos contidos no ODU overhead traz uma funcionalidade chamada TCM
(Tandem Connection Monitoring). Existem seis campos TCM definidos no ODU overhead para uso

em funes de gerncia de redes, possibilitando que administradores de rede possam monitorar


taxas de erro em diversos enlaces de uma rede de canais pticos chaveados. A partir da monitorao
destes campos possvel identificar os pontos da rede em que o sinal encontra-se mais fraco,
possibilitando verificar e localizar falhas. O campo APS/PCC (automatic protection switching and
protection communication channel) utiliza as informaes de monitoramento para proteger a rede
de roteamento em caminhos onde o sinal encontra-se degradado. O campo FTFL (Fault Type and
Fault Location) tambm est relacionado com funes de monitoramento de falhas na rede.
O ODU overhead contm um campo de trs bytes para monitoramento de caminho (PM).
Este campo tem sua estrutura muito semelhante ao campo SM do OTU overhead, porm sua funo
monitorar a conexo de um caminho contendo diversos chaveamentos de canais pticos, enquanto
o SM monitora apenas uma conexo entre dois pontos interligados por apenas uma fibra ptica.
Os demais campos executam funes menos relevantes, os campos RES so reservados
para futura padronizao, o campo EXP um campo experimental e no possui padronizao e os
campos GCC executam praticamente a mesma funo que exercem no OTU overhead.
2.3.4 OPU Overhead
O OPU overhead adicionado ao payload do frame e contm informaes responsveis
por adaptar os dados de diferentes protocolos para serem transportados atravs do frame OTN.
Possui um campo chamado PSI (Payload Structure Identifier), que identifica o contedo do
payload. Atualmente a recomendao G.709 prev o transporte de protocolos como o SONET/SDH,
ATM, GFP entre outros.
Este campo possui trs bytes para controle de justificao, chamados de JC (Justification
Control), utilizados para compensar deslocamentos no payload, o que pode acontecer quando o
frame transporta sinais de protocolos assncronos. A partir destes trs bytes, feita uma votao
para indicar justificao positiva (PJO), ou justificao negativa (NJO), neste caso o ltimo campo
do OPU overhead conter dados do payload.
2.4

FEC

medida que as taxas de transmisso aumentam e ultrapassam a barreira dos 10Gbps, a


degradao do sinal, causada pelo meio de transmisso, causa um impacto significativo na taxa de
erro de um canal. Para amenizar este problema e garantir a correta transmisso dos dados, mesmo
em taxas elevadas, so utilizados mecanismos de correo de erros.
Algoritmos de correo de erro utilizam informaes redundantes codificadas para fazer a
verificao e correo de erros no momento da recepo, podendo aumentar significativamente a
eficcia na transmisso de dados. Por este motivo, a incluso de um campo especfico para correo
de erro no frame OTN vista como a principal justificativa para o desenvolvimento deste padro.
7

A recomendao G.709 define que o mecanismo utilizado para a correo de erros no


padro OTN o Reed-Solomon RS(255,239). Isto significa que para cada 239 bytes de dados, so
adicionados 16 bytes para correo de erro. Este cdigo tem a capacidade de corrigir oito erros para
cada 255 bytes. Dessa maneira, em cada frame podem ser corrigidos at 128 erros. Utilizando-se a
tcnica de entrelaamento para o clculo dos bytes de paridade de um frame, possvel recuperar
128 erros consecutivos.
A tcnica de entrelaamento separa um frame em 16 sub-frames de 255 bytes, sendo o
primeiro byte do frame pertencente ao primeiro sub-frame, o segundo byte ao segundo sub-frame e
assim sucessivamente at o 16 byte, o 17 byte visto como o segundo byte do primeiro subframe. Para cada sub-frame calculam-se 16 bytes de FEC, garantindo a cobertura contra erros em
rajada. A Tabela 2 ilustra graficamente a diviso dos frames em sub-frames para o clculo do FEC.
Tabela 2 Diviso do frame em sub-frames.

OVERHEAD

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16

1
1
2
3
4
5

12
13
14
15
16

2
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32

...

239
3809
3810
3811
3812
3813
3814
3815
3816
3817
3818
3819
3820
3821
3822
3823
3824

PAYLOAD

240
3825
3826
3827
3828
3829
3830
3831
3832
3833
3834
3835
3836
3837
3838
3839
3840

...

FEC

255
4065
4066
4067
4068
4069
4070
4071
4072
4073
4074
4075
4076
4077
4078
4079
4080

importante observar que cada sub-frame corresponde a uma linha da tabela e possui um
clculo independente de FEC. Os dados so transmitidos na mesma ordem em que esto numerados
na tabela, ou seja, coluna por coluna.

3 Algoritmo de Reed-Solomon
Em 1960, Irving Reed e Gus Solomon publicaram o artigo Polymonial Codes Over
Certain Finite Fields, no Journal of the Society for Industrial and Applied Mathematics [6]. Este
artigo apresentou uma nova classe de cdigos corretores de erro que hoje so chamados de cdigos
Reed-Solomon. Estes cdigos tornaram-se muito teis devido a sua baixa complexidade e alto
poder de correo, e hoje so utilizados em diversas aplicaes de armazenamento e transmisso de
dados.
Os cdigos RS so representados na forma RS(n,k), onde n o nmero total de smbolos
em uma seqncia e k nmero de smbolos teis de uma seqncia. Outra varivel importante em
uma seqncia a capacidade de correo do cdigo, representada pela letra t. O total de smbolos
de paridade dado por 2t. A equao (1) apresenta algumas equivalncias na construo de cdigos
RS.
n = 2m 1
k = 2 m 1 2t
n k = 2t

(1)

A norma G.709 utiliza smbolos de 8 bits (m=8), o que resulta em n=255. O cdigo
utilizado o RS(255,239) (k=239). Portanto, existem 16 smbolos de paridade para cada 239 bytes
de dados, e a capacidade de correo de 8 smbolos em uma seqncia de 255 (t=8).
3.1

Campos Finitos
O processo de codificao e decodificao de cdigos no binrios utiliza matemtica de

campos finitos, tambm conhecidos como Campos de Galois (GF), em homenagem ao matemtico
francs variste Galois, que postulou a teoria de campos finitos. Para cada nmero primo, p, existe
um campo finito denominado GF(p) que contm p elementos. possvel estender GF(p) em um
campo contendo pm elementos, chamando de campo estendido de GF(p), denominado GF(pm). A
construo de cdigos RS utiliza somente campos estendidos, uma vez que se trata de um cdigo
no binrio [3].
O campo binrio GF(2) um subcampo do campo estendido GF(2m). Alm de 0s e 1s os
campos estendidos possuem uma srie de elementos representados por potncias de , onde n
apenas uma representao abstrata de um dos elementos do campo. Um conjunto infinito de
elementos pode ser formado iniciando-se com os elementos {0,1,,2,...}, onde o prximo elemento
da seqncia gerado atravs da multiplicao do ltimo elemento obtido por . Entretanto, para
obter um conjunto finito de elementos devemos impor as seguintes condies: um campo finito

deve conter apenas 2m elementos1 e deve ser fechado nas operaes de soma e multiplicao, isto ,
uma soma ou produto de um elemento do campo por qualquer outro elemento do campo, deve
resultar sempre em um elemento que tambm pertena ao campo. Desse modo, qualquer elemento
de um campo que tiver potncia maior que 2m-1, pode ser reduzido a um elemento com potncia
menor que 2m-1, conforme a equao (2).

(2

+n)

= (2

1)

(2)

n +1 = n +1

Portanto, podemos dizer genericamente que um campo definido por GF(2m) possui os
seguintes elementos:
GF (2 m ) = {0, 0 , 1 2 ,..., 2

(3)

Cada um dos 2m elementos de um campo GF(2m), pode ser representado por um polinmio
distinto com grau menor ou igual a m-1. Os coeficientes deste polinmio podem ser 0 ou 1, e o grau
do polinmio corresponde ao maior expoente com coeficiente igual a 1.
Considerando m=3, temos um campo denotado por GF(23). Este campo possui 8
elementos, sendo um elemento nulo e 7 elementos no nulos. A Figura 3 mostra o desenvolvimento
deste campo em funo do polinmio f(x)=x+x+1. O mtodo de obteno desta seqncia ser
apresentado ao longo desta seo.

Figura 3 Elementos de um campo desenvolvido em GF(2).

Como podemos ver, o elemento denotado por 7 igual ao elemento 0, isto comprova a
equao (3), que mostra que um expoente mximo de em um campo 2m-2, no caso de m=3, o
campo deve terminar em 6.
Para gerar um campo finito necessrio utilizar uma classe especial de polinmios,
denominada de polinmios primitivos. Existe uma srie de regras matemticas que definem se um

No confundir 2m elementos do campo com n=2m-1 (quantidade de smbolos em uma sequncia).

10

polinmio primitivo ou no, porm j existem polinmios primitivos pr-determinados de acordo


com o valor de m, e neste trabalho, apenas sua aplicao prtica relevante, portanto a seguinte
definio se faz satisfatria: Um polinmio primitivo aquele que gera a seqncia completa de
elementos de um campo finito sem repeties. Polinmios no primitivos no geram toda a
seqncia de elementos pertencentes a um campo, repetindo seqncias incompletas antes de se
chegar ao nmero de elementos do campo.
A Tabela 3 apresenta uma srie de polinmios primitivos utilizados na construo de
campos finitos, de acordo com o valor de m [3].
Tabela 3 Polinmios Primitivos.

m
3
4
5
6
7
8
9
10
11
12

m
13
14
15
16
17
18
19
20
21
22

1+X+X
1+X+X4
1+X2+X5
1+X+X6
1+X3+X7
1+X2+X3+X4+X8
1+X4+X9
1+X3+X10
1+X2+X11
1+X+X4+X6+X12

1+X+X3+X4+X13
1+X2+X3+X4+X8
1+X+X15
1+X+X3+X12+X16
1+X3+X17
1+X7+X18
1+X+X2+X5+X19
1+X3+X21
1+X2+X22
1+X+X23

O mapeamento dos elementos de um campo finito feito atravs do seu polinmio


primitivo. Para ilustrar de maneira simples a formao de um campo finito a partir de seu polinmio
primitivo, consideramos o campo apresentado na Figura 3, onde o polinmio primitivo
f(x)=x+x+1 e m=3. As razes deste polinmio podem ser encontradas achando-se os valores de x
que satisfazem a igualdade f(x)=0. Os elementos binrios bsicos, 0 e 1, no so razes deste
polinmio, pois f(0)=1 e f(1)=1, e de acordo com a teoria da lgebra um polinmio de grau m deve
ter m razes. Entretanto, estamos trabalhando com o campo estendido GF(23), que possui por
definio 8 elementos, dos quais 3 devem ser razes. Neste caso, tomando 1 como uma das razes
possvel obter a seguinte igualdade:

f ( ) = 0
1+ + 3 = 0

(4)

3 = 1
Em campos binrios, a soma de dois elementos pode ser obtida atravs da operao XOR.
Portando, a seguinte igualdade vlida: -1=+1. Logo, a igualdade obtida na equao (4) pode ser
escrita da seguinte forma:

3 = 1+

11

(5)

Desta forma 3 definido como uma soma de elementos de menor ordem, e a partir de 3
possvel obter os demais elementos do campo atravs de multiplicaes por , como mostram as
equaes a seguir:

4 = 3 = (1 + ) = + 2
5 = 4 = ( + 2 ) = 2 + 3 = 2 + + 1

(6)

6 = 5 = ( 2 + + 1) = 3 + 2 + = 1 + + 2 + = 1 + 2
A equao (7) apresenta algumas definies feitas para os elementos de ordem menor
que 3.

0 =1
(7)

1 = x
2 = x2

A partir das definies apresentadas na equao (7) e das igualdades encontradas nas
equaes (5) e (6), possvel obter o campo completo, como mostra a Tabela 4.
Tabela 4 Construo do campo GF(23).

Potncia de
0
0
1
2
3
4
5
6

Polinmio
0
1
X
X2
X+1
X2+X
X2+X+1
X2+1

Valor
000
001
010
100
011
110
111
101

Decimal
0
1
2
4
3
6
7
5

O mapeamento dos elementos de um campo finito pode ser desenvolvido atravs de um


registrador de deslocamento com realimentao linear, mais conhecido como LFSR (Linear
Feedback Shift Register). O circuito apresentado na Figura 4 gera os 7 elementos no nulos do
campo apresentado na Figura 3 e desenvolvido da equao (4) at a equao (7). importante
observar que as conexes com realimentao correspondem aos coeficientes do polinmio gerador
f(x)=x+x+1. Iniciando-se com o estado no nulo 001, que corresponde a 0, todos as demais
potncias de so geradas, na mesma ordem em que aparecem na Tabela 4.

12

X1

X0

S0=1

X2

X3

S0=0

S0=0

Figura 4 Circuito LFSR gerador do campo GF(23), S0 estado inicial.

Uma importante propriedade dos campos finitos a definio das operaes de adio e
multiplicao, pois um campo finito deve ser fechado para estas operaes. A Tabela 5 apresenta os
resultados para as operaes de adio e multiplicao dos elementos do campo GF(23), somente
para elementos no nulos. A soma pode ser obtida atravs da operao XOR quando os elementos
encontram-se na representao binria, j o produto obtido atravs da soma dos expoentes de
mdulo (2m-1), neste caso mdulo 7.
Tabela 5 Adio e multiplicao sobre o campo GF(23).
0

0
1
2
3
4
5
6

0
3
6
1
5
4
2

3
0
4
0
2
6
5

Adio
2 3
6 1
4 0
0 5
5 0
1 6
3 2
0 4

5
2
1
6
0
0
3

4
6
3
2
0
0
1

2
5
0
4
3
1
0

0
1
2
3
4
5
6

0
1
2
3
4
5
6

Multiplicao
2 3 4
1 2 3 4
2 3 4 5
3 4 5 6
4 5 6 0
5 6 0 1
6 0 1 2
0 1 2 3
1

5
5
6
0
1
2
3
4

6
6
0
1
2
3
4
5

Tomando como exemplo a soma 3(011)+5(111), o resultado corresponde a operao 011


XOR 111, que resulta em 100, correspondente a 2, conforme a Tabela 4.
3.2

Codificao Reed-Solomon

O processo de codificao Reed-Solomon consiste na gerao dos smbolos de paridade de


uma seqncia. Como foi citado anteriormente, o nmero de smbolos de paridade de uma
seqncia corresponde a 2t, onde t o nmero de smbolos que o cdigo capaz de corrigir. A
codificao RS leva em conta o polinmio gerador do cdigo, que genericamente possui a seguinte
forma:

g ( X ) = g 0 + g1 X + g 2 X 2 + ... + g 2t 1 X 2t 1 + X 2t

(8)

O grau do polinmio gerador igual ao nmero de smbolos de paridade que o cdigo


possui, no caso 2t, o que significa que devem existir exatamente 2t potncias de que sejam razes
deste polinmio. Normalmente so utilizadas as potncias , 2,..., 2t, porm no necessrio
iniciar com a raiz , podendo-se iniciar com qualquer potncia de . A equao (9) apresenta a

13

obteno de um polinmio gerador para o cdigo RS(7,3), que possui 4 smbolos de paridade, logo
seu polinmio gerador ter 4 razes.
g ( X ) = ( X )( X 2 )( X 3 )( X 4 )
g ( X ) = ( X 2 ( + 2 ) X + 3 )( X 2 ( 3 + 4 ) X + 7 )
g ( X ) = ( X 2 4 X + 3 )( X 2 6 X + 0 )
4

g ( X ) = X ( + ) X + ( +
4

10

g( X ) = X X + X X +

(9)
2

+ ) X ( + ) X +

Seguindo a representao do grau menor at o maior, e trocando os sinais negativos por


positivos, pois como vimos na sesso anterior +n=-n na teoria de campos finitos, o polinmio
g(X) obtido na equao (9) pode ser representado conforme a equao abaixo:
g( X ) = 3 + 1 X + 0 X 2 + 3 X 3 + X 4

(10)

No caso da recomendao G.709 OTN, existem 16 smbolos de paridade, o que leva a um


polinmio gerador de grau 16. A equao (11) mostra como obtido o polinmio gerador para o
RS(255,239) do padro OTN [1].
15

g( X ) = ( X n )

(11)

n =0

Para ilustrar o mecanismo de gerao dos smbolos de paridade, apresentaremos um


exemplo utilizando o cdigo RS(7,3), onde temos 3 smbolos de mensagem e 4 de paridade,
levando em conta o envio da mensagem 1 3 5. Esta mensagem exemplo corresponde ao envio do
smbolo 111(5), seguido dos smbolos 011(3) e 001(1). Primeiramente representamos a
mensagem na forma polinomial, m(X), como segue:
m( X ) = 1 + 3 X + 5 X 2

(12)

Para obter os smbolos de paridade necessrio encontrar o resto da diviso polinomial de


m(X) por g(X). Para isso, devemos multiplicar m(X) por X2t, deslocando-a 2t=4 estgios para direita,
o que resulta no seguinte polinmio: 1X4+3X5+ 5X6. O prximo passo dividir a mensagem
deslocada para a direita pelo polinmio gerador apresentado na equao (10), o que deve resultar no
seguinte polinmio:
p( X ) = 0 + 2 X + 4 X 2 + 6 X 3

(13)

O processo de diviso polinomial em campos finitos deve levar em conta as operaes de


adio e multiplicao contidas na Tabela 5, e uma operao dispendiosa de se executar na forma
algbrica, sem o auxlio de software ou de hardware. Na prtica, a codificao RS realizada

14

atravs de registrador de deslocamento (LFSR), que consiste numa operao bastante simples. Por
este motivo, o processo de diviso no ser demonstrado neste trabalho.
A seqncia completa de um cdigo obtida atravs da soma do polinmio de mensagem
deslocado para a direita, 1X4+3X5+ 5X6, e do polinmio de paridade, apresentado na equao
(13), o que resulta no seguinte polinmio:
U(X ) = 0 + 2 X + 4 X 2 + 6 X 3 +1X 4 + 3 X 5 + 5 X 6

(14)

Onde os smbolos so enviados na ordem do maior grau do polinmio at o menor.


3.2.1 Codificao Reed-Solomon Atravs de Registrador de Deslocamento

A utilizao de circuitos eletrnicos para realizar a codificao Reed-Solomon, levando em


conta o polinmio gerador apresentado na equao (10), necessita a implementao de um
registrador de deslocamento com realimentao (LFSR), conforme mostra a Figura 5.

Figura 5 Codificador Reed-Solomon para RS(7,3).

Observa-se que os termos que multiplicam a entrada realimentada do LFSR correspondem


aos coeficientes do polinmio gerador conforme a equao (10). Cada registrador deste LFSR
armazena um valor de 3 bits, que pode representar uma das 7 potncias de ou o valor 0.
O processo de gerao dos smbolos de paridade pelo circuito da Figura 5 pode ser descrito
da seguinte maneira:
1) Durante os primeiros k ciclos de clock, onde k representa o nmero de smbolos de dados
teis de uma seqncia, a chave 1 permanece na posio 0, permitindo a realimentao nos nk estgios do registrador de deslocamento, onde n-k indica o nmero de smbolos de paridade.
2) A chave 2 fica na posio 0, conectando a entrada diretamente sada, permitindo o by-pass
dos smbolos de mensagem.
3) Aps a transferncia da mensagem de k smbolos, as chaves passam para a posio 1, ligando
o LFSR com a sada do circuito e zerando a realimentao.

15

4) Nos ciclos de clock restantes (n-k), os smbolos de paridade contidos nos registradores so
deslocados para a sada e os valores dos registradores so zerados.
A tabela abaixo mostra o processo de gerao dos smbolos de paridade a partir do LFSR,
detalhando o contedo dos registradores durante o processo de entrada dos 3 smbolos de
mensagem utilizados anteriormente: 1 3 5.
Tabela 6 Contedo dos registradores do circuito LFSR durante a codificao.

Input Queue
1 3 5
1 3
1
-

Ciclo de Clock
0
1
2
3

Contedo dos Registradores


0
0
0
0
1
6
5
1
3
0
2
2
0
2
4

Realimentao
5
0
4
-

Aps o terceiro ciclo de clock, os registradores possuem os quatro smbolos de paridade 0,


2, 4 e 6, como mostra a ltima linha da tabela. Aps o clculo, com as chaves 1 e 2 na posio 1,
os smbolos de paridade so deslocados para a sada ao mesmo tempo que os registradores so
zerados para receber uma nova mensagem. Desse modo, a seqncia completa na forma polinomial
pode ser expressa da seguinte maneira:
U(X ) = 0 + 2 X + 4 X 2 + 6 X 3 +1X 4 + 3 X 5 + 5 X 6
= (001) + (100) X + (110) X 2 + (101) X 3 + (010) X 4 + (011) X 5 + (111) X 6

(15)

As razes da seqncia gerada devem ser as mesmas razes do polinmio gerador, de


maneira que qualquer uma das razes de g(X) aplicadas como entrada no polinmio U(X) deve
resultar zero. A partir desta anlise possvel verificar se existem erros em uma mensagem
recebida.
3.3

Decodificao Reed-Solomon

Neste captulo foi desenvolvido um exemplo de codificao Reed-Solomon utilizando um


cdigo RS(7,3), gerando a seqncia descrita pela equao (14). Para exemplificar o processo de
decodificao assumiremos que durante a transmisso, a seqncia tenha sido corrompida de tal
maneira que dois smbolos tenham sido recebidos com erro. Lembrando que um cdigo RS(7,3)
pode corrigir no mximo dois erros.
Para uma seqncia de sete smbolos, o padro de erro pode ser representado pela seguinte
equao:
6

e( X ) = e n X n
n =0

Supondo que para este exemplo o padro de erro da mensagem corrompida seja:

16

(16)

e( X ) = 0 + 0 X + 0 X 2 + 2 X 3 + 5 X 4 + 0 X 5 + 0 X 6
= (000) + (000) X + (000) X 2 + (100) X 3 + (111) X 4 + (000) X 5 + (000) X 6

(17)

Podemos dizer que um smbolo de paridade foi corrompido em 1 bit (2), e um smbolo da
mensagem foi corrompido em 3 bits (5). A seqncia recebida, r(X), pode ser representada como a
soma da seqncia transmitida e do padro de erro, como mostra a equao (18).

r ( X ) = U ( X ) + e( X )

(18)

A partir da equao (18), do polinmio transmitido U(X), equao (14), e do polinmio de


erro e(X), equao (17), possvel obter a mensagem recebida aps corrupo dos dados, como
mostra a equao (19).

r ( X ) = (001) + (100) X + (110) X 2 + (001) X 3 + (101) X 4 + (011) X 5 + (111) X 6


r( X ) = 0 + 2 X + 4 X 2 + 0 X 3 + 6 X 4 + 3 X 5 + 5 X 6

(19)

Neste exemplo existem quatro incgnitas: duas localizaes de erro e dois valores de erro.
Esta uma diferena importante de cdigos no binrios em relao a cdigos binrios. Em cdigos
binrios basta achar a localizao do erro, enquanto em cdigos no binrios necessrio descobrir
tambm o valor do erro.
O processo de decodificao Reed-Solomon possui diversas etapas, tais como: o clculo da
sndrome, o clculo dos coeficientes do polinmio localizador de erro, o clculo das localizaes de
erro e dos valores dos erros. Como existe um tempo de processamento em cada uma das etapas da
decodificao, necessrio tambm um bloco de atraso para sincronizar a gerao dos valores de
erro com a mensagem recebida. Desta maneira podemos representar a arquitetura simplificada de
um decodificador Reed-Solomon da seguinte maneira:

Figura 6 Diagrama de blocos do decodificador Reed-Solomon.

3.3.1 Clculo da Sndrome

Uma sndrome o resultado da verificao das razes do polinmio gerador como entrada
do polinmio r(x), para determinar se a mensagem recebida pertence ao conjunto de seqncias
vlidas de um cdigo. Se uma seqncia pertence ao conjunto de seqncias vlidas, o valor da
17

sndrome deve ser 0. Qualquer valor diferente de zero indica a presena de erros. Uma sndrome
composta de n-k smbolos. Logo o cdigo RS(7,3) possui sndromes de 4 smbolos.
A equao (20) mostra que qualquer seqncia vlida mltipla do polinmio gerador
(equao (10)), e por este motivo as razes de g(X) devem tambm ser razes de U(X).
U ( X ) = m( X ) g ( X )

(20)

Como r(X)=U(X)+e(X), o polinmio r(X) avaliado para cada raiz do polinmio g(X), s vai
retornar zeros se a seqncia recebida no conter erros. O clculo da sndrome pode ser descrito da
seguinte forma:
i = 1,..., n k

S i = r ( X ) X = i = r ( i )

(21)

Como exemplo de clculo da sndrome, aplicaremos a equao (21) no polinmio r(X)


descrito na equao (19), que possui dois smbolos corrompidos. As equaes (22), (23), (24) e (25)
apresentam o clculo dos quatro smbolos de sndrome deste exemplo. Os expoentes de so
obtidos atravs da substituio de X por i na equao r(X), logo aps so reduzidos utilizando-se a
operao mod 7. O resultado final obtido atravs da aplicao da funo XOR em todos os
smbolos que compem a soma.
S1 = r ( ) = 0 + 3 + 6 + 3 + 9 + 8 + 11
S1 = 0 + 3 + 6 + 3 + 2 + 1 + 4

(22)

S1 = 3

S 2 = r ( 2 ) = 0 + 4 + 8 + 6 + 14 + 13 + 17
S2 = 0 + 4 + 1 + 6 + 0 + 6 + 3
S2 = 5

(23)

S 3 = r ( 3 ) = 0 + 5 + 10 + 9 + 18 + 18 + 23
S3 = 0 + 5 + 3 + 2 + 4 + 4 + 2
S3 = 6

(24)

S 4 = r ( 4 ) = 0 + 6 + 12 + 12 + 22 + 23 + 29
S4 = 0 + 6 + 5 + 5 + 1 + 2 + 1
S4 = 0

(25)

Este exemplo confirma que existem erros em r(X), pois trs smbolos da sndrome so
diferentes de zero.

18

3.3.2 Localizao dos Erros

Supondo que existem v erros em uma seqncia, nas localizaes Xj1, Xj2,..., Xjv, o
polinmio de erro e(X) apresentado na equao (16) pode ser representado da seguinte maneira:
e ( X ) = e j1 X

j1

+ e j2 X

j2

+ ... + e jv X

jv

(26)

Para corrigir uma seqncia corrompida necessrio encontrar os valores dos erros,
denotados por ejl, e as localizaes dos erros, denotadas por Xjl, onde l=1,2,...,v. Primeiramente
definimos uma varivel correspondente a uma localizao de erro como l = jl. Em seguida,
obtemos os 2t smbolos da sndrome substituindo i no polinmio de erro e(X), para i=1,2,...,2t,
como mostra a equao (27). importante observar que as sndromes podem ser tanto avaliadas
atravs da mensagem recebida r(X), quanto atravs do padro de erro e(X), pois como mostra a
equao (18) o polinmio r(X) uma soma de U(X) e e(X), e a sndrome de U(X) sempre ser zero.
S1 = e( ) = e j1 1 + e j 2 2 + ... + e jv v
S 2 = e( 2 ) = e j1 12 + e j 2 22 + ... + e jv v2

(27)

S 2t = e( 2t ) = e j1 12t + e j 2 22t + ... + e jv v2t

Existem 2t incgnitas: t valores de erros e t localizaes. Tambm existem 2t equaes.


Entretanto, as 2t equaes no podem ser resolvidas de modo usual pois so no-lienares (algumas
incgnitas possuem expoentes). As tcnicas que resolvem este sistema de equaes so conhecidas
como algoritmos de decodificao Reed-Solomon.
Uma vez que um vetor de sndromes diferente de zero foi calculado, podemos afirmar que
a seqncia recebida possui erros. Portanto, necessrio descobrir a localizao dos erros. Um
polinmio localizador de erros, (X), pode ser definido da seguinte maneira:

( X ) = (1 + 1 X )(1 + 2 X )...(1 + v X )
( X ) = 1 + 1 X + 2 X 2 + ... + v X v

(28)

As razes de (X) so 1/1, 1/2,...,1/ v. Logo, o inverso das razes de (X) indicam as
localizaes de erro de do padro de erro e(X). Para determinar os coeficientes 1, 2,..., v,
necessrio utilizar uma tcnica denominada modelagem auto-regressiva, que utiliza uma matriz de
sndromes, onde as t primeiras sndromes so utilizadas para prever a prxima sndrome, como
mostra a equao abaixo:

19

S1
S
2
...

St

S2
S3
...
S t +1

...

S t t S t +1
... S t +1 t 1 S t + 2
=
... ... ... ...


... S 2t 1 1 S 2t

(29)

No caso de um cdigo RS(7,3) a capacidade mxima de correo de 2 erros, portanto


devemos encontrar 1 e 2, o que leva a construo de uma matriz 2x2, apresentada na equao
abaixo:
S1 S 2 2 S 2
S S = S
3 1
4
2
3
5
2 6
5
=
6
1 0

(30)

(31)

Um dos possveis mtodos para encontrar os valores de 1 e 2, atravs da inversa da


matriz 2x2, como mostra a equao (32). A inverso de matrizes em campos finitos leva em
considerao as mesmas propriedades utilizadas nos conjuntos numricos conhecidos, porm
sempre levando em conta as operaes de adio e multiplicao restritas ao campo finito.
1

3 5 6 2
5
=
6
0 1
1 0 6 0
0
= 6
5
0

(32)

A partir dos coeficientes 1 e 2 encontrados na equao (32) e do polinmio (X)


apresentado na equao (28), podemos representar o polinmio localizador de erro da seguinte
forma:

(X ) = 0 + 6 X + 0 X 2

(33)

As razes do polinmio (X) so as inversas das localizaes de erro. Uma vez que estas
razes so encontradas, as localizaes de erro sero conhecidas. As razes de (X) podem ser um
ou mais elementos do campo. Estas razes podem ser encontradas atravs de um teste exaustivo do
polinmio (X) para todos os elementos do campo, como mostram as equaes abaixo. Qualquer
elemento X que resultar em (X)=0 uma raiz e corresponde a uma localizao de erro.

20

( 0 ) = 0 + 6 + 0 = 6 0
( 1 ) = 0 + 7 + 2 = 2 0
( 2 ) = 0 + 8 + 4 = 6 0
( 3 ) = 0 + 9 + 6 = 0 ERRO
4

10

(34)

( ) = + + = 0 ERRO
( 5 ) = 0 + 11 + 10 = 2 0
( 6 ) = 0 + 12 + 12 = 0 0
Podemos ver que os elementos 3 e 4 so razes do polinmio (X). Isto significa que
existem erros nas localizaes 1=1/4=3 e 2=1/3=4, pois as razes de (X) equivalem ao inverso
das localizaes de erro.
3.3.3 Valores dos Erros

Um erro foi definido como ej1, onde o ndice j se refere a localizao e o ndice l identifica
a ordem do erro. Como cada valor de erro vinculado a uma localizao particular, a notao pode
ser simplificada para el. Para determinar os valores de erro associados as localizaes encontradas
na sesso anterior, 1=3 e 2=4, qualquer uma das quatro equaes de sndromes podem ser
utilizadas. A partir da equao (27) vamos usar S1 e S2.
S1 = e( ) = e1 1 + e2 2
S 2 = e( 2 ) = e1 12 + e2 22

(35)

Estas equaes podem ser escritas na forma polinomial da seguinte maneira:

1 2 e1 S1
2 2 e = S
2 2
1
2
3
4
e1 3
6
=
1 e2 5

(36)

Para resolver a equao (36) e encontrar os valores de erro, e1 e e2, podemos utilizar a
mesma tcnica apresentada na equao (32), como mostram as equaes a seguir:
1

3 4 S1 e1
6
=
1 S 2 e 2


=
4 5 5
5

21

(37)

Com as localizaes e os valores de erro encontrados possvel estimar o polinmio de


erro (X) conforme a equao abaixo:
( X ) = e1 X

j1

+ e2 X

j2

( X ) = 2 X 3 + 5 X 4

(38)

O algoritmo apresentado deve decodificar corretamente a mensagem recebida, uma vez


que ela foi corrompida em dois smbolos, que exatamente a capacidade de correo do cdigo.
Para confirmar se a decodificao foi executada corretamente necessrio estimar a seqncia
transmitida, (X), e verificar se ela representa a verdadeira mensagem transmitida, U(X). Esta
verificao feita da seguinte maneira:

( X ) = r ( X ) + ( X )

(39)

Extraindo r(X) da equao (19) e (X) da equao (38), encontramos o seguinte polinmio

(X):
( X ) = 0 + 2 X + 4 X 2 + ( 0 + 2 ) X 3 + ( 6 + 5 ) X 4 + 3 X 5 + 5 X 6
(X ) = 0 + 2 X + 4 X 2 + 6 X 3 +1X 4 + 3 X 5 + 5 X 6

(40)

A partir das equaes (14) e (40) podemos constatar que (X)=U(X), o que indica que a
mensagem foi decodificada corretamente, aps a corrupo de dois smbolos.
3.4

Concluses

Neste captulo estudamos os algoritmos de codificao e decodificao Reed-Solomon


atravs de um exemplo simples, levando em conta o cdigo RS(7,3). O propsito deste trabalho
aplicar estes algoritmos para a implementao do cdigo RS(255,239), que possui smbolos de 8
bits, o que acelera as etapas de codificao e decodificao e possui maior poder de correo de
erros. Entretanto, quanto maior o smbolo, maior a complexidade de implementao.

22

4 Arquitetura desenvolvida
No captulo anterior estudamos o algoritmo de Reed-Solomon com nfase na matemtica
de campos finitos e na demonstrao matemtica das etapas de codificao e decodificao. Porm,
na prtica, o algoritmo de Reed-Solomon implementado de uma maneira um pouco diferente, pois
no estamos mais no domnio de campos finitos e sim no domnio binrio. Por estar trabalhando no
nvel lgico e utilizando a matemtica de campos finitos foi necessrio desenvolver um
multiplicador especial. O projeto do multiplicador utilizado neste trabalho apresentado na seo
4.1.
O processo de codificao normalmente segue o mesmo princpio de registrador de
deslocamento apresentado na Figura 5. Entretanto, a arquitetura do decodificador pode variar
bastante dependendo das necessidades de cada projeto. Diversas propostas de implementao foram
estudadas para definir qual a mais adequada para este trabalho, sendo avaliadas as vantagens e
desvantagens de cada uma delas.
No padro OTN, um frame dividido em 16 sub-frames de 255 bytes, e cada sub-frame
corresponde a uma mensagem que deve ser codificada ou decodificada paralelamente, como foi
descrito no captulo 2. O mdulo responsvel por fornecer os dados para o decodificador deve ser
capaz de realizar esta tarefa a uma freqncia de 200Mhz e 64 bits por ciclo de clock. Portanto, a
replicao dos mdulos, tanto do codificador quanto do decodificador, obrigatria, pois cada
mdulo pode tratar um dado de 8 bits por ciclo.
4.1

Multiplicador Genrico Para GF(2m)

Para realizar o produto de dois smbolos arbitrrios do campo de Galois( 2 m ), onde m


representa o tamanho em bits destes smbolos, pode-se fazer o uso de um dos diversos circuitos
multiplicadores existentes. O tipo mais comum de multiplicador utiliza LFSR, ou registrador de
deslocamento com realimentao linear [7]. Este tipo mostra-se bastante simples e econmico,
porm efetua o produto sequencialmente em m ciclos de relgio o que conduz a baixo desempenho.
Sendo o desempenho um dos requisitos deste trabalho, pois a taxa de injeo de dados no
codificador e decodificador muito alta, se decidiu utilizar um multiplicador que execute sua
computao espacialmente ao invs de sequencialmente.
Inicialmente utilizou-se multiplicadores implementados em tabela. Porm, esta alternativa
se mostrou dispendiosa, pois requer uma ocupao de rea demasiada grande. Sendo a rea tambm
um dos principais requisitos deste trabalho, recorreu-se ao uso do multiplicador genrico,
organizado de maneira celular, descrito em [7]. A nica vantagem do multiplicador implementado
em tabela a velocidade de processamento, porm enquanto este utiliza 128 blocos lgicos para

23

uma multiplicao por constante, um multiplicador celular utiliza apenas 10. Para uma
multiplicao genrica utiliza-se 360 blocos lgicos para um multiplicador implementado em
tabela, enquanto que um celular utiliza 60.
Este multiplicador composto de uma matriz de m 2 clulas combinacionais idnticas
conectadas entre si em cadeia. Na Figura 7 observa-se a clula e o multiplicador juntamente com
suas linhas, ou registradores, de entrada e sada.

Figura 7 Multiplicador Genrico para GF(28).

A entradaA e a entradaB so conectadas, respectivamente, no sinal a das clulas da


primeira linha e no sinal b das clulas da primeira coluna do multiplicador. Por exemplo, o stimo
bit da entradaA propagado para todas as clulas da primeira coluna, o sexto bit para todas da
segunda coluna, e assim por diante. Ocorre da mesma forma com a entradaB. O stimo bit
propagado para todas as clulas da primeira linha, o sexto bit pra todas da segunda linha, etc. O
sinal y da primeira clula permanece sempre conectado em 0, assim como os sinais z de todas as
clulas da primeira linha e da ultima coluna. Existe ainda, na clula, um sinal de entrada
denominado fi, que permanece constante, utilizado para determinar polinmio primitivo do Campo
de Galois que ser usado no multiplicador.
A primeira linha reproduz o polinmio entradaB(7)entradaA(x). Os coeficientes gerados
em y so propagados para z, uma coluna esquerda e uma linha abaixo, deslocando o resultado do
produto um bit esquerda, produzindo o polinmio entradaB(7)xentradaA(x). Esta operao
anloga a um ciclo de deslocamento no LFSR correspondente. Na primeira coluna, as sadas y de
cada clula so conectados nas entradas y da clula imediatamente abaixo representando o sinal de
feedback do LFSR. Isto reduz o termo xm usando xm = fi(0) + fi(1)x + ... + fi(m-1)xm-1. O
polinmio entradaB(6)entradaA(x) adicionado na segunda linha sendo ento produzido outro
polinmio: [entradaB(7)xentradaA(7) + entradaB(6)entradaA(x)] mod fi(x). Isto feito linha
aps linha at que o produto sada(x) = entradaA(x)entradaB(x) mod fi(x) seja propagado para os
sinais y de todas as clulas da ltima linha.
24

4.2

Codificador

A Figura 8 mostra o esquemtico do codificador desenvolvido neste trabalho. Por motivos


de espao no foi possvel representar todos os registradores e multiplicadores utilizados no clculo
dos smbolos de paridade, mas como podemos ver, a estrutura bastante similar com a arquitetura
apresentada na Figura 5.

Figura 8 Arquitetura do codificador desenvolvido.

No caso especfico da recomendao G.709, so necessrios 16 registradores de 8 bits para


armazenar os valores temporrios dos smbolos de paridade e por conseqncia, 16 multiplicadores
so utilizados para realizar o clculo. importante observar que as multiplicaes realizadas nesta
etapa sempre so por constantes, que equivalem aos coeficientes do polinmio gerador da
recomendao G.709. Os coeficientes do polinmio gerador, derivados da equao (11), so
apresentados na equao (41).

g ( X ) = x 16 + 120 x 15 + 104 x 14 + 107 x 13 + 109 x 12 + 102 x 11


+ 161 x 10 + 76 x 9 + 3 x 8 + 91 x 7 + 191 x 6 + 147 x 5

(41)

+ 169 x 4 + 182 x 3 + 194 x 2 + 225 x + 120


A forma de onda apresentada na Figura 9 mostra o incio do funcionamento do codificador.

Figura 9 Incio do processo de codificao.

25

O codificador possui duas entradas principais: valid e input. O sinal valid, quando em nvel
lgico 1, indica que os dados de 8 bits presentes no sinal input so dados vlidos e devem ser
utilizados para o clculo de paridade. As duas entradas so armazenadas nos registradores valid_reg
e input_reg. Este armazenamento sincroniza as entradas aos registradores (rs_registers) evitando-se
um caminho combinacional entre a entrada input com os multiplicadores. O registrador rs_registers
subdividido em 16 registradores de 8 bits que armazenam os valores temporrios para o clculo
dos smbolos paridade. Cada registrador alimentado pela soma de seu registrador vizinho com a
multiplicao do sinal feedback pelo respectivo coeficiente do polinmio gerador. Durante o
recebimento dos dados vlidos, enquanto o sinal valid estiver em 1, o codificador apenas repassa
os dados da entrada diretamente para a sada do circuito atravs do sinal output.
Aps 239 ciclos de clock com o sinal valid em 1, os 16 bytes de paridade
correspondentes ao pacote recebido encontram-se armazenados em rs_registers. Nos 16 ciclos de
clock seguintes estes dados so enviados para a sada como mostra a forma de onda apresentada na
Figura 10.

Figura 10 Envio dos smbolos de paridade.

Como podemos observar na Figura 10, imediatamente aps a transio de valid para 0, o
sinal feedback passa a ser 00 e a sada recebe o ltimo byte de rs_registers, que deslocado a
cada ciclo de clock, de maneira que todos os smbolos contidos nos registradores so enviados para
a sada e os registradores do mdulo so zerados.
4.3

Decodificador

Como vimos no captulo anterior, o processo de decodificao Reed-Solomon muito


mais complexo que a codificao, sendo realizado em diversas etapas. Por este motivo, o circuito

26

responsvel pela decodificao possui diversos sub-mdulos, e diversas implementaes possveis


de realizar. Uma arquitetura proposta em [8] possui basicamente as mesmas caractersticas da
arquitetura alvo deste trabalho, sendo utilizada como base para a comparao de outras arquiteturas.
Basicamente o decodificador possui trs blocos principais, so eles: a unidade de clculo
das sndromes, o solucionador da Equao Chave, que relaciona as sndromes aos polinmios
localizador e avaliador de erros, o algoritmo de busca das localizaes e dos valores de erros.
A unidade de clculo da sndrome responsvel por verificar se as razes do polinmio
gerador so as mesmas razes da mensagem recebida, vista como um polinmio. No caso do
RS(255,239) a mensagem recebida vista como um polinmio de grau 255, e se no tiver erros, as
razes deste polinmio so as mesmas do polinmio gerador. No caso de uma mensagem recebida
com erros, as razes do polinmio gerador, aplicadas como entrada da mensagem recebida, geram
um conjunto no nulo de sndromes, que correspondem ao padro de erro inserido na mensagem e
podem ser relacionadas com o polinmio localizador de erros e com o polinmio avaliador de erros
atravs da seguinte equao:

( X ) S ( X ) = ( X ) mod x 2t

(42)

Onde S(X) representa o conjunto de sndromes, (X) representa o polinmio localizador de


erros e (X), o polinmio avaliador de erros.
A equao (42) normalmente denominada pela literatura de Equao Chave, pois ela a
etapa principal e mais complexa etapa do processo de decodificao. Diversos mtodos de
implementao em hardware para resolv-la foram propostas. O algoritmo de Berlekamp-Massey e
o algoritmo Euclideano so os mais eficientes para resolver este problema [9]. O algoritmo
Euclideano mais simples que o algoritmo de Berlekamp-Massey e possui estrutura mais regular e
escalvel, entretanto, necessita mais blocos lgicos para ser implementado devido ao emprego de
diviso polinomial [8]. O algoritmo original de Berlekamp-Massey no tem mais sido utilizado em
implementaes atuais devido a sua estrutura irregular e por possuir um caminho crtico mais longo
[10], o que no possibilita freqncias de clock muito elevadas. Algumas modificaes no
algoritmo original de Berlekamp-Massey permitem estruturas mais regulares e caminho crtico mais
curto, porm utilizam mais multiplicadores de campo finito [11], o que acaba consumindo mais
blocos lgicos.
Em [12] e [13] so propostas arquiteturas para implementar o algoritmo original de
Berlekamp-Massey. Essas implementaes utilizam um mdulo de diviso de campos finitos,
composto por um mdulo inversor e um multiplicador. J nas implementaes propostas em [10],
[11], [14] e [15], so utilizados algoritmos modificados do Berlekamp-Massey, sem o uso de
inversores, porm utilizam 3t multiplicadores contra 2t do algoritmo original. As implementaes
propostas em [9] e [16] utilizam variaes do algoritmo Euclideano para resolver a Equao Chave.

27

Na ltima etapa da decodificao, os polinmios obtidos atravs da soluo da Equao


Chave so utilizados para determinar as localizaes e os valores dos erros atravs de dois
algoritmos, denominados Chien search e Forney. A sada do ltimo mdulo possui o padro de erro
inserido na mensagem recebida, desde que esta mensagem no possua mais de t erros. Para se obter
a mensagem decodificada necessrio armazenar a mensagem recebida at que o decodificador
processe esta mensagem e gere o padro de erro, para isso necessrio utilizar uma memria
organizada em estrutura de fila. O tamanho desta memria depende do tempo de processamento dos
componentes do decodificador.
A Figura 11 mostra o diagrama de blocos do decodificador desenvolvido.

Figura 11 Arquitetura do decodificador RS(255,239) desenvolvido.

As sees a seguir detalharo as estruturas internas de cada bloco desenvolvido.


4.3.1 Unidade de Clculo da Sndrome

Por definio um vetor de sndromes para o RS(255,239) calculado da seguinte maneira:


15

S ( X ) = Si x i
i =0
254

Si = rj

(43)
j i

j =0

Neste trabalho, o hardware utilizado para calcular o vetor de sndromes possui 16


registradores que armazenam os valores intermedirios do clculo. Cada registrador realimentado
pela soma da entrada do circuito com a multiplicao de seu prprio valor por uma das razes do
polinmio gerador. Dessa maneira, o clculo da sndrome acontece de forma recursiva segundo a
equao abaixo:
r ( X ) = r254 x 254 + r253 x 253 + ... + r1 x 1 + r0
S i = (...((r254 i + r253 ) i + r252 ) i + ...r1 ) i + r0

28

(44)

Onde r(X) representa a mensagem recebida, ri representa um dos smbolos da mensagem e


Si, um dos valores da sndrome. O recebimento da mensagem acontece do coeficiente de grau maior
at o coeficiente de grau menor. Assim, a sndrome leva n ciclos de clock para ser calculada, neste
caso 255, pois o vetor de sndromes s estar pronto aps o recebimento de r0. importante
observar que o clculo da sndrome atravs da equao (43) equivalente ao clculo pela equao
(44), sendo que a ltima mais natural para implementao em hardware, pois possui estrutura
regular e disponibiliza o vetor de sndromes sem latncia adicional ao final do recebimento de uma
mensagem.

Figura 12 Arquitetura do bloco desenvolvido para o clculo da sndrome.

Novamente por motivos de espao no foi possvel representar todos os registradores do


mdulo, porm, atravs da Figura 12 possvel observar que a sua estrutura regular. O mdulo
possui basicamente duas entradas, uma entrada de 8 bits que recebe serialmente os smbolos da
mensagem recebida, e um sinal denominado clear, que deve ficar um ciclo de clock ativo para
limpar os registradores do mdulo e indicar o incio de uma nova mensagem. A sada do mdulo
o vetor de sndromes, que possui 16 sinais de 8 bits, sendo que cada um destes sinais representa
uma sndrome. O sinal clear deve ser gerado pelo framer com um intervalo de no mnimo 255
ciclos de clock entre dois pulsos, caso contrrio o decodificador no funcionar corretamente.
O decodificador Reed-Solomon organizado em forma de um pipeline e a unidade de
clculo da sndrome seu primeiro estgio. Portanto, necessrio armazenar as sndromes

29

calculadas a cada incio de mensagem, caso contrrio seu valor ser perdido. O vetor de sndromes
armazenado pelo mdulo seguinte, Berlekamp-Massey, que utiliza este vetor para realizar sua
operao. A forma de onda apresentada na figura a seguir ilustra o funcionamento do mdulo de
clculo da sndrome.

Figura 13 Funcionamento do mdulo de clculo da sndrome.

Esta figura mostra o trmino do clculo do vetor de paridade de uma mensagem e o incio
do clculo para outra mensagem. O sinal input fica ativo durante o envio do primeiro byte da
segunda mensagem. Neste instante, os valores presentes nos registradores do mdulo, representados
contm a sndrome correta da primeira mensagem recebida, sendo os demais valores, apenas
resultados intermedirios. No ciclo de clock seguinte, todos os registradores recebem o valor de
input para iniciar o clculo da sndrome para a prxima mensagem. A partir desta forma de onda
possvel concluir que a primeira mensagem recebida possui erros, pois o vetor de sndromes
calculado diferente de zero.
Para facilitar o entendimento da estrutura de pipeline, tambm inserimos na Figura 13 o
sinal interno do mdulo Berlekamp-Massey responsvel pelo armazenamento da sndrome.
Podemos ver que este vetor recebe os valores presentes nos registradores das sndromes no
momento em que o sinal clear est ativo. Como podemos ver, os valores do vetor de sndromes
armazenados pelo mdulo Berlekamp-Massey so todos diferentes de zero, o que indica a presena
de erros na mensagem recebida.
4.3.2 Mdulo Berlekamp-Massey

Dada necessidade de replicao do hardware, escolheu-se utilizar o algoritmo de


Berlekamp-Massey para realizar a soluo da equao chave, pois este o que consome menos rea
e o mais utilizado na literatura estudada. A nica desvantagem que dever ser analisada a

30

questo da freqncia de operao que se obter com este circuito, pois seu caminho crtico mais
longo se comparado a implementaes baseadas no algoritmo Euclideano.
4.3.2.1 O Algoritmo de Berlekamp-Massey

O algoritmo de Berlekamp-Massey um mtodo iterativo que funciona a partir da


identidade de Newton, que relaciona a sndrome com os coeficientes do polinmio localizador de
erros, apresentada na equao a seguir:
v

S j = i S j i j = v + 1, v + 2,...,2t
i =1

Esta equao descreve os coeficientes do polinmio localizador de erros de menor grau


possvel, dado um conjunto de sndromes. Para que esta frmula funcione, preciso encontrar os
coeficientes j que gerem a seqncia j conhecida de sndromes S1,S1,...S2t [1]. O grau do
polinmio localizador de erros deve ser equivalente ao nmero de erros, e seus coeficientes devem
ser condizentes com as sndromes observadas.
Atravs do algoritmo de Berlekamp-Massey, encontram-se os coeficientes do polinmio
localizador de erros que produzem a seqncia completa de sndromes {S1,S2,...,S2t} por sucessivas
modificaes em um polinmio existente, se necessrio, produzindo seqncias cada vez mais
longas. Inicia-se com um polinmio que pode produzir apenas S1 e verifica-se se este polinmio
capaz de produzir {S1,S2}, caso seja capaz, no necessrio modific-lo. Se o polinmio que
produz S1, no pode produzir uma seqncia mais longa, necessrio determinar os novos
coeficientes que produziro esta seqncia. Procedendo-se desta maneira, determina-se um
polinmio que capaz de produzir a seqncia {S1,S2,...,Sk-1} e determina-se se este polinmio
tambm capaz de produzir {S1,S2,...,Sk}. A cada estgio, as modificaes so feitas no polinmio
localizador de erros de maneira que ele tenha o menor grau possvel, de maneira que ao final do
algoritmo teremos o polinmio de menor grau capaz se gerar a seqncia completa de sndromes.
Para construir o polinmio localizador de erros a partir de clculos sucessivos, necessrio
definir uma notao para representar (X) em diferentes estgios do algoritmo. Definindo Lk como
o tamanho do polinmio produzido no estgio K, podemos ter a seguinte expresso:
k ( X ) = 1 + k1 x + ... + kLk x Lk

(45)

Este polinmio denominado polinmio de conexo no estgio k, e indica o polinmio


capaz de gerar a seqncia {S1,S2,...,Sk}.
Supondo um polinmio de conexo no estgio k-1, denotado por k-1(X), capaz de produzir
a seqncia {S1,S2,...,Sk-1}. Verifica-se se este polinmio tambm capaz de produzir Sk da
seguinte maneira:

31

Lk

S k = ki 1 S k i

(46)

i =1

Caso k seja igual Sk, no necessrio atualizar o polinmio k-1(X), que passa a ser
k(X), e Lk=Lk-1. Caso contrrio, existe uma discrepncia associada com k-1(X), que calculada

atravs da equao a seguir:


Lk 1

Lk 1

i =1

i =0

d k = S k S k = S k + ki 1 S k i = ki 1 S k i

(47)

Neste caso atualiza-se o polinmio de conexo usando a seguinte frmula:


k ( X ) = k 1 ( X ) + A x l m 1 ( X )

(48)

Onde A um elemento do campo, que ser definido a seguir, e m-1(X) o ltimo


polinmio de conexo associado a uma discrepncia no nula, antes de ser alterado.
Utilizando o novo polinmio de conexo, possvel calcular uma nova discrepncia da
seguinte maneira:
Lk

d k' = ki S k i
i =0
Lk 1

k 1
i

Lm 1

(49)

S k i + A

i =0

m 1
i

S k i l

i =0

Sendo l=k-m, ou seja, a diferena entre o estgio atual e ltimo estgio que o polinmio de
conexo foi modificado, e relacionado a equao (49) com a definio de discrepncia apresentada
na equao (47), temos a seguinte expresso:
Lm 1

A mi 1 S m i = A d m

(50)

i =0

Se A=-dm-1.dk, resumindo a equao (49), obtemos:

d k' = d k d m1 d k d m = 0

(51)

Logo, o novo polinmio de conexo, calculado a partir de (48), produz a seqncia


{S1,S2,...,Sk} sem discrepncia.
A seguir apresentaremos o algoritmo completo de Berlekamp-Massey, em pseudocdigo,
conforme descrito em [17].

32

Entradas: S1,S1,...,SN
Inicializao:
L=0 (Grau atual do polinmio de conexo)
c(x)=1 (Polinmio de conexo atual)
p(x)=1 (Polinmio de conexo antes da ltima alterao)
l=1 (k-m, quantidade de ciclos sem alterao de c(x))
dm=1 (Ultima discrepncia antes da alterao)
d=0 (discrepncia atual calculada)
for k=1 to N
L
d=Sk+ i =1 ci S k 1 (calcula a discrepncia)
if(d=0) (no altera o polinmio c(x))
l=l+1
elsif(2L>=K) then (no
muda o grau do polinmio c(x))
c(x)=C(x)-d.dm-1.xl.p(x) (atualiza c(x))
l=l+1;
else
t(x)=c(x)
c(x)=C(x)-d.dm-1.xl.p(x)
L=k-L
p(x)=t(x)
dm=d
l=1
end
end
4.3.2.2 Implementao do Berlekamp-Massey

Inicialmente implementamos o algoritmo original de Berlekamp-Massey, pois sua rea


menor que a implementao do algoritmo modificado. O captulo a seguir vai analisar os requisitos
de rea e freqncia para este mdulo. A estrutura do mdulo Berlekamp-Massey implementado
apresentado na Figura 14.

Figura 14 Implementao do mdulo Berlekamp-Massey.

Este bloco representa o segundo estgio do pipeline de decodificao e implementa o


algoritmo apresentado na seo anterior. A forma de onda a seguir ilustra o funcionamento da parte
inferior do mdulo desenvolvido.
33

Figura 15 Funcionamento da parte inferior do mdulo Berlekamp-Massey.

O registrador s_x responsvel por armazenar todo o vetor de sndromes no momento em


que o clculo estiver concludo, no caso quando clear for igual a 1. O registrador s_reg,
subdividido em 9 registradores, sendo que no primeiro ciclo de clock aps o recebimento da
sndrome, o primeiro registrador recebe o primeiro valor do vetor de sndromes. Nos demais ciclos,
este registrador recebe os valores de sndrome de acordo com o estgio do algoritmo, denotado pelo
contador reg_k. Os demais registradores de s_reg recebem sempre o valor de seu antecessor. Esta
organizao feita para implementar o clculo da discrepncia, apresentado na equao (47). O
registrador c_reg, subdividido em 8 registradores, que representam os coeficientes de x1 x8 do
polinmio (X), pois o coeficiente de x0 ser sempre 1. Por este motivo, o primeiro registrador de
deslocamento das sndromes no multiplicado por nenhum dos coeficientes de c_reg, mas seu
valor lavado em conta no somatrio para o clculo da discrepncia, como podemos observar na
Figura 14. A discrepncia tambm pode ser observada na Figura 15 atravs do sinal reg_dn.
Podemos observar que quando reg_k igual a 15, o resultado da discrepncia zero, e a partir deste
momento o polinmio (X) no sofre mais alteraes. Isto significa que com 7 coeficientes no
nulos de (X), possvel prever todo vetor de sndromes, e neste caso podemos concluir que as
sndromes recebidas correspondem a uma mensagem com 7 erros.
Para continuar a ilustrar o funcionamento do mdulo Berlekamp-Massey, apresentaremos
uma forma de onda que mostra o funcionamento da parte superior do mdulo, incluindo a
atualizao do polinmio temporrio e o clculo de diviso.

34

Figura 16 Funcionamento da parte superior do mdulo Berlekamp-Massey.

O sinal reg_dn, como vimos anteriormente, o resultado do clculo da discrepncia. A


cada dois ciclos de clock, caso a discrepncia seja diferente de zero, o valor de reg_dn
armazenado no registrador reg_ds. Toda vez que um valor diferente de discrepncia armazenado
em reg_ds, o grau do polinmio (X) alterado. O sinal mult_out0 contm o resultado da diviso
de reg_ds por reg_dn, que implementada atravs da inverso do valor presente em reg_ds,
multiplicado por reg_dn. O resultado da inverso de reg_ds pode ser observado no sinal reg_di.
Esta operao feita para determinar a constante A, conforme as equaes (50) e (51).
O registrador b_reg subdividido em 8 registradores de 1 byte, sendo atualizado atravs da
rotao de seus valores toda vez que o grau do polinmio (X), representado por c_reg, no seja
alterado. Caso contrrio, o registrador b_reg recebe os valores de c_reg, incluindo a constante 01
que omitida nesta implementao para economia de recursos. O ltimo registrador de b_reg
inicializado em 01 e os demais em zero. Isto acontece porque aps o primeiro ciclo, com a rotao
dos valores, apenas o primeiro registrador tem o valor 01, e a primeira atualizao do registrador
c_reg deve acontecer em seu primeiro registador. Todos os valores do registrador c_reg so
inicializados com zero. Este registrador atualizado atravs da multiplicao de b_reg por
mult_out0, que representa a diviso de reg_dn por reg_ds, somado de seu prprio valor,
implementando a equao descrita na equao (48).
Quando o contador reg_k atingir o valor 16, o clculo do polinmio localizador de erros
estar completo. Uma vez que tenhamos o polinmio localizador de erros, o polinmio avaliador de
erros, responsvel por indicar os valores dos erros, pode ser calculado facilmente atravs da
equao (42). O mesmo hardware utilizado para calcular (X) pode ser reconfigurado para calcular

35

(X), para isso utiliza-se uma pequena mquina de estados de controle. A Figura 17 apresenta o

diagrama de estados de controle do mdulo.

IDLE

ready<=1'

clear=1'

store
comp_l

reg_i=8
reg_k=16
comp_v
clear_
syn

Figura 17 Mquina de controle do mdulo Berlekamp-Massey.

Ao receber um sinal de clear, a mquina passa para o estado comp_l. Neste estado
realizado o clculo do polinmio localizador de erros em 16 ciclos de clock. Aps este tempo, o
estado passa a ser clear_syn, onde os registradores de deslocamento da sndromes so zerados para
o clculo do polinmio avaliador de erros. Aps o estado clear_syn, a mquina passa diretamente
para o estado comp_v, onde feito o clculo do polinmio avaliador de erros, em 8 ciclos. Aps
este perodo, a mquina fica um ciclo no estado store, onde indica para os mdulos seguintes que os
polinmios esto calculados.
A figura a seguir mostra como feito o calculo do polinmio avaliador de erros.

Figura 18 Clculo do polinmio avaliador de erros.

36

Como podemos ver na Figura 18, tendo c_reg calculado, basta deslocar as sndromes
novamente que a cada ciclo de clock teremos em reg_dn um dos coeficientes do polinmio
avaliador de erros. Ao final do clculo dos 8 coeficientes do polinmio gerador, o mdulo
Berlekamp-Massey gera um sinal de ready, alertando aos mdulos seguintes a finalizao do
clculo dos polinmios.
4.3.3 Chien Search e Forney

Os mdulos Chien search location, Chien search value e Forney Algorithm pertencem ao
ltimo estgio do processo de decodificao Reed-Solomon e operam paralelamente. Neste estgio,
inicia-se o processo de correo de erro.
Uma vez que o polinmio (X) est calculado, o mdulo Chien search location utilizado
para achar suas razes. O algoritmo Chien search avalia um determinado polinmio para todos os
255 elementos no nulos do campo GF(28). No caso do polinmio localizador de erro, se (-i)=0
significa que existe um erro no i-simo byte recebido. A Figura 19 apresenta a arquitetura do
mdulo chien search location.
bm_ready

input

CHIEN SEARCH
LOCATION
lambda_x

mux_sel
00000001

0
+

chien_regs(1)
1

0
+

lambda_x(1)

lambda_x(0)

chien_regs(0)
1

chien_regs(3)
1

0
+

lambda_x(3)

lambda_x(2)

0
+

lambda_x(4)

lambda_x(6)

chien_regs(4)

chien_regs(6)

chien_regs(7)
lambda_x(7)

chien_regs(5)
lambda_x(5)

chien_regs(2)
1

result

result_odd

Figura 19 Arquitetura do mdulo Chien Search Location.

Podemos observar que a estrutura deste mdulo bastante regular. Basicamente temos 8
clulas contendo um registrador, um multiplicador e um multiplexador. Cada clula calcula um

37

valor intermedirio para um dos coeficientes do polinmio (X), esses valores so todos somados,
inclusive levando em conta a constante 01, que corresponde sempre ao coeficiente de x0, e o
resultado (-i). Cada registrador funciona como um acumulador. Inicialmente os registradores
recebem os coeficientes do polinmio localizador de erros. No ciclo seguinte os registradores
passam a ser realimentados pelo seu prprio valor multiplicado por i, onde i representa o grau do
coeficiente do polinmio que cada registrador est calculando. Atravs desta operao possvel
calcular (0), (1), (2) e assim sucessivamente, graas a matemtica de campos finitos.
Tomando como exemplo o oitavo coeficiente do polinmio localizador de erros, denotado por 8,
teremos aps um ciclo de clock, no registrador chien_reg(7) o resultado de 88, que equivale a
8x8 com x=1. No ciclo de clock seguinte o contedo deste registrador passa a ser 888, que
igual a 828, ou seja, 8x8 quando x=2. Este o mtodo utilizado pelo algoritmo chien search
para avaliar um dado polinmio para todos elementos de um campo finito. Podemos ver tambm na
Figura 19, alm da sada result, uma outra sada denominada result_odd. O valor visualizado nesta
sada corresponde apenas soma dos resultados dos coeficientes de grau impar, e utilizado para
ajudar a encontrar o valor do erro, uma vez que result seja zero.
A ttulo de informao apresentaremos tambm, na Figura 20, a arquitetura do mdulo
chien search value.
bm_ready

input

CHIEN SEARCH
VALUE
omega_x

mux_sel

omega_x(1)

omega_x(0)

chien_regs(1)

chien_regs(3)
1

0
+

omega_x(3)

omega_x(2)

0
+

omega_x(4)

omega_x(6)

chien_regs(4)

chien_regs(6)

0
1

chien_regs(7)
omega_x(7)

chien_regs(2)
1

chien_regs(5)
omega_x(5)

chien_regs(0)

result

Figura 20 Arquitetura do mdulo Chien Search Value.

38

Como podemos observar, a estrutura deste mdulo praticamente igual estrutura do


Chien Search Location. A primeira diferena que neste mdulo no temos a soma da constante 01
para gerar o resultado. A segunda est no fato de que o primeiro registrador no possui
realimentao, pois o primeiro coeficiente no polinmio avaliador de erros corresponde a x0, que
varivel, ao contrario do polinmio localizador de erros. O restante do processo de clculo dos
resultados de (-i), onde (X) denomina o polinmio avaliador de erros, ocorre da mesma maneira
que o clculo de (-i), conforme descrito anteriormente. importante observar que o valor
calculado por este mdulo, visualizado no sinal result, no representa o valor do erro no instante em
que (-i)=0. O valor do erro deve ser encontrado atravs da seguinte expresso:
ei =

( i )
' ( i )

(52)

Pela teoria de campos finitos a seguinte igualdade vlida:


' ( X ) =

odd ( x)
x

(53)

Logo, para achar o valor do erro utiliza-se a equao a seguir:


ei =

( i ) i
odd ( i )

(54)

Esta equao implementada pelo mdulo Forney Algorithm, que recebe os resultados dos
mdulos Chien search value e Chien search location e gera o valor de correo para ser adicionado
ao pacote recebido, neste caso corrigindo os erros da mensagem recebida. A Figura 21 mostra a
estrutura do mdulo que implementa esta equao.

Figura 21 Estrutura do mdulo Forney Algorithm.

Este basicamente um circuito combinacional que detecta quando o sinal l_result igual a
zero e coloca na sada o valor do erro calculado. O valor de erro calculado pela diviso do sinal
v_result pelo sinal l_result_odd. Esta diviso tambm implementada atravs de um circuito
inversor e um multiplicador, a exemplo do clculo feito no mdulo Berlekamp-Massey. Caso o
sinal l_result seja diferente de zero, significa que no h erros na posio atual da mensagem
39

recebida, logo a sada do mdulo deve ser zero, pois esse valor ser sempre somado ao valor atual
da mensagem, como pode ser visto na Figura 11.
Na Figura 22 ser apresentada uma forma de onda que ilustra o funcionamento dos
mdulos Chien search location, Chien search value e Forney Algorithm.

Figura 22 Funcionamento do ltimo estgio de decodificao.

Ao receber um sinal de ready do mdulo Berlekamp-Massey, o polinmio (X)


armazenado pelo mdulo Chien Search Location atravs do sinal lambda_x, e o polinmio (X)
armazenado pelo Chien Search Value, atravs do sinal omega_x. Aps o armazenamento dos
polinmios, o sinal mux_sel fica ativo por um ciclo de clock, de maneira que os coeficientes dos
polinmios entram nos registradores dos mdulos para iniciar o clculo dos valores de erro. No
ciclo seguinte inicia-se o processo de correo de erros. Neste exemplo, os erros foram inseridos no
incio da mensagem para facilitar a visualizao do processo de correo. Podemos observar que a
partir do terceiro valor de l_result, aps o incio do clculo, temos 7 resultados iguais zero, o que
indica que temos uma rajada se 7 erros na mensagem recebida. Os valores dos erros, calculados
pelo mdulo Forney Algorithm, podem ser observados no sinal correction.
Para realizar a correo de erros corretamente, a mensagem recebida deve ser armazenada
at que os valores de erro comecem a ser calculados. O sinal input_d possui a mensagem recebida
j com o atraso inserido pelos estgios anteriores do decodificador. Atravs da soma dos valores de
erros encontrados com a mensagem atrasada, se obtm a mensagem decodificada, que apresentada
no sinal output e a sada do decodificador.

40

4.3.4 Viso Geral do Decodificador

Nas sees anteriores apresentamos detalhadamente o funcionamento de cada um dos


mdulos que compem o decodificador. Entretanto, alguns aspectos no so observados quando
estudamos os mdulos separadamente. Para dar uma idia mais geral do funcionamento do
decodificador, apresentaremos uma forma de onda que ilustra alguns destes aspectos.

Figura 23 Viso geral do funcionamento do decodificador.

Podemos observar na Figura 23 as trs latncias principais do decodificador ReedSolomon desenvolvido. A latncia nmero 1 corresponde ao tempo total de processamento do
decodificador. So computados, ao todo, 286 ciclos de clock da entrada do primeiro byte de uma
mensagem at a sada deste byte j decodificado. A latncia nmero 2 corresponde ao tempo de
clculo da sndrome. Este tempo de 255 ciclos de clock, que correspondem ao recebimento de
uma mensagem completa. A terceira latncia representada na Figura 23 relativa ao mdulo
Berlekamp-Massey, e esta corresponde a 28 ciclos de clock.
Contando a latncia de 255 ciclos adicionada pelo clculo da sndrome, mais os 28 ciclos
correspondentes resoluo da equao chave pelo mdulo Berlekamp-Massey, e levando em conta
o tempo que os mdulos seguintes tm para armazenar os polinmios e adicion-los em seus
registradores antes de iniciar o clculo, chega-se no total de 286 ciclos de latncia.
importante observar que os dados so recebidos sempre em rajada pelo decodificador,
no h intervalo entre os pacotes de 255 bytes. Dessa maneira, o mdulo que calcula a sndrome
est sempre em funcionamento. Como podemos observar, o nico mdulo que fica ocioso durante o
processo de decodificao o Berlekamp-Massey, pois ele recebe um vetor de sndromes a cada
255 ciclos, e resolve a equao chave em apenas 28 ciclos. Esta situao abre precedentes para

41

diferentes implementaes deste algoritmo, que podem aproveitar esta sobra de tempo para se obter
alguma vantagem, em troca de um pequeno aumento na latncia total do decodificador.

42

5 Validao do Codificador e Decodificador


Neste captulo ser reportada a validao do codificador e decodificador Reed-Solomon
apresentados neste trabalho. A primeira parte desta validao tem como objetivo verificar a correta
funcionalidade dos mdulos atravs da simulao dos mesmos. A segunda parte compreende esta
mesma simulao acrescida dos tempos de atraso gerados pela ferramenta de sntese. Isso torna a
verificao mais precisa e mais perto da realidade. A terceira e ltima parte diz respeito validao
em hardware dos referidos mdulos.
5.1

Validao Funcional

Para efetuar a simulao dos mdulos utilizou-se a ferramenta ModelSim SE Plus de


verso 6.1f da empresa Mentor Graphics Corp. Foi criado um testbench para implementar uma
estrutura capaz de gerar os estmulos necessrios para ambos os mdulos. Para verificar a
funcionalidade dos mdulos, recorreu-se visualizao dos seus sinais nas formas de ondas, ou
waveforms, geradas pelo software de simulao. Na Figura 24 pode-se observar de forma sucinta a
estrutura criada para a simulao.
tb.vhd
subframe.txt

CODIFICADOR

error.txt

DECODIFICADOR

Figura 24 Estrutura de simulao do codificador e decodificador.

Esta estrutura gera os sinais de reset, clock, valid, clear_syn alm do sinal input. Para
enviar os dados aos mdulos, recorreu-se ao uso de dois arquivos texto: subframe.txt, que contm
diversos sub-frames do padro G.709 OTN, e error.txt que utilizado para permitir a insero de
erros em quaisquer posies dos sub-frames. Tais arquivos possuem o mesmo formato: dois
caracteres em hexadecimal por linha. Ou seja, lido e enviado aos dois mdulos um byte por ciclo
de relgio. Na Figura 25 apresenta-se o formato dos dois arquivos texto. Esses arquivos foram
gerados atravs de um software, desenvolvido no contexto deste trabalho, denominado fecGEN.
Este software foi implementado pelos autores e realiza o clculo da paridade a partir da gerao
aleatria de sub-frames. Os resultados obtidos nesta ferramenta foram validados a partir da
comparao com ferramentas disponibilizadas na internet, tais como o schifra [18] e a biblioteca de
FEC desenvolvida por Phil Karn [19].

43

Atravs do seu sinal input, so enviados ao codificador os 239 bytes referentes a um subframe sem o campo de FEC. Aps a finalizao do envio destes bytes, verifica-se a validade do
novo FEC gerado. Isto feito comparando-o com o FEC gerado pelo software fecGEN. Na Figura
26 verifica-se a validade do FEC gerado pelo codificador.

Figura 25 Arquivos texto subframe.txt e error.txt.

Figura 26 Verificao do FEC gerado pelo codificador.

44

Ao decodificador so enviados 255 bytes de um sub-frame completo. No sinal input do


decodificador implementada uma porta lgica OU exclusivo que recebe os bytes dos dois
arquivos texto possibilitando a incluso de erros. A validao ocorre verificando se tais erros so
corrigidos no sinal de sada do decodificador. Na Figura 27 encontramos a forma de onda
demonstrando a correo dos erros adicionados em um sub-frame.

Figura 27 Erros do sub-frame corrigidos no decodificador.

Os mdulos no foram testados exaustivamente, porm, foram feitos diversos testes para
verificar o funcionamento dos mesmos em seus limites. Alm de erros adicionados em posies
aleatrias, foram inseridos erros em rajada no inicio e no fim dos sub-frames, onde a possibilidade
de falhas mais elevada. Tambm realizou-se testes com apenas um erro por sub-frame em locais
distintos e testes com mais de um erro, incluindo a presena de 8 erros, que a capacidade mxima
de correo da arquitetura desenvolvida. Aps a finalizao dos mdulos, nenhuma falha foi
verificada nos testes realizados.
5.2

Validao Funcional com Tempos de Atraso

A ferramenta ISE de verso 9.1i da Xilinx Inc. permite, aps a sntese fsica, criar os dois
arquivos necessrios para a simulao com tempos de atraso. Um dos arquivos, de nome
timesim.vhd, contm o mapeamento dos blocos lgicos, que so utilizados para a implementao
do codificador e decodificador no FPGA, incluindo informaes de posicionamento e roteamento.
O outro arquivo, de nome timesim.sdf, contm os valores dos tempos de atraso de todos os blocos
lgicos utilizados no timesim.vhd. Estes dois arquivos so utilizados em uma nova simulao na
ferramenta Modelsim, permitindo uma verificao mais acurada dos mdulos. Toda a estrutura de
teste e modo de validao permanecem os mesmos da simulao anterior. Na Figura 28 podemos

45

observar, a ttulo de exemplo, uma simulao do codificador com todos os atrasos inseridos pelas
portas e pelos fios utilizados na sntese realizada.

Figura 28 Simulao com atraso do codificador RS no dispositivo XCV4FX100-10.

Nesta simulao utilizamos um clock de 100MHz para ilustrar o tempo de clculo dos
valores intermedirios de paridade. Podemos ver a transio do sinal de entrada valid e
respectivamente, um ciclo de clock aps, a transio do sinal interno valid_reg, indicando o fim do
clculo de paridade. A partir desta transio no h mais atrasos por clculos e a paridade calculada
enviada para a sada. Como podemos ver, existem linhas verticais na figura que indicam
intervalos de 5 nanossegundos, sendo que estas coincidem com as transies do clock.
O processamento de todos os multiplicadores presentes na arquitetura pode ser observado
no sinal mult_out. possvel observar que existe um pequeno intervalo de tempo entre a subida do
sinal de clock e o incio do clculo realizado pelos multiplicadores. Este tempo corresponde
propagao do sinal de entrada at a sada do registrador input_reg, acrescido ao tempo de
estabilizao do sinal feedback mais o atraso dos fios. Podemos ver tambm que a sada de todos os
multiplicadores esto estabilizadas antes da descida do clock, sendo que o tempo de clculo, aps a
estabilizao do sinal feedback, de aproximadamente 3,3 nanossegundos. Para ilustrar o caminho
crtico deste mdulo, apresentamos tambm na Figura 28 o sinal q_xor0009, que uma das sadas
das portas XOR existentes no codificador, sendo este o ltimo resultado que deve estar estvel antes
de uma nova borda de clock para garantir o funcionamento do circuito. Como podemos ver, este
sinal se estabiliza em menos de 5 nanossegundos aps a subida do clock, garantindo o
funcionamento do circuito a 100MHz com certa folga.
5.3

Validao em Hardware

Aps a validao em nvel de simulao, realizada a validao em hardware dos mdulos


codificador e decodificador Reed-Solomon. Para tanto, utilizou-se a plataforma de prototipao
DN8000kPCI [20] da empresa The Dini Group Inc.
Esta plataforma possui um FPGA Xilinx Virtex4 XCV4FX100-10 e um FPGA Xilinx
Spartan2 XC2S200 que utilizado somente para o controle e interconexo dos diversos dispositivos
existentes. O controlador PCI Quicklogic 5064 compartilhado entre os dois FPGA. Existem,
portanto, dois modos de transferncia de dados entre o barramento PCI e a Virtex4. O primeiro, e
46

que no ser utilizado aqui, o acesso direto fazendo uso de DMA e interrupo. O segundo o
acesso por intermdio da Spartan2 utilizando uma estrutura criada pela The Dini Group denominada
MainBus [21].
5.3.1 MainBus

A estrutura MainBus emprega o paradigma mestre-escravo e consiste basicamente de um


software denominado AETest, onde existem duas funes bsicas de transferncia de dados, e de
dois mdulos de hardware. O primeiro mdulo, MB_target.v, responsvel por receber as
transies requisitadas atravs das duas funes, mb_write e mb_read, escrita e leitura
respectivamente. Estas requisies so solicitadas ao segundo mdulo, slave.v, que por sua vez
realiza a comunicao com o hardware sob teste.
5.3.1.1 mb_write e mb_read

As funes de transferncia de dados, mb_write e mb_read, so bastante simples de se


utilizar no software AETest. Abaixo se encontra a sintaxe das duas funes citadas.
mb_write (uint addr, uint data)
int mb_read (uint addr)

Na funo mb_write o parmetro data, de 32 bits, o dado que se deseja enviar ao FPGA.
Nas duas funes o parmetro addr, tambm de 32 bits, possui o formato ilustrado abaixo.

fpga
31

escravo
28 27

endereo

24 23

O primeiro campo, denominado fpga, utilizado para selecionar o FPGA entre todos os
disponveis. No caso da plataforma DN8000k10PCI que possui somente um FPGA este campo deve
ser sempre igual a 2. O segundo campo destinado seleo do mdulo escravo slave.v
desejado. Este campo possui um tamanho de quatro bits e, portanto possvel utilizar at 16
escravos. O ltimo campo, endereo, utilizado para enderear alguma estrutura interna do mdulo
escravo, como um banco de registradores, por exemplo.
5.3.1.2 MB_target.v e Slave.v

Como comentado anteriormente, o mdulo MB_target responsvel por receber as


transaes de escrita e leitura do mestre, no caso o software AETest, e solicit-las ao mdulo
escravo slave.v. A Figura 29 demonstra a interface de comunicao do MB_target.v.

47

MB_sel
MB_write_strobe
MB_read_strobe
MB [31:0]

MB_target.v

MB_address [31:0]
MB_data_in [31:0]
MB_data_out [31:0]
MB_done

Figura 29 Interface de comunicao do mdulo MB_target.

Atravs do sinal MB, que conectado diretamente no FPGA Spartan2, so recebidos os


dados provenientes do barramento PCI. O restante dos sinais so responsveis pelo protocolo de
comunicao entre o mdulo MB_target.v e o mdulo slave.v.
O sinal MB_sel inicia a requisio. Os sinais MB_write_strobe e MB_read_strobe indicam
se a requisio de escrita ou leitura, respectivamente. O endereo a ser acessado no slave.v
solicitado atravs de MB_address. Para a transferncia dos dados das requisies so utilizadas os
sinais MB_data_in e MB_data_out. Aps o trmino de cada requisio, o escravo deve indic-lo
atravs de MB_done. A Figura 30 demonstra a interface de comunicao do mdulo slave.v.

MB_sel
MB_write_strobe
MB_read_strobe
MB_address [31:0]
MB_data_in [31:0]
MB_data_out [31:0]

Slave.v

data_valid
data_in [31:0]

MB_done

Figura 30 Interface de comunicao do mdulo slave.

No slave.v, alm dos sinais do protocolo de comunicao, existem ainda os sinais


data_valid e data_in. Atravs destes sinais so entregues os dados ao hardware sob teste. O sinal
data_valid indica novo dado de 32 bits no sinal data_in.
5.3.1.3 Software AEtest

O software AETest deve ser alterado para realizar a transferncia de dados entre o
computador e o FPGA. A seguir, apresentamos algumas linhas de cdigo que demonstram a
utilizao das funes mb_write e mb_read.
scanf("%X",&dado_escrito);
mb_write(2|5|10, dado_escrito);

Neste exemplo, solicita-se primeiro o dado a ser escrito. Aps, a funo mb_write o
escreve no endereo 10 do escravo 5, que por sua vez encontra-se no FPGA 2.
dado_lido=mb_read(2|5|10);
printf("Dado lido: %X do FPGA 2.", dado_lido);

48

J neste exemplo, a funo mb_read retorna o mesmo dado que foi escrito anteriormente
pela funo mb_write, ou seja, o dado do endereo 10, do escravo 5, do FPGA 2.
Abaixo se encontra a funo implementada para o presente trabalho. Tal funo utilizada
no software AETest e tem por objetivo ler dados de um arquivo texto e envi-los ao FPGA.
if (!(p = fopen("packet.txt","r")))
{
printf("Erro! Arquivo inexistente!\n");
}
else
{
quad_byte=0;
num_byte=0;
while (!feof(p))
{
fscanf(p,"%X",&byte);
quad_byte+=byte;
if(num_byte<3)
{
quad_byte<<=8;
num_byte++;
}
else
{
//send quad_byte mb_write
mb_write(MB_FPGA_C | 0x00000000 | 1, quad_byte);
num_byte=0;
quad_byte=0;
}
}
fclose (p);
}

Os cdigos-fonte do software AETest podem ser compilados em diversos sistemas


operacionais, incluindo Linux, Solaris, MS-Dos e as diversas verses do Microsoft Windows. Neste
trabalho utilizou-se o sistema operacional Microsoft Windows XP e o compilador do VisualStudio
2005.
A DiniGroup disponibiliza scripts para facilitar a tarefa de compilao. Para utiliz-los
necessrio criar um diretrio de trabalho onde se copiar todos os arquivos do cdigo-fonte do
AETest. Aps, necessrio definir no arquivo Makefile o sistema operacional que ser utilizado.
O trecho que dever ser alterado representado abaixo:
# set target operating system, define ONE of the following
DESTOS = WIN_WDM
#DESTOS = WINNT
#DESTOS = WIN98
#DESTOS = DOS_PHARLAP
#DESTOS = DOS_DJGPP
#DESTOS = LINUX
#DESTOS = SOLARIS

Feito isso, executa-se o terminal Visual Studio 2005 Command Prompt, apresentado na
Figura 31. Deve-se alterar o diretrio presente para o diretrio de trabalho criado (por exemplo,

49

C:\Aetest\aetest). Aps, deve-se digitar o comando nmake. O executvel aetest_wdm.exe ser


criado.

Figura 31 Executando o terminal Visual Studio 2005 Command Prompt.

5.3.2 Estrutura de Teste

MAINBUS
software
AETest

chipscope

Para a validao em hardware, foi necessria a criao de uma estrutura de teste capaz de
receber os bytes dos sub-frames provenientes do barramento PCI e envi-los ao codificador e
decodificador. Os mdulos foram testados e validados separadamente na plataforma de
prototipao. A estrutura criada pode ser observada de forma simplificada na Figura 32.

subframe.txt

Barramento PCI

XC4VFX100
fpga.v
FSM_IN
PCI
Quicklogic
5064

Spartan2

MB_target.v

slave.v

CODIFICADOR
OU
DECODIFICADOR

DN8000k10PCI

Figura 32 Estrutura de teste para validao em hardware.

50

Atravs do software AETest possvel enviar ao FPGA os bytes do sub-frame existente no


arquivo texto subframe.txt. O dado enviado pelo mb_write possui o tamanho de 32 bits e,
portanto, so enviados quatro bytes do sub-frame por vez. Os dados provenientes da funo
mb_write so recebidos pelo MB_target.v e disponibilizados ao mdulo FSM_IN atravs do
slave.v. Na Figura 33 podemos observar a interface de comunicao do mdulo FSM_IN.

data_valid
data_in [31:0]

valid

FSM_IN

clear_syn
data_in [7:0]

Figura 33 Interface de comunicao do mdulo FSM_IN.

O mdulo FSM_IN uma mquina de estados finita que recebe os bytes de um sub-frame
e armazena-os em uma memria temporria antes de serem enviados ao mdulo sob teste. Os dados
so enviados atravs do sinal data_in. Os sinais valid e clear_syn so utilizados, dependendo do
mdulo que est sendo testado, respectivamente codificador ou decodificador. Na Figura 34
encontra-se a mquina de estados finita do mdulo FSM_IN.

Figura 34 Mquina de estados finita do mdulo FSM_IN.

A verificao ocorre da mesma forma como procedido na simulao. Para a visualizao


dos sinais dos mdulos, utilizou-se a ferramenta ChipScope Pro Analyzer de verso 8.1.02i da
Xilinx Inc.

51

No caso do codificador so enviados 239 bytes do sub-frame sem o campo de FEC. No


ChipScope so visualizados os sinais de entrada, input e valid, e o sinal de sada output. Para
verificar o correto funcionamento do codificador observa-se a validade do FEC gerado em seu sinal
de sada, como podemos perceber na Figura 35.

Figura 35 FEC gerado pelo codificador.

No decodificador so enviados 255 bytes do sub-frame completo. No ChipScope so


visualizados os sinais de entrada, input e clear_syn, e o sinal de sada output. Para verificar o seu
funcionamento observa-se em seu sinal de sada se os erros, que so adicionados diretamente no
subframe.txt, foram corrigidos corretamente. A Figura 36 ilustra a correo dos seis erros,
representados pelo caractere 00, inseridos no sub-frame.

Figura 36 Erros do sub-frame corrigidos pelo decodificador.

5.3.3 Resultados

Os mdulos codificador e decodificador foram sintetizados, lgica e fisicamente, no


software ISE verso 9.1i da Xilinx, fazendo uso da ferramenta de sntese XST. Um dos principais
requisitos deste projeto o desempenho. Ambos os mdulos devem funcionar a uma freqncia de
100 Mhz. Outro importante requisito a ocupao de rea. O par de mdulos
codificador/decodificador ocupa 2847 LUTs, ou 3%, de 84352 LUTs disponveis na Virtex4
XCV4FX100. Este nmero similar ao total de LUTs observadas na literatura [8].

52

O codificador funcionou corretamente a 100 MHz. J o decodificador apresentou um


funcionamento falho a esta freqncia. Decidiu-se ento reduzir a freqncia para 50 MHz. Nesta
freqncia o decodificador funcionou corretamente, denotando um problema timing neste mdulo.
Para localizar o problema, sintetizou-se cada sub-mdulo separadamente para verificar a
freqncia mxima de operao sugerida pela ferramenta de sntese. Na Tabela 7 so apresentadas
as freqncias mximas sugeridas para cada mdulo. O sub-mdulo forney no possui freqncia
mxima por ter uma lgica totalmente combinacional.
Tabela 7 - Freqncia mxima de operao de todos os mdulos e sub-mdulos.

Mdulo

Freqncia Mxima de Operao em MHz

Codificador
Decodificador
- syndrome_unit
- berlekamp_massey
- chien_value
- chien_location
- forney
- delay

276,67
83,87
374,79
83,87
340,66
307,11
429,52

Podemos verificar que o gargalo do mdulo decodificador encontra-se no sub-mdulo


Berlekamp-Massey, certamente por apresentar o pior caminho crtico entre todos os sub-mdulos.
Na Figura 37 verifica-se que o seu caminho crtico possui trs multiplicadores genricos. Este
multiplicador, descrito na seo 4.1, possui oito linhas, sendo que cada uma dessas linhas possuem
oito clulas que trabalham paralelamente. Uma linha intermediria depende do clculo realizado
pela linha superior. Portanto o multiplicador genrico apresenta um caminho combinacional de oito
LUTs. Assim sendo, o sub-mdulo Berlekamp-Massey herda o longo caminho combinacional de
trs multiplicadores, ou seja, 24 LUTs acrescido de duas operaes XOR que consomem apenas
uma LUT, totalizando 26 LUTs. Isto explica o motivo do seu baixo desempenho.

Figura 37 Caminho crtico do sub-mdulo berlekamp_massey.

Como a freqncia mnima de 100MHz no foi atingida pelo sub-mdulo BerlekampMassey, implementamos ao final da redao deste documento, a partir de modificaes na
53

arquitetura original, o algoritmo de Berlekamp-Massey sem inverso. Esta implementao diminui


o caminho critico de trs para dois multiplicadores, porm, apesar de no utilizar inverso, possui
uma rea muito maior quando comparada com a arquitetura original, pois esta implementao
necessita de 10 multiplicadores a mais para ser implementada, alm de alguns registradores e portas
XOR adicionais. Para se ter uma idia, um inversor composto de 128 LUTs, enquanto um
multiplicador, com duas entradas variveis, consome 59 LUTS. Este acrscimo de rea garante o
funcionamento do mdulo em uma freqncia de 100MHz, o que satisfaz o requisito de
desempenho do projeto, porm prejudica profundamente o requisito de rea. Outras tentativas
foram feitas para tentar adequar a arquitetura original do Berlekamp-Massey para operar a
100MHz, utilizando-se do tempo que o mdulo fica ocioso durante o processo de decodificao.
Porm, essas tentativas no foram bem sucedidas.
Na Tabela 8 visualiza-se o total de rea ocupada no FPGA, expresso em LUTs e FlipFlops, pelos mdulos codificador e decodificador.
Tabela 8 Ocupao de rea no FPGA Virtex4 XCV4FX100.

Mdulo

Lgica

Usados

Codificador

FlipFlop
LUT
FlipFlop
LUT
FlipFlop
LUT
FlipFlop
LUT
FlipFlop
LUT

132
214
883
2633
908
3192
1015
2847
1040
3406

Decodificador
BM original
Decodificador
BM modificado
Total
BM original
Total
BM modificadol

Disponveis

Utilizao

84352

0,15%
0,25%
1,04%
3,12%
1,08%
3,78%
1,20%
3,37%
1,23%
4,04%

Como podemos ver na Tabela 8, a ocupao de um decodificador utilizando o algoritmo


original de Berlekamp-Massey de 3,12% em nossa arquitetura alvo, totalizando 3,37% incluindo o
codificador. Utilizando o algoritmo modificado de Berlekamp-Massey, o decodificador passa a
ocupar 3,78%, o que totaliza 4,04% com o decodificador. importante saber que para cada LUT de
um FPGA existe um Flip-Flop, portanto, desde que o nmero de Flip-Flops no ultrapasse o
nmero de LUTs, a sua quantidade no influenciar na rea total ocupada pelo projeto.

54

6 Integrao
Como comentado na seo 1.2, um dos objetivos da atual parceria entre a TERACOM
Telemtica Ltda e o Grupo de Apoio ao Projeto de Hardware (GAPH) a integrao dos mdulos
codificador e decodificador Reed-Solomon com os mdulos do framer, responsvel por alinhar e
montar os frames do padro OTN. Na Figura 38 pode-se observar a integrao de todos os mdulos
do projeto entre a TERACOM e GAPH.
1 bit
10.7Gbps

64bits
200Mhz

Alinhador
de quadro

SerDes

1 bit
10.7Gbps

64bits
200Mhz

SerDes

Embaralhador

Desembaralhador

Encoder
RS

Decoder
RS

Ajuste dos
cabealhos

Extrao de
cabealhos

Insero/
Remoo
Dados

Dados do
cliente

Figura 38 Integrao dos mdulos do transponder.

O objetivo do mdulo SerDes receber o fluxo de dados provenientes da fibra ptica a


10.7 Gbps e disponibiliz-los em palavras de 64 bits a uma freqncia de 200 MHz. Este mdulo
tambm realiza a operao inversa, ou seja, transmite fibra ptica os dados provenientes do
mdulo Embaralhador. O mdulo Alinhador de quadro responsvel por identificar a ocorrncia
da seqncia de alinhamento e realizar o deslocamento, de modo que esta seqncia de alinhamento
comece no incio da palavra de 64 bits. Os mdulos Embaralhador e Desembaralhador so
responsveis por embaralhar e desembaralhar os dados, de forma que no ocorram longas
seqncias de 0s ou de 1s, o que garante uma suficiente troca de estado dos bits facilitando a
recuperao do relgio e evitando uma possvel repetio da seqncia de alinhamento. O mdulo
Extrao dos cabealhos utilizado para extrair o contedo dos cabealhos possibilitando a
identificao de falhas, alarmes, tipo de dado transportado, origem e destino contidos nos frames
OTN G.709. O mdulo Insero/Remoo Dados utilizado para a anlise dos frames e para a
insero de dados quando se faz necessrio. O mdulo Ajuste dos cabealhos responsvel pela
montagem dos cabealhos dos frames a serem transmitidos.
Os mdulos Decodes RS e Encoder RS so, na realidade, bancos de 16 decodificadores e
16 codificadores, pois como foi citado ao longo do trabalho, um frame possui o total de 16 subframes com clculos de FEC independentes.

55

Inicialmente seriam utilizados bancos de 8 decodificadores e 8 codificadores, pois os dados


so disponibilizados em palavras de 64 bits referentes a metade de uma coluna do frame, conforme
a Tabela 2. Portanto, para realizar a computao da outra metade da coluna, foi necessria a
implementao de uma estrutura que permitisse o compartilhamento dos 8 decodificadores e dos 8
codificadores. Esta alternativa foi logo descartada, pois esta estrutura requer um consumo de rea
praticamente igual utilizao de 16 decodificadores e 16 codificadores. Isso acontece porque as
nicas estruturas que seriam compartilhadas seriam os multiplicadores e as portas XOR, e a adio
de novos registradores para chavear o contexto entre dois clculos independentes, requer a adio
de muitos multiplexadores para control-los, o que no torna vantajoso compartilhar as demais
estruturas.
Na Figura 39 encontra-se a arquitetura empregada nos mdulos Decoder RS e Encoder RS.
Como comentado anteriormente, os dados so disponibilizados em palavras de 64 bits por ciclo da
frequncia de 200 MHz. Como existem 16 clculos de FEC independente, a frequncia de operao
do codificador e decodificador foi reduzida para 100 MHz. Isto significa que duas palavras de 64
bits, ou uma coluna do frame, so entregues aos mdulos por ciclo da frequncia de 100 MHz.
Dessa forma, possvel calcular o FEC dos 16 sub-frames paralelamente e independentemente.
100 MHz

200 MHz

200 MHz

Decoder RS
64 bits
REG
Desembaralhador

8 mdulos
DECODIFICADOR

64

64

Extrao dos
Cabealhos

64

Ajuste dos
cabealhos

64 bits
REG

8 mdulos
DECODIFICADOR

Encoder RS
64 bits
8 mdulos
CODIFICADOR
Embaralhador

REG

64
64 bits
8 mdulos
CODIFICADOR

REG

Figura 39 Mdulos Decoder RS e Encoder RS.

Ao final da redao deste documento a integrao encontra-se em fase de validao


funcional.

56

7 Concluses e Trabalhos Futuros


Este trabalho abordou inicialmente o padro OTN para dar uma base terica sobre o
protocolo onde o trabalho seria desenvolvido. A partir da, estudou-se o algoritmo de ReedSolomon para se ter uma idia da matemtica envolvida por trs dos processos de codificao e
decodificao. Apresentamos a seguir, o projeto de todos os mdulos desenvolvidos, bem como
uma explanao bsica de seu funcionamento. Tambm descrevemos os mtodos utilizados para
teste, bem como os resultados obtidos a partir dos mdulos desenvolvidos.
Ao final deste trabalho pode-se dizer que praticamente todos os nossos objetivos foram
atingidos. O objetivo principal, que seria o desenvolvimento de uma arquitetura de codificador e
decodificador Reed-Solomon, de acordo com o padro OTN, foi plenamente atingido. O objetivo
secundrio, que corresponde insero dos mdulos desenvolvidos no transponder, no foi
concludo, mas j se encontra em estgio avanado de desenvolvimento. Podemos dizer que j
temos toda a estrutura de integrao montada e em fase de simulao funcional, porm ela ainda
no foi plenamente testada, pois para esta tarefa seria necessrio uma ferramenta de gerao de
frames OTN completos, inclusive com os dados j embaralhados, que tambm est em
desenvolvimento. Para um teste completo do transponder, tambm seria necessrio um domnio de
transmisso de dados em fibra ptica a partir do FPGA, que ainda no possumos. Porm, os
mdulos desenvolvidos foram amplamente testados e o seu funcionamento foi completamente
validado em FPGA.
Conclui-se que a maior dificuldade encontrada neste trabalho foi adequar os mdulos
desenvolvidos aos requisitos do projeto, pois estes so bastante restritivos. Em primeiro lugar, a
taxa de injeo de dados no permitiu a utilizao de multiplicadores iterativos, que consomem uma
rea extremamente pequena e no tm muitas restries quanto freqncia mxima de operao,
visto que realizam poucas operaes lgicas entre os registradores. O uso de multiplicadores
completamente combinacionais satisfez os requisitos de desempenho, porm prejudicou muito a
freqncia de operao e na rea do projeto. Nesse ponto do trabalho j temos mdulos que
satisfazem restrio quanto freqncia de operao, porm, dado a necessidade de replicao
dos mdulos de codificao e decodificao, a rea deste projeto chega a ocupar 64% do dispositivo
alvo, que praticamente o estado da arte em FPGAs de alta capacidade. Dessa maneira, acredita-se
que algumas otimizaes ainda podem ser feitas, ficando isto como trabalho futuro.
Acredita-se que este trabalho contribuiu bastante para a formao dos autores, pois atravs
dele foi possvel solidificar vrios conceitos a respeito de desenvolvimento de hardware. O conceito
de caminhos crticos foi amplamente explorado e compreendido. Tambm se pode por em prtica o
uso de simulao com atraso de portas e de roteamento, o que facilita muito a etapa de prototipao,
na qual tambm adquiriu-se muita experincia. Atravs deste trabalho, tambm foi possvel colocar

57

em prtica o conceito de pipelines, alm de aprender novos conceitos matemticos e entender um


pouco mais sobre redes de computadores.
Como trabalhos futuros, alm de tentar realizar algumas otimizaes no projeto, ocorrer a
validao completa da integrao do Reed-Solomon com o transponder e o estudo das tcnicas de
transmisso e recepo de dados em fibra-ptica usando FPGAs. Acreditamos que atravs destas
atividades ser possvel concluir o projeto.

58

8 Referncias Bibliogrficas
[1] International Telecommunication Union, ITU-T G.709. Maro, 2003.
[2] Agilent
Tecnologies.
An
overview
of
ITU-T
G.709.
Capturado
em:
http://cp.literature.agilent.com/litweb/pdf/5988-3655EN.pdf, Setembro de 2001, Estados
Unidos.
[3] Sklar, B. Reed-Solomon Codes (Digital Communications: Fundamentals and Applications).
Upper Saddle River, NJ: Prentice-Hall, 2001, 1070p.
[4] Walker, T. Optical Transport Network (OTN) Tutorial. Capturado em: www.itu.int/ITUT/studygroups/com15/otn/OTNtutorial.pdf. Janeiro de 2007, Estados Unidos.
[5] Barlow, G. A G.709 Optical Transport Network Tutorial, Innocor Ltd. Capturado em:
http://www.innocor.com/pdf_files/g709_tutorial.pdf. Outubro de 2003, Almonte, ON, Canad.
[6] Reed, I.; Solomon G. Polymonial Codes Over Certain Finite Fields. SIAM Journal of
Applied Math, vol. 8, Junho de 1960, pp. 300-304.
[7] Laws, B.; Rushforth, K. A Cellular-Array Multiplier for GF(2m). IEEE Transactions on
Computers, Vol. C-20, No 12. Dezembro de 1971, pp. 1573- 1578.
[8] Wai, K.; Yang S. Field Programmable Gate Array Implementation of Reed-Solomon Code,
RS(255,239). Capturado em: www.ce.rit.edu/~sjyeec/papers/nyworkshop-rs-codec.pdf,
Outubro de 2005.
[9] Wilhelm, W. A New Scalable VLSI Architecture for Reed-Solomon Decoders. IEEE
Journal of Solid State Circuit, Vol. 34, No 2. Maro de 1999, pp. 388-396.
[10] Sarwate, D.; Shanbhag, N. High-Speed Architecture for Reed-Solomon Decoders. IEEE
Transactions on Very Large ScaleIintegration Systems. Vol. 9, No 5. Outubro de 2001, pp.
641-655.
[11] Park, T. Design of the (248,216) Reed-Solomon Decoder with Erasure Correction for Blu-ray
Disc. IEEE Transactions on Consumer Eletronics, Vol. 51, No 3. Agosto de 2005, pp. 872878.
[12] Massey, J. Shift-register syntesis and BCH decoding.. IEEE Transactions on Information
Theory, Vol. IT-15, No 1. Janeiro de 1969, pp. 122-127.
[13] Liu, K. Architecture for VLSI Design of Reed-Solomon Decoders. IEEE Transactions on
Computers, Vol. C-33, No 2. Fevereiro de 1984, pp. 178-189.
[14] Chang, H.; Shung, C.; Lee, C. A Reed-Solomon Product-Code (RS-PC) Decoder Chip for
DVD Aplications, IEEE Journal of Solid State Circuits, Vol. 36, No 2. Fevereiro de 2001, pp.
229-238.
[15] Reed, I.; Shih, M.; Truong, T. VLSI design of inverse-free Berlekamp-Massey. IEEE
Computer and Digital Techniques, Vol. 138, No 5. Setembro de 1991, pp. 295-298.
[16] Lee, H. A High-Speed Low-Complexity Reed-Solomon Decoder for Optical
Communications. IEEE Transactions on Circuits and Systems II: Express Briefs, Vol. 52,
No 8. Agosto de 2005, pp. 461-465.
[17] Moon, T. Error Correction Coding: Mathematical Methods and Algorithms. Hoboken, NJ:
Wiley, 2005, 794 p.

59

[18] Arash Partow Copyright, Schifra. Capturado em: http://www.schifra.com, Dezembro de


2007.
[19] Phil Karn, FEC library. Capturado em: http://www.ka9q.net/code/fec, Dezembro de 2007.
[20] The Dini Group INC. DN8000K10PCI User Manual Version 3.0. Capturado em:
http://www.dinigroup.com/product/data/DN8000k10pci/files/dn8k10pci_manual.pdf,
Novembro de 2007.
[21] The
Dini
Group
INC.
Mainbus
Specification.
Capturado
http://www.dinigroup.com/product/common/mainbus_spec.pdf, Novembro de 2007.

em:

[22] Almeida, G. Cdigos Corretores de Erros em Hardware para Sistemas de Telecomando e


Telemetria em Aplicaes Espaciais, Dissertao de mestrado, Programa de Ps-Graduao
em Cincias da Computao, PUCRS, 2007, 96 p.

60

Vous aimerez peut-être aussi