Está en la página 1de 9

ISSN 1818-6742

Impreso en Nicaragua
www.uni.edu.ni/Nexo
Vol. 21, No. 01, pp. 02-10 / Junio 2008

Diseo de un codificador y decodificador digital


Reed-Solomon usando programacin en VHDL
C. Sandoval* y A. Fedn
Facultad de Ingeniera, Universidad de Carabobo
PO Box 2008, Naguanagua, Sector Brbula, Venezuela
E-mails: {csandoval1; afedon}@uc.edu.ve

(recibido/received: 14-Nov-2006; aceptado/accepted: 28-Mayo-2007)

RESUMEN
En este artculo se presenta un procedimiento prctico para el diseo de un codificador/decodificador
Reed-Solomon a travs de la descripcin funcional usando lenguaje descriptor de hardware (VHDL) con la
herramienta de programacin Xilinx ISE 9.2i. Este trabajo propone un diseo que usa los beneficios que presenta la
programacin VHDL, su caracterstica de modularidad, y la estrategia de seccionar el diseo en componentes menos
complejos para facilitar el proceso. Adems, se detalla la metodologa del diseo del decodificador a travs de
procesamiento paralelo. Para la validacin del comportamiento del codificador/decodificador, se realizaron
simulaciones con el programa ModelSim XE 5.7c.
Palabras claves: codificador Reed-Solomon; diseo de hardware; VHDL

ABSTRACT
This paper presents a practical procedure for designing a Reed-Solomon encoder/decoder through the functional
description using hardware descriptor language (VHDL) with the programming tool Xilinx ISE 9.2i. We propose a
design that use the benefits introduced by VHDL programming, its modularity feature, and the strategy for dividing
the design in less complex components to facilitate the process. In addition, the methodology of the decoder design
using parallel processing has been detailed. Simulations with ModelSim XE 5.7c software were carried out in order
to validate the encoder/decoder behaviour.
Keywords: hardware design; Reed-Solomon coder; VHDL

*Autor para la correspondencia

C. Sandoval y A. Fedn

INTRODUCCIN
En la actualidad se evidencia una creciente
tendencia hacia el uso de dispositivos de lgica
reconfigurable a alta escala de integracin
(Wakerly, 2001), en funcin de los beneficios
que esta tecnologa ofrece a los diseadores de
sistemas
digitales,
estos
dispositivos
programables a travs de un lenguaje de
descripcin de hardware (VHDL, por sus siglas
en ingls), los cuales permiten configurar
sistemas digitales segn las especificaciones
demandadas por los usuarios, ajustar cambios
en la programacin, optimizar los diseos
tratndolos en forma modular.
En este estudio se introduce el tema del lenguaje
descriptor de hardware (estandarizado) VHDL,
el cul tiene entre sus caractersticas el hecho de
ser estructural, lo que permite manejar los
aspectos de la programacin por mdulos, e
incluso podemos desarrollar distintos niveles de
abstraccin dentro de la programacin de los
dispositivos lgicos programables (CPLD, por
sus siglas en ingls).
En este orden de ideas, es fundamental avanzar
en direccin al diseo de hardware con
programacin VHDL, por contar con una
normalizacin IEEE y tener caractersticas de
modularidad, adquiriendo experiencia en el
desarrollo de sistemas de comunicaciones. Por lo
anterior expuesto, se estableci como propsito
de este proyecto realizar un diseo de un
codificador de canal para correccin de errores y
sus componentes en los sistemas de
comunicaciones digitales en banda base,
orientado a la implementacin sobre dispositivos
programables de alta escala de integracin.
De esta manera que se presenta una propuesta
didctica para el diseo de un codificador y su
decodificador Reed-Solomon, por presentar
estos la capacidad para corregir errores y su
utilidad en varios sistemas incluyendo:
dispositivos de almacenamiento (cintas, discos
compactos, DVD, cdigos de barras),
comunicaciones
inalmbricas
o
mviles
(telefona celular, enlaces de microondas, etc.),
comunicaciones
satelitales,
televisin
digital/DVB, mdem de alta velocidad como

