Investigación Implementación de un codificador y decodificador digital Reed–Solomon a través de programación VHDL Cecilia E. Sandoval Ruiz y Antonio Fedón Universidad de Carabobo, Área de Estudios de Postgrado, Facultad de Ingenierı́a Venezuela [email protected], [email protected] recibido: diciembre de 2006 preimpreso resumen En este artı́culo se presenta un procedimiento metodológico simple y el estado del arte para diseñar bloques funcionales del codificador Reed–Solomon orientados a tecnologı́a FPGA. Este se inicia con el diseño a nivel de algoritmo del codificador, luego se concibe la arquitectura y se captura el diseño de hardware usando VHDL, finalmente se lleva acabo la validación del comportamiento del codificador utilizando ModelSim 5.7 a través de simulaciones de los módulos. Las operaciones en los campos finitos de Galois, GF (2m ), es la base de varios algoritmos en el área de corrección de errores y procesamiento digital de señales, sin embargo los cálculos involucrados requieren gran cantidad de tiempo al ser implementados a través de software, por razones de desempeño y seguridad es preferible implementar los algoritmos en hardware. 1 C. E. SANDOVAL RUIZ Y A. FEDÓN 1. Introducción En los actuales momentos se evidencia una creciente tendencia hacia el uso de dispositivos de lógica reconfigurable a alta escala de integración (Wakerly, 2001), en función de los beneficios que esta tecnologı́a ofrece a los diseñadores de sistemas digitales, estos dispositivos programables a través de un lenguaje de descripción de hardware como VHDL, los cuales permiten configurar sistemas digitales según las especificaciones demandadas por los usuarios, ajustar cambios en la programación, optimizar los diseños tratándolos en forma modular. Una importante caracterı́stica de VHDL es que se encuentra estandarizado bajo la norma 1076 (Prez y cols., 2002). Es por ello que se ha seleccionado como lenguaje para la descripción del codificador de canal digital. Debido a la gran importancia que tiene el campo de las comunicaciones digitales, por la ventaja que ofrece sobre las comunicaciones analógicas, resulta interesante diseñar un sistema compacto que incorpore las etapas de procesamiento y comunicación de datos, ya que debido a la gran flexibilidad de las FPGAs (Field Programmable Gates Array) no se requiere establecer requisitos mı́nimos para realizar cualquier tipo de diseño. Siendo imprescindible que la memoria sea suficiente para almacenar la totalidad del hardware a implementar (Suardı́az, 2004). Se plantea entonces la necesidad de emplear la tecnologı́a de programación en VHDL como soporte para el diseño del codificador Reed–Solomon, donde se presenta la posibilidad de subdividir el codificador, atendiendo a cada modulo según su función especifica para lograr los objetivos planteados a través de la descripción de hardware, y realizar los ajustes que permitan optimizar el diseño en la etapa de programación. 2. Codificador Reed–Solomon En el estudio de los codificadores de canal se presenta como el más ventajoso el código Reed-Solomon (véase la figura 1). Se puede observar que su probabilidad de error en relación señal a ruido esta cercano al lı́mite de Shannon, presentando mayor eficiencia sobre otros códigos correctores de error (Antolin Agatep, 2000). En esta etapa se presenta el tratamiento de la trama de datos para formar la palabra de código que será transmitida incluyendo un mecanismo para corrección de errores, en este estudio se considerará Código Reed–Solomon (Reed–Solomon Code). Este es un código corrector de errores basado en bloques con un amplio rango de aplicaciones en comunicaciones digitales y almacenamiento. El código fue inventado en 1960 por Irving S. Reed y Gustave Solomon, miembros del MIT Lincoln Laboratory, en su artı́culo 2 IMPLEMENTACIÓN DE UN CODIFICADOR Y DECODIFICADOR DIGITAL REED–SOLOMON FIGURA 1. Caracterı́stica de los codificadores de canal (Fuente: Reed-Solomon Solutions with Spartan-II FPGA (Antolin Agatep, 2000) publicado “Polynomial Codes over Certain Finite Fields”. Mas sin embargo la clave para hacer del código Reed–Solomon una aplicación tecnológica fue la implementación de un algoritmo eficiente de decodificación el cual fue realizado por Elwyn Berlekamp de la Universidad de Berkeley (Suardı́az, 2004). Actualmente los códigos Reed–Solomon se utilizan para corregir errores en varios sistemas, incluyendo: dispositivos de almacenamiento (cintas, discos compactos, DVD, códigos de barras), comunicaciones inalámbricas o móviles (telefonı́a celular, enlaces de microondas, etc.), comunicaciones satelitales, televisión digital/DVB, módem de alta velocidad como ADSL, x DSL (Cuervo, s/f). Estos códigos pertenecen a la familia de códigos de bloque, en que el codificador procesa un bloque de sı́mbolos sin codificar, a los que agrega redundancia para producir otro bloque, de mayor longitud, de sı́mbolos codificados, de ahı́ el interés en desarrollar un proyecto en donde aplique este tipo de algoritmo de corrección de errores en VHDL. 2.1. Propiedades de los códigos Reed–Solomon El código Reed–Solomon es un subconjunto de los códigos BCH y son de bloques lineales. Un código Reed–Solomon se especifica como RS(n, k) con sı́mbolos de s bits. Lo anterior significa que el codificador toma k sı́mbolos 3 C. E. SANDOVAL RUIZ Y A. FEDÓN de los s bits y añade sı́mbolos de paridad para hacer una palabra de código de n sı́mbolos. Existen n − k sı́mbolos de paridad de s bits cada uno. Un decodificador puede corregir hasta t sı́mbolos que contienen errores en una palabra de código, donde 2t = (n − k) (Xilinx System Generator v2.1 for Simulink). El siguiente diagrama muestra una tı́pica palabra de código Reed–Solomon (este se conoce como un código sistemático puesto que los datos se dejan inalterados y los sı́mbolos de paridad se anexan): FIGURA 2. Palabra de Código Reed–Solomon (Fuente: Reed-Solomon Solutions with Spartan-II FPGA (Antolin Agatep, 2000) Para codificar la trama con esta estructura se debe procesar a través de un circuito digital que opere bajo los fundamentos de campo finito de Galois. Este presenta una arquitectura en el codificador compuesta por los bloques funcionales mostrados en la figura 3. FIGURA 3. Arquitectura genérica de un codificador Reed–Solomon (Fuente: Reed–Solomon Solutions with Spartan-II FPGA (Antolin Agatep, 2000) 2.2. Campos de Galois aplicados a la codificación Reed–Solomon Los códigos Reed–Solomon se basan en un área especialista de las matemáticas llamada Campos Galois (GF ) o campos finitos. Un campo finito tiene 4 IMPLEMENTACIÓN DE UN CODIFICADOR Y DECODIFICADOR DIGITAL REED–SOLOMON la propiedad de que las operaciones aritméticas (+, −, ×, /, etc.) en elementos del campo siempre tienen un resultado en el campo. Un codificador o decodificador Reed–Solomon debe ser capaz de realizar estas operaciones aritméticas (Nazar, 2004; Negrete, 2006; Ortiz-Garcı́a, 2006). 2.3. Generador polinomial Una palabra de código Reed–Solomon es generada usando un polinomio especial. Todas las palabras de código válidas son divisibles exactamente por el polinomio generador. La forma general de este polinomio es: g(x) = (x − αi )(x − αi+1 ) · · · (x − αi+2t ); la palabra de código se genera de: c(x) = g(x) ∗ i(x), donde g(x) es el polinomio generador, i(x) es el bloque de información, c(x) es una palabra de código válida y α se conoce como un elemento primitivo del campo (Antolin Agatep, 2000; Cuervo, s/f). El primer paso corresponde a la definición del campo de Galois para la codificación, el cual estará definido en función de la longitud del sı́mbolo, entiéndase m bits/sı́mbolo, el cual permite conocer el polinomio reducible del campo de Galois GF (2m ). Las bases teóricas que sustentan este codificador están dadas por el polinomio en su forma general: g(x) = n−k−1 Y ³ x − αh×(Generator Star) ´ ; i=0 al ser expandido se obtiene: g(x) = Gn−k−1 xn−k−1 + Gn−k−2 xn−k−2 + · · · + G1 x + G0 , donde n es la longitud de la palabra codificada (en sı́mbolos), k es la longitud del mensaje codificado (en sı́mbolos) y m es la longitud del sı́mbolo (bits). 5 C. E. SANDOVAL RUIZ Y A. FEDÓN 3. Diseño de un codificador-decodificador Reed–Solomon (7, 3) En base al desarrollo teórico estudiado se realizó la descripción de cada uno de los módulos. 3.1. Diseño del codificador RS(7, 3) Para comprender en forma práctica el cálculo del codeword, asumiremos un campo GF (8), es decir, m = 3 bits/sı́mbolo; la representación de los elementos del campo estará comprendida por el polinomio irreducible p(x) = x3 + x + 1, el cual tiene por raı́z α, por lo que al igualar a cero el polinomio se obtiene α3 + α + 1 = 0, tal que α3 = α + 1 será la representación para sustituir el elemento (8) que se desborda del campo, con lo que se puede convertir a un elemento perteneciente al campo. A partir de la expresión de G(x), para un codificador RS(7, 3) se obtuvo el polinomio generador de la forma: G(x) = α2 x3 + α5 x2 + α5 x + α6 , el cual es sustituido en función de la tabla 2.2, obteniéndose: G(x) = 4x3 + 7x2 + 7x + 5, el cual permite obtener la palabra codificada compuesta por 3 sı́mbolos de datos y 4 sı́mbolos de paridad. Lográndose implementar el codificador de la forma que muestra la figura 4. FIGURA 4. Codificador RS(7, 3) (Fuente: Propia del autor). 6 IMPLEMENTACIÓN DE UN CODIFICADOR Y DECODIFICADOR DIGITAL REED–SOLOMON Al aplicar los datos de entrada D = [1, 3, 7, 0, 0, 0, 0], se obtiene a la salida C = [1, 3, 7, 0, 1, 1, 5], para lo cual se definieron los multiplicadores para el campo de Galois, los cuales son componentes que obtienen a su salida el resultado del producto en el campo en función de la entrada. El módulo en VHDL para la multiplicación del coeficientes 4 por los sı́mbolos de entrada es: TABLA 1. Código en VHDL del multiplicador por 4 en GF (8). with D in select dato1<="000" when "100" when "011" when "111" when "110" when "010" when "101" when "001" when "000", "001", "010", "011", "100", "101", "110", others; --4x0=0 --4x1=4 --4x2=3 --4x3=7 --4x4=6 --4x5=2 --4x6=5 --4x7=1 El manejo de los registros y la XOR entre los elementos procesados será: TABLA 2. Código en VHDL de la arquitectura del RS(7, 3). process (clk) begin if (clk’event and clk=’1’) then rdato4<=dato4; rdato3<=rdato4 xor dato3; rdato2<=rdato3 xor dato2; rdato1<=rdato2 xor dato1; D dato<=rdato1 xor D in; end if; end process; D out<=rdato1; Este diseño es una aplicación práctica sencilla que permite ilustrar el funcionamiento y validar el código en VHDL; este puede ser extendido para cualquier codificador RS(n, k). 3.2. Validación en MATLAB del diseño El cálculo del campo de Galois se realizó también usando la herramienta matemática MATLAB, el comando para obtener el arreglo de Galois (gf) se aplicó a la matriz de datos a enviar y al número de bits por sı́mbolo, en 7 C. E. SANDOVAL RUIZ Y A. FEDÓN este caso 3 bits por sı́mbolo: msn =gf ([matriz de datos], m). En tanto que la palabra de código se obtiene al aplicar el comando de codificación (rsenc) al arreglo de Galois (msn) y a la longitud de la palabra de código, con la longitud del mensaje: Code =rsenc (msn,n,k). TABLA 3. Código en tt MATLAB del RS(7, 3). >>m=3 % longitud del sı́mbolo (en bits) >>n=7 % longitud del codeword (en sı́mbolos) >>k=3 % longitud del mensaje (en sı́mbolos) >>i(x) =gf([1,3,7], m) % aplica gf (2m ) al mensaje sin formato >>c(x) =rsenc(i(x), n, k) % aplica g(x).i(x) para obtener el codeword >>c(x) =[1,3,7,0,1,1,5] % palabra de código obtenida Con lo cual queda validado el codificador diseñado a través de la herramienta matemática MATLAB. Esto para comprobar la fiabilidad del diseño realizado. 3.3. Diseño del decodificador RS(7, 3) Para la implementación del decodificador a través de VHDL, se toma como base la arquitectura dada en la figura 5. FIGURA 5. Diagrama de bloques del decodificador RS (Fuente: Reed–Solomon Solutions with Spartan-II FPGA (Antolin Agatep, 2000). Ahora, en base al diagrama de bloques se definirán las funciones especı́ficas de cada módulo. 8 IMPLEMENTACIÓN DE UN CODIFICADOR Y DECODIFICADOR DIGITAL REED–SOLOMON 3.3.1. Cálculo del sı́ndrome Este es un cálculo similar al cálculo de paridad. Un código de palabra Reed– Solomon tiene 2t sı́ndromes que dependen solamente de los errores (no de la palabra transmitida). Los sı́ndromes pueden ser calculados al sustituir las 2t raı́ces del polinomio generador g(x) en r(x) (Cuervo, s/f). 3.3.2. Encontrar el número de errores y localizarlos Encontrar el lugar del sı́mbolo erróneo implica resolver de forma simultánea ecuaciones con t incógnitas. Varios algoritmos rápidos existen para realizar lo anterior. Estos algoritmos toman ventaja de la estructura matricial especial de los códigos Reed–Solomon y reducen de gran forma el esfuerzo computacional requerido. 3.3.3. Polinomio localizador de error Para encontrar un polinomio localizador de error se pueden utilizar el algoritmo Berlekamp–Massey o el algoritmo de Euclides. El algoritmo de Euclides tiende a ser el más utilizado en la práctica debido a que es más fácil de implementar, sin embargo el algoritmo Berlekamp–Massey tiende a llevar a una implementación hardware y software más eficientes. Este algoritmo fue elegido debido a que se limita a entregar el resultado de la división únicamente (Cuervo, s/f). Además sus únicas operaciones sobre los datos son la suma polinomial que en hardware son realizadas con compuertas XOR y las multiplicación y división por potencias de 2, que por ser aritmética binaria se traducen en hardware como corrimientos de bits. Ahora debemos localizar los sı́mbolos erróneos, para ello debemos seguir un procedimiento que implica resolver unos sistemas de ecuaciones, el primero de ellos sigue la fórmula general: St+j = f1 ∗ St+j−1 + · · · + ft−1 ∗ Sj+1 + ft ∗ Sj . 3.3.4. Corrección de errores Nuevamente, esto implica resolver ecuaciones con t incógnitas para poder encontrar los valores verdaderos, que deberán ser sustituidos en las posiciones correspondientes para ası́ poder reproducir el mensaje correcto que se intento enviar. Esto se hace con el algoritmo de búsqueda de Chien, donde 1 ≤ j ≤ t, fi son las incógnitas y Si los componentes del sı́ndrome calculado. La posición en la que están los errores se obtiene de los exponentes de 9 C. E. SANDOVAL RUIZ Y A. FEDÓN las raı́ces de un polinomio f (x) cuya fórmula general es: f (x) = xt + f1 xt + · · · + ft−1 x + ft . 3.3.5. Generador del error Debemos resolver un sistema de ecuaciones con tantas incógnitas como errores hayamos detectado y tiene la forma, para nuestro ejemplo: Y1 + Y2 = S1 , x1 Y1 + x2 Y2 = S2 , donde Y1 indica el valor del error en el sı́mbolo dado por (n − exponente de x1 ), x1 es la raı́z de f (x), Y2 indica el valor del error en el sı́mbolo dado por (n − exponente de x2 ), x2 es la otra raı́z de f (x). Finalmente se realizará la adición 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 código recuperado. Una vez que se maneja el algoritmo se realiza la definición de la entidad, la cual está representada a través del plano de transferencia (RTL) en la figura 6, siendo este resultado de la descripción bajo la sintaxis VHDL. TABLA 4. Código en VHDL de los componentes. begin U1: calc sindrome U2: localiz e U3: valor e end Behavioral; port map (rx, inicio, clk, s1, s2, s3, s4); port map (s1, s2, s3, s4, f1, f2, xa, xb, pos1, pos2); port map (s1, s2, s3, s4, xa, xb, e1, e2); Y se procede a la descripción del comportamiento. Cada uno de los módulos internos ha sido descrito como componente, quedando la implementación mostrada en la figura 7. 4. Metodologı́a Entre los pasos que se siguieron para la programación se realizó el modelo del codificador y decodificador a diseñar RS(7, 4) con el número de sı́mbolos m = 3, con lo cual se logró describir su comportamiento. Este fue descrito bajo la sintaxis del lenguaje descriptor de hardware estandarizado VHDL, y se creó un archivo de asignación de pines para ası́ realizar el mapeo sobre 10 IMPLEMENTACIÓN DE UN CODIFICADOR Y DECODIFICADOR DIGITAL REED–SOLOMON FIGURA 6. Entidad del decodificador RS. FIGURA 7. Estructura del decodificador RS. el dispositivo de hardware reconfigurable seleccionado para esta aplicación, como lo es el FPGA de Xilinx, Spartan IIe 208 pq, dando como resultado del proceso de programación un archivo de extensión .bit el cual fue descargado en el dispositivo. Adicional a la fuente del codificador se crearon las fuentes de interfase para lograr la visualización de los datos en el display del banco de prueba DIO1, el archivo .vhdl corresponde a la tabla 5. 11 C. E. SANDOVAL RUIZ Y A. FEDÓN TABLA 5. Convertidor de elementos del campo finito a display siete segmentos (archivo driver.vhdl). with OCT select display<="1111001" "0100100" "0110000" "0011001" "0010010" "0000010" "1111000" "1000000" when when when when when when when when "001", "010", "011", "100", "101", "110", "111", others; --1 --2 --3 --4 --5 --6 --7 --0 El archivo driver.ucf que presenta la asignación de ‘pines’, se muestra en la tabla 6. TABLA 6. Asignación de pines al display del banco de prueba DIO1 (archivo driver.ucf). NET NET NET NET NET NET NET NET NET NET NET "A" "a1" "a2" "a3" "a4" "B" "C" "D" "E" "F" "G" LOC LOC LOC LOC LOC LOC LOC LOC LOC LOC LOC = = = = = = = = = = = "P17" "P45" "P47" "P49" "P56" "P20" "P22" "P24" "P29" "P31" "P34" ; ; ; ; ; ; ; ; ; ; ; De igual manera se configuraron los pines de entrada de datos para la recepción de la trama. En la figura 8 se muestra el proceso de programación. 5. Análisis de resultados Los resultados obtenidos a través de la simulación del codificador y del decodificador corresponde al mostrado en la figura 9. En la simulación del comportamiento del codificador Reed–Solomon se estableció el procesamiento de los datos recibidos (rx). En la figura 9 se pueden observar los resultados, donde tx es la trama de entrada de datos que se ha codificado generando cx; a esta nueva trama de siete sı́mbolos se le ha adicionado el ruido del canal sobre dos de sus sı́mbolos cualesquiera ex, con lo que se obtiene la trama recibida rx. Estos sı́mbolos son procesados y 12 IMPLEMENTACIÓN DE UN CODIFICADOR Y DECODIFICADOR DIGITAL REED–SOLOMON FIGURA 8. Proceso de programación del FPGA. FIGURA 9. Simulación del Codec RS(7, 3). se obtiene s1, s2, s3 y s4, los resultados del sı́ndrome; éstos son procesados 13 C. E. SANDOVAL RUIZ Y A. FEDÓN a través del sistema de ecuaciones produciendo los coeficientes de f (x), entiéndase f1 y f2 , que sirven de entrada a la matriz de conversión para obtener xa y xb , estas últimas, raı́ces del polinomio f (x) y con los cuales se calculan los valores de los errores e1 y e2 , los cuales son sumados en las posiciones localizadas con la entrada al receptor rx, obteniéndose la data corregida. En la implementación del diseño sobre el FPGA, se estableció la trama de datos a enviar, como en la simulación (D = 4, 2, 7), correspondientes a la secuencia de datos (D = 100, 010, 111), estos son codificados para la transmisión; ası́mismo, se presenta la salida de datos a transmitir a través de los display siete segmentos del banco de prueba del sistema de desarrollo del Spartan IIe 208 pq, Xilinx. Este procedimiento se realizó con el fin de completar el proceso de implementación. La figura 10 muestra en el display menos significativo la secuencia de salida cx. FIGURA 10. Prueba sobre el FPGA. Es importante destacar los beneficios de implementar el codificadordecodificador Reed–Solomon en un FPGA, ya que permite el procesamiento paralelo. Adicionalmente los proveedores del paquete VHDL deben seguir 14 IMPLEMENTACIÓN DE UN CODIFICADOR Y DECODIFICADOR DIGITAL REED–SOLOMON las normas de programación IEEE-1076, haciendo que los diseños sean portátiles a cualquier plataforma (Chang, 1999; Ashenden, s/f; IEEE Standard VHDL Language Reference Manual1076, 2002; Carpio, 1997). 6. Trabajos futuros El diseño de un dispositivo para implementar un código popular Reed– Solomon como lo es RS(255, 223) con sı́mbolos de 8 bits. Cada palabra de código contiene 255 bytes de palabra de código, de los cuales 223 bytes son datos y 32 bytes son paridad. Para este código se tiene: N = 255, k = 223, s = 8, 2t = 32 y t = 16. El decodificador puede corregir cualquier error de 16 sı́mbolos en la palabra de código, es decir, errores de hasta 16 bytes en cualquier lugar de la palabra pueden ser automáticamente corregidos. Una vez establecido el polinomio g(x) (los sı́ndromes pueden ser calculados al sustituir las 2t raı́ces del polinomio generador g(x) en r(x).) 7. Conclusiones Teniendo en cuenta que el comportamiento del los módulos diseñados ha sido validado a través de la simulación, se realizó el mapeo del diseño sobre el FPGA y se obtuvo una programación exitosa del codificador y decodificador Reed–Solomon. Entre los aportes realizados se presentan: • • • • • Estado del arte sobre codificación Reed–Solomon. Se ha incluido además un número importante de referencias bibliográficas. Compendio de la teorı́a de campos finitos de Galois orientada a codificación Reed–Solomon. Desarrollo de un modelo de codificación Reed–Solomon. Desarrollo de la sintaxis de programación en VHDL (Lenguaje Descriptor de Hardware). Se constata, a través de simulaciones que la introducción de técnicas de codificación Reed–Solomon mejoran notablemente las prestaciones del sistema. Una de las mejores alternativas es el posible uso de una cadena concatenada semejante a la propuesta en la norma IEEE 802.16. 8. Referencias bibliográficas 15 [1] Antolin Agatep, “Reed–Solomon Solutions with Spartan-II FPGA”, WP110 1.1, 10 de febrero de 2000. C. E. SANDOVAL RUIZ Y A. FEDÓN [2] Ashenden, Peter J., Tutorial VHDL, EDA Consultant, Ashenden Designs Pty, Ltd., http://www.ashenden.com.au [3] Carpio, Fernando, VHDL. Lenguaje para descripción y modelado de circuitos, 1997. [4] Cuervo, Efrén C., Construcción de un decodificador Reed–Solomon en VHDL. [5] Chang, K. C., “Digital Systems Design with VHDL and Synthesis, An Integrated Approach”, IEEE Computer Society, eua, 1999. [6] IEEE Standard VHDL Language Reference Manual1076, publicada en 2002. [7] López Martı́nez, Fco. Javier, Diseño de transmisor y receptor para redes inalmbricas W-Man, Mención de Honor Málaga, 2005. [8] Nazar A. Saqib, “Implementación eficiente de algoritmos criptográficos en dispositivos de hardware reconfigurable”, Tesis doctoral, México, 2004. [9] Negrete C., Marco A, Inversión modular en campos finitos binarios, mayo de 2006. [10] Ortiz-Garcı́a, Implementación en hardware reconfigurable de un divisor en campos finitos binarios GF , mayo de 2006. [11] Prez L., Serafı́n A., y otros, Diseño de sistemas digitales con VHDL, Editorial Thomson, España, 2002, http://www.dte.uvigo.es/vhdl/ [12] Suardı́az, Juan, “Control electrónico mediante telefonı́a móvil digital basada en la red GSM”, Revista Tecnologı́a y Desarrollo, 2004. [13] Wakerly, John F., Diseño digital: principios y prcticas, tercera edición, Editorial Pearson, México, 2001. [14] Xilinx System Generator v2.1 for Simulink. abstract In this paper we present a simple methodology to design basic and the state-of-the-art Reed–Solomon Coders building blocks, oriented to field programmable gate arrays (FPGA). The design methodology is initialized with the design at the software level of the Coder, later the architecture is designed and captures using VHDL, finally the simulations using ModelSim 5.7 and results allow validating the behavioral of the coder the design methodology proposed. The operations in finite or Galois fields, GF (2m ), is a basic for several algorithms in areas error-correction codes and digital signal processing. Nevertheless the involved calculations are very time consuming, especially when they are performed by software. Due to performance and security reason, it is rather convenient to implement algorithms by hardware. 16