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) x

(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:

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.

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

(1)

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. 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. 3 Jerarqua de componentes del codificador.

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 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. b) Polinomio localizador de error c) Generador del error Debemos resolver un sistema de ecuaciones con tantas incgnitas como errores hayamos detectado y tiene la forma para nuestro ejemplo:

Y1 +Y2 = S1 x1Y1 + x2Y2 = S2

(7)

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. 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 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.

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: 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 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 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.

f1 =

S2 S3
S3 S4

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

f1 =

2
S2 S3 S3 S4

0. + 1

8 = 2 = 6 2

f2 =

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

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). Tabla 3 Cdigo del localizador de errores.

Fig. 8 Simulacin del codificador RS.

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).

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.

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.

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