ADSL, x DSL. (cuervo, E), en vista de lo cual


resulta de inters realizar la descripcin
funcional de estos, a fin de implementarlos a
nivel de programacin VHDL.

TEORA
Programacin en VHDL
El auge y la versatilidad que ofrecen los
dispositivos lgicos programables han requerido
de un lenguaje descriptor de hardware, que
permita al diseador, realizar la configuracin
del dispositivo de acuerdo a su funcin
especifica,
a
travs
de
programacin
estructurada de alto nivel, para as describir el
comportamiento de los componentes del sistema
digital, sintetizar y finalmente descargar la
programacin en el dispositivo sea PLD, CPLD,
FPGA, a fin de configurar el hardware de
manera conveniente al propsito del diseo.
El
diseo
se
jerrquicamente:

puede

descomponer

1. Definicin de diagrama de bloques modular.


2. Identificar los puertos de entrada y salida.
3. Identificar las seales del diseo modular.
Es de hacer notar que el diseo cuenta con una
etapa cognoscitiva, una vez realizada la
modelacin del sistema digital de inters, el
prximo paso estar dado por el cumplimiento
de las etapas de programacin en VHDL.
Codificador de canal Reed-Solomon
En esta etapa se presenta el tratamiento de la
trama de datos para formar la palabra de cdigo
que ser transmitida incluyendo un mecanismo
para correccin de errores, en este estudio se
considerar un cdigo Reed-Solomon.
Este es un cdigo corrector de errores basado en
bloques con un amplio rango de aplicaciones en
comunicaciones digitales y almacenamiento. El
cdigo fue inventado por Irving S. Reed y
Gustave Solomon, miembros del MIT Lincoln
Laboratory (Reed y Solomon, 1960). Sin
embargo, la clave para hacer del cdigo ReedSolomon una aplicacin tecnolgica fue la

Vol. 21, No. 01, pp. 02-10 / Junio 2008

C. Sandoval y A. Fedn
implementacin de un algoritmo eficiente de
decodificacin el cul fue realizado por Elwyn
Berlekamp de la universidad de Berkeley
(Suardaz y Al-Hadithi, 2004).
Estos cdigos pertenecen a la familia de cdigos

de bloque, en que el codificador procesa un


bloque de smbolos sin codificar, a los que
agrega redundancia para producir otro bloque,
de mayor longitud, de smbolos codificados, de
ah el inters en desarrollar un proyecto en
donde se aplique este tipo de algoritmo de
correccin de errores en VHDL.
a) Estructura de los cdigos Reed-Solomon
Un cdigo Reed-Solomon se especifica como
RS(n,k) con smbolos de m bits. Lo anterior
significa que el codificador toma k smbolos
de los m bits y aade smbolos de paridad para
hacer una palabra de cdigo de n smbolos.
Existen n-k smbolos de paridad de m bits
cada uno. Un decodificador puede corregir hasta
t smbolos que contienen errores en una
palabra de cdigo, donde 2t = (n-k) (Xilinx,

2002). La palabra de cdigo presenta la


estructura mostrada en la Fig. 1.

La palabra de cdigo se genera de:

c( x) = g( x) i( x)

(2)

donde g(x) es el polinomio generador, i(x) es el


bloque de informacin, c(x) es una palabra de
cdigo vlida y se conoce como un elemento
primitivo del campo (Agatep, 2000). El primer
paso corresponde a la definicin del campo de
Galois para la codificacin, el cual estar
definido en funcin de la longitud del smbolo
entindase m bits/smbolo, el cual permite
conocer el polinomio reducible del campo de
Galois GF(2m).
Las bases tericas que sustentan este codificador
estn dadas por el polinomio en su forma
general:

g( x) =

nk 1

i= 0

h(Generator _ Start +i)

(3)

