Tesis de grado de Ingeniería Electrónica Desarrollo de sistema OFDM sobre FPGA Autor: Marcos Cervetto Directora: Dra. Ing. Cecilia Galarza Julio de 2010 Índice general I. Transmisión de datos sobre líneas de tensión 3 1. Problema general 1.1. El medio . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4 4 2. Alternativa: OFDM 6 3. OFDM. Fundamentos 3.1. Transmisión multiportadoras 3.2. Espacio de señales . . . . . 3.3. OFDM . . . . . . . . . . . . 3.4. DFT . . . . . . . . . . . . . 3.5. Prefijo Cíclico . . . . . . . . . . . . . 8 8 9 11 15 16 4. Alfabetos 4.1. QAM . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4.2. ADPSK . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21 21 23 5. Carga 27 II. Diseño de un transceiver OFDM para PLC 28 6. Idea 6.1. 6.2. 6.3. 6.4. 6.5. 6.6. 29 31 32 35 36 36 37 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . general Etiquetamiento y mapeo . . . . . . . . Manejo de carga . . . . . . . . . . . . . IFFT / FFT . . . . . . . . . . . . . . . Inserción y remoción del prefijo cíclico Ecualizador . . . . . . . . . . . . . . . Detección . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . III. Herramientas de diseño 40 7. Plataforma de desarrollo 7.1. FPGAs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41 41 i Índice general 7.2. Elección de plataforma . . . . . . . . . . . . . . . . . . . . . . . . . . 7.3. Esquema de trabajo . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8. Diseño: System Generator y MATLAB 8.1. Generalidades . . . . . . . . . . . . 8.1.1. Definiciones y conceptos . . 8.1.2. Tokens comunes . . . . . . . 8.1.3. Scripts en MATLAB . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44 45 47 47 48 49 56 IV. Síntesis del transceiver 57 9. Esquema básico 9.1. Transmisor . . . . . . . . . . . . . . . . . . . . . . 9.1.1. IFFT / FFT . . . . . . . . . . . . . . . . . 9.1.2. Mapeo . . . . . . . . . . . . . . . . . . . . 9.1.3. Adquisición de datos . . . . . . . . . . . . 9.2. Receptor . . . . . . . . . . . . . . . . . . . . . . . 9.2.1. Remoción del prefijo Cíclico . . . . . . . . 9.2.2. Compensación del factor de escalaje . . . . 9.2.3. Ecualizador . . . . . . . . . . . . . . . . . 9.2.4. Detección . . . . . . . . . . . . . . . . . . 9.3. Sincronización y tiempos . . . . . . . . . . . . . . 9.3.1. Transmisor . . . . . . . . . . . . . . . . . 9.3.2. Receptor . . . . . . . . . . . . . . . . . . . 9.3.3. Sincronización entre transmisor y receptor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 58 58 60 67 73 73 75 75 75 77 81 81 82 82 10.Simulaciones y resultados 10.1. Cascada IFFT/FFT . . . . . . . . . . . . . . . . . . 10.2. Truncamiento vs redondeo convergente en IFFT/FFT 10.3. Precisión y factores de fase en IFFT/FFT . . . . . . 10.4. Canal AWGN . . . . . . . . . . . . . . . . . . . . . . 10.5. Ruido de banda angosta . . . . . . . . . . . . . . . . 10.6. Ecualización con distintos CPs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 83 83 84 85 86 87 87 . . . . . . . . . . . . . V. Implementación 90 11.Plataforma de desarrollo 11.1. Características del kit de desarrollo . . . . . . . . . . . . . . . . . . . 11.2. Herramientas de software . . . . . . . . . . . . . . . . . . . . . . . . . 91 91 92 12.Implementación 12.1. Conexión del sistema . . . . . . . . . . . . . . . . . . . . . . . . . . . 93 94 ii Índice general 12.1.1. Nivel MAC . . . . . . . . . . . . . . . . . . . . . . . . . . . . 95 12.1.2. Lógica intermedia . . . . . . . . . . . . . . . . . . . . . . . . . 101 12.1.3. Conexión del módem . . . . . . . . . . . . . . . . . . . . . . . 102 Bibliografía 106 iii Introducción La modulación por multiportadoras (MultiCarrier Modulation, MCM), en particular, OFDM (Orthogonal Frequency Division Multiplexing), fue empleado con éxito en un gran número de aplicaciones en los últimos años. Sin embargo, la teoría, los algoritmos y las técnicas de implementación siguen siendo temas de interés en el área de comunicaciones digitales. Las aplicaciones de OFDM se presentan tanto en medios cableados como inalámbricos. En medios cableados, encontramos versiones de OFDM en ADSL, VDSL, y en PLC (Power Line Communications). Esta última técnica involucra el desafío de formar un canal de comunicaciones de banda ancha a través de líneas de tensión, con las dificultades intrínsecas que este canal posee. En sistemas inalámbricos es ampliamente usado, por citar algunos: DAB (Digital Audio Brodcasting), DVB (Digital Video Broadcasting), Wireless LAN 802.11a, g, n e HIPERLAN/2, entre otros. OFDM es ideal para sistemas que requieran baja potencia irradiada, como es el caso de BPL (Broadband over Power Lines), que se encuentra en bandas de baja frecuencia y por lo tanto las radiaciones del enlace deben mantenerse al mínimo. Una de las ventajas principales es su adaptación a medios con condiciones austeras por medio de técnicas sencillas de ecualización. Existen diferentes técnicas de adaptación, por medio de algoritmos de balanceo de carga y/o de energía, que son apropiadas para sistemas OFDM. Por los puntos arriba mencionados, resulta de particular interés desarrollar un sistema OFDM para poder estudiar, medir, comparar y contrastar resultados, creando un vínculo entre los desarrollos teóricos y las cuestiones prácticas. Este trabajo permite además profundizar sobre ciertas cuestiones de índole práctica, que promueven un cabal entendimiento de las diferentes partes del sistema, así como enfrentar diversos problemas que quedan fuera del marco de una exposición teórica, por rigurosa que sea la misma. El objetivo es desarrollar un módem OFDM en banda base siguiendo ciertas recomendaciones de estándares de BPL, pero sin someterse a los lineamientos de dichos estándares. Esto permite tener flexibilidad a la hora de hacer las diferentes pruebas, con distintos esquemas de modulación, configuraciones, canales, etc. Dado que el trabajo involucra la implementación del dispositivo sobre alguna plataforma digital, su elección es un factor clave para el desarrollo del trabajo, así como para las futuras pruebas y modificaciones que deseen hacerse. En resumen, el objetivo de este trabajo es lograr un entendimiento necesario para poder implementar el sistema OFDM en una plataforma física, y permitir flexibilidad en la configuración del mismo, de manera de poder hacer pruebas de interés, y analizar 1 Índice general los resultados obtenidos. En la Parte I, se describe el problema general de transmisión sobre líneas de tensión, la modulación OFDM como posible alternativa y algunos conceptos de constelaciones, alfabetos, carga, etc. En la Parte II, se trabaja a nivel sistema con un esquema OFDM teórico y se explican algunas consideraciones de índole práctico que surgen a la hora de ajustar el diseño a un modelo en particular. En la Parte III, se explica con un cierto grado de profundidad las herramientas utilizadas para diseñar, simular y sintetizar el módem en una plataforma digital. También se fundamenta la plataforma elegida y el esquema de trabajo a seguir. En la Parte IV, tomando las consideraciones de diseño explicadas en la Parte II junto con las herramientas de trabajo enumeradas en la Parte III, se resuelva el problema central de sintetizar el dispositivo en la plataforma elegida. Ademas, se incluyen simulaciones y resultados encontrados durante la síntesis del mismo. En la Parte V, se explica la plataforma de desarrollo utilizada, las herramientas de software de implementación y las pruebas realizadas para la verificación del funcionamiento del dispositivo. 2 Parte I. Transmisión de datos sobre líneas de tensión 3 1. Problema general La transmisión de información a través de líneas de tensión no es un tópico nuevo. Las compañías de distribución de energía eléctrica han usado esta idea por muchos años, pero la mayoría lo utilizan para propósitos de control o supervisión de las estaciones de trabajo. Es decir, las tasas de transmisión en estos enlaces son relativamente bajas y ocupan una porción pequeña del espectro electromagnético. La transmisión de datos a alta velocidad por líneas de tensión se ha convertido en un tema de interés en los últimos años y representa una fuente de investigación y desarrollo, así como de desafíos tecnológicos. Este tipo de comunicación se engloba bajo las siglas PLC (Power Line Communication). Se han realizado varios esfuerzos en busca de un estándar, entre ellos el de la IEEE [1] y OPERA [2]. El principal atractivo de este tipo de sistema es reutilizar la infraestructura de la red eléctrica disponible, para la transmisión de datos a alta velocidad. La instalación de estas redes en circuitos domésticos brinda la posibilidad de reducir el cableado interno y permite utilizar un único conector para alimentación e información. Además, en zonas poco accesibles o de bajos recursos, reutilizar el medio eléctrico resulta en una reducción significativa de los costos de despliegue. Considerando estas ventajas, es conveniente realizar un análisis somero del medio en cuestión, y evaluar posibles alternativas que permitan hacer frente a las dificultades que presenta. 1.1. El medio Las líneas de tensión conforman un medio de transmisión dispersivo, afectado por ruido coloreado y ruido impulsivo periódico y aperiódico [3]. Presenta un alto grado de ramificación, por lo cual las reflexiones siempre serán una cuestión importante. Una comunicación por este medio se vuelve susceptible al fenómeno de crosstalk, debido a que los cables no presentan, de por sí, medidas para evitar este efecto. El canal es variante en el tiempo, ya que puede modificarse abruptamente cuando la topología de la red cambia, por ejemplo como consecuencia de variaciones de carga. Adicionalmente, los cables suelen estar descubiertos, volviéndose fuente y objeto de interferencia electromagnética (EMI). Una estimación básica del canal se puede hacer suponiendo un ancho de banda de 1MHz ~ 30 MHz. En la realidad, nos encontraremos con limitaciones regulatorias y técnicas. Para explotar las capacidades del medio, son preferibles canales con baja atenuación y baja densidad espectral de potencia de ruido. 4 1. Problema general En la figura 1.1, se observan las respuestas en frecuencia de cuatro canales de referencia publicados en IEEE Communications Magazine [3]. Figura 1.1.: Canales de referencia Los canales pueden ser clasificados como: Canal de referencia 1: “excelente” largo ≈ 100 m, sin ramas Canal de referencia 2: “bueno” largo ≈ 110 m, 6 ramas Canal de referencia 3: “regular” largo ≈ 210 m, 8 ramas Canal de referencia 4: “malo” Área residencial sin una estructura de red regular (fuerte ramificación) Debido a las regulaciones y las limitaciones técnicas impuestas por los canales, se proponen distintas bandas de transmisión (0.5 MHz ~ 10 MHz, 0.5 MHz ~ 20 MHz, 10MHz ~ 30 MHz) y se sugieren diferentes ambientes para cada una (indoors, outdoors). Estos debates no están totalmente resueltos en la actualidad y varios esfuerzos por completar un estándar son llevados a cabo por distintas organizaciones. Existen limitaciones en el espectro y en las emisiones electromagnéticas, así como disposiciones dictadas por consideraciones de EMC (ElectroMagnetic Compatibility). 5 2. Alternativa: OFDM Frente a un canal con las características mencionadas en 1.1, se necesita un esquema de modulación que cumpla con los siguientes requisitos: Robusto frente a la Interferencia Intersimbólica (ISI). Debido a que el canal es dispersivo, distintos símbolos que llegan al receptor se superponen y dificultan la decisión símbolo a símbolo Alta eficiencia espectral. Se dispone de un ancho de banda limitado y es deseable utilizarlo eficientemente Adaptativo. Debe ser capaz de adaptarse a los cambios del canal y ser adecuado para realizar balance de carga y de energía Poco sensible a ruidos impulsivos. Es deseable que los símbolos sean lo suficientemente largos en tiempo en comparación con la duración de los impulsos La modulación por multiportadoras es una técnica ampliamente conocida para los canales dispersivos y limitados en banda. Dentro de este conjunto de modulaciones, OFDM (Orthogonal Frequency Domain Modulation) es el esquema más popular, tanto por sus propiedades y virtudes, como por su relativa sencillez en comparación con otras técnicas multiportadoras. Sus características permiten enfrentar canales con deficiencias tales como las del canal PLC. La idea principal de OFDM es usar canales para la transmision que sean ortogonales entre si, lo que elimina el crosstalk (interferencia cocanal) y aumenta significativamente la eficiencia espectral. No se requieren bandas de guarda entre canales; de hecho, existe una fuerte superposición entre ellos pero, debido a su ortogonalidad, es posible su separación y posterior demodulación. OFDM es un esquema ampliamente estudiado y ha sido utilizado en diversos estándares, tanto cableados como wireless: ADSL, VDSL en par telefónico DVB (Digital Video Broadcasting) en sus variantes -C2 (Cable), -T (Terrestrial) -H (Handheld) ISDB (Integrated Services Digital Broadcasting) en su variante -T (Terrestrial) Wireless LAN (WLAN) en sus interfaces de radio IEEE 802.11a, g, n y HIPERLAN/2 6 2. Alternativa: OFDM DAB (Digital Audio Broadcasting) OFDM presenta la ventaja de ser un sistema flexible y adaptable y dadas las capacidades del hardware actual es totalmente viable como una solución para canales con fading selectivo en frecuencia y variantes en el tiempo, que requieren un esquema elástico y de fácil reconfiguración. En OFDM es fundamental que se conserve la ortogonalidad entre los canales o subportadoras. De hecho, la inserción de un prefijo cíclico o de un intervalo de guarda tiene como fin evitar la pérdida de dicha ortogonalidad. Por esta razón, las debilidades principales de OFDM son: La sensibilidad a sincronización en frecuencia El corrimiento Doppler puede provocar problemas de sincronismo en frecuencia La señal OFDM tiene un alto PAPR (Peak to Average Power Ratio). Esto requiere conversores A/D y D/A de alta resolución, y una alta linealidad en el sistema Una alinealidad en el sistema genera distorsión por intermodulación conocida como ICI (InterChannel Interference). Un efecto indeseado es la radiación de componentes fuera de banda 7 3. OFDM. Fundamentos 3.1. Transmisión multiportadoras La modulación por multiportadoras puede entenderse conceptualmente como un stream de datos que es dividido en K diferentes substreams, cada uno de los cuales es modulado por una portadora fk , de la forma ej2πfk t . En la figura 3.1 se ilustra la situación: Figura 3.1.: Esquema conceptual de modulación por multiportadoras donde skl representan los símbolos complejos provenientes de alguna constelación (QAM, PSK, por ejemplo), en el instante l y modulando la subportadora k. Se puede asumir que se tiene K subportadoras, por la tanto, k = 0 . . . K − 1 El bloque cuya respuesta al impulso es g(t) es una ventana conformadora del pulso, que puede ocupar en duración más de un tiempo de símbolo, TS , y cuyo soporte puede ser infinito, en el caso más general. Por lo tanto la señal s(t) toma la forma: s(t) = K−1 X ∞ X k=0 l=−∞ ej2πfk t skl g(t − lTS ) (3.1.1) Otra manera de ver el esquema de modulación por multiportadoras, es pensarlo como un banco de filtros y definir gk (t) = ej2πfk t g(t), como el filtro, centrado en la frecuencia correspondiente. 8 3. OFDM. Fundamentos De esta manera, el esquema queda como muestra la figura 3.2: Figura 3.2.: Esquema multiportadoras alternativo por lo tanto, con esa definición, s(t) queda como: s(t) = ∞ K−1 X X skl gk (t − lTS ) l=−∞ k=0 y haciendo gkl (t) = gk (t − lTS ) = ej2πfk (t−lTS ) g(t − lTS ), se obtiene ∞ K−1 X X skl gkl (t) s(t) = (3.1.2) l=−∞ k=0 Los dos enfoques son similares: si se multiplican los símbolos de 3.1.2, por un factor de fase ej2πfk lTS , se obtiene 3.1.1. Este factor de fase no cambia la performance del sistema, por lo tanto se trata de sistemas equivalentes. Antes de proseguir con la elección de g(t), es necesario introducir algunos conceptos básicos y notación en el espacio de señales. 3.2. Espacio de señales Se consideran señales con energía finita, o sea señales que cumplan con: ˆ ∞ |s(t)|2 dt < ∞ (3.2.1) −∞ Introduciendo la notación de producto interno entre dos señales v(t) y w(t) ˆ ∞ hs(t), w(t)i = v ∗ (t)w(t)dt (3.2.2) −∞ 9 3. OFDM. Fundamentos se puede decir que todas las señales con energía finita cumplen con ks(t)k2 = hs(t), s(t)i < ∞ (3.2.3) Este producto cumple con todas las propiedades de un producto interno regular. v(t) y r(t) se dicen ortogonales si y sólo si hv(t), r(t)i = 0. Un conjunto de señales vk (t), forma una base ortonormal si y sólo si hvi (t), vj (t)i = δij donde δij = 1 (3.2.4) i=j i 6= j 0 es la delta de Kronecker. Dada una base ortonormal de señales vk (t), con k = 1, 2, . . . cualquier señal de energía finita s(t) puede escribirse como s(t) = ∞ X αk vk (t) (3.2.5) k=1 es decir, como una combinación lineal de las funciones base. Los coeficientes αk se obtienen haciendo αk = hvk , si (3.2.6) Esto quiere decir que el coeficiente αk representa el grado de similitud o la cantidad de vk (t) que es necesaria para reconstruir en conjunto la señal s(t). En el nivel más básico de una comunicación digital, existe un transmisor de la forma s(t) = K−1 X sk gk (t) (3.2.7) k=0 donde los símbolos sk representan la información y las señales gk (t) son las funciones base usadas para transmitir los símbolos. La tarea del detector es recuperar los símbolos sk enviados, a partir de las señal recibida s̃(t). Si se cuenta con un canal ideal de transmisión, es decir s(t) = s̃(t), entonces los símbolos pueden ser recuperados, proyectando la señal recibida sobre las funciones base: ˆ ∞ sk = hs, gk i = gk∗ (t)s(t)dt (3.2.8) −∞ 10 3. OFDM. Fundamentos que se puede escribir como # " ˆ ∞ ∗ sk = gk (τ − t)s(τ )dτ −∞ = [gk∗ (−t) ∗ s(t)]t=0 (3.2.9) t=0 Esto quiere decir que la detección de los símbolos transmitidos sk , a través de la base gk (t), se realiza por medio de un filtro, denominado filtro adaptado (o matched filter), cuya respuesta impulsiva es gk∗ (−t). Este tipo de demodulación maximiza la relación señal a ruido en el extremo receptor frente a un símbolo corrupto con ruido blanco únicamente (no necesariamente gaussiano). 3.3. OFDM La función g(t) vista previamente, no sólo estipula el tipo de modulación, sino que además define las propiedades de ese sistema de transmisión, tanto en frecuencia como en tiempo. Resulta conveniente tomar una base ortogonal de funciones, de manera que cumpla con hgkl , gk0 l0 i = δkk0 δll0 (3.3.1) gkl (t) = gk (t − lTS ) = ej2πfk (t−lTS ) g(t − lTS ) (3.3.2) En esta forma, se exige ortogonalidad en frecuencia y en tiempo simultáneamente. Esto permite que el receptor pueda recuperar un símbolo skl sin ISI, proyectando la señal recibida r(t) de la siguiente manera: ŝkl = hgkl , ri (3.3.3) siendo ŝkl la salida del filtro adaptado, muestreada en el instante correspondiente. Hay dos maneras de satisfacer la condición de ortogonalidad impuesta por la ecuación 3.3.1. Tomando pulsos limitados en tiempo y ortogonales en frecuencia (OFDM) o tomando pulsos limitados en frecuencia y ortogonales en tiempo (base de Nyquist). En particular, para OFDM, los pulsos son exponenciales complejas limitadas por una ventana rectangular. Es útil introducir la siguiente función: 1 − 12 ≤ t ≤ 12 Π(t) = 0 para otro t Si se define fk = k TS (3.3.4) , y planteando: gk (t) = ej2πfk t g(t) = ej2πfk t Π 11 t TS (3.3.5) 3. OFDM. Fundamentos se puede ver que g(t) = Π TtS es una ventana rectangular centrada en el origen de ancho TS . Gráficamente, y para K = 8, las funciones gk (t) tienen la forma que muestra la figura 3.3: Figura 3.3.: Funciones base gk (t) para k = 0, 1, 2 y 7 y para K = 8 En el dominio de la frecuencia: Gk (f ) = G(f − fk ) = F[g](f − fk ) (3.3.6) donde F[] es el operador transformada de Fourier. Por lo tanto, se obtiene la transformada F[g] y se evalúa en f − fk F[Π](f ) = Usando este resultado y x(at) ↔ que1 Π 1 t TS sen(πf ) = sinc(f ) πf 1 X( fa ) |a| ,siendo F[x](f ) = X(f ), se puede ver ↔ TS sinc(f TS ) La notación ↔ implica la relación entre una función y su transformada de Fourier 12 (3.3.7) (3.3.8) 3. OFDM. Fundamentos Por lo tanto, Gk (f ) = F[g](f − fk ) = TS sinc((f − fk )TS ) (3.3.9) siendo fk = TkS , con k = 0, 1 . . . , K − 1 Estas funciones, gráficamente, tienen la forma que muestra la figura 3.4: Figura 3.4.: Funciones base Gk (f ) para k = 0, 1, 2, . . . 7 y para K = 8 La elección de funciones gk (t) = ej2πfk t Π( TtS ) no es casual. Al tratarse de la base de Fourier, se cumple hgk (t), gk0 (t)i = δkk0 (3.3.10) Sabemos por el teorema de Plancharel o la ecuación de Parseval que se cumple la siguiente equivalencia entre los dominios del tiempo y la frecuencia: hGk (f ), Gk0 (f )i = hgk (t), gk0 (t)i = δkk0 lo que era de esperarse, dado que la base de Fourier es ortogonal. 13 (3.3.11) 3. OFDM. Fundamentos Si, a su vez, se define gkl (t) = gk (t − lTS ) (3.3.12) los pulsos no se superponen en tiempo y se garantiza 3.3.1: hgkl , gk0 l0 i = δkk0 δll0 Entonces se puede que las funciones base del esquema OFDM, son las siguientes: s gk (t) = t 1 j2π Tk t 1 S Π e − TS TS 2 (3.3.13) donde se ha efectuado un desplazamiento de los símbolos de 0 a TS , lo cual no afecta lo enunciado anteriormente. Por lo tanto, un transmisor OFDM, no es más que una síntesis de Fourier en cada intervalo de tiempo TS , donde skl son los símbolos que transportan la información. Por claridad, se llama TS al tiempo total del símbolo OFDM, el cual, cuando se introduzca el concepto de intervalo de guarda, será mayor al tiempo de integración del receptor T . Sin intervalo de guarda, será T = TS . Por lo tanto, s gk (t) = 1 1 j2π k t t e T Π − T T 2 (3.3.14) El receptor realiza un análisis de Fourier, por medio de la proyección de la señal recibida r(t), sobre las funciones gk (t) s hgk0 , ri = 1 T ˆ T k e−j2π T t r(t)dt (3.3.15) 0 El cual recupera sk0 , debido a que el tiempo de integración es de 0 a T , si r(t) = s(t). Para un l cualquiera, hgkl , ri, representa una integración desde lT hasta (l + 1)T . Frente a ruido blanco, este tipo de estimación, maximiza la relación señal a ruido en la entrada del receptor, como se dijo anteriormente. 14 3. OFDM. Fundamentos 3.4. DFT Los beneficios y conceptos básicos de OFDM ya eran conocidos a comienzos de los años 60. En un principio, sintetizadores analógicos eran utilizados para generar las distintas componentes en frecuencia. Esto hacía la implementación costosa, sumado al hecho de que no es sencillo mantener completamente estables a los osciladores. En 1971, Weinstein y Ebert [4] propusieron usar la DFT como forma de generar la modulación. Sin embargo, OFDM encontró su lugar en el mercado cuando las técnicas de procesamiento digital y las tecnologías utilizadas redujeron suficientemente sus costos y permitieran una implementación eficiente. A partir de la señal OFDM ideal s(t) = ∞ K−1 X X skl gkl (t) (3.4.1) l=−∞ k=0 q con gkl (t) = gk (t − lT ) = 1 j2π Tk (t−lT ) e Π T t−lT T 1 2 − . Se puede considerar sólo el símbolo inicial, cuando l = 0, pero los resultados obtenidos son aplicables a cualquier símbolo, ya que el procesamiento se realiza símbolo a símbolo, en una ventana de largo T . Entonces, s(t) = y gk (t) = q 1 j2π Tk t e Π T t T − 1 2 K−1 X K−1 X k=0 k=0 sk0 gk0 (t) = sk gk (t) Por lo tanto, s s(t) = X k t 1 1 K−1 sk ej2π T t Π − T k=0 T 2 (3.4.2) Pasando esta señal a su equivalente en banda base, es decir, considerando un tiempo T de muestreo Tsamp = K , se observa que s(t) T t=n K s X k T 1 K−1 nT 1 sk ej2π T n K Π − T k=0 KT 2 s X 2π 1 K−1 n 1 sk ej K kn Π − T k=0 K 2 = = Se puede reconocer esta expresión como la IDFT de la señal sk . La ventana sólo dice que la salida es válida en n = − K2 . . . 0 . . . K2 , con K par, como es usual. Se puede 15 3. OFDM. Fundamentos notar que los símbolos enviados sk , tomados de a K, necesitan ser transformados mediante la IDFT en otro conjunto de K símbolos, que conforman el símbolo OFDM en banda base. Resumiendo: s[n] = s(t) 3.5. T t=n K = IDF T {sk } (3.4.3) Prefijo Cíclico En el desarrollo hecho hasta ahora, hemos supuesto que el transmisor y el receptor se encuentran perfectamente sincronizados y que el canal es ideal, por lo tanto, no tenemos ICI (InterCarrier Interference) y tampoco ISI (InterSymbol Interference). El ICI se refiere a la interferencia causada por la dispersión de los símbolos llevados por las portadoras, dentro del mismo símbolo OFDM. Esto se debe principalmente a una respuesta no ideal del canal. Por otro lado, el ISI es la perturbación que causa un símbolo OFDM sobre los adyacentes. Puede ser eliminado si se añade un intervalo temporal entre símbolos OFDM, denominado intervalo de guarda. Lo que contiene este bloque es irrelevante a fines de eliminar el ISI, ya que en el receptor es descartado sin observarlo. No obstante, la adición de un contenido especial en este segmento ayuda enormemente a la eliminación de ICI por medio de una ecualización sencilla. Adicionar un prefijo cíclico a un símbolo OFDM consiste en realizar la operación de copia, ilustrada en la figura 3.5. Figura 3.5.: Prefijo cíclico A continuación, se explican los beneficios de la adición de un prefijo cíclico entre símbolos OFDM. Suponiendo que a la salida de nuestro modulador OFDM, se tiene un símbolo xl = h xl (0) xl (1) · · · xl (N − 1) iT ∈ CN donde N es el tamaño de la IFFT y l es el índice del símbolo OFDM. Adicionalmente, dejando que el canal no ideal tenga una respuesta finita de largo L, dada por los coeficientes h= h h0 h1 · · · hL−1 16 iT ∈ CL 3. OFDM. Fundamentos Se puede escribir lo que llega al receptor por medio del producto de convolución; se supone ausencia de ruido en el canal: yk (0) yk (1) .. . .. . .. . yk (N − 1) = h0 .. . .. . hL−1 0 .. . 0 0 ··· .. .. . . ... .. .. . . ··· .. 0 0 ... ... . hL−1 0 ··· .. .. . . ... ... .. . .. .. . 0 .. . 0 0 .. . . 0 · · · · · · h0 xk (0) xk (1) .. . .. . .. . xk (N − 1) (3.5.1) En lo subsiguiente, se supone que la duración del prefijo cíclico ν es mayor a la duración de la respuesta impulsiva del canal L. En la figura 3.6 se puede ver el prefijo cíclico, aplicado sólo a dos portadoras. Figura 3.6.: Prefijo cíclico para dos portadoras La incorporación del prefijo cíclico implica hacer xk (−i) = xk (N − i) para i = 1, 2, . . . , ν 17 3. OFDM. Fundamentos Se puede interpretar como una convolución con una matriz circular de la siguiente forma: yk (0) yk (1) .. . .. . .. . yk (N − 1) = h0 .. . .. . hL−1 0 .. . 0 0 ··· ... .. . ... .. .. . . ··· .. 0 0 ... ... . hL−1 hL−1 · · · h1 .. .. .. . . . ... hL−1 ... 0 .. .. .. . . . .. . 0 · · · · · · h0 xk (0) xk (1) .. . .. . .. . xk (N − 1) y = Hx donde H es la matriz circular en cuestión. El proceso completo se aprecia en la figura 3.7: Figura 3.7.: Inserción y remoción del CP en sistema OFDM Asumiendo que el canal es invariante en el tiempo (y con ausencia de ruido, como se estableció anteriormente), se puede escribir rl = WHWH sl donde W ∈ CN ×N es la matriz de transformación de Fourier normalizada dada por 18 3. OFDM. Fundamentos 1 W= √ N 1 1 1 1 .. . 1 W W2 W3 .. . 1 W2 W4 W6 .. . 1 W3 W6 W9 .. . ··· ··· ··· ··· 1 W N −1 W 2(N −1) W 3(N −1) .. . 1 W N −1 W 2(N −1) W 3(N −1) · · · W (N −1)(N −1) (3.5.2) 2π y W = e−j N . La matriz es unitaria, o sea, cumple con la propiedad WWH = IN Si se usa la descomposición en autovalores de una matriz circular puede demostrarse [5] que H puede escribirse como H = WH ΛW y " " Λ =diag W h ## 0N −L (3.5.3) por tanto, Λ es la DFT de N puntos del canal, es decir su respuesta en frecuencia. Reemplazando, se puede ver que H rl = WWH ΛWW sl = Λsl (3.5.4) El resultado obtenido permite ver que cada portadora es afectada en forma independiente por un coeficiente complejo igual a la respuesta en la frecuencia de dicha portadora. La inserción de un prefijo cíclico adecuado, por tanto, permite independizar los canales y dar lugar a una ecualización trivial, que consiste en invertir los coeficientes de cada subcanal. Un algoritmo de aprendizaje se ocuparía en tal caso de la estimación de dichos coeficientes y, dada la variabilidad temporal del canal, su actualización tendría que ser dinámica. Desde otro punto de vista, es posible demostrar que el prefijo cíclico convierte la convolución tradicional con el canal en una convolución circular. Esto se debe a que la señal con un prefijo suficiente “parece” periódica, a fines de convolucionarse con un canal de respuesta impulsiva finita. Para un símbolo OFDM l cualquiera, sucede que yl (m) = L−1 X xl (m − i)h(i) para 0 ≤ m ≤ N − 1 (3.5.5) i=0 y dado que xl = h xl (N − L + 1) · · · xl (N − 2) xl (N − 1) xl (0) xl (1) · · · xl (N − 1) 19 iT ∈ CN 3. OFDM. Fundamentos en la convolución xl (m − i) se convierte en xl ((m − i) mod N), lo que implica una convolución circular entre xl y h yl (n) = xl (n) ⊗ h(n) (3.5.6) En el receptor, se realiza la DFT de yl , entonces Yl (k) = Xl (k)H(k) (3.5.7) por el teorema de convolución. Esto hace que cada coeficiente del canal H(k) se multiplique punto a punto con los símbolos enviados Xl (k) en cada subportadora k, de manera que el ICI existente es nulo y la ecualización se realiza en forma separada 1 . para cada canal, simplemente multiplicando por el peso complejo H(k) 20 4. Alfabetos Hasta ahora no se ha dicho nada de los símbolos skl que ingresan a la IFFT, salvo que se trata de números complejos. En un esquema más realista, estos números provienen de un mapa complejo reducido, con puntos específicos correspondientes a valores binarios concretos. Estos mapas se denominan constelaciones y en el presente trabajo se utilizan de dos tipos: QAM (Quadrature Amplitude Modulation) y ADPSK (Amplitude Differential Phase Shift Keying). 4.1. QAM Las constelación QAM (Quadrature Amplitude Modulation), es una combinación de modulación en amplitud y en fase. En particular, la QAM cuadrada1 , distribuye los bits en una matriz ordenada, de puntos equiespaciados, como muestra la figura 4.1, para el caso de 16 símbolos: Figura 4.1.: QAM de 16 puntos con etiquetamiento Gray 1 QAM representa un conjunto de modulaciones más general, pero la más ampliamente utilizada es la QAM cuadrada 21 4. Alfabetos La constelación está normalizada de manera que −1 ≤ <(sk ) ≤ 1 −1 ≤ =(sk ) ≤ 1 En la figura se incluye el etiquetamiento. El en este caso se realiza con código Gray, de manera que el salto al símbolo más cercano, involucra sólo un cambio de bit. Al hacerlo de esta manera, se logra aumentar la performance en la tasa de error de bit, frente a un canal AWGN. Con otros tipos de etiquetamientos, el cambio de un símbolo al más cercano no implica el cambio de un único bit. El etiquetamiento de tipo Gray no es único. La ventaja de usar QAM rectangular radica en el hecho de que la detección de los símbolos recibidos es sencilla, ya que se puede pensar como la superposición de dos PAMs (Pulse Amplitude Modulation). Los umbrales de decisión de una constelación PAM son simples y fácilmente implementables. Los tipos de constelaciones QAM usadas en este trabajo son: 4QAM, 16QAM, y 256QAM. Es decir, constelaciones de 2, 4 u 8 bits. 22 4. Alfabetos 4.2. ADPSK A diferencia de QAM, ADPSK no es un tipo de constelación ordinaria, pero posee la virtud de un esquema diferencial en fase, con lo cual es poco susceptible a las rotaciones de fase que el canal introduzca. ADPSK es recomendado por OPERA [2] en su especificación. Básicamente es DPSK de varios anillos. Una constelación DPSK se puede observar en la figura 4.2 Figura 4.2.: ADPSK de 1 anillo y 4 fases Esta constelación se puede denominar 4DPSK, o 1D4PSK. La codificación diferencial se hace de la siguiente manera θk = (θk−1 + ( 2π )bk ) M (4.2.1) donde bk ∈ [0, 1, . . . M − 1]. M puede tomar valores como 4, 8, 32 y representa la cantidad de fases que tendrá la constelación. La codificación diferencial se realiza entre tonos o subportadoras y no entre símbolos OFDM. Esto tiene la ventaja de que si las variaciones de fase son lo suficientemente lentas, la codificación diferencial podrá contrarrestar esas rotaciones y recuperar exitosamente los símbolos enviados. 23 4. Alfabetos ADPSK es similar a DPSK, pero con varios anillos, codificados en forma no diferencial, por ejemplo: 2AD8PSK, 8AD32PSK. Los diagramas de dichas constelaciones se ven en las figuras 4.3 y 4.4 respectivamente. Figura 4.3.: ADPSK de 2 anillos y 8 fases 24 4. Alfabetos Figura 4.4.: ADPSK de 8 anillos y 32 fases Las constelaciones ADPSK usadas en este trabajo son 1AD4PSK (1 anillo y 4 fases), 2AD8PSK (2 anillos y 8 fases), 8AD32PSK (8 anillos y 32 fases). Están normalizadas de manera que los valores máximos sean de módulo unitario. 25 4. Alfabetos El etiquetamiento de dichas constelaciones separa la amplitud de la fase como muestra la figura 4.5. Figura 4.5.: Codificación de amplitud y fase utilizada en ADPSK Se observa que para niveles de carga crecientes, la codificación de la palabra ADPSK varía para acomodar los nuevos valores binarios. 26 5. Carga Un algoritmo de carga computa el número de bits bn y la energía εn para todo subcanal en un conjunto de canales paralelos. Estos algoritmos tienen por objetivo aprovechar la información disponible del medio y lograr un balance entre los subcanales con respuestas óptimas y aquellos con respuestas pobres. En la figura 5.1 se observa una respuesta en frecuencia típica de un canal BPL [6]: Figura 5.1.: Respuesta en frecuencia de canal BPL Cuando el número de subcanales es grande, cada subcanal tendrá una respuesta aproximadamente plana y el objetivo de los algoritmos de carga es calcular la energía y la cantidad de bits que viajarán en tales canales. Además, estos algoritmos toman en cuenta la variabilidad temporal del canal, por lo cual son totalmente dinámicos y actúan en colaboración con los algoritmos de aprendizaje. En el presente trabajo, se desarrolla el concepto de carga pero no se implementan los algoritmos de carga correspondientes. En particular, se realiza una parametrización en carga de bits. En lo sucesivo, cuando se haga referencia a carga, se estará hablando de dicha parametrización. 27 Parte II. Diseño de un transceiver OFDM para PLC 28 6. Idea general Basándose en las ideas expuestas en la parte I, se crea un modelo de transceiver a alto nivel y son fijados los parámetros del sistema, las constelaciones a utilizar y los bloques constitutivos fundamentales que sentarán las bases del diseño escogido. En particular en este trabajo se focalizará en el núcleo OFDM del transceiver. De esta manera, quedará definido el esquema a implementar y en la parte IV se explicará la síntesis del mismo en la plataforma elegida. Observando el sistema completo en su forma más básica, vemos que existen al menos dos enfoques posibles desde el punto de vista de diseño. En la figura 6.1, se muestra uno de ellos, donde se señala la ubicación del diseño en el sistema completo. En este caso, la funciones de down conversion y de up conversion son relegadas a un frente analógico y únicamente la modulación en banda base es realizada en el sistema digital. Figura 6.1.: Diseño con mixers analógicos 29 6. Idea general Otra alternativa es plantear las etapas de corrimiento en frecuencia dentro del sistema digital y, de esta manera, se requiere un solo conversor, aunque de mayor velocidad. Este enfoque se puede ver en la figura 6.2. Figura 6.2.: Diseño con mixers digitales Independientemente del enfoque utilizado, en ambos gráficos se indica la parte del sistema estudiada en el presente trabajo. En la figura 6.3 vemos una idea básica del sistema a diseñar con un nivel de detalle mayor. Figura 6.3.: Sistema OFDM básico Es importante señalar que el alcance del presente trabajo es realizar la modulación y demodulación en banda base. Es decir, las partes que conforman el sistema son: Adquisición de datos en formato binario de alguna fuente (una PC, por ejemplo) Adaptación de datos binarios al formato de datos del módem Etiquetamiento y mapeo de palabras binarias en símbolos de constelación Manejo de carga 30 6. Idea general IFFT Inserción de prefijo cíclico Remoción de prefijo cíclico FFT Ecualizador, dados los coeficientes de la respuesta en frecuencia del canal H(k) Detección y posterior armado de palabra según constelación Reencapsulamiento en formato de fuente destino Se deja la discusión sobre la adquisición de datos y el reencapsulamiento para otra sección, ya que no es un elemento determinante en la configuración general del módem. 6.1. Etiquetamiento y mapeo Las constelaciones a utilizar son QAM y ADPSK. Adicionalmente, en cada familia de constelaciones se dispone de 3 niveles de carga: 2, 4 u 8 bits por símbolo. Las constelaciones están normalizadas a la unidad, es decir, |sk | ≤ 1 ∀k El etiquetamiento se realiza asignándole a cada símbolo de la constelación un valor binario de la cantidad de dígitos correspondiente. La operación de mapeo convierte la palabra binaria en un número complejo, de acuerdo al etiquetamiento pre-establecido. Dependiendo del mapeo, para una misma tasa de error de símbolo, es posible tener varias tasas de error de bit. Por lo tanto, equivocarse en la elección del símbolo recibido implica equivocarse en uno o más de los bits correspondientes a dicho símbolo. La tasa de error de bit, para una tasa de error de símbolo determinada, depende directamente del etiquetamiento elegido. Dado que todas las constelaciones son bidimensionales, existe un canal real y un canal imaginario. Cada uno de los puntos se carga en una portadora. En el caso de utilizar la constelación QAM, un símbolo es independiente de los demás. En ADPSK, esto no es así debido a la naturaleza diferencial del mapeo. Por lo tanto un símbolo por separado no lleva ninguna información: es necesario saber la fase del símbolo anterior para poder decodificar el mensaje. No se manejan símbolos OFDM mixtos con portadoras cargadas con QAM y otras con ADPSK. Una implementación de este tipo, requiere un mayor seguimiento sobre la carga de las portadoras y necesita un conjunto de lógica adicional, cuyo costo de realización excede los beneficios de la misma. 31 6. Idea general En el caso de QAM, el mapeo se realiza teniendo los símbolos almacenados en dos tablas: una para la parte real y otra para la imaginaria. De manera que, una palabra se mapea en dos números reales, que conforman el símbolo en cuestión. En la figura 6.4 se muestra la idea simple detrás del mapeo QAM. Figura 6.4.: Mapeo QAM El mapeo ADPSK, en cambio, no puede ser realizado en forma tan sencilla. La amplitud y la fase se codifican por separado, lo que involucra un slicer 1 para dividir la palabra. La amplitud se mapea normalmente, como en el caso de QAM. Por otra lado, la fase, al codificarse de forma diferencial, requiere de una lógica adicional que realice la operación y como veremos en el apartado siguiente, aparecen problemas sutiles a la hora de implementarlo. Una vez codificada la amplitud y la fase diferencial, es necesario ensamblar el símbolo y transmitirlo en partes (real e imaginaria). La figura 6.5 muestra el mapeo ADPSK. Figura 6.5.: Mapeo ADPSK 6.2. Manejo de carga El manejo del balance de carga se tiene que realizar tanto en la lectura como en el mapeo de los símbolos. Para una carga determinada, es necesario obtener una palabra del largo adecuado y mapearse con el tipo de constelación correspondiente. Para la lectura, la idea es utilizar un slicer configurable, que divida la palabra en varias subpalabras de largo menor. Evidentemente, a menor carga corresponde una 1 Se refiere a un sistema digital que divide una palabra digital en subpalabras de largo menor 32 6. Idea general mayor latencia, por lo cual, debe cesar la lectura de nuevas palabras hasta haber finalizado la actual. La idea se ve en la figura 6.6, donde se aprecia una lectura desde una memoria RAM para una carga de 4 bits. Figura 6.6.: Lectura con carga de 4 bits Para 2 bits, el esquema sería como muestra la figura 6.7 Figura 6.7.: Lectura con carga de 2 bits 33 6. Idea general Se observa que a menor carga corresponde menor tasa de vaciamiento del banco de datos (una memoria RAM en las figuras). Esto involucra un riesgo de overflow o de underflow en el sistema, que debe ser manejado apropiadamente. Se deja para más adelante, la discusión de estos problemas. Por otro lado, el mapeo es diferente de acuerdo a la carga elegida. Por ejemplo, una carga de 4 bits necesita una constelación de 16 puntos, una de 8 bits precisa una de 256 puntos, etc. Esta cuestión se puede resolver utilizando una tabla para cada nivel de carga y multiplexando la elección adecuadamente. En este trabajo se opta por una segunda posibilidad que consiste en usar una única tabla para todos los tipos de carga, con todas las constelaciones almacenadas y usar un offset que redireccione el puntero al lugar adecuado. La figura 6.8 ilustra la situación para el caso QAM y se muestra la elección de dos constelaciones: Figura 6.8.: Mapeo con distintas cargas 34 6. Idea general Así como la carga afecta a la lectura, al mapeo y al etiquetamiento en el transmisor, de manera similar impacta a la escritura, a la detección y al reencapsulamiento en el receptor. Por lo tanto, el mapeo como la detección están parametrizados con el valor de la carga. 6.3. IFFT / FFT Uno de los principales atractivos de OFDM es que existen algoritmos muy eficientes para calcular la DFT y la IDFT. Este conjunto de algoritmos y técnicas se conocen colectivamente como FFT (Fast Fourier Transform) y fueron ampliamente estudiados desde su descubrimiento por Cooley y Tukey [7]. De hecho, la FFT2 es la parte central de un sistema OFDM, ya que realiza la modulación y demodulación en sí. Por lo tanto, sus propiedades y configuraciones determinan las características principales de cualquier sistema OFDM. Los parámetros en el presente trabajo fueron tomados principalmente del consorcio europeo OPERA [2]. Los valores relevantes para la modulación en 30 MHz (Tipo I) son los siguientes: NIDF T = 2048 TIDF T = 51,2µs donde NIDF T es la cantidad de puntos de la IDFT (cantidad de portadoras o canales) y TIDF T es el segmento de tiempo que corresponde a la IDFT (que no es igual al tiempo de símbolo OFDM debido al prefijo cíclico). Además, en el estándar se define una magnitud para cuantizar el error causado por el procesamiento digital y la conversión D/A y A/D, denominada EVM (Error Vector Magnitude): EV M = v u N u 1 P 2 u u N k=1 |S(k) − S0 (k)| u u N t 2 1 P N k=1 |S0 (k)| × 100 % Donde: N denota el número de subportadoras S(k) representa la medición del símbolo complejo transportado por la k-ésima portadora S0 (k) es el símbolo ideal que tendría que llevar la k-ésima portadora 2 Cuando se menciona a la FFT de esta manera, se hace referencia a la IFFT también 35 6. Idea general Este valor no debe superar el 1 %. Esta restricción será tenida en cuenta en la elección de las precisiones numéricas del sistema, de forma que el error numérico introducido se mantenga, por lo menos, en un orden de magnitud por debajo de tal valor. El factor limitante debe ser la conversión A/D y D/A. El parámetro TIDF T permite tener una idea de la tasa de clock a la cual debe trabajar el sistema. El procesamiento debe ser lo suficientemente rápido como para poder alcanzar dicha tasa de transmisión. Haciendo un cálculo estimativo, se obtiene lo siguiente: tasa de clock ≥ 1 = 40M Hz 2048 × 51,2µs Por lo tanto, el sistema debe trabajar a más de 40M Sps y la plataforma elegida para la implementación debe poseer las capacidades para este tipo de tasas y aún mayores. 6.4. Inserción y remoción del prefijo cíclico Como se explicó en la sección 3.5, la inserción de un prefijo cíclico es obligatoria en un esquema OFDM que sufre de propagación multicamino. Es deseable, además, no contar con un único prefijo cíclico, sino que sea intercambiable de acuerdo a las condiciones que presente el canal. Esto brinda un grado de flexibilidad extra al sistema y permite realizar un balance entre eficiencia y performance. OPERA propone dejar el largo del prefijo invariante en el tiempo. Debido a que hay 3 tasas de transmisión o sea, 3 tipos de símbolos OFDM completos, la cantidad de muestras cambia en cada prefijo, para mantener la duración constante. En el sistema actual contamos con 4 opciones de prefijo: 40 % de N 26 % de N 13 % de N Sin prefijo Es posible cambiar este largo durante la comunicación, aunque normalmente se mantiene el mismo prefijo en una cantidad elevada de símbolos OFDM. 6.5. Ecualizador Si se dispone de la respuesta en frecuencia del canal, que puede ser estimada por un algoritmo de aprendizaje [8, 9] y, dado un prefijo cíclico adecuado, es posible realizar 36 6. Idea general una ecualización sencilla. Se realiza portadora a portadora (canales independientes) simplemente dividiendo por el coeficiente correspondiente de ese canal. La estimación puede (y debe) ser dinámica y el ecualizador usará la vigente para realizar la operación. 6.6. Detección El proceso de detección consiste en asignar al punto recibido una palabra binaria de la constelación. Para esto, se definen lo que se denominan regiones de decisión, que se determinan por cercanía, y con ellas se escoge el simbolo enviado. Se comienza haciendo la razonable suposición de que el punto transmitido, en promedio, se modifica por una cantidad determinada de ruido lo suficientemente pequeña como para que la distancia con el punto recibido sea mínima. En otras palabras, si se calcula la distancia del punto recibido con todos los puntos de la constelación, en promedio, se tendría que obtener que la distancia mínima es la del punto originalmente enviado. Para ilustrar lo dicho anteriormente, mostramos en las figuras 6.9, 6.10 y 6.11 tres constelaciones, una QAM y dos ADPSK, con los límites de las regiones de decisión señaladas. Figura 6.9.: QAM con las regiones de decisión señaladas 37 6. Idea general Figura 6.10.: ADPSK de 4 puntos con regiones de decisión indicadas Figura 6.11.: ADPSK de 16 puntos con las regiones de decisión indicadas En particular, se puede ver en el etiquetado QAM que las regiones adyacentes sugieren el cambio de un solo bit en la palabra. Esto hace que un error de símbolo con los adyacentes, resulte únicamente en un error de bit. Una etapa de codificación puede ser capaz de detectar dichos errores y hasta corregirlos. En el caso de la detección QAM, el detector puede realizar la tarea estimando por separado la parte real y la imaginaria. Lo anterior se puede hacer porque los límites de las regiones de decisión son colineales con los ejes real e imaginario. De esta forma, el 38 6. Idea general proceso de detección se vuelve separable, lo cual permite una implementación sencilla, por medio de una serie de comparadores. En el caso de la detección en una constelación ADPSK y, dado un punto recibido del plano complejo con coordenadas binómicas, no es posible separar el proceso a causa de la distribución de las regiones de decisión con respecto a los ejes. Sin embargo, debido a que la simetría es circular en este tipo de constelación, es conveniente disponer de los puntos en un sistema de coordenadas polar, expresados en función de la magnitud y la fase. Teniendo en cuenta que el envío de datos es en forma diferencial en fase y utilizando la codificación explicada en la sección 4.2, donde la magnitud es separada de la fase en la palabra binaria, planteamos el detector que se muestra en la figura 6.12 para la constelación ADPSK. Figura 6.12.: Detección conceptual ADPSK El conformador de símbolo se encarga de convertir el número en coordenadas binómicas a coordenadas polares. La amplitud se trata en forma directa por medio de un decisor similar al utilizado en el caso QAM. En cambio, para recuperar la fase original α, debe realizarse la operación inversa a la aplicada en el transmisor. Con los valores ak (subpalabra binaria proveniente de la decisión en magnitud) y bk (subpalabra binaria proveniente de la decisión en fase) obtenidos , es posible reensamblar la palabra original. 39 Parte III. Herramientas de diseño 40 7. Plataforma de desarrollo Un proyecto en hardware de un sistema experimental de comunicaciones de este tipo requiere una plataforma de desarrollo que contenga las facilidades necesarias que permitan: Alcanzar los requisitos exigidos por el diseño, en velocidad y tamaño Diseñar las partes del sistema y comprobar su funcionalidad en forma gradual Ajustar los parámetros de forma dinámica Interconectar los subsistemas como “cajas negras”, que impulsen un diseño jerárquico Realizar simulaciones y obtener datos que se asemejen a su comportamiento en el dispositivo físico real, tanto en tiempo como en precisión numérica Implementar el sistema en una plataforma física real y comprobar su funcionalidad Documentar el desarrollo para futuras referencias Debido a que cuenta con modelos orientados a este tipo de proyecto, con el software apropiado y además con kits de desarrollo que facilitan la puesta en marcha de prototipos, el tipo de plataforma elegida es FPGA (Field Programmable Gate Array). Antes de describir la plataforma de trabajo en detalle, se da una breve introducción a los FPGAs. 7.1. FPGAs Los FPGAs son circuitos integrados digitales que contienen bloques de lógica programables e interconexiones programables entre ellos. El objetivo es que dichos bloques puedan ser configurados de distintas maneras para poder lograr una amplia variedad de tareas. “Field Programming” se refiere al hecho de que el dispositivo es configurado en el laboratorio (in the field) por el usuario en lugar de ser configurado por el fabricante. En general, cuentan con la posibilidad de ser programadas miles de veces y en sistema (ISP, In System Programming). Un ASIC (Application-Specific Integrated Circuit) es un circuito integrado hecho a medida para un uso en particular. No son reconfigurables ya que su propósito es único. Representan la solución óptima en cuanto a velocidad y complejidad para una tarea 41 7. Plataforma de desarrollo específica. Aunque los ASICs ofrecen el mejor compromiso entre tamaño, performance y complejidad, el proceso de diseño y construcción es costoso y extremadamente largo, con la desventaja adicional de que el sistema queda congelado en el chip y puede cambiarse sólo haciendo una nueva versión del mismo. Un PLD (Programmable Logic Device) es un dispositivo electrónico usado para construir circuitos digitales reconfigurables. En términos generales, se puede decir que un PLD apunta a sistemas más simples o con gran cantidad de lógica combinacional, en comparación a un FPGA. Los FPGAs ocupan un espacio entre los ASICs y los PLDs, porque su funcionalidad puede ser configurada como la de los PLDs, pero contienen millones de compuertas con las cuales se pueden desarrollar funciones complejas y elaboradas, que antes sólo eran posible con ASICs. El costo de un FPGA es muchísimo más bajo que el de un ASIC (aunque en producción a gran escala, se abarata el costo de los ASICs). La realización de cambios en el diseño es mucho más sencilla y versátil en un FPGA. Actualmente, los FPGAs poseen muchas capacidades extra además de su extensa área y velocidad, que van desde núcleos para procesamiento embebido hasta interfaces I/O de alta velocidad, múltiples interfaces lógicas, etc. Figura 7.1.: FPGA Spartan 3 de Xilinx Tienen una gran cantidad de aplicaciones en distintos campos, a saber: ASICs y chips a medida: se usan para funciones que antes sólo eran implementadas por ASICs Procesamiento digital de señal (DSP): el procesamiento digital a alta velocidad tradicionalmente era manejado por chips especializados llamados DSPs (Digital Signal Processors). Hoy en día, los FPGAs contienen muchas características deseables (grandes cantidades de On-chip RAM, multiplicadores embebidos, etc.), que permiten realizar tareas de procesamiento digital a velocidades mucho mayores Microcontroladores embebidos: las capacidades actuales y las herramientas de 42 7. Plataforma de desarrollo software están convirtiendo a los FPGAs en atractivos para tareas tradicionalmente manejadas por microcontroladores Comunicaciones de capa física: los FPGAs contienen transceivers de alta velocidad que permiten unir las funciones de comunicación y networking en un solo dispositivo 43 7. Plataforma de desarrollo 7.2. Elección de plataforma Teniendo en cuenta lo anteriormente expuesto, la plataforma elegida para el proyecto actual es la ofrecida por Xilinx 1 , que cuenta con el siguiente conjunto de herramientas a nivel software y hardware: Xilinx ISE Design Suite 10.1. El paquete de software contiene una variedad de aplicaciones. En particular, son de interés para el presente proyecto, Xilinx System Generator 10.1, Project Navigator, el simulador ModelSim XE, el sintetizador XST y el programador iMPACT El kit de desarrollo XUPV5-LX110T, que incorpora un FPGA Xilinx Virtex®-5 XC5VLX110T, múltiples interfaces I/O, USB2, DVI/VGA, Ethernet 10/100/1000, etc. Una imagen del kit utilizado se muestra en la figura 7.2 Figura 7.2.: Kit XUPV5-LX110T de Xilinx 1 Junto con Altera, Xilinx es uno de los mayores productores de FPGAs y de soluciones basadas en FPGA 44 7. Plataforma de desarrollo 7.3. Esquema de trabajo En este apartado, se explica el esquema de trabajo seguido y se da una descripción de las herramientas de software utilizadas en el desarrollo del transceiver OFDM. La figura 7.3 muestra un camino a seguir o workflow de las principales tareas a realizar para la realización del prototipo. Figura 7.3.: Camino a seguir o workflow La figura 7.3 es un diagrama temporal o lógico de las tareas a realizar; sin embargo, no es evidente la forma que toma la estructura del proyecto, en cuanto a sus partes. 45 7. Plataforma de desarrollo Se puede observar en la figura 7.4 una idea de la conexión entre las distintas porciones del proyecto, y sus dependencias. Figura 7.4.: Conexión de las distintas partes del proyecto El esquema muestra dos caminos que confluyen; uno de ellos, corresponde al diseño realizado con System Generator y el otro al conjunto de lógica adicional que encapsula y brinda conectividad al sistema. El esquema OFDM en sí es es realizado con System Generator. En la parte superior de la figura y de forma independiente, se arma un sistema que acogerá al primero y lo conectará con el exterior. Esta porción consta de un conjunto de lógica adicional programada en VHDL, restricciones de velocidad, área y la configuración del kit del FPGA en particular. Este sistema se realiza con el programa ISE, en VHDL. Su objetivo es encapsular el sistema realizado con System Generator el cual actúa como caja negra en el esquema completo. 46 8. Diseño: System Generator y MATLAB System Generator es una herramienta creada por Xilinx, que agrega un conjunto de toolboxes al software Simulink que acompaña a cualquier versión de MATLAB. Este programa brinda la posibilidad de diseñar y simular a nivel lógico una gran variedad de sistemas digitales desde una óptica que aisla al diseñador de los detalles y problemas de bajo nivel. A su vez, cuenta con muchos bloques prediseñados que se pueden conectar entre sí, para lograr el funcionamiento requerido. Cada bloque es configurable, tanto en su funcionamiento como en algunos detalles de implementación1 . Algunos de ellos permiten definir su funcionalidad, sus entradas, sus salidas, sus elementos de memoria y su lógica interna. Su función es dar flexibilidad para crear elementos como máquinas de estado o decisores lógicos, por ejemplo. Una vez realizadas las simulaciones y obtenidos los resultados esperados, se da paso al proceso de síntesis, que consiste en volcar el sistema en una unidad funcional en código VHDL para su posterior utilización en una estructura de mayor jerarquía. Los sistemas digitales que permite crear System Generator son sincrónicos (aquellos gobernados por señales de clock) y la representación de los números es en punto fijo. En un proyecto particular creado en System Generator se definen entradas (Gateway In) y salidas (Gateway Out), que serán las conexiones que tendrá la entidad final con el exterior. 8.1. Generalidades En System Generator, como en una entidad en VHDL, es necesario definir entradas y salidas con los bloques especiales Gateway In y Gateway Out. Estas unidades no sólo representan los límites del sistema, sino que además proporcionan la conversión de tipo numérico correspondiente para la interacción con los datos provenientes de Simulink (o de MATLAB). 1 Cuando se habla de implementación, se refiere a ciertos parámetros que son tomados en cuenta al momento de generar una representación más cercana al circuito lógico final 47 8. Diseño: System Generator y MATLAB En la figura 8.1, se ve un sistema realizado en System Generator. Figura 8.1.: Sistema en System Generator En el centro de la figura se ven bloques comunes, que representan un sistema que cumple alguna función deseada. En general, es posible definir cualquier número de entradas y salidas de distinto tipo. Sin embargo, observando la figura 8.1, se nota que hay un bloque que permanece aislado del resto, llamado System Generator. Este bloque especial tiene la función de configurar parámetros generales del sistema, que son importantes la hora de sintetizarlo. Debe estar presente en todo diseño en el que se utilice el toolbox de System Generator. 8.1.1. Definiciones y conceptos Algunos conceptos son generales a todos los bloques. A continuación, se enumeran los más utilizados: Tiempo de ejecución Así se denomina a los instantes de tiempo durante los cuales la simulación está ejecutándose. Ciertos parámetros no son modificables mientras la simulación se encuentre en este estado. Precisión Indica la cantidad de bits reservados para representar un número. El sistema trabaja en punto fijo, por lo tanto, al especificar la precisión, se asignan el largo total de la palabra y la posición del punto decimal. Por ejemplo, para denotar una palabra de 16 bits con 2 bits de parte entera y 14 bits de parte fraccionaria, se escribe 16_14. Tipo Aritmético ned) o boolean. Se refiere al tipo de número: con signo (signed), sin signo (unsig- 48 8. Diseño: System Generator y MATLAB Pulso de Clock Es una unidad de ejecución normalizada. Puede especificarse de acuerdo a las necesidades durante la etapa de sintesis. Truncamiento o redondeo convergente Al realizar operaciones con números descriptos en punto fijo, sucede a veces que el resultado excede la cantidad de bits disponible para su almacenamiento. En estos casos, es necesario hacer una operación de redondeo o truncado en los datos. El truncamiento de los datos no representa costo en recursos alguno, ya que es implementado por la misma estructura del hardware, mientras que el redondeo convergente requiere lógica extra, debido a que involucra una comparación. Wrap o Saturate En caso de overflow, se pueden tomar dos opciones: saturar al valor máximo o mínimo permitido por el tipo numérico o hacer un wrap, en el cual se utiliza el valor de overflow como resultado. Saturate implica recursos extra porque requiere de lógica adicional para realizar las comparaciones. 8.1.2. Tokens comunes En este apartado se listan algunos de los bloques o tokens simples usados en el diseño, provistos por la librería de System Generator. En la mayoría de los tokens es posible ajustar el tipo y precisión de los datos de salida, así como configurar detalles de implementación. System Generator Controla los parámetros de sistema y de síntesis. También es posible definir y ejecutar la generación de código. Es necesario incluir este token si se utilizan los bloques del toolbox de System Generator. Figura 8.2.: Token System Generator Para el proyecto actual es de interés configurar los siguientes valores: Compilation: especifica el tipo de compilación cuando el generador de código es invocado. En este caso, elegimos HDL Netlist para crear código descriptor de hardware Part: representa la FPGA destino del diseño. Para el proyecto actual, Virtex 5 xc5vlx110t -3ff1136 49 8. Diseño: System Generator y MATLAB Target directory: especifica el lugar físico en el disco duro donde se guardarán los resultados de la síntesis Synthesis Tool: es la herramienta de síntesis. Se usa la herramienta de Xilinx, XST Hardware Description Language: es el lenguaje HDL objetivo. VHDL en este caso FPGA Clock Period(ns): define el clock del sistema. Este valor es presentado como una Constraint a las herramientas de implementación de Xilinx. Para el presente trabajo, establecemos que el valor adecuado es 8 (en el apartado de implementación se explica esta decisión) Multirate Implementation: la opción Expose Clock Ports es la adecuada porque permite generar el clock del sistema en forma externa Simulink System Period: define la cantidad de segundos que determinan el período de simulación. Este valor es el máximo común divisor de los períodos de muestreo que están presentes en el modelo. Por ejemplo, si se dispone de un bloque que hace Up sampling por un factor de 4, entonces el período tiene que especificarse como 41 , que es el máximo común divisor entre 41 y 1 (suponiendo que los demás bloques no presentan conversión de tasa) Gateway In Estos bloques son las entradas a la parte desarrollada en System Generator del modelo de Simulink. Su propósito es doble: convertir los valores provenientes de Simulink a una precisión determinada (por ejemplo: de double a 16_8 unsigned) y definir los puertos y el tipo de cada puerto de la top-level entity generada por System Generator. Además, se establece el nombre que tendrán dichos puertos en la entidad final. Figura 8.3.: Token Gateway In 50 8. Diseño: System Generator y MATLAB Gateway Out Estos bloques son las salidas de la entidad generada en System Generator del modelo de Simulink. Su propósito es doble: convertir las salidas provenientes del sistema en System Generator a precisión double, manejada por Simulink y definir los puertos y el tipo de cada puerto de la top-level entity generada por System Generator. Es útil también para establecer el nombre que tendrán dichos puertos en la entidad final. Figura 8.4.: Token Gateway Out Constant Permite almacenar y generar una constante especificada por el usuario y no modificable durante el tiempo de ejecución. Es posible ajustar la precisión y el tipo aritmético para la representación de la constante. Figura 8.5.: Token Constant Delay Este bloque implementa un delay de L ciclos, donde L representa un entero mayor a 1. Cualquier valor provisto en la entrada aparece L ciclos después en la salida. Figura 8.6.: Token Delay 51 8. Diseño: System Generator y MATLAB Convert Este bloque permite hacer una conversión al tipo numérico especificado. Por ejemplo, un número puede ser convertido a unsigned o signed, con una precisión determinada. Este tipo de conversiones, a veces, resultan en pérdida de datos o requieren padding a derecha o a izquierda. Figura 8.7.: Token Convert Inverter Este operador ejecuta la inversión bit a bit del número en su entrada. Si la entrada es bool, simplemente se trata de una compuerta lógica NOT. Figura 8.8.: Token Inverter Logical Permite efectuar una función lógica (OR, AND, NAND, NOR, XOR, XNOR) bit a bit, en un número de entradas. Figura 8.9.: Token Logical 52 8. Diseño: System Generator y MATLAB Cmult Este bloque es un operador de ganancia, es decir, multiplica la entrada por un valor constante en el tiempo de ejecución. Este multiplicador puede ser una expresión MATLAB, evaluada durante el tiempo de compilación. Figura 8.10.: Token Cmult Mux Este bloque implementa un multiplexor de hasta 32 entradas. Posee una señal de selección del tipo unsigned, que permite la selección de la entrada deseada en la salida. Figura 8.11.: Token Mux 53 8. Diseño: System Generator y MATLAB MCode Con este módulo se puede definir una función (codificada en un código similar a MATLAB) y ejecutarla para calcular las salidas durante cada ciclo de simulación. El código es traducido en forma directa a su equivalente en VHDL (o Verilog) para su posterior implementación. Figura 8.12.: Token Mcode Las herramientas de programación principales posibilitan implementar operaciones como las siguientes: Entradas y salidas de la función Conversión entre tipos de datos Instrucciones de asignación Contrucciones if/else/elseif Construcciones switch Adición, substracción, multiplicación Operadores relacionales Operadores lógicos Funciones shift, concatenate y slice Variables internas de estado (elementos de memoria). Esto es útil para desarrollar máquinas de estado Funciones de debugging 54 8. Diseño: System Generator y MATLAB ROM Este bloque permite especificar una memoria de sólo lectura (Read Only Memory, ROM ). Es necesario definir el ancho de la memoria (tipo de dato), la profundidad (cantidad de direcciones) y el valor de inicialización. También es posible asignar la latencia de la lectura. Figura 8.13.: Token ROM Single Port RAM Este bloque implementa una memoria RAM, con un puerto de entrada y otro de salida. Contiene las mismas opciones de configuración que la memoria ROM y agrega un puerto de datos para escribir y un write enable para habilitar la escritura. Dispone de 3 modos de escritura: Read after Write, Read before Write, No Read on Write. Figura 8.14.: Token Single Port RAM 55 8. Diseño: System Generator y MATLAB WaveScope Este bloque especial permite visualizar las señales lógicas deseadas en forma de analizador lógico. Es muy útil a la hora de encontrar errores en los datos o en el sincronismo (timing) de las señales. Ofrece varios formatos de visualización: binario, hexadecimal y decimal. En la figura 8.15, vemos su símbolo y un ejemplo de una simulación mostrando varias señales. Figura 8.15.: Token WaveScope Es posible realizar este tipo de simulaciones dentro del entorno de Project Navigator una vez sintetizado el código en VHDL. Una alternativa es el software ModelSim de Mentor Graphics, provisto en ISE Design Suite 10.1. 8.1.3. Scripts en MATLAB Para facilitar la realización de simulaciones es deseable poder cambiar las variables del sistema en forma parámetrica, así como modificar los datos de entrada. Por medio de MATLAB, y su conexión con Simulink, es posible realizar estas operaciones eficazmente. La mayor parte de los bloques permiten cierta parametrización en sus valores, lo cual aumenta la flexibilidad en el momento de efectuar simulaciones iterativas. 56 Parte IV. Síntesis del transceiver 57 9. Esquema básico Con las herramientas explicadas en la parte III y las ideas planteadas en la parte II, se explica en este apartado el proceso de diseño del transceiver, su síntesis, su puesta en marcha, las dificultades surgidas y las simulaciones y resultados adquiridos en el transcurso. Los modelos usados en la simulación difieren ligeramente de los usados finalmente para la síntesis. Este hecho se debe en parte a que en los análisis llevados a cabo mediante simulaciones, la fuente de datos es proveniente de MATLAB. En cambio, en la implementación debe provenir de una interfaz estándar (Ethernet por ejemplo). Estas diferencias serán revisadas en la sección correspondiente del apartado de implementación. En estas secciones se usará el modelo de simulación, ya que resulta equivalente desde un punto de vista conceptual. 9.1. Transmisor En la figura 9.1, vemos un esquema del transmisor realizado con bloques de System Generator 58 9. Esquema básico Figura 9.1.: Esquema del transmisor 59 9. Esquema básico A continuación, se explican en forma consecutiva las diferentes partes del sistema. 9.1.1. IFFT / FFT El bloque IFFT y su contraparte (FFT) son los módulos centrales en el sistema OFDM. Su función es realizar la DFT (Discrete Fourier Transform) y la IDFT (Inverse Discrete Fourier Transform) con un algoritmo computacionalmente eficiente, respectivamente. El core usado es el FFT v5.0 provisto dentro de las herramientas de Xilinx. Estos módulos son llamados IP (Intellectual Property) y están diseñados de tal forma de ser óptimos con los recursos disponibles en FPGAs de Xilinx. En la figura 9.2 se observa el token, tal como fue usado en el diseño. Figura 9.2.: token IFFT A seguir se explican los modos de funcionamiento y las posibles opciones y configuraciones tanto de la IFFT como de la FFT, ya que su implementación no incluye diferencias significativas. Más adelante se incluyen tablas que resumen en detalle la función de cada entrada y salida. Descripción Hay varios aspectos a tener en cuenta a la hora de poner en funcionamiento este subsistema: Entrada de datos: tipo, precisión, modo Salida de datos: tipo, precisión, modo Arquitectura: implementación y algoritmo utilizado 60 9. Esquema básico Número de puntos: N Orden: Bit reversed, Natural Order Cuantización: truncado o redondeo convergente Factores de fase (Twiddle factors): precisión Escalaje: Unscaled, Scaled, Block Floating Point Sincronización Prefijo Cíclico: CP Entrada de datos El modo de entrada es serie, es decir, los datos entran uno tras otro, en paquetes o bloques, de forma ordenada y debidamente sincronizados. Los datos entran por dos canales (real e imaginario) en forma paralela. La precisión de los datos de entrada puede ser elegida entre 8 y 24 bits en complemento a 2. Un requisito fundamental es que sea de la forma Fix_S_(S-1), por ejemplo Fix_8_7, Fix_24_23. Como consecuencia, la entrada debe estar en el rango normalizado [-1;1). Los datos son presentados en orden natural; por ejemplo, para N = 2048, entrarán ordenadamente las muestras 0, 1 · · · 2047. Salidas de datos El modo de salida es serie pero es posible especificar el orden: natural o bit reversed. Cuenta con dos canales (real e imaginario) que salen en forma paralela, similar a la entrada. La salida en forma natural implica mayores recursos o mayor tiempo de unloading, según la arquitectura elegida. En el caso de elegir Pipelined, Streaming I/O, se penalizan los recursos, ya que es necesaria una memoria RAM extra para realizar el reordenamiento. La precisión depende del tipo de escalaje hecho. En en presente caso, al usar el modo Unscaled, la precisión es máxima (full precision) y para una entrada con precisión del modo Fix_S_(S-1) toma la forma: Fix_(S+log2 N + 1)_(S-1). Por ejemplo, para una precisión de entrada de Fix_16_15, y N = 2048, la precisión obtenida a la salida es Fix_28_15. Este crecimiento en la parte entera permite alojar cualquier valor posible de la salida sin truncamiento en la parte entera. En el ejemplo citado el rango citado sería [-2048;2048). Arquitectura El core permite cuatro tipos de arquitetura. A continuación resumimos brevemente sus propiedades y diferencias: Pipelined, Streaming I/O: esta configuración tiene la posibilidad de cargar datos en la entrada, realizar los cálculos necesarios, y descargarlos en la salida, simultáneamente. El usuario puede cargar datos continuamente y luego de la latencia de cálculo, descargarlos a la salida también en forma continua. Soporta unscaled (para full precision) o escalaje con punto fijo y permite orden natural o bit reversed a la salida. 61 9. Esquema básico Radix-4, Burst I/O: en este caso, la carga y descarga de datos no se puede hacer simultáneamente con el cálculo de la transformada. Sólo se pueden superponer los procesos de carga y descarga si la salida se especifica en orden bit reversed. Los tres modos de escalaje son permitidos. Usa menos recursos que la arquitectura Pipelined, Streaming I/O pero la transformada tiene mayor latencia. Radix-2, Burst I/O: es similar en cuanto a la relación costo/velocidad que Radix4, Burst I/O, ya que al utilizar otro tipo de butterfly se disminuye tanto el área como la velocidad de cálculo. Radix-2, Lite Burst I/O: Esta arquitectura es la alternativa a elegir si se quiere minimizar recursos. Reutiliza un sumador/restador a costa de un delay extra en cada butterfly. La elección de la arquitectura está principalmente determinada por el compromiso existente entre velocidad y recursos utilizados. Según la hoja de datos de Xilinx [10], la relación que existe entre recursos - tasa de salida viene dada en forma aproximada por un gráfico como el que muestra la figura 9.3. Dado el FPGA disponible, es posible utilizar (al menos en esta primera implementación) el core de mayor throughput, ya que los recursos son suficientes y posee la mejor relación costo/velocidad. Figura 9.3.: Recursos vs throughput del core FFT Número de puntos El número de puntos puede ser: 2m con m = 3, 4 · · · 16. Debido a consideraciones dictadas por el estándar de Opera [2], se toma N = 2048. La cantidad 62 9. Esquema básico de puntos N es dinámica, es decir, puede variarse de bloque a bloque. Esta opción no es utilizada en el presente trabajo. Truncado o redondeo convergente Al realizar operaciones con precisión finita es frecuente que los resultados tengan que ser acomodados en una longitud de palabra menor al largo del número obtenido. Se pueden descartar las cifras menos significativas haciendo truncamiento o redondeo. El comportamiento del ruido numérico cambia de forma poco aparente si tomamos una u otra opción como forma de aproximar decimales. El método seleccionado es el de redondeo convergente, que utiliza más recursos pero logra un mejor perfil de ruido numérico. Vemos que: Las componentes de baja frecuencia, que llevan la información en la portadoras de menor índice, presentan un ruido de magnitud mayor a las demás portadoras, debido al truncamiento en los cálculos realizados Usando redondeo convergente, este ruido desaperece y se normaliza a un nivel compatible con las demás portadoras Se realizaron simulaciones (ver sección 10.2) para obtener estos resultados. Factores de fase (Twiddle factors) Los factores de fase en el algoritmo de la FFT se refieren a las constantes trigonométricas que son multiplicadas por los datos en el transcurso del algoritmo. Con el token utilizado es posible escoger factores de fase de hasta 24 bits de precisión. Por lo tanto, disponemos de dos tipos de precisiones con las que podemos modificar el comportamiento del ruido numérico introducido por la IFFT (o la FFT, cuyo perfil de ruido es esencialmente el mismo): la precisión de los datos de entrada y la de los de factores de fase (twiddle factors). Para estudiar dicho comportamiento se realizaron una serie de simulaciones donde se puede observar MSE (Mean Square Error) versus precisión del factor de fase, parametrizado con la precisión de los datos de entrada. Se pueden ver los resultados de estas simulaciones en la sección 10.3. Como conclusión, se puede decir que si deseamos que el factor limitante sea la precisión de los datos de entrada, la de los factores de fase debe ser escogida de manera que la curva de MSE ya se haya estabilizado. Se observa además que este comportamiento se manifiesta notablemente con precisiones de entrada mayores a 12 bits y para precisiones menores el efecto se enmascara. Escalaje Es posible proporcionar a cada etapa interna de la FFT su factor de escalaje, para que la salida se mantenga en un rango determinado. Se confecciona un “programa de escalaje” o “agenda de escalaje” que puede ajustar los coeficientes divisores en forma dinámica para obtener, en promedio, un nivel deseado a la salida. En este trabajo se optó por el modo Unscaled (full precision) y la salida luego es acondicionada por medio de un escalaje externo a la FFT. 63 9. Esquema básico Si tenemos en cuenta el rango máximo posible de valores que puede asumir la salida 1 de la IFFT ([-2048 ; 2048) para N = 2048), tendríamos que multiplicar por F = 2048 a la salida, para garantizar valores normalizados entre [-1 ; 1). De esta manera se logra dimensionar los datos, aunque no en forma eficiente en cuanto a la utilización óptima de la longitud de palabra en punto fijo disponible. En la figura 9.4 se observa la precisión de datos de entrada de la IFFT y la precisión obtenida a la salida en el modo Unscaled, para P = 8 y para N = 2048. Figura 9.4.: Precisión de datos antes y después de IFFT en modo Unscaled El problema radica en el hecho de que si los valores obtenidos a la salida de la 1 elimina información IFFT ocupan un rango mucho menor, multiplicar por F = 2048 útil, dado que la longitud de palabra es finita. Claro está que encontrar un multiplicando óptimo no es sencillo, porque puede 4 1 provocar pérdida de información. Por ejemplo, si se multiplica por F = 2048 = 512 y 2048 en la salida se presentan números mayores a 4 = 512, se recortan estos número por 1 exceso. Pero en caso de no presentarse números mayores a 512 y se divide por F = 2048 , se descartan cifras significativas del resultado. Un análisis estadístico permite ver que el multiplicando depende de la constelación usada y de la aleatoridad de los datos de entrada. Por medio de experimentaciones y para palabras de naturaleza 8 2 16 , 2048 y 2048 para las uniforme, se encuentra que los multiplicandos adecuados son 2048 constelaciones de 256, 16 y 4 símbolos utilizadas, respectivamente. 64 9. Esquema básico Por ejemplo, para una precisión P = 8, la figura 9.5 muestra qué sucede con los diferentes divisores empleados y cuáles son los bits perdidos. Se observa la palabra inicial con full precision, como la devuelve el modo Unscaled. Las siguientes palabras corresponden a multiplicaciones por factores 21k con k = 11 . . . 0 y posterior ajuste a la precisión del sistema P . tenemos Figura 9.5.: Efecto de multiplicación y posterior truncado para P = 8 k Por supuesto se debe que invertir este efecto en el receptor. Si se utiliza 2048 en el transmisor, entonces en el receptor luego de la FFT, se tiene que multiplicar por k1 para obtener datos normalizados. Se puede pensar que la cascada IFFT/FFT tiene que resultar en un sistema identidad, sin tener en cuenta el ruido numérico. 65 9. Esquema básico Una consideración a tener en cuenta es que conviene tomar k una potencia de 2, de forma que la operación resulte sólo en un truncamiento de las cifras menos significativas y no involucre errores por el cálculo de la multiplicación. Sincronización Para poder comunicarse con el token de la IFFT en forma efectiva se recurre al diagrama de tiempos provisto por el fabricante, que se muestra en la figura 9.6. Figura 9.6.: Sincronización IFFT 66 9. Esquema básico El análisis del sincronismo debe hacerse de forma conjunta, conociendo las distintas partes del sistema. En la sección 9.3 se detallan los pormenores que tienen que ver con el sincronismo y los tiempos involucrados. Prefijo Cíclico (CP) La forma de añadir el prefijo cíclico es sencilla ya que el core provisto por Xilinx cuenta con la posibilidad de activarlo. Al escoger la inserción del prefijo cíclico, forzamos a que los datos de salida aparezcan en orden natural y no es posible escoger bit-reversed. El prefijo cíclico se puede cambiar de bloque en bloque y los valores que puede tomar van desde 0 hasta N − 1. Como se sugirió en la sección 6.4, se utilizaron 4 prefijos (40 %, 26 %, 13 % y nulo) y la forma de escogerlos es a través de una variable. La figura 9.7 muestra la implementación en System Generator de dicho selector. Figura 9.7.: Elección de Prefijo Cíclico El módulo Convert se usa para adecuar la longitud de los datos a la requerida por el token IFFT (log2 N en este caso). 9.1.2. Mapeo Así como en la detección, el mapeo ADPSK representa un desafío mayor que el mapeo QAM, como veremos en esta sección. Primero se examina el mapeo QAM y luego el ADPSK. QAM Como se trató en las secciones 6.1 y 6.2, el mapeo QAM es directo y parametrizado con la variable carga. Debemos disponer de una tabla con los valores de los puntos de la constelación almacenados, llamada tabla de mapeo. En este caso, cada tabla se implementa con una memoria ROM inicializada adecuadamente cuyas direcciones corresponden al mapeo teórico de la constelación. Es decir, el valor de la palabra es el mismo valor binario de la dirección en memoria donde se 67 9. Esquema básico halla el valor del punto de la contelación correspondiente. Ya que las constelaciones son complejas, por cada valor de palabra se deben producir dos valores reales, uno para la parte real y otro para la parte imaginaria. Para lograr esto se montan en tándem dos memorias ROM, donde una dirección determinada corresponde, en una, a la parte real del punto, y en la otra, a la parte imaginaria. En la figura 9.8 se muestra el bloque que implementa esta función: Figura 9.8.: Mapeo QAM Como se puede ver dispone de una entrada que corresponde a la palabra a ser mapeada, dos salidas para las partes real e imaginaria respectivamente y una entrada que permite la parametrización por carga. Dentro de este bloque se encuentra el subsistema que muestra la figura 9.9 Figura 9.9.: Subsistema de mapeo QAM Consta de dos memorias ROM y un Mcode llamado Offset_QAM. Este bloque implementa el offset de memoria que se mencionó en la seccion 6.2. Dado que por cada nivel de carga tenemos un tamaño de constelación diferente, el bloque Mcode sencillamente agrega un offset para apuntar al banco de direcciones donde se encuentran los puntos de la constelación correspondiente. Es decir, en la memoria llamada ROM_REAL se almacenan las partes reales de todos los puntos de 68 9. Esquema básico las constelaciones QAM empleadas (4QAM, 16QAM, 256QAM) y análogamente con ROM_IMAG. Se puede observar además que las memorias presentan una latencia de 1. Esta latencia es posible a configurarla a valores mayores o iguales a 1. ADPSK La implementación del mapeo en ADPSK se basa en el mismo principio usado en el mapeo QAM, pero teniendo en cuenta, además, los siguientes factores: La magnitud y la fase se codifican por separado Existen dos tablas: una para la magnitud del símbolo y otra para la fase La fase, al tratarse de forma incremental, acarrea consecuencias debido a la aditividad del ruido numérico Una vez escogidas la magnitud y la fase a enviar, se debe conformar el símbolo nuevamente en coordenadas binómicas En la figura 9.10 se observa el bloque que se encarga de realizar todas estas tareas. Figura 9.10.: Mapeo ADPSK El sistema ADPSK cuenta con el mismo número de entradas que el bloque de mapeo QAM de la figura 9.8, a excepción de una entrada adicional enable, que tiene la función de indicar el momento en el cual los datos disponibles son válidos. Esta entrada en el mapeo QAM no es necesaria, ya que en este caso no hay necesidad de recordar el estado anterior de ninguna variable. En cambio, en ADPSK, debido a que la fase actual depende de la anterior, dicho mapeo requiere conocer el momento de inicio de los cálculos, como se mencionó en la sección 6.1. La operación realizada corresponde a la indicada en la ecuación 4.2.1, que se repite a continuación: θk = (θk−1 + ( 2π )bk ) M La fase inicial toma un valor nulo θ−1 = 0, pero podría tomar cualquier otro, mientras que el receptor lo conozca de antemano. 69 9. Esquema básico En la figura 9.11 se muestra el contenido del bloque ADPSK. Figura 9.11.: Subsistema de mapeo ADPSK 70 9. Esquema básico La parte superior del subsistema corresponde al mapeo de la magnitud del símbolo y la inferior, a la fase. Inicialmente, hay un bloque Mcode denominado Slicer, que se ocupa de dividir la palabra en dos subpalabras, según sugiere la figura 4.5. Para la magnitud, el procedimiento es similar al del sistema QAM: offset y tabla de mapeo. En cuanto a la fase, a partir de la subpalabra bk se obtiene un ángulo αk , correspondiente al mapeo uno a uno en la constelación. Lo que realmente se envía es la suma de esta fase αk con la fase θk−1 realizada en el bloque Mcode PhaseDiff. De esta forma, se obtiene la fase θk , se elige una dirección de mapeo y se guarda θk−1 ⇐ θk . Con la nueva dirección, se apunta a una nueva tabla de mapeo que contiene la fase en forma binómica (números complejos de módulo unitario). Para conformar el símbolo ADPSK se multiplica la magnitud por la fase θk , por medio de dos multiplicadores: uno para la parte real y otro para la imaginaria. Debido a la operación recursiva dada por la ecuación 4.2.1, se genera dentro del bloque PhaseDiff un ruido aditivo que causará un error en la detección cuando éste sea lo suficientemente grande. Para solucionar este problema, el bloque PhaseDiff realiza una tercera tarea que consiste básicamente en un proceso de detección mediante un premapeo de fase. Para entender mejor esta cuestión, se plantean las ecuaciones que se llevan a cabo. Primero, se obtiene θk de la siguiente manera: θk = (θk−1 + ( 2π )bk ) = (θk−1 + αk ) M Se empieza con una fase inicial θk−1 = θ−1 = 0 y αk toma el valor de un punto de la constelación αk = α0 . Esta operación produce θ˜1 = θ1 + η1 , donde η1 es el error de la operación debido a la precisión finita. Si se continúa con el proceso sin tener ninguna otra precaución, se obtiene θ˜2 = (θ˜1 + α2 ) = θ1 + η1 + α2 = θ2 + η1 + η2 θ˜3 = (θ˜2 + α3 ) = θ2 + η1 + η2 + α3 = θ3 + η1 + η2 + η3 .. .. .. . . . θ˜k = θk + k X ηi i=1 En algún momento, la sumatoria de ruido numérico ki=1 ηi excederá el umbral de decisión y se optará por enviar la fase del símbolo en forma errónea. Para evitar esto, se realiza una predetección que “limpia” la fase en cuestión. Si se denota por L[ ] a esta operación, lo que se obtiene es: P θ˜1 = θ1 + η1 L[θ˜1 ] = θ1 71 9. Esquema básico Lo cual elimina la acumulación de ruido, ya que se remueve ηk para todo k. En cuanto a la sincronización, la latencia debe ser igual en ambos recorridos: se fija una latencia de 2 clocks en la memoria ROM que mapea la magnitud, a fin de igualar los tiempos. La latencia total del conjunto es de 2 clocks y como la del camino QAM es unitaria, se agrega un delay de 1 clock a la salida para asegurar el sincronismo. En la figura 9.12 se observa esta corrección, donde también se muestra cómo se selecciona una constelación por medio de dos multiplexores, a través de una variable boolean. Se usan bloques Convert a la salida de los mapeadores con el objetivo de ajustar la precisión a lo exigido por el core de la IFFT (fix_S_(S-1)). Figura 9.12.: Mapeo QAM y ADPSK 72 9. Esquema básico 9.1.3. Adquisición de datos Para los propósitos de simulación los datos son generados mediante scripts de MATLAB y son insertados al sistema por medio de los tokens Gateway In. Los datos son almacenados en una memoria RAM de la capacidad adecuada y leídos por medio del bloque AdaptativeLoading a través de su salida address. En la figura 9.13 se puede ver la conexión entre dichos bloques. Figura 9.13.: Adquisición de datos El bloque AdaptativeLoading tiene la tarea de obtener los datos de la memoria RAM y proporcionarlos a la siguiente etapa en el tamaño de palabra especificado por carga. Dado que el tamaño de palabra de la memoria RAM es de 16 bits y las cargas disponibles son de 8, 4 y 2 bits, el bloque AdaptativeLoading tardará 2, 4 u 8 ciclos en realizar la siguiente lectura, respectivamente. La operación del bloque se resume en la sección 6.2. Cabe aclarar que este sistema es usado sólo para propósitos de simulación y en la implementación se usa otro esquema, como se verá más adelante. 9.2. Receptor En la figura 9.14 se ve un esquema del receptor realizado con bloques de System Generator: 73 9. Esquema básico Figura 9.14.: Esquema del receptor 74 9. Esquema básico En las siguientes secciones se describen las partes principales del receptor. El bloque FFT es totalmente análogo al de la IFFT, así que los resultados y configuraciones halladas conservan su aplicabilidad. 9.2.1. Remoción del prefijo Cíclico El prefijo cíclico es removido por medio del Mcode denominado CPR. Dado el valor de N y del prefijo L, se remueve la redundancia agregada, ya que en esta instancia es innecesaria. Adicionalmente, sincroniza los datos recibidos con el inicio de la FFT. 9.2.2. Compensación del factor de escalaje Luego de realizar la FFT hay que compensar el factor multiplicativo aplicado en el transmisor 9.1.1, como muestra la figura 9.1.1. Figura 9.15.: Compensación del factor de escalaje Si no hay problemas de saturación en ninguna parte de la línea y se dispone de un canal ideal, el factor multiplicativo aplicado confinará los datos a [−1; 1). Por la existencia de atenuación y amplificación en el canal, es necesario dar lugar al crecimiento numérico por encima de este rango de valores. 9.2.3. Ecualizador La etapa de ecualización se encarga de deshacer los efectos de la respuesta impulsiva del canal. Para su funcionamiento es necesaria una estimación de la respuesta en frecuencia del mismo. Con un prefijo cíclico adecuado y una estimación razonable del canal, es posible deshacer de manera sencilla su efecto sobre los datos, como se analizó en las sección 3.5. Dado un coeficiente de canal H(k), se debe multiplicar 1 para ecualizarlo correctamente. Desde el punto de vista de la el símbolo por H(k) implementación, se supone disponible una estimación de la respuesta en frecuencia del canal cuyos coeficientes son almacenados en dos memorias RAM. Lo que se almacena en las memorias no son directamente los coeficientes, sino factores que faciliten la operación. 75 9. Esquema básico A fines de efectuar la división de forma eficiente, se desarrolla la operación de división entre dos números complejos de la siguiente manera: a + jb (a + jb) (c − jd) (ac + bd) + j(bc − ad) = = c + jd (c + jd) (c − jd) cc + dd = a( d c d c ) + b( ) + jb( ) − ja( ) cc + dd cc + dd cc + dd cc + dd = aC1 + bC2 + j(bC1 − aC2 ) siendo C1 y C2 de la forma C1 = c cc + dd C2 = d cc + dd Expresándolos en términos de la respuesta en frecuencia del canal H(k), de los f datos corruptos en esa portadora D(k) y de los datos corregidos D(k), se obtiene C1 = < [H(k)] |H(k)|2 C2 = = [H(k)] |H(k)|2 h i h i h i h i f f < [D(k)] = < D(k) C1 + = D(k) C2 f f = [D(k)] = = D(k) C1 − < D(k) C2 Si se almacenan los coeficientes C1 y C2 en las memorias, solamente se deben efectuar 4 productos y 2 sumas para realizar la división compleja. Estos valores, en futuras versiones del trabajo, deberán ser suministrados por un algoritmo de estimación de canal. 76 9. Esquema básico En la figura 9.16 se pueden ver los bloques encargados de esta función. Las entradas x_re_in y x_im_in, corresponden a la salida de la FFT ya escalada. Figura 9.16.: Ecualizador en System Generator En la sección 10.6 se pueden apreciar los resultados obtenidos para una ecualización con distintos prefijos cíclicos, en algunos casos, insuficientes. 9.2.4. Detección Los detectores QAM y ADPSK difieren en la implementación de la misma forma que los respectivos mapeadores. El detector QAM posee una implementación lineal, mientras que el detector ADPSK requiere transformar los datos antes de poder decidir correctamente. 77 9. Esquema básico En la figura 9.17 se ven los dos detectores. El detector QAM consiste únicamente en un bloque Mcode que decide por regiones, utilizando comparadores, como se sugiere en la sección 6.6. Dispone de una entrada carga que permite la parametrización de la constelación. La entrada en indica el momento en que los datos son válidos, para proceder a su detección. Figura 9.17.: Detectores QAM y ADPSK ADPSK En el caso de la detección ADPSK, tal como se explicó en la sección 6.6, se necesita un conformador de símbolo que convierta las coordenadas binómicas a coordenadas polares, adecuadas para la decisión. En la figura 9.18, se observa el contenido del bloque detector ADPSK. Figura 9.18.: Subsistema detector ADPSK 78 9. Esquema básico Para transformar las coordenadas se usa el core CORDIC [11, 12], provisto dentro del toolbox de System Generator. A continuación se explica su principio de funcionamiento. CORDIC CORDIC (COordinate Rotation DIgital Computer) es un algoritmo simple y eficiente que sirve para calcular funciones trigonométricas e hiperbólicas. Las únicas operaciones que usa son adiciones, sustracciones, desplazamientos y operaciones con LUTs. La idea principal gira en torno a rotaciones de la fase de un número complejo, multiplicándolo por una sucesión de valores constantes. Sin embargo, las multiplicaciones son todas por potencias de 2, por lo tanto se pueden realizar por medio de desplazamientos; no se necesita un multiplicador real. Principio Los símbolos que se usan son: un número complejo: p = a + jb su versión rotada: pr = ar + jbr valor de rotación: r = x + jz Para sumar la fase de r a p, se multiplican entre sí; para sustraerla, se multiplica a p por el conjugado de r, r∗ = x − jz. Las partes real e imaginaria quedan de la siguiente forma, en el caso de la adición de fase: ar = ax − bz br = bx + az En sustracción: ar = ax + bz br = bx − az Para rotar la fase +90°, se multiplica por r = 0 + j1; para rotar -90°, se multiplica por r = 0 − j1. La operación queda entonces: pr = pr = (a + jb)(x + jz) = (a + jb)(0 ± j1) pr = ∓b ± ja Para rotar en fases menores a 90°, se multiplica por un número de la forma r = 1 + jK. K asume valores de potencias decrecientes de 2, es decir: 1, 21 , 14 . . .. La fase de r = 1 + jK es arctan(K), y la de r = 1 − jK es arctan(−K) = − arctan(K). Para sumar fase usamos r = 1 + jK y para restar r = 1 − jK. Entonces las operaciones quedan, en el caso de la adición: 79 9. Esquema básico ar = a − bK = a − b(2−L ) = a − (b L) br = b + aK = b + a(2−L ) = b + (a L) donde L es el exponente de la potencia de 2 y representa la operación de desplazamiento binaria. Para restar la fase, las operaciones quedan: ar = a + bK = a + b(2−L ) = a + (b L) br = b − aK = b − a(2−L ) = b − (a L) La siguiente tabla muestra, para distintos valores de L, los valores correspondientes de K, fase, magnitud y la ganancia CORDIC. L 0 1 2 3 4 5 6 7 ... K = 2−L 1,0 0,5 0,25 0,125 0,0625 0,03125 0,015625 0,007813 ... r = 1 + jK 1 + j1,0 1 + j0,5 0,25 0,125 0,0625 0,03125 0,015625 0,007813 ... arctan(K) 45,00000 26,5650 14,03624 7,12502 3,57633 1,78991 0,89517 0,44761 ... |r| 1,41421356 1,11803399 1,03077641 1,00778222 1,00195122 1,00048816 1,00012206 1,00003052 ... Ganancia CORDIC 1,414213562 1,581138830 1,629800601 1,642484066 1,645688916 1,646492279 1,646693254 1,646743507 ... Observaciones: Se puede ver que, empezando por 45°, los siguientes ángulos son un poco más que la mitad del valor anterior. La clave del algoritmo es acercarse al valor deseado por medio de aproximaciones sucesivas, sumando y restando, como si se tratara de una búsqueda binaria. La suma de la fase hasta L = 3 es aproximadamente 92°. Por lo tanto, se puede rotar hasta 90° si se realizan 4 o más operaciones de multiplicación con r / r∗ . Si se tiene en cuenta la posibilidad de rotar ángulos en ±90°, entonces, se pueden lograr rotaciones de ±180°. Cada rotación tiene una ganancia indeseable mayor a 1. La ganancia CORDIC en la última columna de la tabla se obtiene simplemente multiplicando la ganancia anterior con la actual. Este número converge a 1.647, aunque en realidad la ganancia depende del número de iteraciones realizadas; no depende de la suma o resta de fases porque la magnitud de un número es igual a la de su conjugado. 80 9. Esquema básico En particular, se usa la variante CORDIC ATAN, que entrega el módulo y la fase de un número complejo a partir de sus coordenadas binómicas. Para obtener la magnitud y la fase de un número complejo, se lo rota hasta que tenga fase cero. El valor que queda en ar es el módulo (afectado por la ganancia CORDIC) y la fase es la acumulación de todas las rotaciones hechas para llevarlo hasta fase cero. Es por esa razón que, según la hoja del fabricante, es necesario corregir el módulo por un factor multiplicativo, lo que se logra con un bloque CMult. En lo que respecta a la amplitud, se procede a su detección por regiones, de forma similar a la detección QAM. La operación anterior produce una subpalabra que se integrará con la palabra generada por el detector de fase. Esta tarea la realiza el bloque Concat, que es un Mcode parametrizado con la variable carga. La detección de fase se realiza haciendo la diferencia entre la fase entrante y la anterior. Como resultado se obtiene un número contenido en alguna región de la constelación y luego se decide la subpalabra enviada. La fase que se almacena para el próximo símbolo no es el resultado de la operación diferencia, sino el resultado de la detección. De esta manera, se elimina el ruido numérico que se acumula por las operaciones. 9.3. Sincronización y tiempos En esta sección se estudian en forma resumida las consideraciones tenidas en cuenta para lograr la sincronización de los datos y de las señales de control en el transmisor, en el receptor y entre ambos. La sincronización en el modelo de simulación difiere del de la implementación, ya que deben controlarse otros factores de lógica y sincronismo a la hora de sintetizar el sistema final. Por ahora, se restringe el análisis al modelo de simulación. 9.3.1. Transmisor El sincronismo en el transmisor está subordinado principamente a la latencia del core de la IFFT y a sus señales de control. La secuencia básica puede enumerarse de la siguiente manera: Se sube la señal start, para empezar a calcular la IFFT La señal rfd de la IFFT sube un ciclo después y exactamente 3 ciclos antes que la carga de datos en las entradas xk_re y xk_im. Dicha señal (rfd) es utilizada para darle inicio a AdaptativeLoading y al bloque de mapeo ADPSK El bloque AdaptativeLoading tiene una latencia de 1 clock, debido a la lectura de la memoria RAM El bloque de mapeo (QAM o ADPSK) dispone de una latencia de 2 clocks. Esto crea una latencia de 3 clocks hasta que los datos llegan a la entrada de la IFFT. 81 9. Esquema básico Cuando se inserta el prefijo cíclico, rfd baja. Luego, se detiene la lectura de datos 9.3.2. Receptor El sincronismo en el receptor está subordinado principalmente a la latencia del core de la FFT y a sus señales de control. La secuencia básica puede enumerarse de la siguiente manera: Sube la señal start, que entra en el bloque CPR La señal done se activa o no, dependiendo de la presencia del prefijo cíclico Se calcula la FFT con los datos provistos Cuando se completa el cálculo de la FFT, sube vout. Esta señal se utiliza para habilitar el ecualizador y los detectores Además, se utiliza xk_index para saber cuándo termina un bloque OFDM y resetear el mecanismo diferencial del detector ADPSK. 9.3.3. Sincronización entre transmisor y receptor Para los fines de este trabajo, el sincronismo entre el transmisor y el receptor es transparente, ya que no existen las etapas de conversión A/D y D/A ni las de up conversion y down conversion. Solamente se utiliza la señal vout para indicar la salida válida en la IFFT. Si se introduce un canal en la simulación, debe ajustarse el token delay, para introducir la latencia del mismo. El sincronismo en un sistema OFDM es un tema complejo y no será analizado en el presente trabajo. Existen varios estudios publicados que profundizan sobre esta cuestión [13, 14, 15]. 82 10. Simulaciones y resultados 10.1. Cascada IFFT/FFT Las simulaciones fueron efectuadas con System Generator y en la mayoría de ellas fue considerado como sistema base la cascada IFFT/FFT. En esta simulación se registran, para distintas precisiones del sistema, los valores de MSE entre IFFT/FFT (MSE IFFT/FFT ) y entre el mapeo y la detección (MSE Sistema). Además, se analiza el efecto de recortar la precisión de salida a 14 bits, simulando el efecto en la precisión que tendría un DAC con ese ancho de palabra. Figura 10.1.: MSE vs Precisión Observando el gráfico, se percibe una saturación en el MSE Sistema y MSE IFFT/FFT. Es posible fijar la precisión en 16 bits, poniéndola, por lo menos, un orden de magnitud por debajo del ruido del DAC/ADC. El BER se mantuvo en 0 (cero) para todas las iteraciones. 83 10. Simulaciones y resultados 10.2. Truncamiento vs redondeo convergente en IFFT/FFT Esta simulación permite observar el perfil de ruido numérico obtenido para el caso de truncamiento y de redondeo convergente en una cascada IFFT/FFT. En la figura 10.2, se puede apreciar que el redondeo convergente elimina el ruido numérico presente en el truncamiento, en las portadoras bajas. Por esta razón, se escogió el modo de redondeo para realizar la IFFT y la FFT. Figura 10.2.: Truncado vs redondeo convergente 84 10. Simulaciones y resultados 10.3. Precisión y factores de fase en IFFT/FFT Esta simulación permite obtener una mejor idea de la variabilidad del ruido numérico en una cadena IFFT/FFT, al cambiar la precisión de los factores de fase y las precisiones de los datos de entrada. Las curvas obtenidas, son las que muestra la figura 10.3. Figura 10.3.: Variación del MSE con precisiones de entrada y de factores de fase El propósito de estas curvas es doble: en primer lugar, dan una idea del ruido numérico presente con las precisiones especificadas. En segundo lugar, ayudan a la optimización de recursos, ya que el hecho de elegir una precisión de factores de fase excesiva no resulta en una ganancia en performance numérica, para una precisión de entrada determinada. 85 10. Simulaciones y resultados 10.4. Canal AWGN En el sigueinte gráfico se muestra la performance del sistema para un canal AWGN, obteniendo MSE y BER, en función de SNR del canal: Figura 10.4.: MSE vs SNR Canal Se observa en la figura 10.4 que el MSE disminuye exponencialmente a medida que aumenta la relación señal a ruido de 10 dB en 10 dB. En la simulación de la figura 10.5 se aprecia la interpolación de una curva de BER versus SNR del canal. Figura 10.5.: BER vs SNR Canal 86 10. Simulaciones y resultados 10.5. Ruido de banda angosta En este caso, se insertó ruido de banda angosta, que consiste en un tono senoidal entre dos tonos OFDM consecutivos. Lo que se observa en la figura 10.6 es el SER (Symbol Error rate) frente a la posición relativa del ruido. En los extremos el ruido se halla en la frecuencia de la portadora y en 0, 5 se encuentra exactamente en la frecuencia central entre los tonos. Figura 10.6.: SER vs ruido de banda angosta Es posible concluir que altos valores de SER son producidos cuando el ruido se encuentra posicionado en el centro de las dos portadoras y va disminuyendo a medida que se acerca a una de ellas. 10.6. Ecualización con distintos CPs Para comprobar la función del ecualizador (y la del prefijo cílico) se realizaron una serie de simulaciones que ilustran la relación entre el largo del canal y un CP adecuado. La respuesta impulsiva del canal usado fue: 0,1(e−0,007n h(n) = 0 + je−0,007n ) 0 ≤ n ≤ L − 1 para otro n El parámetro L toma los valores 300 y 400. Se muestran los resultados obtenidos antes y después de ecualizar. La constelación usada fue 8AD32PSK. 87 10. Simulaciones y resultados Figura 10.7.: Largo de canal: 400 CP:0 Figura 10.8.: Largo de canal: 300 CP:164 Figura 10.9.: Largo de canal: 400 CP: 268 88 10. Simulaciones y resultados Figura 10.10.: Largo de canal: 300 CP:532 Figura 10.11.: Largo de canal: 400 CP:532 Como conclusión, se observa que la función del ecualizador es fundamental en caso de no disponer de un canal ideal y siempre y cuando el prefijo cíclico sea suficiente para que se cumplan las condiciones estipuladas en la sección 3.5. 89 Parte V. Implementación 90 11. Plataforma de desarrollo 11.1. Características del kit de desarrollo Se referencian las características principales del kit de desarrollo utilizado: Figura 11.1.: Kit de desarrollo XUPV5-LX110T Nombre: XUPV5-LX110T1 IC: Xilinx Virtex®-5 XC5VLX110T 1 También se conoce como ML509, dado que pertenece a la serie ML50x de Xilinx 91 11. Plataforma de desarrollo Conectores: • USB (2) Host and Peripheral • PS/2 (2) Keyboard, Mouse • RJ-45 10/100/1000 Networking • RS-232 (Male) Serial port • Audio In (2) Line, Microphone • Audio Out (2) – Line, Amp, SPDIF • Video Input • Video (DVI/VGA) Output • Single-Ended and Differential I/O Expansion Xilinx XCF32P Platform Flash PROMs(2) 32 Mbyte cada una para almacenar configuraciones del dispositivo grandes Xilinx SystemACE Compact Flash 64-bit wide 256Mbyte DDR2 small outline DIMM (SODIMM) On-board 32-bit ZBT synchronous SRAM e Intel P30 StrataFlash Programmable system clock generator 16x2 character LCD, and many other I/O devices and ports 11.2. Herramientas de software Las herramientas de software principales usadas para la implementación fueron: Xilinx ISE Design Suite 10.1 - Project Navigator Modelsim XE 6.5 Con la herramienta de Xilinx se logra integrar las partes desarrolladas en System Generator y los segmentos de código VHDL, que son necesarios para las interfaces y la configuración final del FPGA. Además, permite programar el dispositivo luego de la sintesis y la implementación. El programa de simulación Modelsim puede ser invocado a través del Project Navigator y, por medio de un testbench adecuado, puede simular el comportamiento del sistema total o de algunas partes del mismo. Resulta de particular utilidad como paso previo a la configuración del FPGA, ya que se detectan errores lógicos en forma prematura, que de otra manera serían muy difíciles de detectar en el sistema sintetizado. 92 12. Implementación Una vez sintetizado el sistema con System Generator, es necesario proveerle conectividad con alguna fuente de datos, para comprobar su funcionamiento en la FPGA. El tipo de conexión escogido es Ethernet, por las siguientes razones: El kit cuenta con un chip Marvell 88e1111 10/100/1000 Ultra Gigabit Transceiver que se ocupa del nivel físico de Ethernet (Ethernet PHY) La FPGA en cuestión dispone de un core presintetizado1 en hardware, que implementa la capa MAC del nivel Ethernet (Ethernet MAC) Cualquier PC moderna dispone de una conexión Ethernet de alguna velocidad (10/100/1000), lo que facilita la compatibilidad Existe software gratuito para analizar lo que sucede en una conexión Ethernet a nivel bit (Wireshark, por ejemplo) En las siguientes secciones se analiza el desarrollo de dicha conexión con el módulo sintetizado en System Generator y las pruebas que se llevaron a cabo para validar el diseño. 1 Presintetizado quiere decir que forma parte de la FPGA en forma física, no como una entidad sintetizable 93 12. Implementación 12.1. Conexión del sistema La idea básica consiste en conectar el diseño a una PC como indica la figura 12.1, en donde se observan las partes que constituyen la interfaz. Dentro de la FPGA, se crea una instancia del core TEMAC, encargado de proporcionar las funciones de este nivel Ethernet. El kit cuenta con un chip Marvell encargado de la capa física Ethernet, conectado adecuadamente a un RJ-45. Figura 12.1.: Conexión con PC Para verificar el funcionamiento de los distintos módulos en forma gradual, se divide la implementación en tres etapas consecutivas, donde cada una depende del funcionamiento de la anterior. Es decir, únicamente se avanza a la siguiente etapa habiendo garantizado el correcto funcionamiento de la anterior. Las etapas y las respectivas pruebas son: Nivel MAC. Se realiza un loop a nivel cliente, a fin de verificar la transmisión y la recepción a nivel PHY y MAC de Ethernet Lógica intermedia. Esta etapa actúa como front end para simplificar la conexión al enlace Ethernet. Se realiza un loop a este nivel para comprobar el correcto funcionamiento Conexión del módem. Se conecta el sistema creado en System Generator a la etapa anterior y se realiza un loop a este nivel para comprobar el correcto funcionamiento A continuación, se describe en detalle la configuración del core TEMAC, su conexión con el nivel PHY y con el módem. 94 12. Implementación 12.1.1. Nivel MAC El nombre del core utilizado es: Virtex5 Embedded Tri-mode Ethernet MAC Wrapper. Al ser un tipo de core Wrapper, se instancia no sólo el núcleo del dispositivo, sino todo un conjunto de lógica adicional que permite ponerlo en marcha, facilita su configuración y es útil en la mayoría de los diseños. Como se observa en la figura 12.2 siguiente, el core cuenta con muchos puertos (además de muchos parámetros de configuración) y es necesario estudiar las capacidades que posee y cómo ajustarlas al proyecto actual. 95 12. Implementación Figura 12.2.: Core TEMAC 96 12. Implementación Las principales características del módulo se listan a continuación: Permite la selección de una o dos MACs (EMAC0 o EMAC1) Provee capacidad de conexión a distintas interfaces físicas: MII, GMII, RGMII, SGMII y1000BASE-X PCS/PMA Posee un ejemplo para realizar una prueba de loopback a nivel cliente Velocidad: Tri-Speed: 10/100/1000 Mbps autonegociable con host Full Duplex Soporta Frame Pause para control de flujo Cumple con especificación IEEE 802.3-2002 IFG (Interframe Gap) configurable Auto Padding en transmisión y Auto stripping en recepción Realiza FCS en recepción y transmisión e informa el resultado En este caso, se usa una conexión Tri-Speed 10/100/1000 Mbps y GMII como interfaz física. Para probar la funcionalidad del nivel MAC, se dispuso de un loop, como muestra la figura 12.3 Figura 12.3.: Loop Ethernet 97 12. Implementación En la figura se muestran los sistemas que se encuentran en el interior de la FPGA. Como se puede observar, además de producir el core MAC, se crean instancias de FIFOs de transmisión y de recepción. El tamaño de las FIFOs es un parámetro de diseño y está configurado en forma predeterminada en 4 kilobytes. También posee un generador de clocks, que provee los relojes de transmisión y recepción (necesarios para la capa física) y un reloj para implementar delays internos, útiles en el sincronismo. El módulo Swap intercambia las direcciones source y destination y envía los datos nuevamente a la interfaz MAC. Este módulo, una vez probada la funcionalidad a nivel MAC, se reemplaza por el nivel físico constituido por el módem OFDM. Consideraciones generales Con la unidad de loopback ya sintetizada, es necesario brindarle conectividad con el exterior y funcionalidad, mediante los clocks adecuados. Esto se realiza instanciando una entidad superior que: Presente las conexiones correspondientes con los pines físicos del FPGA Instancie la lógica de clock adecuada (DCMs, buffers, etc) Enmascare los pines que no son usados Además, es necesaria una lista de Constraints que especifique la ubicación de los puertos de la entidad en relación con los pines de la FPGA y las consideraciones de tiempo y de área a tener en cuenta. Las herramientas de simulación permiten verificar el funcionamiento a nivel lógico de las entidades creadas. Un testbench es una entidad especial creada para fines de simulación. Su objetivo es instanciar a las entidades bajo prueba, proporcionar estímulos (señales de entrada) y verificar su comportamiento (señales internas y de salida). Dado que es una prueba de nivel superior, es recomendable hacerla antes de programar el dispositivo en hardware, ya que es sencillo detectar errores a nivel lógico en esta etapa. Es posible, además, simular en forma jerárquica las diferentes entidades del sistema, lo que permite aislar los errores encontrados en cada una de ellas. El software de simulación utilizado fue el ModelSim provisto por Mentor Graphics, en la distribución de Xilinx. 98 12. Implementación Una vez creado el archivo de programación y configurado el FPGA mediante el software iMPACT, se debe comprobar la funcionalidad del sistema generado. Se utiliza el software WireShark, que facilita el análisis a nivel físico de lo que sucede en el enlace Ethenet. En la figura 12.4 se observa una captura con el detalle del encapsulado Ethernet. Figura 12.4.: Captura de Wireshark Mediante Wireshark, se intenta verificar la funcionalidad del loop . Para enviar los paquetes de ejemplo, se usa un software llamado nemesis, que corre bajo Linux. Es una aplicación de línea de comando que, entre otras cosas, permite mandar paquetes Ethernet sin necesidad de utilizar la cabecera IP (raw Ethernet Packets). Para las pruebas, no es preciso contar con los mecanismos de networking provistos por los niveles superiores. 99 12. Implementación Clocking El esquema de sincronismo básico se puede observar en la figura 12.5. Como se aprecia, existen dos clocks para el nivel físico (TX clock to PHY y RX clock from PHY ) y dos que comunican con la interfaz cliente (TX client clock y RX client clock). Figura 12.5.: Conexiones de los clocks del nivel MAC Por otro lado, se requieren dos clocks adicionales: MII_TX_CLK y GTXCLK. El primero lo provee el nivel PHY y el segundo debe generarlo un circuito externo. Por esa razón, se utiliza un DCM (Digital Clock Manager) para sintetizar los clocks requeridos a partir de un cristal provisto en el kit. Además de GTXCLK, se debe suministrar un clock de referencia, CLKREF, indispensable para los buffers del FPGA. GTXCLK es de 125Mhz y CLKREF de 200Mhz en este caso. El cristal utilizado oscila a una frecuencia de 100Mhz. El clock de 125MHz (y sus divisores por 10, 12.5MHz y 1.25Mhz) se usa con el fin de obtener las velocidades de transmisión y recepción del enlace: 1Gbps = 125 Mhz . 8 bits 100Mbps = 12.5Mhz . 8 bits 10 Mbps = 1.25Mhz . 8 bits 100 12. Implementación 12.1.2. Lógica intermedia En esta etapa se agrega lógica para lograr una comunicación sencilla con el enlace Ethernet, creado en la etapa anterior. En la figura 12.6 se encuentran los bloques que fueron agregados en este segundo paso de implementación. Figura 12.6.: Lógica intermedia El objetivo es crear una interfaz de escritura y lectura versátil para poder conectar sistemas como el diseñado con System Generator o de otras características. La unidad Frame Out se encarga de remover la cabecera Ethernet antes de escribir en la FIFO de lectura. Es decir, a partir del mensaje Ethernet entregado por el nivel MAC, se obtiene el payload de dicha trama. Si la FIFO de lectura se encuentra llena (con su indicador de full en alto), los datos enviados se descartarán. En la figura 12.7 se observa un paquete Ethernet con sus campos. Figura 12.7.: Trama Ethernet El campo de datos puede ser de hasta 1500 bytes, según el estándar Ethernet. La unidad Frame In toma los datos de la FIFO de escritura y ensambla parte del encabezado Ethernet para transmitirlo a la unidad MAC. Se deben insertar tres parámetros: dirección destino, dirección fuente y largo/tipo. Estos campos, en una primera aproximación, se implementaron en forma fija, o sea, hard-coded. Si la FIFO de escritura se encuentra vacía, con su indicador de empty en alto, no se transmiten tramas. Si el indicador de empty se pone en alto en medio de una operación de lectura, se cierra el mensaje y se agrega el padding, según corresponda. Las unidades FIFO fueron creadas con el core FIFO Generator v4.4 provisto por Xilinx. La arquitectura permite poseer dominios de clocks independientes en lectura y 101 12. Implementación escritura. El tamaño es un parámetro de diseño y fue configurado como 64kB. El loop simplemente actúa como mecanismo de reenvío si hay datos en la FIFO de lectura. 12.1.3. Conexión del módem La última etapa consiste en conectar el sistema diseñado en System Generator a la interface de lectura/escritura creada en código VHDL. Como se había aclarado anteriormente, el modelo en System Generator para simulación difiere levemente del usado en la implementación. Los cambios apuntan fundamentalmente a la conexión con la interfaz de lectura de datos. Hay varios factores que afectan al sincronismo en la lectura de datos: Si hay datos, debe armarse un símbolo OFDM leyendo las palabras en forma sincronizada con la adquisición de las mismas por medio de la IFFT Si los datos son insuficientes para un símbolo completo, debe generarse un padding que rellene el símbolo hasta completarlo En caso de enviar el prefijo cíclico, debe cesar la lectura en esos instantes Con carga variable, la lectura debe hacerse con latencias diferentes La combinación de estos efectos, en particular el de carga variable, requiere de una lógica de lectura adecuada y versátil, que no puede ser resuelta de forma eficiente por una máquina de estado. Un microcontrolador embebido que conjuntamente realice las tareas de control con el periférico Ethernet, parece ser una solución escalable y deseable. Además, en futuros diseños, gobernar y sincronizar las diferentes partes sugiere la utilización de un circuito central para comandar el sistema. En el modelo de implementación actual, la carga se mantuvo constante y todos los demás parámetros son gobernados por un Mcode llamado sincro, como muestra la figura 12.8. 102 12. Implementación Figura 12.8.: Transmisor orientado a síntesis 103 12. Implementación Adicionalmente, se introdujo la lógica necesaria que reemplaza al bloque Mcode AdaptativeLoading, usado en el sistema de simulación. Una vez sintetizado el subsistema con el token System Generator y las opciones correspondientes (en particular, con Multirate implementation en Expose Clocks Ports), se coloca la unidad como una “caja negra” dentro del sistema creado en la etapa anterior. La figura 12.9 ilustra la ubicación del nuevo subsistema en el diseño completo. Figura 12.9.: Sistema final con subsistema de System Generator Al funcionar esta última parte, se garantiza que todos los componentes internos del sistema funcionan correctamente y se verifica la integridad del diseño. 104 Conclusiones Durante el desarrollo del sistema, se introdujo poco a poco el problema, hasta entenderlo y poder delimitar así los alcances y objetivos del presente trabajo. Acercarse de forma gradual al desafío de diseño permite descubrir y dejar en evidencia numerosos factores que son fundamentales a la hora de tomar decisiones que afectarán al sistema a desarrollar. Se concluye que las herramientas utilizadas ayudaron en gran medida a comprender dichos problemas y suministraron, además, suficiente resguardo de cuestiones físicas relativas al dispositivo o a problemas en la lógica de bajo nivel. De esta manera, es posible tomar decisiones a nivel sistema sin tener que preocuparse, en principio, por detalles que apuntan a una optimización del diseño sintetizado. Es cierto que un acercamiento de este modo, recayendo sobre arquitecturas preensambladas, deja de lado el costoso trabajo de optimizar los recursos utilizados y de obtener una implementación óptima. Si bien la lógica provista por el fabricante está diseñada para funcionar eficientemente en sus propios dispositivos, una implementación que busca la optimización de los recursos no sólo explora el ámbito lógico local, sino también el sistema a nivel global. Más allá del enfoque tomado, las FPGAs demuestran ser dispositivos capaces de una amplia variedad de proyectos que demanden complejidad y velocidad, puesto que proveen suficientes grados de libertad para permitir diversas soluciones y configuraciones. Esto es precisamente su principal característica y es la razón por la cual los fabricantes desarrollan potentes softwares que posibilitan trabajar en un proyecto a distintos niveles de abstracción. El desarrollo realizado permitió, por sobre todas las cosas, pasar de una visión ideal de un sistema de comunicaciones a una visión experimental y real que revela desafíos no visibles desde el nivel conceptual. Dado que OFDM representa un sistema de modulación altamente configurable, el diseño fue realizado pensando en futuras etapas que completen y expandan la idea original. Si bien se toman referencias en cuanto a los parámetros de modulación, es fácilmente adaptable a otros proyectos, con otras especificaciones. La facilidad de parametrización es otra de las ventajas de trabajar a alto nivel. Al formar parte de un trabajo que participa como pieza de un diseño de mayor tamaño, surge la necesidad de organizarse grupalmente y definir los límites y objetivos de cada parte. El trabajo adquirió desde un principio este tipo de esquema y fomentó la división de tareas, así como la organización grupal e individual. 105 Bibliografía [1] IEEE P1901™ Broadband Over Power Lines Standard, 2010 [2] The OPERA Consortium, “First Draft of the OPERA specification version 2”, 2007 [3] Matthias Gotz, Manuel Rapp and Klaus Dostert, “Power line channel characteristics and their effect on communication system design” IEEE Commun., Magazine, pp78-85, Apr 2004. [4] Weinstein, S.B., Ebert P.M. "Data Transmission By Frequency Division Multiplexing Using the Discrete Fourier Transform." IEEE Trans. Commun., Oct 1971; COM-19; 5: 628-634} [5] Robert M. Gray, “Toeplitz and Circulant Matrices: A review,” Department of Electrical Engineering, Stanford University, 1971. [6] Holger Philipps, “Modelling of Powerline Communication Channels”,. IEEE ISPLC, pp. 14 – 21, 1999. [7] Cooley, James W., and John W. Tukey, 1965, "An algorithm for the machine calculation of complex Fourier series," Math. Comput. 19: 297–301. [8] Y. Shen and E. F. Martinez. “Channel Estimation in OFDM Systems,” AN3059, Freescale Semiconductor, Inc., Jan. 2006. [9] Y. (Geoffrey) Li, "Pilot-symbol-aided channel estimation for OFDM in wireless systems," IEEE Transactions on Vehicular Technology, vol. 49, July 2000. [10] Fast Fourier Transform v5.0, Product Specification, DS260, October 2007. [11] Jack E. Volder, The CORDIC Trigonometric Computing Technique, IRE Transactions on Electronic Computers, pp330-334, September 1959 [12] Yu Hen Hu, "CORDIC-Based VLSI Architectures for Digital Signal Processing," IEEE Signal Processing Mag., 1992, pp. 16-35 [13] J.-J. van de Beek, P. O. Börjesson, M.-L. Boucheret, D. Landström, J. Martinez Arenas, P. Ödling, C. Östberg, M.Wahlqvist, and S. K.Wilson, “A time and frequency synchronization scheme for multiuser OFDM,” IEEE J. Select. Areas Commun., vol. 17, pp. 1900–1914, Nov. 1999. 106 Bibliografía [14] E. Bala and L.J. Cimini, Jr. “On the uplink synchronization of OFDMA system,” in Proc. IEEE Military Communications Conference 2005, Oct. 2005. [15] J. Maya y C. Galarza “Problemas de Sincronismo en UWB-OFDM” Facultad de Ingeniería de la Universidad de Buenos Aires, 2009, Febrero. [16] Virtex-5 FPGA Embedded Tri-Mode Ethernet MAC User Guide [ug194.pdf] [17] Virtex-5 FPGA Embedded Tri-Mode Ethernet MAC Wrapper Getting Started Guide [ug340.pdf] [18] Virtex-5 FPGA Embedded Tri-Mode Ethernet MAC Wrapper Product Specification [ds550.pdf] 107