Al ser expandido, se obtiene:

g( x) = Gnk 1 x nk 1 + Gnk 2 x nk 2 +
.... +G1 x + G0

(4)

donde n es la longitud de la palabra codificada


(en smbolos), k la longitud del mensaje
codificado (en smbolos) y m la longitud del
smbolo (bits) (Agatep, 2000).
Diseo del codificador RS (7,3)

Fig. 1 Palabra de cdigo Reed- Solomon


(Clemente, 2004).
b) Generador polinomial
Una palabra de cdigo Reed-Solomon es
generada usando un polinomio especial. Todas
las palabras de cdigo vlidas son divisibles
exactamente por el polinomio generador. La
forma general de este polinomio es:

g( x)=( x i )( x i+1 )........( x i+2t )

(1)

Se ha seleccionado un codificador de orden 3, ya


que se requera la transmisin de paquetes de 3
smbolos de 3 bits cada smbolo, siendo el
RS(7,3) apropiado para la aplicacin y con base
al desarrollo terico estudiado se realiz la
descripcin de cada uno de los mdulos, que
constituyen dichas etapas de codificacin y
decodificacin del canal.
Aplicando los parmetros establecidos, se puede
calcular el polinomio primitivo y el
correspondiente polinomio generador, con cuyos
coeficientes se implementar el diseo.

Vol. 21, No. 01, pp. 02-10 / Junio 2008

C. Sandoval y A. Fedn
El procesamiento y manejo serial de los datos de
entrada se realiza a travs del siguiente cdigo,
presentado en la Tabla 1, correspondiente al
mdulo principal Codificar_RS, donde es
importante destacar que se obtiene una salida
serial codificada.

El cual permite obtener la palabra codificada


compuesta por 3 smbolos de datos y 4 smbolos
de paridad.
***************************************
msg = gf([1,3,7],m)
code = rsenc(msg,N,K,GENPOLY)
***************************************
Logrndose implementar el codificador de la
forma:
Tabla 1 Cdigo en VHDL de la arquitectura del
RS (7,3).
Fig. 2 Codificador RS (7,3).
Al aplicar los datos de entrada D = [1, 3, 7], el
polinomio generador se encarga de procesar los
datos, lo cual se describe en VHDL a travs de
una serie de componentes y as se obtiene a la
salida C = [1, 3, 7, 0, 1, 1, 5]. La definicin
jerrquica de los componentes que conforman el
codificador se presenta en la Fig. 3.

Fig. 3 Jerarqua de componentes del codificador.

Este diseo es una aplicacin prctica sencilla


que permite ilustrar el funcionamiento y
describir el cdigo en VHDL del codificador RS
(n,k).
Diseo del decodificador RS (7,3)
La
palabra
de
cdigo
recibida
es
r( x) = c( x) + e( x) , donde se encuentra el cdigo
original con los errores adicionales.
En la Fig. 4, se presenta el diagrama de los
mdulos funcionales que intervienen en el
proceso de decodificacin, para establecer la
descripcin del bloque encargado de operar la
trama de entrada recibida para obtener el clculo
del sndrome del decodificador RS (7,3).

Fig. 4 Mdulos del decodificador RS (n,k).

Vol. 21, No. 01, pp. 02-10 / Junio 2008

C. Sandoval y A. Fedn
a) Funcin sndrome en el decodificador

c) Generador del error

Se realiza el procedimiento de calculo de los


smbolos de paridad conocido el polinomio
generatriz G(x) del codificador y H(x) del
decodificador RS(n,k), a fin de evaluar la
palabra de cdigo del lado del receptor lo que
produce un vector nulo en caso de no haber error
en la transmisin y un vector S (sndrome) que
permite conocer los smbolos con error.

Debemos resolver un sistema de ecuaciones con


tantas incgnitas como errores hayamos
detectado y tiene la forma para nuestro ejemplo:

b) Polinomio localizador de error

Para encontrar un polinomio localizador de


error, lo que se puede lograr utilizando el
algoritmo Berlekamp-Massey o el algoritmo de
Euclides. El algoritmo de Euclides tiende a ser el
ms utilizado en la prctica debido a que es ms
fcil de implementar, sin embargo el algoritmo
Berlekamp-Massey tiende a llevar a una
implementacin hardware y software ms
eficientes. Este algoritmo fue estudiado y
tomado como soporte para el diseo del
componente en VHDL. Adems sus nicas
operaciones sobre los datos son la suma
polinomial que en hardware son realizadas con
compuertas XOR y las multiplicacin y divisin
por potencias de 2, que por ser aritmtica binaria
se traducen en hardware como corrimientos de
bits.

Y1 +Y2 = S1
x1Y1 + x2Y2 = S2

(7)

donde Y1 indica el valor del error en el smbolo


dado por (n - exponente de x1 ), x1 es la raz de
f(x), Y2 indica el valor del error en el smbolo
dado por (n - exponente de x2 ), x2 es la otra raz
de f(x). Finalmente se realizar la adiccin entre
modulo-2 (xor) entre el dato de entrada que fue
recibido por el decodificador (que se mantiene
registrado en una memoria RAM) y el error
generado, con lo que se obtiene el cdigo
recuperado.
El diseo del decodificador que implementa la
funcin inversa del codificador previamente
programado. Fue programado a partir del
modelo matemtico se estructur para la
implementacin en hardware. Definido tanto los
puertos de entrada y salida, como los
componentes del circuito decodificador, como se
muestra en la Fig. 5.

Ahora se debe localizar los smbolos errneos,


para ello debemos seguir un procedimiento que
implica resolver uno sistemas de ecuaciones, el
primero de ellos sigue la frmula general:
St+j = f1 St+j-1 +.........+ ft-1 Sj+1 + ft Sj

(5)

donde 1< = j < = t los fi son las incgnitas y Si


los componentes del sndrome calculado.
c) Bsqueda de Chein
La posicin en la que estn los errores se hace
con el algoritmo de bsqueda de Chien, este
consiste en obtener de los exponentes de las
races de un polinomio f(x) cuya frmula general
es:
f(x) = xt + f1 xt + ......+ ft-1 x + ft

(6)

Fig. 5 Definicin de componentes del


decodificador.
Se procede a calcular los valores de S, aplicando
la ecuacin (5):
S1 =1 + 2 + 5 + 1 + 2 + 6 =
S2 = 1+2+2+ 3+ 6 =1+2+2+3=1+ +1=
S3 = 5 + 5 + 6 + 4 + 4 + 6 = 0

Vol. 21, No. 01, pp. 02-10 / Junio 2008

C. Sandoval y A. Fedn
S4 = 4+ 3+ 10+ 6+ 5+ 6= 2++ 2+ +1=1
donde se obtiene el sndrome como:
S = [ 0 1]
Para el diseo del modulo de clculo de
sndrome en el decodificador Reed-Solomon se
debe seleccionar la arquitectura del circuito que
realice las operaciones de producto y suma
dentro del campo finito del diseo GF (23) a fin
obtener los sndromes a partir de evaluar la
palabra de cdigo recibida r(x) donde x = j,
para j = 12t.
Para localizar la posicin del error se tiene el
sistema de ecuaciones generado de la ecuacin
7, en el caso particular de n-k = 4 t = 2, se
tiene 1 < = j < = 2 por lo que el sistema de
ecuaciones queda:

Para encontrar las races del polinomio anterior


se emplea el algoritmo de bsqueda de Chien.
Encontrando los valores del smbolo errneo.
Nuevamente, esto implica resolver ecuaciones
con t incgnitas. Un algoritmo usado
ampliamente es el algoritmo de Forney. Y para
obtener las races de f(x) se procede por tanteo.
Este bloque se diseo a travs de la evaluacin
del polinomio en funcin de los valores de fi
previamente calculados, este procedimiento se
aplic en forma secuencial, se realiz un
conjunto de simulaciones para recabar los datos
resultantes y as establecer para el diseo en
forma paralela una tabla de bsqueda
programada para los diferentes valores de fi
obtener el respectivo valor de la raz xi. De lo
cual se obtiene la Tabla 2.
Tabla 2 Relacin de coeficientes f1,f2 con las
races r1,r2.

S 3 = f1 S 2 + f2 S 1
S 4 = f1 S 3 + f2 S 2
por Kramer pero teniendo en cuenta la aritmtica
en un campo finito:

f1 =

f1 =

f2 =

S2
S3

S1
= S2 .S2 + S1.S3 = + 0 = 2
S2

S3
S4

S1
S2

2
S2
S3

S3
S4

0. + 1

8
= 2 = 6
2

1+ 0 8
= 2 = 5 = 6
2

Al sustituir los coeficientes f1, f2 que en este caso


particular, se obtiene:
f(x)= x2 + f1 x + f2
que sustituyendo los valores, se obtiene:
f(x)= x2 + 6 x + 6

f1
2
3
6
1
7
4
1
4
3
5
6
5
2
4
7
7
1
2
6
5
3

f2
6
3
4
2
1
5
4
2
1
5
7
1
5
7
6
7
6
3
3
4
2

r1
5
5
3
4
2
1
6
3
4
2
1
3
4
2
1
3
2
1
2
1
1

r2
7
6
5
5
5
5
7
7
7
7
7
6
6
6
6
4
3
3
4
4
2

La posicin de los smbolos errneos se obtiene


a partir de los exponentes de las races.
Este modelo permiti definir las fuentes que
forman parte del proyecto en Project Navigator

Vol. 21, No. 01, pp. 02-10 / Junio 2008

C. Sandoval y A. Fedn
versin 9.2i, donde se programar el
decodificador Reed-Solomon, cada uno de los
bloques, fueron definidos como componentes y
se adicionaron como fuentes .vhdl, as lo ilustra
la Fig. 6.

Fig. 7 Proceso de programacin del FPGA.

RESULTADOS Y DISCUSIN
Los resultados obtenidos a travs de la
simulacin del codificador y del decodificador
corresponde a las Figs. 8 y 9, respectivamente.

Fig. 6 Jerarqua de las fuentes del decodificador


Reed-Solomon.
Y se procede a la descripcin del
comportamiento. En la Tabla 3 se presenta el
cdigo que describe el mdulo de localizador de
errores, donde se obtienen las posiciones de los
smbolos errados, con la evaluacin de las races
obtenidas del sistema de ecuaciones resultantes
de aplicar la ecuacin (6).

Fig. 8 Simulacin del codificador RS.

Tabla 3 Cdigo del localizador de errores.

En la Fig. 7, se muestra el proceso de


programacin.

Fig. 9 Simulacin del decodificador RS.

Vol. 21, No. 01, pp. 02-10 / Junio 2008

C. Sandoval y A. Fedn
En la simulacin del comportamiento del
codificador Reed-Solomon, se estableci el
procesamiento de los datos recibidos (d_in). En
la Fig. 9, se puede observar la salida del
codificador, ser la seal de entrada cx, es la
trama de entrada de datos, a esta nueva trama de
7 smbolos se le ha adicionado el ruido del canal
sobre dos de sus smbolos cualesquiera ex, con
lo que se obtiene la trama recibida rx, estos
smbolos son procesados y se obtiene S1, S2, S3,
S4 los resultados del sndrome, estos son
procesados a travs del sistema de ecuaciones
produciendo los coeficientes de f(x) entindase
f1, f2 estos son entrada a la matriz de conversin
para obtener xa, xb estas ultimas races del
polinomio f(x) y con los cuales se calculan los
valores de los errores e1, e2, los cuales son
sumados en las posiciones localizadas con la
entrada al receptor rx obtenindose los datos
corregidos.
El resultado exitoso del diseo y las
caractersticas de VHDL, que siguen las norma
de programacin IEEE-1076, hace que los
diseos sean porttiles a cualquier plataforma
(Chang, 1999).

CONCLUSIONES
El estado actual sobre codificacin ReedSolomon. Se ha incluido un compendio de la
teora de codificacin Reed-Solomon. As como,
un desarrollo de un modelo de codificacin
Reed-Solomon. Una de las mejores alternativas
es el posible uso de una cadena concatenada
semejante a la propuesta en la norma IEEE
802.16.
La arquitectura diseada fue optimizada para
dispositivos reconfigurables (FPGAs) tomando
ventaja del mximo nivel de paralelismo que se
puede explotar en la multiplicacin y
operaciones de la aritmtica de campos finitos
de Galois GF(2m) mediante un uso eficiente de
loa recursos de hardware (Sandoval, 2006).
Se ha podido disear un codificadordecodificador Reed-Solomon que puede corregir
errores en dos smbolos, con las facilidades de
una descripcin a travs de un programa de
programacin de hardware.

TRABAJOS FUTUROS
El diseo de un dispositivo para implementar un
cdigo Reed-Solomon RS(255,223) con
smbolos de 8 bits. En el cul, el decodificador
pueda corregir cualquier error de 16 smbolos en
la palabra de cdigo, es decir, errores de hasta
16 bytes en cualquier lugar de la palabra pueden
ser automticamente corregidos. Una vez
establecido el polinomio g(x), los sndromes
pueden ser calculados al sustituir las 2t races
del polinomio generador g(x) en r(x).

REFERENCIAS
Agatep, A. (2000). Reed-Solomon Solutions with
Spartan-II FPGAs. White paper: Spartan-II
Family.http://direct.xilinx.com/bvdocs/whitepap
ers/wp110.pdf
Chang, K.C. (1999). Digital Systems Design
with VHDL and Synthesis: An Integrated
Approach. Wiley-IEEE Computer Society Pr.
New Jersey, USA.
Clemente, E. (2004). Construccin de un
Decodificador Reed-Solomon en VHDL. Informe
Tcnico. Centro de Investigacin y de Estudios
Avanzados. Ciudad de Mxico, Mxico.
Sandoval, C. (2006). Transmisin de Datos
usando Cdigos Reed-Solomon e Intercalado
Convolucional Implementado sobre FPGA.
Comunicacin de Datos, Vol. 4, pp. 83-89.
Reed, I.S. y G. Solomon (1960). Polynomial
Codes over Certain Finite Fields. SIAM Journal
on Applied Mathematics, Vol. 08, No. 02, pp.
300-304.
Suardaz, J. y B.M. Al-Hadithi (2004). Control
Electrnico mediante Telefona Mvil Digital
basada en la Red GSM. Tecnologa y
Desarrollo. Revista de Ciencia, Tecnologa y
Medio Ambiente, Vol. 02.
Wakerly, J. (2001). Diseo Digital: Principios y
Prcticas. 3ra Edicin. Editorial Pearson.
Ciudad de Mxico, Mxico.

Vol. 21, No. 01, pp. 02-10 / Junio 2008

C. Sandoval y A. Fedn
Xilinx, Inc. (2002). Xilinx System Generator
v2.1 for Simulink: Basic Tutorial. The Xilinx
Design
Series.
Disponible
en
lnea:
http://www.xilinx.com/support/library.htm

Cecilia Sandoval es Ingeniero


Electricista y Magster en
Ingeniera Elctrica en la
Universidad de Carabobo,
Venezuela. Siendo su rea de
investigacin procesamiento
digital de datos con nfasis en
aplicaciones de hardware reconfigurable.
Docente-Investigador
en
la
Universidad
Nacional Experimental de las Fuerzas Armadas
(UNEFA), Venezuela.

Vol. 21, No. 01, pp. 02-10 / Junio 2008

También podría gustarte