Вы находитесь на странице: 1из 156

UNIVERSIDAD PRIVADA ANTENOR ORREGO

FACULTAD DE INGENIERIA PROCESAMIENTO DIGITAL DE SEALES IMPLEMENTANDO HPRC

TESIS PARA OPTAR EL TITULO PROFESIONAL DE INGENIERO ELECTRNICO

TESISTAS: - BR. JORGE LUIS GONZLEZ REAO - BR. NELSON ENRIQUE YALTA SOPLIN

ASESOR: - ING. KALUN JOS LAU GAN TRUJILLO PERU 2009

TTULO: PROCESAMIENTO DIGITAL DE SEALES IMPLEMENTANDO HPRC AUTORES: Br. Jorge Luis Gonzlez Reao Br. Nelson Enrique Yalta Soplin APROBADO POR:

Ing. Oscar Morales Gonzaga PRESIDENTE

Ing. Marco Trujillo Silva SECRETARIO

Ing. Luis Gutirrez Magan VOCAL

Ing. Kalun Jos Lau Gan ASESOR

III

DEDICATORIA

A Manuela y Alfonso. Jorge

Dedicado a un grupo de amigos importantes guiados por Carlos y Lissetti, que cambiaron mi vida, y que pueden generar grandes cambios en el Futuro. A mis Padres que me dan la fuerza y el apoyo. Y a una chavita muy especial por su amistad. Nelson

IV

AGRADECIMIENTOS

Agradezco a mis padres, a mi mam Mila, a mi ta Pelu, Lore y Chris por caminar siempre conmigo; a todos mis familiares y amigos por el apoyo y las risas. Jorge

Agradecer a mi Abuelita Delicia por su apoyo incondicional en todo este tiempo, a mi familia, mis tos, primos y abuelitas que me acompaan y siempre me aconsejan. Nelson

INDICE GENERAL

1.

INTRODUCCION .............................................................................................................................. 1 1.1. ANTECEDENTES...................................................................................................................... 3 1.2. ANLISIS Y FORMULACIN DEL PROBLEMA ................................................................. 3 1.2.1. PRESENCIA DE BENEFICIOS SIMILARES AL USO DE FPGAS SOLAMENTE ...... 3 1.2.2. REDUCCION DE TIEMPO DE DISEO EN COMPARACIN A USAR EXCLUSIVAMENTE FPGAS ........................................................................................................... 4 1.2.3. DISEO EMPLEANDO LENGUAJE C ............................................................................ 4 1.3. HIPTESIS ................................................................................................................................ 5 1.4. OBJETIVOS DE LA TESIS ....................................................................................................... 5 1.4.1. OBJETIVOS GENERALES ............................................................................................... 5 1.4.2. OBJETIVOS ESPECIFICOS ............................................................................................. 5 1.5. RESUMEN DESCRIPTIVO ...................................................................................................... 6

2.

FUNDAMENTO TERICO .............................................................................................................. 7 2.1. MARCO TEORICO ................................................................................................................... 8 2.1.1. FPGA .................................................................................................................................. 8 2.1.1.1. Qu es un FPGA? .............................................................................................................. 8 2.1.1.2. Fabricantes FPGA ............................................................................................................... 9 2.1.1.3. Arquitectura general de un FPGA ...................................................................................... 12 2.1.1.4. Fortalezas y Debilidades de los FPGAs ............................................................................. 22 2.1.2. HPRC ................................................................................................................................ 26 2.1.2.1. Computacin Reconfigurable ............................................................................................. 26 2.1.2.2. Procesamiento Paralelo ..................................................................................................... 29 2.1.2.3. Arquitectura RC ................................................................................................................. 36 2.1.2.4. Porqu usar Computacin Reconfigurables para DSP? ................................................... 41 2.1.3. FILTROS FIR ................................................................................................................... 47 2.1.4. COMPILADORES C PARA ARQUITECTURAS RECONFIGURABLES ...................... 51 2.1.4.1. Plataformas FPGA ............................................................................................................. 51 2.1.4.2. Programas de Sntesis ........................................................................................................ 56 2.1.4.3. De C a FPGA ..................................................................................................................... 60

3.

METODOLOGIA PARA LA SOLUCION DEL PROBLEMA...................................................... 62 3.1. HERRAMIENTAS EMPLEADAS .......................................................................................... 63 3.1.1. IMPULSE C CoDeveloper ................................................................................................ 63 3.1.2. XILINX ISE ...................................................................................................................... 66 3.1.3. MATLAB ........................................................................................................................... 67 3.1.4. DIGILENT SPARTAN 3E STARTER BOARD ................................................................ 68 3.2. PROYECCIN DE COSTOS .................................................................................................. 69 3.3. TECNICA DE DISEO TOP-DOWN ..................................................................................... 70 3.4. PROGRAMACION ESTRUCTURADA ................................................................................. 71 3.5. DISEO DE UN FILTRO FIR EN MATLAB ......................................................................... 73 3.6. FIR256 Y FIR_ACCELERATED ............................................................................................ 78

VI

4. 5. 6. 7. 8. 9.

RESULTADOS ............................................................................................................................... 108 DISCUSION: PRUEBA DE LA HIPOTESIS ................................................................................ 121 CONCLUSIONES ........................................................................................................................... 125 RECOMENDACIONES ................................................................................................................. 128 REFERENCIAS BIBLIOGRAFICAS ........................................................................................... 130 PAGINAS COMPLEMENTARIAS ............................................................................................... 134 ANEXO 1 ............................................................................................................................................. 135 ANEXO 2 ............................................................................................................................................. 136 ANEXO 3 ............................................................................................................................................. 137 ANEXO 4 ............................................................................................................................................. 138 ANEXO 5 ............................................................................................................................................. 139 ANEXO 6 ............................................................................................................................................. 140 ANEXO 7 ............................................................................................................................................. 141 ANEXO 8 ............................................................................................................................................. 142

VII

INDICES COMPLEMENTARIOS INDICE DE FIGURAS


Figura 1 - Ncleo FPGA Altera ........................................................................................................11 Figura 2- Arquitectura general de un FPGA [5]................................................................................12 Figura 3 - Estructura de un bloque lgico [5]. .................................................................................13 Figura 4 - Estructura de una LUT de n entradas [5]. ........................................................................14 Figura 5 - Estructura de un CLB [5]. .................................................................................................15 Figura 6 - Lgica de acarreo [5]. ......................................................................................................18 Figura 7 - Multiplicadores embebidos prximos a los bloques de RAM [5]. ...................................20 Figura 8 - Distribucin de la seal de reloj dentro de un FPGA [5]. .................................................21 Figura 9 - Multiple clock domains [5]. .............................................................................................22 Figura 10 Arreglo Lgico Reconfigurable Splash 2[1]. ..................................................................28 Figura 11 - Digital Equipment Corporations PAM Perle-0 [1]. ........................................................29 Figura 12 - Una Palabra de Instruccin VLIW [1]. ............................................................................30 Figura 13 - Co-procesador SSE [1]. ..................................................................................................31 Figura 14 - Una Instruccin RC [1]. ..................................................................................................32 Figura 15 - Process Level Parallelism [1]..........................................................................................33 Figura 16 - Thread Level Parallelism [1]...........................................................................................33 Figura 17 - Client Server Model [1]. .................................................................................................34 Figura 18 - Stream Comunication [1]...............................................................................................35 Figura 19 - Adquisicin de la Data [1]. .............................................................................................36 Figura 20 - Placa FPGA E/S Genrica [1]. .........................................................................................37 Figura 21 - Matriz FPGA masivamente paralela [1]. ........................................................................38 Figura 22 - Supercomputador Reconfigurable SRC [1]. ...................................................................39 Figura 23 - NAPA 1000 [1]. ..............................................................................................................41 Figura 24 - Implementacin de un FIR simple [2]. ...........................................................................42 Figura 25 - Implementacin de un FIR altamente segmentado (4 Taps) [2]. ...................................42 Figura 26 - Esquema del Buffer Lineal [6]. .......................................................................................50 Figura 27 - Movimiento de datos en un buffer circular [6]. .............................................................50 Figura 28 - Soft processor dentro de un FPGA junto a otros IP (Intellectual Property) cores [12]. .52 Figura 29 - Arquitectura DLX RISC de acuerdo al modelo de D.A.Patterson, J.L. Hennessy publicado en 1996 [13]. ...................................................................................................................................53 Figura 30 - Usos de impulse C [10]. .................................................................................................64 Figura 31 - Flujo de una aplicacin de proceso a proceso con acceso a memorias compartidas [3]. ........................................................................................................................................................65 Figura 32 - Logo del ISE Design Suite de Xilinx.................................................................................67 Figura 33 - Herramienta BSB Wizard del Xilinx Platform Studio. .....................................................67 Figura 34 - Logo de Matlab ..............................................................................................................68 Figura 35 - Tarjeta Digilent Spartan 3E Starter Board Rev. D usada en la implementacin. ............69 Figura 36 - Representacion de un diseo TOP-DOWN. ...................................................................71 Figura 37 Ejemplo de un Programacin Estructurada ..................................................................71

VIII

Figura 38 - Esquema Filtro FIR .........................................................................................................73 Figura 39 - Seal de Entrada (double) .............................................................................................74 Figura 40 - Seal de Entrada (fixed point) .......................................................................................75 Figura 41 - Diagrama de Flujo Filtro FIR ..........................................................................................76 Figura 42 - Seal de Salida y(n) (double) .........................................................................................77 Figura 43 - Seal de Salida y(n) (fixed point) ...................................................................................77 Figura 44 - Respuesta en Frecuencia Filtro Fir .................................................................................77 Figura 45 - Capas de representacin en fixed point. [9] ..................................................................78 Figura 46 - Funcionamiento de FIR256 por bloques. ......................................................................79 Figura 47 - For para el llenado del array coef ................................................................................80 Figura 48 - For para el llenado del array firbuffer .........................................................................81 Figura 49 - Funcionamiento de FIR256 ............................................................................................82 Figura 50 - Funcionamiento FIR_ACCELERATED en bloques. ...........................................................83 Figura 51 - Macro fxmul32, usando la macro de Impulse C FXMUL16 definido FRACBITS=23 en FIR_ACCELERATED. ..........................................................................................................................84 Figura 52 - Implementacion de punteros para buffer circular .........................................................85 Figura 53 - Consola de Mensajes .....................................................................................................86 Figura 54 - Menu Opciones de Impulse C Compiler ........................................................................87 Figura 55 - Menu Generacin de HDL .............................................................................................87 Figura 56 - Consola de Errores ........................................................................................................87 Figura 57 - Menu Exportacin de HDL .............................................................................................88 Figura 58 - Menu Abrir Proyecto Xilinx Platform Studio ..................................................................88 Figura 59 - Menu Proyecto Nuevo empleando el Wizard ................................................................89 Figura 60 - Menu Guardar, Xilinx Platform Studio ...........................................................................89 Figura 61 - Bienvenida al Menu Constructor ...................................................................................90 Figura 62 - Seleccin de la Tarjeta a emplear ..................................................................................90 Figura 63 - Seleccin del Sistema de Procesamiento.......................................................................91 Figura 64 - Configuracin del Procesador........................................................................................91 Figura 65 - Configuracin de los perifricos ....................................................................................92 Figura 66 - Configuracin del puerto RS232 ....................................................................................92 Figura 67 - Configuracin del mdulo Timer ...................................................................................93 Figura 68 - Configuracin de la Memoria Cach..............................................................................93 Figura 69 - Configuracin de la Aplicacin ......................................................................................94 Figura 70 - Finalizacin de la Creacin del Proyecto .......................................................................94 Figura 71 - Bus Interfaces ................................................................................................................95 Figura 72 - Aadiendo una IP ..........................................................................................................95 Figura 73 - Configurando la IP .........................................................................................................96 Figura 74 - Microblaze .....................................................................................................................96 Figura 75 - Configuracin del Microblaze ........................................................................................97 Figura 76 - Configuracin del fsl_filt_0 ............................................................................................97 Figura 77 - Configuracin de los Relojes .........................................................................................97 Figura 78 - Configuracion de la IP ....................................................................................................98 Figura 79 - Configuracin del Reloj..................................................................................................98

IX

Figura 80 - Sumario de los Puertos ..................................................................................................99 Figura 81 - Configuracin del fls_filt_0 ............................................................................................99 Figura 82 - Ventana de Direcciones .................................................................................................99 Figura 83 - Ventana de Mensajes de Consola ................................................................................100 Figura 84 - Generacion del BitStream............................................................................................100 Figura 85 - Construccin de la Aplicacin de Usuario....................................................................100 Figura 86 - Actualizacin del bistream. .........................................................................................101 Figura 87 - Agregar aplicacin de software al proyecto. ...............................................................101 Figura 88 - Insertar nombre a la aplicacin de software. ..............................................................102 Figura 89 - Agregar source y header files. .....................................................................................102 Figura 90 - Archivos Source dentro de la carpeta code. ................................................................103 Figura 91 - Archivos header dentro de la carpeta Code. ..............................................................103 Figura 92 - Construccin del proyecto de usuario. .......................................................................104 Figura 93 - Generacin del linker script. .......................................................................................104 Figura 94 - Ventana de opciones del Linker Script.........................................................................104 Figura 95 - Segunda compilacin del proyecto de usuario. ...........................................................104 Figura 96 - Seleccin de la aplicacin de arranque en BRAMs para microblaze. ..........................105 Figura 97 - Tercera actualizacin del bitstream.............................................................................105 Figura 98 - Iniciar la descarga del bitstream a la plataforma. .......................................................105 Figura 99 - Opciones JTAG. ............................................................................................................106 Figura 100 - Configuracin en hyperterminal para la comunicacin con la plataforma. ..............106 Figura 101 - Inicio de la consola XMD. ..........................................................................................106 Figura 102 - Diagrama de bloques del filtro FIR256 obtenido al simular en CoDeveloper mediante el Application Monitor. .................................................................................................................109 Figura 103 - Test consumer en funcionamiento del filtro FIR256. .................................................109 Figura 104 - Filter process en funcionamiento del filtro FIR256. ...................................................110 Figura 105 - Test producer en funcionamiento del filtro FIR256. ..................................................110 Figura 106 - DataflowGraph (DFG) del filtro FIR256. .....................................................................111 Figura 107 - Grfica en MATLAB con acercamiento, donde estn ploteados los valores obtenidos con CoDeveloper y los obtenidos al implementar un FIR en MATLAB. .........................................111 Figura 108 - Grfica en MATLAB, donde estn ploteados los valores obtenidos con CoDeveloper y los obtenidos al implementar un FIR en MATLAB. ........................................................................112 Figura 109 - Ventana de Matlab con mensaje del Tiempo de Procesamiento ..............................112 Figura 110 - Consola XMD al correr la aplicacin del FIR creada para Microblaze. .......................113 Figura 111 - Registro log de la consola XMD al correr la aplicacin del FIR creada para Microblaze. ......................................................................................................................................................118 Figura 112 - Ventana de Hyperterminal recibiendo datos del puerto RS232 DCE de la tarjeta Spartan. .........................................................................................................................................119 Figura 113 - Seal de Error ............................................................................................................119 Figura 114 - Mensaje de valor de Error .........................................................................................119 Figura 115 - Comparacin de los Tiempos de Procesamiento .......................................................127 Figura 116 - Comparacin de los Factores de Aceleracin ............................................................127

INDICE DE TABLAS

Tabla 1 - Comparativa Cualitativa de Tecnologas de Implementacin DSP [2]...............................44 Tabla 2 - C para compiladores de Diseo VLSI desarrollados hasta el momento ............................58 Tabla 3 - Caractersticas de la Tarjeta Digilent Spartan ...................................................................69 Tabla 4 - Precios de herramientas a utilizar en un diseo. ..............................................................70 Tabla 5 - Comparacin de Resultados ...........................................................................................120

XI

RESUMEN

La presente investigacin se realizo con el objetivo de estudiar y conocer el diseo implementando sistemas de procesamiento de seales HPRC usados para incrementar la velocidad del procesamiento y escalabilidad, manteniendo el bajo costo y alto desempeo puesto que al manipular seales representadas bajo secuencias de nmeros computables, resulta complicado o demanda excesivo tiempo en diseo hacerlo en sistemas con funciones especficas. Correspondiendo a la primera parte de este trabajo el marco terico de funcionamiento en sistemas HPRC y a la segunda parte la implementacin de una aplicacin base que demuestre los beneficios en forma observable.

Para lograr nuestro objetivo implementamos dos aplicaciones correspondientes a un filtro FIR, con la primera se logr aprender el funcionamiento y uso de las herramientas mediante simulacin. La segunda aplicacin estuvo basada en la primera, considerndose la misma aplicacin pero acelerada la cual nos permiti obtener el factor de tiempos para realizar una comparacin de desempeo.

Partiendo de los resultados obtenidos en las dos aplicaciones, se lleg a la conclusin de que los sistemas propuestos satisfacen a las expectativas de los objetivos.

XII

ABSTRACT

The present investigation was conducted with the main purpose of study and bring forward the HPRC digital process design which is used to increase processing speed and scalability, maintaining the low cost and exposing high performance because it results very difficult to achieve or take excessive design time in specific functions systems when it have to manipulate long signals represented under computable number sequences. Corresponding to the first part of this work the theory about operation of HPRC systems and the second part is about implementing a basic application to observe and demonstrate HPRC benefits.

To achieve our goal we implemented two applications corresponding on a FIR filter structure where the first was used to learn and comprehend its operation thru simulation. The second application was based on the first, considered to be the same application but accelerated with which we obtained the accelerator factor of times to compare performance.

Based on results obtained from these two applications, we concluded that the proposed systems meet the proposed objectives expectations.

XIII

1. INTRODUCCION

El procesamiento digital de seales conocido como DSP 1 est actualmente involucrado en muchas reas como son el campo biomdico, tratamiento de audio y video, seguridad militar, entre otros; siendo de notoria importancia al desarrollo tecnolgico ligado a la ingeniera. El procesamiento digital est referido a la manipulacin de seales representadas bajo secuencias de nmeros computables, es decir que sern transformadas y operadas en un computador. Dispositivos desde procesadores dedicados al DSP, hasta llegar a los FPGA2, que han ido apareciendo y evolucionando a travs del tiempo, han sido usados para lograr perfeccionar algoritmos y aplicaciones para DSP donde cada vez se incrementa la cantidad de datos a operar y es necesaria la obtencin de resultados en tiempo real; donde los FPGA han marcado una tendencia en el diseo de sistemas digitales por sus caractersticas nicas de ser flexibles y reconfigurables.

Los FPGA desde su aparicin hace ms de dos dcadas han revolucionado el procesamiento digital de seales as como lo hicieron los PDSP 3 en su momento. El hecho de ser un dispositivo reprogramable permite ser sometido a cambios a medida que el diseo avanza; siendo un elemento beneficioso para el desarrollador quien realiza modificaciones sobre el lenguaje especial usado. Asimismo durante la etapa de desarrollo del sistema se pueden usar mltiples herramientas para verificacin y simulacin de los mdulos implementados.

Donde, son las herramientas de software y los lenguajes de programacin piezas fundamentales; siempre se ha tratado de llegar a la convergencia entre software y hardware para optimizar los diseos, apuntando a sistemas que presenten un paralelismo funcional tanto a nivel de procesadores como a nivel de ejecucin directa de instrucciones por medio de hardware, en este caso en FPGAs. Ante todas las caractersticas ventajosas que presenta el uso de FPGAs y la necesidad de plataformas de grandes prestaciones, estos estn siendo usados en computadores reconfigurables de alto desempeo o HPRC 4, que logran cubrir las altas necesidades.

1 2 3
4

DSP: Digital Signal Processing FPGA: Field Programmable Gate Array PDSP: Programmable Digital Signal Processor HPRC: High Performance Reconfigurable Computing

Para lograr asentar el conocimiento sobre HPRC, se necesita hacer un trabajo y desarrollo sobre un conocimiento bsico. Siendo la base en el DSP el uso de filtros, apuntar a lograr implementar filtros digitales como son los FIR5 demostrara el conveniente uso de estos sistemas previamente descritos.

1.1. ANTECEDENTES
Habiendo realizado una pesquisa bibliogrfica en la Biblioteca Central y Especializada de Ingeniera de la Universidad Privada Antenor Orrego, no se ha encontrado trabajos relacionados con el tema de investigacin a realizar.

1.2. ANLISIS Y FORMULACIN DEL PROBLEMA


La tendencia actual de operar grandes cantidades de datos a casi tiempo real, hace necesario el uso de nueva herramientas en el diseo como son los sistemas basados en HPRC. Donde estos sistemas, presentan las siguientes caractersticas relevantes:

Menor tiempo de diseo en comparacin a usar exclusivamente FPGA's. Permite el diseo usando Lenguaje C.

1.2.1. PRESENCIA DE BENEFICIOS SIMILARES AL USO DE FPGAS SOLAMENTE


Los FPGA son dispositivos de semiconductores programables que son basados en una matriz de bloques lgicos configurables o CLB 6 [15], y presentan las siguientes ventajas para el diseo [8]: Rpido tiempo-a-mercado. No presenta un NRE7 por adelantado.
5 6
FIR: Finite Impulse Response CLB: Configurable Logic Block

Ciclo de diseo ms simple. Ciclo de proyecto ms predecible. Reprogramabilidad en campo.

1.2.2. REDUCCION

DE

TIEMPO

DE

DISEO

EN

COMPARACIN A USAR EXCLUSIVAMENTE FPGAS


Para la programacin se utiliza un lenguaje especial llamado HDL 8 o lenguaje de Descripcin de Hardware, un FPGA siendo un dispositivo lgico programable o PDL9 usa un HDL habiendo dos corrientes grandes de HDL: VHDL10 y Verilog. Hacer uso de HDL representa un tarea tediosa y larga para los desarrolladores que no conocen sobre descripcin de hardware pero dominan lenguajes como C o Java, puesto que el HDL nunca fue diseado para describir algoritmos, la solucin ante esto fue hacer uso de compiladores que trasladen algoritmos de punto fijo y flotante a un lenguaje de alto nivel o HLL 11 directamente a un circuito expresado en HDL. Algunas de estas soluciones son Impulse C, Mitrion C, SRC Carte y Handel C [7].

1.2.3. DISEO EMPLEANDO LENGUAJE C


Los HPRC son sistemas de computacin paralelos que contienen mltiples microprocesadores y mltiples FPGAs. En diseos actuales, el FPGA es usado como coprocesador que est dispuesto a ejecutar pequeas porciones de la aplicacin que toman mucho tiempo [7]. Los sistemas HPRC usan las herramientas y compiladores de lenguajes como C hacia dispositivos FPGA, logrando disminuir el tiempo de diseo y obtener sistemas de ptimo desempeo.

7 8 9 10 11

NRE: Non recurring expenses HDL: Hardware Description Languange PDL: Programmable Logic Device VHDL: Very High Speed Integrated Circuit Hardware Description Languange HLL: High Level Language

El procesamiento digital de seales de datos es muy complicado de realizar en sistemas muy costoso o con funciones especificas, o sistemas que demandan tiempo excesivo en su diseo. Adems de los problemas generados por el excesivo tiempo de procesamiento de los mismos. Por tal motivo se propone un sistema que ayude a disminuir el tiempo de procesamiento sin necesidad de invertir demasiado tiempo o sean costosos en su diseo.

1.3. HIPTESIS
[H1]: Un sistema diseado con HPRC optimizar el tiempo de procesamiento y permitir a los diseadores la escalabilidad del sistema,

1.4. OBJETIVOS DE LA TESIS 1.4.1. OBJETIVO GENERAL


Proponer un sistema de procesamiento digital de seales de datos, a travs de la implementacin un filtro FIR, que permita incrementar la velocidad del procesamiento, escalabilidad, de bajo costo y alto desempeo.

1.4.2. OBJETIVOS ESPECIFICOS


- Estudiar las tecnologas referentes a HPRC. - Analizar los tiempos de procesamientos de los algoritmos implementados en un sistema HPRC, para diferentes cantidades y tipos de datos - Analizar los gastos realizados para la implementacin del diseo. - Analizar el desempeo y la eficiencia de los algoritmos implementados en un sistema HPRC. - Implementar un filtro FIR en un sistema HPRC, que demuestre nuestros resultados. - Anlisis de los resultados obtenidos despus de las pruebas pertinentes.

1.5. RESUMEN DESCRIPTIVO


El presente trabajo de investigacin, el cual se ha dividido en 9 captulos, los que se describen a continuacin:

Captulo 1: Se presenta lo que es, una breve introduccin al tema, continuando con los antecedentes, el anlisis y formulacin del problema, presentando sus causas y efectos; seguimos con presentacin de las hiptesis, el objetivo general y los objetivos especficos; finalizando con este resumen descriptivo. Captulo 2: Presentamos el Fundamento Terico, el cual consta de Marco Terico, en el cual damos a conocer acerca del HPRC, las ventajas de implementacin, los Filtros FIR y las Plataformas de

Compilacin; lo que nos ayudar a comprender mejor el tema. Captulo 3: Metodologa para la solucin del problema, aqu damos a conocer los pasos de implementacin de un Filtro FIR en MATLAB, y la implementacin del Filtro FIR Accelerator dentro del FPGA. Captulo 4: Aqu mostramos los resultados de nuestras simulaciones, acompaados de sus respectivas grficas y diagramas de bloques. Captulo 5: Discusin, donde damos a conocer nuestra prueba de hiptesis. Captulo 6: Presentamos nuestras conclusiones. Captulo 7: Damos a conocer nuestras recomendaciones. Captulo 8: Presentamos una lista de la bibliografa utilizada. Captulo 9: Pginas complementarias, donde alcanzamos algunos documentos que sern de mucha utilidad.

2. FUNDAMENTO TERICO

2.1. MARCO TEORICO

2.1.1. FPGA

2.1.1.1. Qu es un FPGA?
Los FPGAs o Arreglos de Compuertas Programables de Campo, son chips de silicios ubicados en el nivel ms alto dentro de la actual microelectrnica. Emplea bloques lgicos pre construidos que se encuentran dispuestos de tal manera que no necesitan ningn tablero o cautn para configurarlos o programarlos. Slo deber desarrollar tareas de computacin digital en software y compilarlas en un archivo de configuracin o una escritura de bits que contenga informacin de cmo deben conectarse los componentes. Sin embargo, el aumento de herramientas de diseo de alto nivel est cambiando las reglas de programacin de FPGAs, con nuevas tecnologas que convierten los diagramas a bloques grficos, o hasta el cdigo ANSI12 C, a circuitos de hardware digital [11].

El desarrollo de proyectos llevados a cabo con implementacin de FPGAs dentro de las industrias, se han visto impulsadas por las mejoras que ofrecen los FPGAs ante los dems dispositivos programables, entre ellas incremento de las velocidades de procesamiento y fiabilidad del producto final, y esto sin requerir de incrementos desmesurados de la inversin en el proyecto. La gran diferencia entre procesadores y FPGAs es el modo de procesamiento de las operaciones dentro de ellas, mientras que en un procesador las sentencias se ejecutan secuencialmente; los FPGAs desarrollan de modo paralelo, ejecutndose una tarea independiente programada dentro del FPGA de otra, sin necesidad de competir por los mismos recursos, y sin afectar a otros bloques. Como resultado, el rendimiento de una parte de la aplicacin no se ve afectado cuando se agregan otros procesos.

12

ANSI: American National Standards Institute

2.1.1.2. Fabricantes FPGA


Tras su aparicin de los FPGA en los aos 80, estos dispositivos son populares por su capacidad de hardware reconfigurable y flexibilidad. Los FPGAs son el resultado de la convergencia de dos tecnologas diferentes, los PLDs, y los ASICs13, pero los FPGAs no apareceran hasta que los innovadores de Xilinx a mediados de los 80 combinaran las dos tecnologas con un mecanismo de interconexin que pudiese programarse utilizando fusibles, antifusibles o celdas RAM 14. El resultado fue un circuito con capacidad y aplicacin mayor a los PLD, aunque con puntuales diferencias, que delatan antepasados diferentes. A principios de 2007, el mercado de los FPGA se ha colocado en un estado donde hay dos productores de FPGA de propsito general que estn a la cabeza del mismo, y un conjunto de otros competidores quienes se diferencian por ofrecer dispositivos de capacidades nicas. Xilinx uno de los grandes lderes y los pioneros en la fabricacin de FPGAs. Fundada por Ross Freeman (el inventor de las FPGA), Bernie Vonderscmitt (pionero del concepto de compaa fabless) y Jim Barnett en 1984 y con base en Silicon Valley. Al ao siguiente desarrollaron su primera FPGA, el modelo XC2064. Hoy en da, la base reside en San Jos, California, mientras que en Europa se hallan en Dubln, Irlanda y en Asia en Singapur. Xilinx desarrolla FPGAs y CPLDs15 que son usados en numerosas aplicaciones, como telecomunicaciones, automocin, productos de consumo, industria militar y otros campos. Las familias de dispositivos de Xilinx son: glue logic (CoolRunner y CoolRunner II), bajo coste (Spartan) y alto rendimiento (Virtex). Las familias Virtex-II Pro, Virtex-4 y Virtex-5 son particularmente interesantes para los diseadores de system-on-achip (SoC) porque pueden incluir dos ncleos del IBM PowerPC 405.

13 14 15

ASIC: Application-specific integrated circuit RAM: Random Access Memory CPLD: Complex Programmable Logic Device

Xilinx tambin crea ncleos IP16 (IP Cores) en lenguajes HDL para permitir a los diseadores reducir los tiempos de desarrollo. Estos ncleos van desde funciones simples como contadores a sistemas complejos como microcontroladores, un ejemplo de esto ltimo es el microprocesador Microblaze. Altera Corporation, miembro del grupo NASDAQ-100y del S&P 500, es uno de los pioneros de la lgica programable, siguiendo lderes notables anteriores como Signetics y MMI 17 en la produccin de PLDs. Altera desarrolla algunas caractersticas que estn orientadas hacia capacidad de sistemas en chips programables (SOPC 18). Algunos de los ejemplos ms recientes incluyen memoria embebida, procesadores embebidos, y transceptores de alta velocidad. El xito en lanzamientos de productos de 130nm y 90nm son buenos casos de estudio. Los procesadores soft-core Nios II y Nios de Altera y los dispositivos HardCopy II y HardCopy estn extendiendo el alcance de Altera en el mercado, y coloca a esta empresa en el mundo de los procesadores embebidos y ASICs estructuradas respectivamente. Altera ofrece tambin el software Quartus II, dirigido al diseo y simulacin de circuitos lgicos. Aunque su software soporta extensivamente VHDL y Verilog como principales lenguajes, Altera es el desarrollador de lenguaje de descripcin de hardware conocido como AHDL. Entre su familia de FPGAs de alto rendimiento tenemos la serie Stratix, anunciado en el 2002 y con posteriores series GX, II, II GX y II en el 2006. En su familia de productos de FPGAs de bajo coste tenemos la serie Cyclone tambin anunciado en el 2002, con sus posteriores series II y III y Arria GX anunciada el 2007

16 17 18

IP: Intellectual Property MMI: Monolithic Memories Inc SOPC: System on a Programmable Chip

10

Figura 1 - Ncleo FPGA Altera

Lattice Semiconductor lanz al mercado dispositivos FPGA con tecnologa de 90nm. En adicin, Lattice es un proveedor lder en tecnologa no voltil, FPGA basadas en tecnologa Flash, con productos de 90nm y 130nm. Los principales productos Lattice Semiconductor son FPGAs voltiles LatticeECP2 LatticeXP2 con mdulos Flash incluidos. Actel tiene FPGAs basados en tecnologa Flash reprogramable. Tambin ofrece FPGAs que incluyen mezcladores de seales basados en Flash. Adicionalmente, fabrica FPGAs de alta fiabilidad para los mercados militares y aeroespaciales. Que tienen menos densidad que sus homlogos de Altera y Xilinx. Los modernos dispositivos Actel incluyen Familias basadas en Flash ProASIC 3 y Igloo, FPGAs RTAX basadas en antifusibles tolerantes a la y FPGAs antifusibles de propsito general Axcelerator. QuickLogic tiene productos basados en antifusibles (programables una sola vez). Atmel es uno de los fabricantes cuyos productos son reconfigurables (el Xilinx XC62xx fue uno de estos, pero no estn siendo fabricados actualmente), se centra principalmente en microcontroladores, no en la lgica programable. Sin embargo, tienen una familia FPSLIC 19 que y FPGAs

19

FPSLIC: Field Programmable System Level Integrated Circuit

11

combina el ncleo MCU20 AVR con estructura FPGA, todo en el mismo encapsulado. Achronix Semiconductor tienen en desarrollo FPGAs muy veloces. Salieron al mercado a comienzos de 2007, FPGAs con velocidades cercanas a los 2GHz. MathStar, Inc. ofrecen FPGA que ellos llaman FPOA (Arreglo de objetos de matriz programable).

2.1.1.3. Arquitectura general de un FPGA


Un FPGA consiste en arreglos de varios bloques programables (bloques lgicos) los cuales estn interconectados entre s mediante canales de conexin verticales y horizontales [5], tal como muestra la Figura 2. En general, un FPGA posee una estructura altamente regular.

Figura 2- Arquitectura general de un FPGA [5].

20

MCU: Microcontroller Unit

12

Los bloques lgicos de la periferia de esta estructura se conectan a celdas de entrada/salida de forma tal de lograr una comunicacin con el exterior del circuito. Bloques lgicos El bloque lgico consta de una parte combinacional que permite implementar funciones lgicas booleanas ms una parte secuencial formada por flip-flops, que permite sincronizar la salida con una seal de reloj externa, lo cual es til para realizar circuitos secuenciales y permite implementar registros.

La estructura de un bloque lgico vara de un fabricante a otro. Sin embargo, la parte combinacional se basa principalmente en una Look-Up Table (LUT).

Una LUT es un componente de memoria que almacena una tabla de verdad. Las direcciones de la memoria son las entradas de la funcin lgica a implementar, y en cada celda de dicha memoria se almacena el resultado de la combinacin correspondiente de las entradas. En una LUT de n x 1 es posible implementar cualquier funcin lgica de n entradas. En la Figura 3 se muestra la estructura bsica de un bloque lgico. En la misma se observa que el multiplexor puede ser configurado para aceptar la salida de la LUT o aceptar una entrada del bloque lgico. A su vez, en la Figura 4 se muestra la estructura de una LUT.

Figura 3 - Estructura de un bloque lgico [5].

13

Figura 4 - Estructura de una LUT de n entradas [5].

Si se desea implementar funciones lgicas de ms de n entradas se deben interconectar ms de una LUT para lograrlo. Resulta conveniente cuando se realizan circuitos combinacionales de varias entradas, separarlos en etapas por medio de registros, de forma tal de no aumentar el tiempo de propagacin de las seales al utilizar varias LUT en cascada. A su vez, si se desea implementar registros o circuitos secuenciales, se deber utilizar en general los flip-flops de ms de un bloque lgico. La combinacin de distintos bloques lgicos se realiza a travs de los bloques de interconexin. CLBs vs LABs

Los distintos fabricantes de FPGAs llaman de diferentes formas a los componentes lgicos de un FPGA. El elemento bsico de los FPGAs de Xilinx es la celda lgica (LC, Logic Cell).

Una celda lgica contiene una LUT, un multiplexor, lgica de acarreo, un registro y lgica de configuracin. Este registro puede funcionar como flip-flop D o como cerrojo (latch).

14

La polaridad del flanco de reloj puede ser configurada (ascendente o descendente) como as tambin la polaridad de las seales de clock enable, set y reset.

A su vez las celdas lgicas estn agrupadas en un slice. Un bloque lgico configurable (CLB, Configurable Logic Block) se encuentra conformado por dos slices. La estructura de un CLB se observa en la Figura 5.

Figura 5 - Estructura de un CLB [5].

Altera, por su parte, llama a un elemento bsico Logic Element (LE) [5]. Un LAB (Logic Array Block) se encuentra conformado por un conjunto de ocho a diez LEs. Un LE difiere en su estructura interna de una LC. Sin embargo, las funcionalidades de ambos bloques son similares. Bloques entrada/salida

La funcin de un bloque de entrada/salida es permitir el paso de una seal hacia dentro o hacia el exterior del dispositivo. Por este

15

motivo, dependiendo de la interfaz elctrica, el mismo debe contar con recursos tales como:

Salidas configurables como Tri-State u Open-Collector. Entradas con posibilidad de pull-up o pull-down

programables. Registros de salida. Registros de entrada.

Adems, debido a que hoy en da los FPGA funcionan a altas velocidades de operacin y que los mismos tienen desde cientos hasta miles de terminales de conexin, los bloques de entrada/salida deben ser capaces de proveer una adecuada terminacin en cuanto a trminos de impedancia se refiere, de forma tal de evitar reflexiones de las seales. Esto que en el pasado se lograba conectando un resistor cercano al terminal del dispositivo, en la actualidad debe ser implementado dentro del propio FPGA debido a la gran cantidad de terminales que estos dispositivos poseen. Recursos de interconexin Para utilizar las celdas lgicas disponibles, debe disponerse de una red de interconexin flexible. Sin embargo, debe considerarse que cuanto mayor flexibilidad tenga la red de interconexin mayor ser el consumo de potencia y menor la velocidad de operacin del dispositivo.

En general, las conexiones internas entre elementos de un FPGA pueden realizarse de tres formas: Lneas directas. Tienen lugar entre bloques adyacentes

16

Conexiones de propsito general. Se realizan a travs de una matriz de interconexin cuando se desean conectar dos bloques no adyacentes. Su misin es conectar canales verticales y horizontales que permiten llegar al punto final de la conexin. Cuanto ms larga es la lnea de ruteo, mayores sern los retrasos introducidos tanto por la propia longitud de la lnea como por los elementos de interconexin utilizados a lo largo de la misma. Lneas largas. Estas conexiones se utilizan cuando una seal debe recorrer una gran longitud, por ejemplo en la

implementacin de un bus interno, de forma tal de evitar que la misma atraviese elementos de interconexin evitando de esta forma retrasos introducidos por los mismos. Lneas rpidas. Cuando los bloques lgicos contienen ms de una LUT, las lneas rpidas son las encargadas de realizar las conexiones entre las distintas LUTs. Recursos internos de los FPGA actuales

Los FPGA actuales cuentan con muchos recursos de propsito especfico. En esta seccin solo se presentaran algunos de los ms importantes. RAM distribuida Las LUTs basadas en celdas de SRAM 21 brindan distintas posibilidades. En adicin al rol primario de conformar una LUT, en algunos dispositivos se permite utilizar estas celdas como memoria RAM o como registros de desplazamiento.

21

SRAM: Static Random Access Memory

17

Una LUT de 4 entradas puede ser utilizada para formar una memoria RAM de 16 x 1 bits. A su vez, las 16 celdas de memoria pueden ser interconectadas en forma de cadena formando un registro de desplazamiento. Cadenas de acarreo rpidas Una caracterstica de los FPGAs actuales es que incluyen lgica y elementos de interconexin tiles para implementar cadenas de acarreo rpidas (fast carry chains) cuya funcin es la de propagar de forma rpida seales de acarreo entre dos elementos lgicos.

Una cadena de acarreo genera el acarreo de salida a partir de las entradas de la LUT y el acarreo de entrada.

Las cadenas de acarreo permiten realizar de forma eficiente sumadores, multiplicadores, contadores y comparadores de gran velocidad.

Figura 6 - Lgica de acarreo [5].

RAM embebida

Muchas aplicaciones requieren el uso de memoria, de forma tal que una gran cantidad de dispositivos FPGA incluyen bloques de memoria RAM adems de la RAM distribuida en las LUTs.

18

Dependiendo de la arquitectura del dispositivo, estos bloques de memoria pueden estar ubicados en la periferia del dispositivo, dispersos sobre la superficie del mismo o ubicados en columnas.

Dependiendo de la aplicacin, estos bloques de memoria pueden ser configurados de diversas maneras, formando memorias de un solo puerto (single-port RAMs), memorias de doble puerto (dual-port RAMs), memorias FIFO (first-in firstout), etc. Poseen adems un sistema de enrutamiento dedicado que provee una eficiente comunicacin entre estos bloques de memoria y los bloques lgicos.

Multiplicadores Algunas funciones lgicas tales como suma y multiplicacin son inherentemente lentas si se realizan interconectando un gran nmero de bloques lgicos.

Para aplicaciones de procesamiento digital de seales (DSP), donde los algoritmos generalmente se basan en sumas y multiplicaciones (denominadas operacin MAC, Multiply and Accumulate), el hecho de que los FPGAs cuenten con una cantidad de multiplicadores embebidos los hace ideales para ser utilizados.

Generalmente, los multiplicadores se encuentran cercanos a los bloques de memoria RAM dentro del dispositivo, ya que los mismos son utilizados para procesar datos alojados en dichos bloques.

19

Figura 7 - Multiplicadores embebidos prximos a los bloques de RAM [5].

Ciertos dispositivos, como por ejemplo los correspondientes a la familia Spartan-IIIA DSP de Xilinx, integran bloques dedicados a funciones DSP incluyendo registros, multiplicadores y sumadores.

Clock trees y clock manager

Todos los elementos secuenciales dentro de un FPGA, tales como los flip-flops presentes en los bloques lgicos, deben ser sincronizados por una seal de reloj.

Para lograr tal sincronismo, la seal de reloj debe llegar a todos los elementos secuenciales del FPGA en fase, de manera tal que en un instante de tiempo no se produzcan transiciones slo en algunos elementos mientras que en otros no (clock skew). Por lo tanto, la seal de reloj es distribuida dentro del FPGA en forma de rbol (clock tree).

20

La Figura 8 muestra la estructura de este rbol. Se observa que a todos los flip-flops llegan a un flanco de reloj aproximadamente en el mismo instante de tiempo.

En los FPGAs, en vez de que la seal de reloj externa se conecte al clock tree, generalmente se conecta a un clock manager, el cual genera diferentes seales de reloj. Estas seales generadas por el clock manager sirven para distintos propsitos. Uno es el de atacar distintos clock tres, de forma tal que el FPGA cuente con ms de un rbol con el fin de que ninguno sea muy extenso, asegurando siempre el sincronismo entre los elementos secuenciales.

Figura 8 - Distribucin de la seal de reloj dentro de un FPGA [5].

A su vez, tambin estas seales de reloj pueden ser utilizadas para manejar dispositivos externos al FPGA.

Otra utilidad que surge de tener distintas seales de reloj que manejan distintos arboles, es poder tener dentro del FPGA distintos sectores que funcionen con velocidades de operacin diferentes o con distintas fases de reloj (multiple clock domains).

21

Figura 9 - Multiple clock domains [5].

2.1.1.4. Fortalezas y Debilidades de los FPGAs


Al momento de implementar un algoritmo o un a aplicacin, un desarrollador tiene la oportunidad de escoger entre los mltiples dispositivos disponibles que se tiene en el mercado: FPGA, ASIC o un microprocesador. Sin embargo cada una cuenta ventajas y desventajas que a continuacin se numerarn:

a) Tiempo de salida al Mercado

Como gran fortaleza, los FPGAs cuentan con salida al mercado como ventaja ante los ASIC, ya que para estos hay que hacer un proceso de (1) diseo, (2) verificacin, (3) fabricacin, (4) empaquetamiento, y (5) prueba del dispositivo antes de sacar el producto al mercado. Adems, el desarrollo de software requiere acceder al dispositivo ASIC (o una emulacin del caso) antes de que pueda ser verificado y completado. Los FPGAs han sido ya fabricados, empacados, y probados por el vendedor, como dispositivos estndares disponibles inmediatamente, reduciendo el tiempo de salida al mercado en por lo menos cuatro meses.

Dos puntos importantes difciles de cuantificar pero no menos importantes que las dems son: (1) re-fabricaciones (rediseos) causado por errores en el diseo o cambios de ltima hora a

22

especificar, debido a un cambio en un estndar en evolucin, por ejemplo, y (2) programas de desarrollo de software que dependen del acceso a la ASIC. Ambos de estas situaciones modifican el cronograma de produccin del producto, un rediseo fcilmente puede emplear un mximo de cuatro meses, y el anticipado acceso al

hardware pueden acelerar el desarrollo de software y de depuracin, en especial para el software integrado que se comunica directamente con el dispositivo.

En vista de estas consideraciones, una estimacin conservadora de ventaja del tiempo de salida al mercado de los FPGAs en relacin con ASICs es de 6 a 12 meses. Como esta reduccin es significativa; en los mercados de consumo electrnico, muchos productos slo tienen un ciclo de vida de 24 meses.

b) Costo

Por dispositivo, Los FPGAs pueden ser mucho menos costosos que ASICs, especialmente en volmenes ms bajos, ya que los costes no recurrentes de la fabricacin de FPGA son asumidos por muchos usuarios. Sin embargo, debido a su reprogramabilidad, los FPGAs requieren mucha ms rea de silicio para aplicar una funcionalidad equivalente. As, en volumen ms alto posible en la electrnica de consumo, el costo del dispositivo FPGA finalmente superar el coste de dispositivo de ASIC.

c) Tiempo de Desarrollo

Implementar aplicaciones en FPGA es similar a disear dispositivos o hardware: las aplicaciones se describen en Verilog o VHDL, simuladas para determinar la exactitud, y sintetizados mediante herramientas de sntesis lgica comerciales. Herramientas

23

comerciales disponibles que sintetizan los programas escritos en lenguajes de comportamiento secuencial como C a FPGAs. Sin embargo, en la mayora de los casos, altos rendimientos y mayor densidades se logran utilizando HDL, ya que permiten al usuario directamente describir y explotar el paralelismo intrnseco disponibles en una aplicacin. La explotacin del paralelismo de una aplicacin es la mejor forma de lograr un alto desempeo del FPGA. Sin embargo, el diseo de las implementaciones de aplicaciones altamente paralelas en HDLs requiere un significante esfuerzo de desarrollo ante el de desarrollo de software con lenguajes de programacin convencionales secuencial como Java o C++.

d) Consumo de Potencia

Los FPGAs consumen ms energa que los ASICs simplemente porque la programacin requiere muchos ms transistores, en relacin con un circuito integrado personalizado (IC). Los FPGAs pueden consumir ms o menos energa tanto como un microprocesador o procesador de seal digital (DSP), dependiendo de la aplicacin.

e) Depuracin y Verificacin

Los FPGAs son desarrollados con tcnicas y herramientas de diseo de hardware estndar. Codificado en VHDL o Verilog y sintetizado, los diseos FPGA pueden ser depurados en simuladores tanto como un tpico diseos ASIC. Sin embargo, muchos diseadores verifican sus diseos directamente, descargndolos en un FPGA y probndolos en un sistema.

Con este enfoque, la aplicacin puede ser probada en velocidad (un milln de veces ms rpido que la simulacin) en el entorno operativo real, donde es expuesto a las condiciones del mundo real. Si

24

a fondo, esta prueba proporciona una mayor forma de la verificacin funcional en relacin con la simulacin. Sin embargo, la depuracin de aplicaciones en un FPGA puede ms ser difcil porque las herramientas del vendedor proporcionan menos observabilidad y

controlabilidad en relacin, por ejemplo, a un simulador de lenguaje de descripcin de hardware (HDL).

f) FPGA y Microprocesadores

Cada

aplicacin

tiene

requerimientos

especficos,

estos

requerimientos se analizan cuidadosamente para determinar si es posible que la aplicacin requiera de un microprocesador o un DSP. Para el caso de aplicaciones con FPGA, el desarrollo de cdigos es complicado en lo que respecta a ASIC, ya que programar en C o en JAVA es menos complicado que programar en VERILOG o VHDL, de igual manera no existen en el mercado muchas herramientas disponibles para VERILOG o VHDL como la disponibilidad de herramientas para C o JAVA. Los microprocesadores son tambin en general mucho menos costosos que FPGAs. Si el microprocesador puede cumplir con los requisitos de la aplicacin (rendimiento, potencia, etc), es casi siempre la mejor opcin. En general, los FPGAs son muy adecuados para aplicaciones que requieren de un muy alto desempeo y reprogramabilidad, para los componentes de la interfaz que se comunican con muchos dispositivos y para sistemas de hardware implementados en volmenes que hacen que sus costos a escala sean viable.

25

2.1.2. HPRC

2.1.2.1. Computacin Reconfigurable


La Computacin Reconfigurable (RC), tuvo un gran avance con el desarrollo de los FPGA durante finales de los 80's, caractersticas de estos dispositivos llamaron la atencin a desarrolladores de DSP y sobre todo a la comunidad de la supercomputacin. Hoy en da, las velocidades obtenidas bajo ejecucin directa en hardware se encuentran en una tasa entre 10x -100x a comparacin de tareas ejecutadas bajo un procesador como algoritmo de software [1].

Al ser reconfigurable un FPGA se personaliza a nivel de compuertas para cumplir la funcin de un algoritmo especfico cubriendo solo los tamaos, tipos y las unidades aritmticas usadas; donde es posible configurar la interconexin entre operaciones. En cambio en un microprocesador eso no es posible, el procesador se limita a efectuar las operaciones y soportar los tipos de datos a operar.

El problema se originaba al tener que describir algoritmos complejos al FPGA, por lo que otros dispositivos como los ASIC's tenan ventaja en la flexibilidad de su software. Una de las primeras ideas desarrolladas, bajo el nombre de computacin distribuida fue el computador Fixed -Plus-Variable (F+V) desarrollada por Estrin y la Universidad de California a mitad de los 60's. El F+V posea muchas limitaciones, por ser un procesador estndar que dominaba otras variables, y donde el conexionado era manual cableado.

26

Fue a finales de los 80's que los productos de empresas como Altera y Xilinx tuvieron gran salida al mercado. Investigadores americanos del IDA 22 Supercomputing Research Center (SRC, renombrado Center for Computing Sciences en 1994) y franceses del DEC23 Paris Research Lab (cerrado despus que la Digital Equipment Corporation fuese vendida) idearon un supercomputador que posea hardware reconfigurable para poder ser cambiado de acuerdo a la aplicacin y que su desempeo sea el doble que los procesadores con un set de instrucciones.

En 1989 SRC construyo un arreglo sistlico llamado Splash 1 y tres aos despus construyo Splash 2, los cuales lograban superar el desempeo de un supercomputador Cray 2.

Splash 1 contena 32 FPGAs Xilinx 3090 series conectados en un array lineal. Los chips de FPGA adyacentes compartan un buffer de memoria. El computador reconfigurable era conectado a una workstation Sun mediante interconexin VME24. Splash poda realizar una comparacin de la secuencia de ADN25 a 45X (1990s).

Splash 2, redujo el nmero de FPGAs a 16 Xilinx 4010 series que posean 1 1/2 veces la lgica de Splash 1. Para mejorar la flexibilidad en interconexin se aumentaron las interconexiones lineales con un crossbar, permitiendo a los FPGA comunicarse directamente entre s.

22 23 24 25

IDA: Institute for Defense Analyses DEC: Digital Equipment Corporation VME: VERSAmodule Eurocard ADN: cido Desoxirribonucleico

27

Figura 10 Arreglo Lgico Reconfigurable Splash 2[1].

DEC desarrollo el proyecto PAM (Programable Active Memories) con la tarjeta Perle-0 la cual tena 25 dispositivos Xilinx XC3090 en un arreglo de 5x5 los cuales estaban conectados a 4 rpidas memorias estticas RAM (SRAM) de 64k x 64 bits las cuales eran controladas por dos XC3090 adicionales. Luego Perle-0 fue potenciada usando XC4000. La tarjeta Perle-0 se convirti en una de las tarjetas ms populares para la investigacin.

28

Figura 11 - Digital Equipment Corporations PAM Perle-0 [1].

2.1.2.2. Procesamiento Paralelo


En la computacin reconfigurable se maneja el paralelismo a nivel de instruccin y a nivel de tarea. Paralelismo a nivel de instrucciones

Es el nivel ms bajo de la granularidad, y es explotado en la micro arquitectura de procesadores superescalares, los cuales poseen mltiples instrucciones en progreso durante varios estados de operacin, por lo que puede completar ms de una en un solo ciclo de reloj.

Los procesadores Very Long Instruccion Word (VLIW) ofrecen otro mtodo para la operacin paralela fine-grained, ya que posee mltiples unidades de operacin en paralelo. Usando una palabra de instruccin de varios campos como se observa en la Figura 12, posee dos para operaciones enteras, dos para operaciones en punto flotante, dos para operaciones de memoria y un branch.

29

Figura 12 - Una Palabra de Instruccin VLIW [1].

En un procesador superescalar, el compilador genera un stream de instrucciones secuencial, y el procesador lo paraleliza mientras esta en operacin. A diferencia de un procesador VLIW que ejecuta la palabra de instruccin generada por el compilador, requiriendo que el compilador programe las tareas al tiempo de compilacin.

El paralelismo con co-procesador es logrado usando un solo stream de instrucciones. Una instruccin paralela personalizada es ejecutada por el co-procesador. Ejemplos de co-procesadores incluyen las unidades MMX26/SSE27 o unidades vector. Las instrucciones para el co-procesador son integradas en el set de instrucciones del procesador.

El co-procesador comparte archivos de registro y otros estados internos con las otras unidades aritmticas, como las unidades de punto flotante, como se muestra en la Figura 13.

El paralelismo a nivel de instrucciones es de gran importancia en los sistemas RC28. En contraste con los procesadores convencionales en los cuales la unidad de instruccin es optimizada para un gran clase de aplicaciones, es posible (y necesario) en sistemas RC adaptar el paralelismo a nivel de instruccin nicamente para cada aplicacin especfica. En un procesador VLIW el formato de instruccin es

26 27 28

MMX: Multi Media eXtensions SSE: Streaming SIMD Extensions RC: Reconfigurable Computing

30

determinado por el nmero y tipo de unidades de funcin paralelas. En un FPGA estas unidades son construidas a partir de bloques lgicos configurables. El numero, ancho y tipo son arbitrarios, y pueden ser optimizados hacia la aplicacin al momento de compilar. Si se puede hacer reconfiguracin parcial dinmica, el diseo de las unidades de funcin debe ser modificado al momento de la ejecucin.

Figura 13 - Co-procesador SSE [1].

As pues, una "instruccin" segn la interpretacin del sistema reconfigurable es una coleccin arbitraria de circuitos lgicos relacionados, en los cuales el nmero y tipo de unidades aritmticas es optimizado para cada aplicacin.

En la Figura 14 se ilustra el flujo de datos dentro de una instruccin RC compuesta de 11 niveles de operacin. En cada nivel, mltiples operaciones ocurren en paralelo. Por ejemplo, el primer nivel contiene seis multiplicadores. Si la instruccin por s misma es parte del flujo de operacin del pipeline, por cada ciclo de reloj, habr 23 operaciones aritmticas ocurriendo en paralelo. La aplicacin especfica siendo mapeada a la lgica reconfigurable determina los tamaos y tipos de datos de operacin. Una instruccin para un

31

computador reconfigurable es anloga a una subrutina entera de un procesador convencional.

Figura 14 - Una Instruccin RC [1].

Paralelismo a nivel de tareas

El paralelismo a nivel de tareas tiene dos categoras resaltantes. La relacin entre tareas puede ser peer-to-peer o cliente/servidor. En un sistema paralelo peer-to-peer la actividad puede ser a nivel de proceso a nivel del hilo ms fino de la granularidad. En sistema de nivel de proceso peer-to-peer, ilustrados en la Figura 15, cada proceso tiene su espacio de direccin separado. De manera que al comunicar estado, el proceso debe enviar un mensaje y el proceso(os) destino debe explcitamente recibir el mensaje. Diferentes tipos de protocolos de mensajera son usados. Los mensajes debe ser bufferizados, asncronos y de alta latencia, como con el Message Passing Interface (MPI). Se puede utilizar un protocolo streaming de baja latencia de streaming, con colas, bferes FIFO, o comunicacin semi-sincrnica "bit valida" semi-sincrnica. Finalmente, los mensajes deben ser streams perfectamente sincronizados, en los cuales los retardos son determinados al momento de la compilacin Y son pre-compilados dentro de los procesos sincronizados del reloj. El ltimo protocolo es tpico e los algoritmos DSP.

32

Figura 15 - Process Level Parallelism [1].

A nivel de hilos de procesamiento paralelo peer-to-peer (Figura


16), los hilos comparten un espacio de direccin, y pueden

comunicarse a travs de memoria compartida o de mensajes. Los mecanismos de sealizacin y sincronizacin para procesamiento basado en hilos incluyen secciones crticas y exclusin mutua, o barreras.

Figura 16 - Thread Level Parallelism [1].

En un modelo paralelo cliente/servidor, el cliente puede requerir espacio del servidor, o el cliente puede requerir trabajo del servidor. Originalmente (mostrado a la izquierda de la Figura 17), la fuente de cmputo es centralizada en el servidor, a diferencia del ltimo

(mostrado a la derecha). Donde los clientes realizan tareas intensas de cmputo y el servidor solo sirve como repositorio para la descripcin de tareas.

33

Figura 17 - Client Server Model [1].

La lgica reconfigurable tiene un rol tambin en estas actividades paralelas de larga granularidad. En procesamiento peer-to-peer, los procesos de hardware se comunican con procesos de software. Este escenario es particularmente comn en procesamiento embebido, donde el hardware puede manipular la adquisicin de datos y el procesamiento front-end, mientras que el software realiza anlisis de datos y toma de decisiones.

Unas de las formas ms comunes de comunicacin hardware-asoftware son a travs de buffers de memoria o con un stream de comunicacin, el cual se observa en la Figura 18. En este ejemplo, dos procesos de hardware (Procesos 1 y 2) se comunican va un stream hardware-a-hardware, los Procesos 2 y 3 se comunican va un stream hardware-a-software, y los Procesos 3 y 4 se comunican va un stream software-a-hardware. Los sistemas RC tienden ms a ser estticos, canales de comunicacin de aplicacin-especifica ms que a streams dinmicos como se propone en procesadores dedicados de stream como el Imagine.

Esto es debido a que los caminos de comunicacin de streams determinados son mucho ms eficientemente mapeados al FPGA.

34

Figura 18 - Stream Comunication [1]

35

Dentro

del

procesamiento

cliente/servidor

el

computo

reconfigurable tambin posee un rol importante. Los nodos RC pueden desempear trabajos data/compute, por ejemplo para criptografa, bioinformatica o aplicaciones de seguridad de redes. Los nodos RC tambin sirven como nodos de adquisicin de datos, como se muestra en la Figura 19. Bajo este escenario, mltiples fuentes de data alimentan a los nodos de lgica reconfigurable que pre-procesan la data y proveen esta a distintos nodos de la red.

Figura 19 - Adquisicin de la Data [1].

2.1.2.3. Arquitectura RC
Los Procesadores paralelos basados en FPGAs aparecieron por primera vez en la dcada de 1990 y han seguido prosperando [1]. Los Sistemas de Computacin Reconfigurable pueden agruparse en cuatro categoras: Acelerador de Bus E/S Matriz FPGA masivamente paralela Supercmputo Reconfigurable Co-procesador Lgico Reconfigurable

36

a) Acelerador de Bus E/S

El acelerador de BUS E/S mostrada en la Figura 20 contiene una interconexin entre FPGA, mdulos de SRAM y/o DRAM29 on-board, interfaces (serial) de alta velocidad para dispositivos externos, y una interfaz para el bus de E/S del ordenador host. Fue el primer equipo reconfigurable a comienzos del los aos 90. Las posibilidades de interconexin entre FPGAs varan dependiendo de la cantidad de FPGAs que se dispongan. En caso de contar con pocas FPGAs, pero suficientes pines FPGA, se puede contar con una interconexin todos a todos, de lo contrario se puede emplear una interconexin de anillo de tal manera que cada uno este interconectado con su vecino izquierdo y derecho.

Las tarjetas aceleradoras FPGA normalmente contienen memoria de buffer en la placa en forma de SRAM y/o DRAM. A diferencia de las estrechas y profundas memorias cach jerrquica utilizada en microprocesadores, los procesadores FPGA pueden explotar mejor el acceso amplio a los bancos de memoria. De hecho, no es raro para las placas FPGA contener 5-10 bancos de SRAM, permitiendo, por ejemplo, 64 * 10 = 640 bits de acceso a memoria concurrente cada ciclo de reloj.

Figura 20 - Placa FPGA E/S Genrica [1].

Dado que el ancho de banda entre el procesador host y tarjeta E/S es de alta latencia y bajo ancho de banda, el uso de un sub-sistema de

29

DRAM: Dynamic Random Access Memory

37

memoria integrada permite a las tareas intensivas de computo y de datos en las FPGAs tener una acceso directo y dependiendo de la aplicacin a las arreglos de datos.

b) Matriz FPGA masivamente paralela La segunda arquitectura basada en FPGA generaliza la placa aceleradora FPGA reuniendo una coleccin muy grande de placas FPGA como un nico recurso computacional, como se muestra en la
Figura 21.

Esta arquitectura es particularmente til para la emulacin de la lgica o computo a una gran escala. La matriz de FPGA masivamente paralela requiere una interconexin de alto rendimiento para que la comunicacin entre las placas FPGA pueda asemejarse al ancho de banda entre FPGAs en la misma placa.

Figura 21 - Matriz FPGA masivamente paralela [1].

38

c) Supercmputo Reconfigurable

En la supercomputacin reconfigurable, las placas FPGA son incluidas como nodos de aceleracin en un grupo (cluster) de alto rendimiento [2]. Esta tarjeta tiene como caracterstica la comunicacin con procesadores convencionales, as como con otras FPGAs a travs de una red de interconexin de gran ancho de banda. Esto le permite que la velocidad de transmisin con el host sea ms rpido (una latencia de microsegundos) con un gran ancho de banda, permitindole compartir su estado con el host ms fcilmente. Este sistema est dispuesto de manera que se tengan muchas placas interconectadas de tal manera que pueda resolver problemas de grandes supercmputos sin limitaciones existentes.

Las primeras supercomputadoras reconfigurable de esta forma fueron desarrolladas por SRC Computers, Inc.

Figura 22 - Supercomputador Reconfigurable SRC [1].

d) Co-procesador Lgico Reconfigurable

El co-procesador lgico reconfigurable es la unin final de microprocesador tradicional con la lgica reconfigurable. Al igual que con procesadores en paralelo, slo vale la pena migrar funcionalmente

39

al hardware si el tiempo de ejecucin de hardware junto con el tiempo de la migracin a hardware es significativamente menor que el tiempo para calcular la funcin en el software:

Al permitir que el procesador y la lgica reconfigurable compartan el estado de bajo nivel, el componente de la

desigualdad se puede reducir considerablemente, permitiendo una menor granularidad de las tareas, de manera rentable, asignado a hardware. Tambin hace posible reconfigurar de forma dinmica la lgica durante la ejecucin, similar al cambio de contexto en los procesadores convencionales. La idea de la dramtica reduccin de la latencia y aumento del ancho de banda entre el microprocesador y la lgica reconfigurable mediante la combinacin de los dos en una sola entidad se ha repetido desde los primeros das de la computacin reconfigurable. El primer IC co-procesador reconfigurable que se fabric fue el chip NAPA 1000 por la National Semiconductor. Este chip utiliz un ncleo RISC30 de 50 MHz 32-bit, junto con la matriz lgica reconfigurable CLAY de la National. El procesador RISC, el chip de memoria local, un controlador de reconfiguracin, un controlador de red de interconexin, y la matriz lgica reconfigurable compartan un bus comn bsico (Figura 23). La matriz lgica reconfigurable tuvo acceso directo a la memoria local y dedicada. El Cmputo de la matriz lgica fue optimizado para un datapath de 32bit lineal y segmentado. Las columnas de 32-bit podan ser reconfigurados dinmicamente durante la operacin.

30

RISC: Reduced Instruction Set Computer

40

Figura 23 - NAPA 1000 [1].

2.1.2.4. Porqu usar Computacin Reconfigurables para DSP?

- Adecuado para DSP

La implementacin de DSP empleando RC es muy adecuada indican numerosos estudios, debido al paralelismo del RC que puede ser explotados por aplicaciones DSP. Las ms comunes aplicaciones a implementar son un Filtro FIR con la siguiente ecuacin:

( )

( ) (

Teniendo como representacin grafica al diagrama de flujo de la figura 23, el cual desarrollara computacionalmente N

multiplicaciones y N-1 adiciones secuencialmente. En un hardware de computo reconfigurable, los filtros FIR pueden ser implementados usando segmentacin de tal manera que se desarrollan N multiplicaciones y N-1 adiciones en cada ciclo con resultados en cada ciclo. La Fig. 24 nos muestra un equivalente al filtro FIR que ha sido

41

altamente segmentado. Sin embargo, las aplicaciones DSP, por mayora no implementan un solo filtro, sino llegan a necesitar de multiples Filtros FIR implemetados, adems de conversores analgicos digitales, tranformadas, etc.

Figura 24 - Implementacin de un FIR simple [2].

Figura 25 - Implementacin de un FIR altamente segmentado (4 Taps) [2].

Los factores que influyen al DSP el uso de cmputo reconfigurable son: El ancho de palabra de aplicaciones DSP empleados por conversores A/D, comnmente de 8 a 12 bits, los cuales pueden ser procesados por microprocesadores; sin embargo, muchas veces no es suficiente, debido a que la precisin de la palabra es muy baja para algunas aplicaciones. En caso de querer ampliar el ancho, se vera limitado ya que el procesador no podra procesar tantos datos, pero un dispositivo RC con procesamiento paralelo si es capaz.

42

La suministracin de ancho de banda de memoria, la cual es mayor y flexible adems de la suministracin de puertos SRAM externos, permitiendo la capacidad de procesar mltiples bloques en simultneo, a comparacin con un microprocesador, que solo puede procesar entre dos variables de entrada y una de salida por sentencia. El ancho de banda de las Entradas/Salidas, las cuales, a travs de un microprocesador deben recuperar la informacin, tomndoles mayor tiempo antes del procesamiento de la informacin. Sin embargo un hardware reconfigurable maneja directamente los puertos, reduciendo el tiempo y requerimientos de procesamiento; sin contar con la flexibilidad de personalizar las E/S y la escalabilidad del ancho de banda E/S

En sntesis, El DSP y la computacin reconfigurable puede ser buena pareja, debido al paralelismo disponible y la eficiencia de las implementaciones personalizables de computacin reconfigurable. Aunque muchas dispositivos de comput reconfigurables slo operan en decenas a unos pocos cientos de megahercios, dado el potencial de explotacin del paralelismo, no debera sorprender que las implementaciones de aplicaciones de comput reconfigurable DSP puedan superar a los microprocesadores y procesadores de seales digitales programable (PDSP) a pesar de operar en 1/10 veces o menos de la frecuencia del reloj.

- Comparacin en Tecnologas de Implementacin DSP

Al momento de elegir un tipo de hardware empleado para DSP se tiene que tener en cuenta la aplicacin a realizar ya que cada uno de estos tiene un lugar de aplicacin, que comnmente no es compartido.

43

Tecnologa

Desempeo

Costo del Diseo del Sistema Potencia Flexibilidad

Costo Por Chip

E/S Memoria (Ancho de Banda) (Ancho de Banda)

Procesador de Proposito General Bajo Bajo Bajo-Medio Alto Alto

Bajo

Bajo

Microcontrolador Bajo Bajo Bajo Medio Alto

Bajo

Bajo

DSP Programmable Medio Bajo-Medio Medio

Medio

Medio

Medio

Bajo

Tabla 1 - Comparativa Cualitativa de Tecnologas de Implementacin DSP [2].

ASIC Alto Alto Bajo

Bajo

Bajo

Alto

Alto

Recongurable Hardware Medio

Medio-Alto

Medio-Alto

Medio-Alto

Alto

Alto

Alto

44

Entre las tecnologas de implementacin contamos con: Procesadores de propsito general (GPP), de rendimiento relativamente bajo debido a los cuellos de botella de su arquitectura Von-Neumann (memoria de datos e instrucciones compartida). Su bajo costo de adquisicin, debido a su produccin en masa, y su programabilidad y reprogramabilidad son su mayor atractivo. La flexibilidad provista por su programabilidad y la programacin de alto nivel facilitan su uso para el manejo de diversas tareas. Sus desventajas son la considerable cantidad de energa para su funcionamiento y el throughput relativamente bajo proporcionado por el sistema. Adems de su ancho de banda de memoria y ancho de banda de E/S es relativamente bajo. Su uso en aplicaciones DSP es en sistemas ya disponibles, como en una PC de escritorio, con bajas prestaciones. Los Microcontroladores, un pariente cercano a la GPPs, son efectivamente microprocesadores de ms bajos rendimiento que se utilizan ms para aplicaciones de control en lugar de procesamiento de datos. Con frecuencia tienen soporte de hardware para hacer E/S y, a veces instrucciones especiales para el ejercicio de las funciones DSP. En su mayor parte, sus fortalezas y debilidades son similares a los de GPPs, excepto por lo general requieren menos energa y ofrecen menos rendimiento. Los Procesadores de Seales Digitales Programables (PDSPs) son dispositivos generados a partir de los GPPs, sin embargo tienen grandes cambios y mejoras como el empleo de la arquitectura HARVARD (Memoria de datos e instrucciones separadas), llegando a ser ms populares que sus predecesores. Los PDSPs tienen mayor rendimiento que los GPPs y los microcontroladores de baja potencia, segn lo observado en la Tabla 1, sin embargo

45

su programabilidad es relativamente difcil comparada con las otras dos, dificultad presentada por la forma de programacin de las caractersticas especiales de la arquitectura a emplear, si se quiere llegar a un rendimiento mximo. Los PDSPs son encontrados en mltiples aplicaciones debido a su rendimiento y caractersticas de energa, como en reproductores de msica digital y CD, mdems convencionales y DSL31, entre otros. Pero tambin se cuenta con PDSPs de mayor calidad que son disponibles a expensas de un mayor costo e incremento de la energa suministrada. Los ASIC posiblemente sean los dispositivos ms idneos para aplicaciones DPS, debido a su rendimiento, potencia y ancho de banda de memoria y E/S. Sin embargo su adquisicin se dificulta por motivo del costo de adquisicin, costo generado por la creacin de la misma; el tiempo de diseo, fabricacin y validez que emplea, entre meses a un ao; y la falta de flexibilidad. Una vez implementada una aplicacin en un ASIC esta no puede cambiarse, generando problemas en el rediseo. Las ASICs se encuentra presente en aplicaciones de alto procesamiento, como codecs MPEG para celulares; o aplicaciones crticas, donde el rendimiento y otras limitaciones son de suma importancia, como en aplicaciones militares. Los FPGAs (sistemas reconfigurables) cuentan con ventajas y desventajas al momento de emplearlos en una aplicacin DSP. Si es cierto que su hardware reconfigurable proporciona rendimiento y flexibilidad, rendimiento mejor que el de un PDSP, su costo de desarrollo se encuentra entre sobre el de PDSP y ASIC, bordeando los US $ 10.000 por FPGA. Requiere tanta energa como los ASIC incluso como los PDSP, suponiendo que este
31
DSL: Digital Subscriber Line

46

ltimo tiene un alto rendimiento. Los FPGAs proporcionan una gran flexibilidad ya que pueden adaptarse con eficiencia a una gran variedad de nuevas aplicaciones; adems, el FPGA provee mayor memoria, interface, y otras caractersticas personalizables significativas en comparacin con otras tecnologas. Actualmente, el campo de aplicacin de los FPGAs son aplicaciones de alto rendimiento, donde su produccin sea de gran volumen y no exista restriccin de energa. En un diseo donde la

reprogramabilidad y flexibilidad son necesarios, la solucin apropiada ser un hardware reconfigurable o FPGA.

2.1.3. FILTROS FIR

2.1.3.1. Teora bsica Filtros FIR


Un filtro FIR con longitud M, entrada x(n) y salida y(n) se describe por la ecuacin de diferencias [6]:

( )

(1)

donde {

} son los coeficientes del filtro. Esta estructura es comnmente

conocida como promedio mvil. Alternativamente, es posible representar la secuencia de salida como la convolucin de la respuesta a impulso del sistema h(n) con la entrada.

( )

( )

(2)

47

donde x(n) representa la entrada muestreada,

( ) representa la respuesta a

impulso ideal del filtro, e y(n) es la salida filtrada. Es claro que las ecuaciones (1) y (2) son iguales en su forma y, por lo tanto, se puede decir que ( ), k = 0, 1, 2,..., M-1. En general, la respuesta a impulso ( ) para un filtro ideal es infinita en =

duracin y debe ser truncada en algn punto para su manejo en sistemas reales. Para producir un filtro FIR de largo M es necesario truncarla en n = M 1. Este truncamiento es equivalente a la multiplicacin de la respuesta a impulso ideal del filtro con una ventana rectangular, definida como: ( ) {
(3)

Con ello se puede rescribir la ecuacin (2) de la siguiente forma:

( )

( )

(4)

Esta truncacin de los coeficientes afecta la respuesta del filtro, apareciendo oscilaciones en las bandas de paso y supresin, adems de una disminucin en la pendiente de cada del filtro. Estas caractersticas pueden alterarse utilizando otro tipo de ventanas y entre las ms comunes se pueden mencionar las siguientes:

Blackman

(5)

Hamming

(6)

Aplicando la transformada Z a (4) es posible observar algunas caractersticas interesantes de los filtros FIR:

48

* ( )+

{ ( )

)}

* ( )+ ( )
(7)

( )

* ( )+

De (7) se puede ver que un filtro FIR de orden M posee M-1 polos en cero, es decir M-1 retardos, por lo que es siempre estable, y su caracterstica de filtrado est dada slo por la ubicacin de sus ceros.

2.1.3.2. Buffer Lineal y Circular


De la ecuacin (4) es posible identificar tanto entradas x(k) como coeficientes b(k). Para calcular la salida del filtro es necesario mantener en memoria un buffer con los datos de las entradas pasadas (tambin llamadas delay line) adems de la muestra actual. Existen dos formas de implementar un buffer para almacenar los datos pasados. Buffer Lineal: Este tipo de buffer contempla el uso de un puntero que siempre apunta al comienzo del arreglo que acta como buffer. Con este tipo de arreglo es necesario realizar corrimientos sucesivos de todos los datos almacenados de modo que el ms antiguo caiga d el buffer y el ms nuevo quede en la primera posicin. El inconveniente que se presenta en esta implementacin es que el costo en tiempo de ejecucin de mover grandes cantidades de datos es alto. En la Figura 26 se observa un esquema de la implementacin.

49

Figura 26 - Esquema del Buffer Lineal [6].

Buffer Circular: El direccionamiento por buffer circular se basa en la manipulacin de un puntero, el cual es incrementado en cada ciclo. Por este mtodo es posible realizar los clculos de forma ms eficiente. Cada nueva muestra que debe ser almacenada es ubicada en la posicin de memoria utilizada por el dato ms viejo, y que ya no es necesario para el clculo de la salida del filtro, reutilizando de esta forma la memoria. Cuando el puntero alcanza el final del buffer debe ser actualizado para que salte al comienzo del buffer. Este hecho da nombre a este tipo de buffer ya que el final del arreglo parece quedar junto al comienzo del mismo en una forma circular. Algunos DSPs implementan los buffer circulares por hardware, lo cual permite conservar memoria y minimizar la sobrecarga del software. Es necesario darse cuenta de que este tipo de implementacin requiere del manejo apropiado del puntero tanto de buffer de datos como de coeficientes (Figura 27)

Figura 27 - Movimiento de datos en un buffer circular [6].

50

2.1.4. COMPILADORES C PARA ARQUITECTURAS RECONFIGURABLES

2.1.4.1. Plataformas FPGA


Plataforma se define como la configuracin verificada de software y/o hardware que puede ser usada como la base para una o ms especificaciones especficas. Una plataforma puede estar conformada por un slo FPGA o algn otro tipo de dispositivo programable, una tarjeta llena de mltiples FPGA, o incluso un sistema de desarrollo como una PC de escritorio o un workstation que emule el comportamiento de un FPGA. Una plataforma siempre de contener un elemento de hardware programable, como un FPGA, y debe ser capaz de implementar todo o parte del algoritmo de software [12].

Dentro de una plataforma se consideran elementos determinantes al comportamiento de diseo como son procesadores embedded dentro del FPGA, lo cual permite correr sistemas operativos como son el Micro Linux (uClinux), Nucleus, ThreadX, etc.. Estos son procesadores soft, los cuales son IP cores (Intellectual Property) puesto que son implementaciones de microprocesadores a partir del ordenamiento de compuertas de las que dispone el tejido reconfigurable. El diseo usando plataformas con ncleos soft, permite implementar los llamados system-on-chip (SoC).

Ncleos conocidos son los Nios de Altera, Microblaze de Xilinx, Leon3 de Aeroflex Gaisler A, entre otros.

51

Figura 28 - Soft processor dentro de un FPGA junto a otros IP (Intellectual Property) cores [12].

Tambin existen plataformas con procesadores hard, es decir, procesadores fsicos en las plataformas como son la Xilinx Virtex-4 FX y Virtex-5 FXT que poseen ncleos PowerPC y la Atmel FPSLIC que trae un AVR.

Al usar plataformas con un procesador soft, implica que el CPU realizar el control de trabajo del circuito y clculos sobre todo de verificacin, mientras que el resto del FPGA se encargar de operar el paralelismo y la comunicacin de interfaces.

- MICROBLAZE

Es un ncleo propietario de 32 bits producido por Xilinx que corresponde a la arquitectura RISC DLX, existen versiones clones de sta con la intencin de proveer una librera de cdigo abierto, estas son aeMB y OpenFire.

52

Figura 29 - Arquitectura DLX RISC de acuerdo al modelo de D.A.Patterson, J.L. Hennessy publicado en 1996 [13].

Microblaze utiliza un bus primario de I/O llamado CoreConnect PLB32 Bus, para acceso al a memoria local BRAM33 implementa un bus LMB34, en cuanto a la aceleracin por hardware como coprocesador, la manipulacin de instrucciones personalizadas y conexiones se realiza mediante FSL35.

Siendo sus ventajas fundamentales la configurabilidad y programabilidad permite configurar el tamao de cach, interfaces de bus, la profundidad del pipeline (puede ser 3-stage, el cual sacrifica velocidad de reloj por capacidad lgica y se implementa sobre familias como las Spartan, o 5-stage, este ltimo permite lograr mayores velocidad de reloj y se implementa en familias de FPGA's como el Virtex-5 donde se logran velocidades mximas de hasta 210 Mhz), el MMU36 (con el cual puede manipular kernels como el de Linux y al no usarlo, puede correr sistemas operativos de proteccin

32 33 34 35 36

PBL: Processor Local Bus BRAM: Block RAM LMB: Local Memory Bus FSL: Fast Simple Link MMU: Memory Management Unit

53

limitada y de un modelo de memoria virtual como son el uCLinux y el FreeRTOS37).

Sus principales caractersticas son [14]:

Unidad de Gestin de Memoria (MMU)

Completa MMU con memoria virtual soportada por Linux 2.6 Modo MPU38 para proteccin de regiones en aplicaciones RTOS seguras.

Unidad de Punto Flotante


Compatible con IEEE 754 Precisin Simple

Soporte de Excepciones de Hardware


Acceso no alineado Instruccin ilegal Error de bus de datos Error de Instruccin de Bus Divisiones entre cero

Cache de Datos e Instrucciones Uso de bloques RAM integrados primitivos Tamao configurable de 2kB - 64kB Microcache configurable (empleando RAM distribuido) de tamao de 64B 1024B Escritura mapeada directa a travs de operacin

37 38

RTOS: Real Time Operating System MPU: Mltiple Process Unit

54

Desplazador

1 ciclo de operacin

Hardware Divisor de Enteros

32 ciclos de operacin

Hardware Multiplicador

1 ciclo de operacin. Operacin MUL64

Extensin de conjunto de instrucciones


Instruccin de Comparacin de Patrones Set y Clear en Registros de Maquinas de estado Acceso Atmico

Adaptacin de Mltiples Buses

dependiendo de las

diferentes necesidades de rendimiento Bus de Memoria Local (LMB) para acceso rpido a memoria local

Interface de enlace de Cache punto a punto Xilinx para conexiones directas entre la cache y la memoria externa

Bus de Procesador Local (PLB46) para conectar mltiples perifricos directamente al MicroBlaze

Hasta 16 Enlaces Rpidos Simplex (FSL), enlaces de Coprocesador para aceleracin de hardware

Sealizacin de Interrupcin Por Flanco o nivel Activo en alto o bajo

55

Lgica de Depuracin

Soporte de Ncleo de depuracin va control JTAG39 Hasta 8 puntos de anlisis en hardware Puerto de Rastreo Integrado

2.1.4.2. Programas de Sntesis


Existen mltiples herramientas basadas en lenguaje C y tambin en Java, empleadas para sintetizar circuitos provenientes de un HLL hacia una plataforma basada en FPGA. Los algoritmos de operacin en punto fijo o flotante son traducidos por las herramientas del compilador hacia lenguaje HDL para poder ser montados en la plataforma; previamente probados, simulados, verificados y acelerados. Si bien el lenguaje base del compilador es C, puede tomar las siguientes formas en el entorno usado [7]:

Que el lenguaje sea de base secuencial, con construcciones para manipular anchos de bits, describiendo paralelismo explcito, y que conecte piezas de hardware. Los entornos de programacin que realizan esto son Handel C de Celoxica, Impulse C, y el compilador MAP C del Carte SRC.

Que el lenguaje creado sea para descripcin algortmica, lo cual simplifica el trabajo del compilador, pero requiere que los programadores reestructuren la descripcin algortmica como tambin reescriban en una nueva sintaxis. Este es el caso del flujo de datos del lenguaje en Mitrion C y SHard.

Que se represente en una interfaz grfica. Las herramientas grficas proveen una vista en diagrama de bloques ordenados de forma jerrquica que permite al diseador rpidamente construir circuitos.

39

JTAG: Joint Test Action Group

56

Dos herramientas que usan esta representacin son System Generator de Xilinx y Viva de Starbridge.

Programas como Impulse C, Handel C y DIME-C, tienen un impacto positivo en el mercado, el uso para aplicaciones y mejoras constantes de estos lo demuestran. Sin embargo, estos programas usan un dialecto no-ANSI, utilizan un dialecto propietario. Ante la necesidad de lograr una estandarizacin y extensin del cdigo C, aparecen propuestas abiertas como lo son Trident y el estndar IEEE System-C.

La siguiente tabla muestra los programas de sntesis ms desarrollados [4]:

57

Compilador HardwareC Transmogrifier C Impulse C C2Verilog

Caractersticas Mapeo de la especificacin de hardware a nivel de comportamiento hacia la descripcin de nivel de transferencia de registros. Enfoque en procesos concurrentes, paso de mensajes, instanciamiento explcito de procedimientos, y muestras Un compilador para un lenguaje simple de descripcin de hardware. Toma un programa escrito en un subset restringido del lenguaje de programacin C,y produce, un netlist para un circuito secuencial que implementa el programa. Extensin open-source de C++ para modelamiento HW/SW. Orientado para la industria de verificacin a nivel de sistemas. Usa libreras de clase C++ y un kernel de simulacin para crear diseos de comportamiento y RTL. Soporta descomposicin jerrquica de un sistema hacia mdulos. Facilita la conectividad estructural entre mdulos usando puertos. Especializado en operaciones de modelamiento secuencial. Compatible con System C y facilita interprocesos de sincronizacin y comunicacin. Convierte algoritmos C en Verilog. Resultados de sntesis lgica mejorados. Gran control sobre los procesos de compilacin de C hacia cdigo HDL. Buena compatibilidad e interfaz con otros diseos de automatizacin a nivel de sistemas (SLDA System Level Design Automation), verificacin funcional, y herramientas de sntesis en flujo de diseo. Usa conceptos de procesadores soft-core. Trabajar en la capa de abstraccin entre cdigo C y FPGA. Hace uso de APIs de mapeo. Produce interms de salida de ncleos IP VHDL para la arquitectura FPGA seleccionada. Conocido por el desarrollo de aplicaciones precisas en los ciclos. La frecuencia de reloj es limitada por la operacin ms lenta. El compilador especializado en anlisis eficiente, optimizacin de cdigo. Provisin para obtener interms de salida de VHDL, Verilog, SystemC, EDIF. Extensin de ANSI C. Soporta diseos de comportamiento y estructurales jerrquicos de sistemas embedded. Enfocado en la sntesis y verificacin. Usado ampliamente para diseo a nivel de sistemas y modelamiento de arquitecturas. Lenguaje/compilador orientado para RISC de procesadores FPGA hbridos. Usa tcnicas de sntesis de datapath. Interms de salida en VHDL, VHDL estructural y Verilog estructural. Herramienta de sntesis algortmica para la generacin RTL. Salidas RTL a partir de una entrada de programa en C++ pura. Interms de salida de las netlists RTL en VHDL, Verilog, y System C. Herramientas de prototipo FPGA. Poca precisin en ciclos. Diseos de rendimiento de altas velocidad de reloj. El compilador soporta optimizaciones de pipeline o paralelas.

SystemC

Mitrion C

Handel C

Spec C

Napa C

Catapult C

DIME-C

Tabla 2 - C para compiladores de Diseo VLSI desarrollados hasta el momento

58

En la tabla anterior, se observa los compiladores en lenguaje C hasta ahora desarrollados.

Dentro de estos tenemos el Transmogrifier C, desarrollado por la Universidad de Toronto, Canada. El compilador genera una netlist para un circuito secuencial que implementa el programa. Los netlist son empleados para programar un FPGA Xilinx serie XC4000. Mitrion C, de la Mitrionics, que ha desarrollado un SDK40 que habilita al software escrito, empleando un lenguaje de asignacin nico, ha ser compilado y ejecutado en computadores basadas en FPGA.

El compilador Impulse C, de la Impulse Accelerated Tecnologies, que presenta una solucin para generar cdigo C a FPGA, el cual permite al diseador compilar Lenguaje C directamente en lgica optimizada lista para ser empleada con los FPGAs ms populares del mercado, Xilinx y Altera.

Catapult C, de la Mentor Graphics, se cuenta como una herramienta de sntesis de alto nivel para ASIC y FPGA, aportando al diseo de hardware de equipos inalmbricos y de procesamiento de imgenes y video, con libreras de algoritmos de modelacin, diseo, y verificacin de problemas, en las areas de SDTV41 y HDTV42, Compresin y Descompresin; y filtraje de seales de video y tambin en procesamiento de imgenes medicas, y procesamiento de imgenes de radar.

DIME-C es un compilador de C a VHDL de la compaa Nallatech, que aparte de trabajar con sus propias tarjetas DIMEtalk V3, tiene soporte para las FPGA de Xilinx Virtex 4 y 5. Es empleado para disear y optimizar algoritmos. Soporta un grupo de gramatica ANSI-C, sin punteros, adems de

40 41 42

SDK: Software Development Kit SDTV: Standard Definition Television HDTV: High Definition Television

59

soportar punto simple y punto flotante; y la optimizacin y paralelismacion del cdigo cuando es posible. Por otro lado, la SCR Computers ha desarrollado un compilador Carte que toma un existente lenguaje de alto nivel como C o FORTRAN, y con pocas modificaciones, los compila para su ejecucin en el FPGA y el microprocesador. Carte extrae el mximo paralelismo del cdigo y genera lgica de hardware segmentada.

2.1.4.3. De C a FPGA

El uso de compiladores C y lenguajes similares se dar siempre y cuando el cdigo fuente utilizado cumpla con los estndares ISO; en su uso de seuelos, comentarios y pragmas. Dentro de las razones y beneficios de usar cdigo C conocidas se presenta: Hay ms programadores de C que diseadores de hardware, y escribir algoritmos en C es comnmente ms rpido que en HDL. Existe una gran referencia de cdigo para aplicaciones embebidas, por lo menos con la referencia escrita en C. Trabajar con una sola descripcin del programa entero facilita al diseador o al compilador de explorar rpidamente los balances de diferentes particiones de hardware/software. Tambin, permite que ambas versiones de hardware (HW) y software (SW) sean creadas de manera que el sistema operativo elija en el funcionamiento cual es mejor. Los diseadores pueden empezar con la compilacin automtica, y luego centrar sus esfuerzos en la mejora de una combinacin de bucles, mientras otros se benefician del compilador en su aumento de velocidad en el cdigo restante. Adems, con el apoyo del compilador el esfuerzo que se requiere en diseo se reduce en muchos casos simplemente a la reestructuracin del cdigo o incluir directivas simples en la forma de comentarios o sintaxis # pragma.

60

El cdigo puede ser fcilmente testeado en un microprocesador para corregir errores. El cdigo C original se puede particionar entre la unidad central de proceso y dispositivos reconfigurables, incluyendo procedimientos, bucles compuestos, bucles internos, y bloques.

La particin entre HW y SW basa en las capacidades de los dispositivos reconfigurables y los procesadores a usar para la implementacin.

61

3. METODOLOGIA PARA LA SOLUCION DEL PROBLEMA

3.1. HERRAMIENTAS EMPLEADAS

3.1.1. IMPULSE C CoDeveloper


Impulse C es un conjunto de rutinas C y que poseen libreras de extensin ANSI, que son compatibles con el estndar y al mismo tiempo con un modelo de programacin paralela, en el caso de Impulse C el modelo paralelo en el que se basa es CSP43. El entorno de Impulse C, libreras, y documentacin es desarrollado por la empresa Impulse Accelerated Technologies.

Su funcionamiento est centrado en la descripcin de mltiples unidades de procesamiento llamadas procesos; y el soporte de streams, seales y memorias mediante funciones y tipos de datos correspondientes. As, poder agrupar los procesos en una sola aplicacin paralela que pueda funcionar completa sobre una plataforma en hardware; y esta aplicacin corriendo en hardware al mismo tiempo sea capaz de comunicarse con procesos de software residente en un microprocesador embedded o en un entorno de simulacin mediante los streams, seales y memorias. Esto permite desarrollar aplicaciones de tres tipos con las herramientas de co-simulacin hardware/software y las de optimizacin C-toRTL44 del entorno de Impulse C como se muestra en la Figura 30: (1) traducir un mdulo descrito en C hacia HDL, (2) acelerar aplicaciones de un soft-processor y (3) acelerar aplicaciones de un procesador externo; todas estas alojadas en un FPGA.

43 44

CSP: Communicating Sequential Processes RTL: Resistor-transistor logic

63

Figura 30 - Usos de impulse C [10].

Impulse C posee una gran versatilidad y buen soporte para el desarrollo de aplicaciones. El compilador soporta el uso de scheduling, loop pipelining, y unrolling; como tambin el uso de sintaxis #pragma que permiten realizar optimizaciones personalizadas. Permite la simulacin/emulacin de escritorio, lo cual es beneficioso para el desarrollador, y trabaja con compiladores como el gcc y el Visual Studio. Tambin posee libreras especficas para el soporte de plataformas FPGA de Xilinx y documentacin sobre Microblaze y Power-PC; as como, de Altera y los soft processors Nios I y II.

Por esto Impulse C es usado en aplicaciones como procesamiento de imgenes y sistemas embedded (compresin de datos, seguridad de comunicacin, diagnstico mdico y forense por imgenes, robtica y visin de mquina) y en computacin de alto performance (bioinformtica, criptografa, anlisis de trfico y filtrado de redes).

- EL MODELO CSP Y EL MODELO DE PROGRAMACIN DE IMPULSE

El modelo Communicating Sequential Processes conocido como CSP por sus siglas en ingls, fue descrito por Sir Anthony Hoare en 1978 y publicado en 1985. Este modelo describe la interaccin entre componentes llamados procesos, cada proceso corresponde a un programa tradicional de software el cual se comunica mediante canales de datos llamados streams.

64

Cada programa opera independientemente en su hardware, parecido al comportamiento de una mquina von Neumman; mientras que el funcionamiento del programa como un todo depende del movimiento de datos entre los canales de cada programa, considerando que estos tienen inmediato a los recursos de memoria interno.

Como modelo ideal, este no debera presentar retardos en el intercambio de datos. Resalta el concepto del acceso a la memoria local, el cual debe ms rpido que a los nodos externo. Este concepto se llama locality, y es una nocin importante en los sistemas de alto desempeo.

El modelo de programacin de Impulse C es de comunicacin de procesos secuenciales orientado aplicaciones mixtas de hardware/software basadas en streams. Los procesos son sincronizados independientemente, aceptan diversos tipos de datos realizando clculos especficos y asignados, generando salidas deseadas. Estos procesos no son llamados (called) como subrutinas, sino que al contrario, siempre estn activos respondiendo a las seales de entrada que se les presenten; implementando paralelismo aplicado.

Figura 31 - Flujo de una aplicacin de proceso a proceso con acceso a memorias compartidas [3].

De acuerdo al modelo CSP, las aplicaciones en Impulse C poseen las siguientes caractersticas [3]:

65

La aplicacin posee altos rangos de datos, de y hacia las fuentes de datos, y entre los elementos de procesamiento.

Los tamaos de los paquetes de datos son fijas, con una relativamente pequea carga en los streams.

Mltiples clculos relacionados pero independientes estn obligados a realizarse en el mismo stream de datos.

La data consiste en valores de precisin baja o fija, tpicamente enteros de ancho fijo o valores fraccionales en punto fijo (fixedpoint).

Existen referencias hacia las memorias locales o compartidas, las cuales deben ser usadas para almacenamiento de arrays de datos, coeficientes, y otras constantes, y para almacenar resultados de cmputos.

Mltiples

procesos

independientes

estn

primordialmente

comunicados a travs de la data que est pasando, con una sincronizacin ocasional requerida va mensajes.

Mediante una comunicacin correcta entre procesos, se obtendr un diseo gil y optimizado en operacin. Siendo los streams el medio perfecto para los desarrolladores de lograr sincronismo entre procesos y memorias.

3.1.2. XILINX ISE

66

La herramienta Xilinx ISE permite realizar diseos en plataformas que incorporan dispositivos reprogramables como los FPGAs de la familia Spartan y otros productos de Xilinx. Viene en tres ediciones llamadas Logic Edition, Embedded Edition y DSP Edition; as como las tres ediciones estn contenidas en todo el paquete System Edition.

Figura 32 - Logo del ISE Design Suite de Xilinx.

Se lleg a emplear la edicin Xilinx ISE 11.1 actualizada con el SP3, disponibles en la pgina web del fabricante:

http://www.xilinx.com/support/download/index.htm.

Figura 33 - Herramienta BSB Wizard del Xilinx Platform Studio.

3.1.3. MATLAB

67

MATLAB (abreviatura de MATrix LABoratory, "laboratorio de matrices") es un software matemtico que ofrece un entorno de desarrollo integrado (IDE) con un lenguaje de programacin propio (lenguaje M). Est disponible para las plataformas Unix, Windows y Apple Mac OS X. Entre sus prestaciones bsicas se hallan: la manipulacin de matrices, la representacin de datos y funciones, la implementacin de algoritmos, la creacin de interfaces de usuario (GUI) y la comunicacin con programas en otros lenguajes y con otros dispositivos hardware. El paquete MATLAB dispone de dos herramientas adicionales que expanden sus prestaciones, a saber, Simulink (plataforma de simulacin multidominio) y GUIDE (editor de interfaces de usuario - GUI). Adems, se pueden ampliar las capacidades de MATLAB con las cajas de herramientas (toolboxes); y las de Simulink con los paquetes de bloques (blocksets).

Es un software muy usado en universidades y centros de investigacin y desarrollo. En los ltimos aos ha aumentado el nmero de prestaciones, como la de programar directamente procesadores digitales de seal o crear cdigo VHDL.

Para la implementacin del filtro FIR se empleo la versin 2008, versin de prueba de 30 das suministrada en la pagina web de la Empresa Mathworks.

Figura 34 - Logo de Matlab

3.1.4. DIGILENT SPARTAN 3E STARTER BOARD

68

Figura 35 - Tarjeta Digilent Spartan 3E Starter Board Rev. D usada en la implementacin.

La tarjeta posee las siguientes caractersticas e incorpora los siguientes dispositivos.

FPGA Conectores

Xilinx XC3S500E de 500K compuertas Conector 100-pin Hirose FX2 Pmod de 6-pines DB15HD VGA PS/2 keyboard 2 DB9 RS-232 connectors (1 DTE , 1 DCE) RJ-45 Ethernet Header de 16-pines para mdulos LCD opcionales SMA para entradas de reloj de alta velocidad JTAG via el puerto USB2 de la tarjeta; JTAG & SPI Flash con cable paralelo o USB JTAG; varias opciones de configuracin. Linear Technologies Power Supplies Texas Instruments TPS75003 Triple-Supply Power Management IC SMSC LAN83C185 Ethernet PHY Memoria de 32MB Micron DDR SDRAM 16MB Numonyx StrataFlash 2MB ST Microelectronics Serial Flash Xilinx XCF04 Platform Flash para almacenar la configuracin del FPGA

Programacin ICs

Memoria

Tabla 3 - Caractersticas de la Tarjeta Digilent Spartan

3.2. PROYECCIN DE COSTOS

69

HERRAMIENTA
TARJETA SPARTAN 3E STARTER BOARD LICENCIA NODE-LOCKED XILINX ISE EMBEDDED EDITION LICENCIA PERPETUAL IMPULSE CODEVELOPER TOTAL

PRECIO (US $) 190 595 10500 11285

Tabla 4 - Precios de herramientas a utilizar en un diseo.

La tarjeta Digilent Spartan 3E fue una donacin como desarrollador hacia el Ing. Kaln Lau Gan al ser parte del Xilinx University Program. Mientras que la licencia usada en el Xilinx ISE fue la del trial de 30 das. La licencia del Impulse CoDeveloper fue una donacin de tres meses de un miembro del staff de Impulse.

3.3. TECNICA DE DISEO TOP-DOWN


La programacin es sin duda una actividad compleja, pues en ella se combinan muchos procesos mentales [16]. Tambin conocida como de arriba-abajo, consiste en establecer una serie de niveles de mayor a menor complejidad (arriba-abajo) que den solucin al problema. Se establece una relacin entre las etapas de la estructuracin de forma que una etapa jerrquica y su inmediato inferior se relacionen mediante entradas y salidas de informacin. Este diseo se caracteriza por una serie de descomposiciones sucesivas del problema inicial, que recibe el refinamiento progresivo del repertorio de instrucciones que van a formar parte del programa.

La utilizacin de la tcnica de diseo Top-Down tiene los siguientes objetivos bsicos:


Simplificacin del problema y de los subprogramas de cada descomposicin. Las diferentes partes del problema pueden ser programadas de modo independiente e incluso por diferentes personas.

70

El programa final queda estructurado en forma de bloque o mdulos lo que hace ms sencilla su lectura y mantenimiento.

Figura 36 - Representacion de un diseo TOP-DOWN.

3.4. PROGRAMACION ESTRUCTURADA

La programacin estructurada (PE) es una forma de escribir programas de ordenador (programacin de computadora) de forma clara. Para ello utiliza nicamente tres estructuras: secuencia, seleccin e iteracin; siendo innecesario el uso de la instruccin o instrucciones de transferencia incondicional (GOTO, EXIT FUNCTION, EXIT SUB o mltiples RETURN).

Figura 37 Ejemplo de un Programacin Estructurada

Un programa estructurado se compone de funciones, segmentos, mdulos y/o subrutinas, cada una con una sola entrada y una sola salida. Cada uno de estos

71

mdulos (an en el mismo programa completo), se denomina programa apropiado cuando, adems de estar compuesto solamente por las tres estructuras bsicas, tiene slo una entrada y una salida y en ejecucin no tiene partes por las cuales nunca pasa ni tiene ciclos infinitos.

La PE tiene un teorema estructural o teorema fundamental, el cual afirma que cualquier programa, no importa el tipo de trabajo que ejecute, puede ser elaborado utilizando nicamente las tres estructuras bsicas (secuencia, seleccin, iteracin).

Ventajas de la programacin estructurada

Los programas son ms fciles de entender, ya que pueden ser ledos de forma secuencial, sin necesidad de hacer seguimiento a saltos de lnea (GOTO) dentro de los bloques de cdigo para entender la lgica.

La estructura del programa es clara, puesto que las instrucciones estn ms ligadas o relacionadas entre s. Reduccin del esfuerzo en las pruebas. El seguimiento de los fallos o errores del programa ("debugging") se facilita debido a la estructura ms visible, por lo que los errores se pueden detectar y corregir ms fcilmente.

Reduccin de los costos de mantenimiento de los programas. Programas ms sencillos y ms rpidos (ya que es ms fcil su optimizacin). Los bloques de cdigo son auto explicativos, lo que facilita la documentacin. Los GOTO se reservan para construir las instrucciones bsicas. Aunque no se usan de forma directa, por estar prohibida su utilizacin, estn incluidas implcitamente en las instrucciones de seleccin e iteracin.

Un programa escrito de acuerdo a estos principios no solamente tendr una mejor estructura sino tambin una excelente presentacin. La programacin estructurada ofrece estos beneficios, pero no se la debe considerar como una panacea ya que el desarrollo de programas es, principalmente, una tarea de dedicacin, esfuerzo y creatividad.

Inconvenientes de la programacin estructurada

72

El principal inconveniente de este mtodo de programacin es que se obtiene un nico bloque de programa, que cuando se hace demasiado grande puede resultar problemtico su manejo; esto se resuelve empleando la programacin modular, definiendo mdulos interdependientes programados y compilados por separado (en realidad esto no es necesario, pero es recomendable para su mantenimiento y funcionalidad).

En realidad, cuando se programa hoy en da se suelen utilizar, tanto las tcnicas de programacin estructurada como las de programacin modular, de forma conjunta y por lo tanto es posible que cuando uno haga referencia a la programacin modularizacin. estructurada est considerando tambin las tcnicas de

Un mtodo un poco ms sofisticado es la programacin por capas, en la que los mdulos tienen una estructura jerrquica en la que se pueden definir funciones dentro de funciones o de procedimientos.

3.5. DISEO DE UN FILTRO FIR EN MATLAB


El propsito del experimento es la implementacin del Filtro FIR para su posterior anlisis. El filtro est basado en el sgte. esquema:

Figura 38 - Esquema Filtro FIR

73

Para la experimentacin con el filtro, empleamos como seal de entrada una seal cuadrada implementamos en el MATLAB con el nombre de senial_entrada (ANEXO 1), con frecuencia fundamental de 100hz una amplitud de 2 unidades pico a pico, con un periodo de 0.02segundos y una frecuencia de muestreo de 48Khz, obtenido de la sgte manera: ( )

Donde

= 2.5

Fo= frecuencia fundamental

Figura 39 - Seal de Entrada (double)

La seal previa implementada se encuentra en valores double, sin embargo para nuestro anlisis tambin empleamos el uso de valores fixed-point.

74

Figura 40 - Seal de Entrada (fixed point)

Para el diseo del FIR empleamos la funcin fir1, que disea los filtros FIR por mtodo de ventana. La funcin es llamada introduciendo, en el ambiente de trabajo de MATLAB, la siguiente instruccin:

B = fir1(N, Wn),

Donde el vector B, de longitud N+1, contendr los coeficientes de un filtro digital FIR pasabajas de orden N. La frecuencia de corte Wn debe estar entre 0 < Wn < 1.0, donde 1.0 corresponde a la mitad de la frecuencia de muestreo. El filtro resultante es real y tiene fase lineal, es decir, tiene simetra par en sus coeficientes obedeciendo la relacin: ( ) ( ), en donde k = 1, 2, ,N+1

Para nuestro diseo empleamos un FIR pasabajos, de orden 256, teniendo en cuenta que cuanto mayor es la orden del filtro obtendremos un mejor filtrado en la

75

seal, pero el tiempo de procesamiento tambin aumenta siendo una desventaja para aplicaciones en tiempo real. Determinamos Wn, la frecuencia de corte normalizada, a travs de la sgte

divisin: fc/fn, donde fn es la frecuencia de muestreo entre 2 y fc la frecuencia de corte del filtro que deseamos implementar. Ya que el la frecuencia de corte de nuestro filtro a disear es de 150hz, y la frecuencia de muestreo es de 48k, obtenemos un valor de Wn = 0.0063. Una vez que hemos obtenido estos valores, pasamos a la implementacin de la ecuacin del filtro FIR en MATLAB con el nombre de filtro_senial (ANEXO 2), el cual es dado por:

El programa del filtro obedece al siguiente diagrama de flujo:


INICIO

Seal Entrada -> x(n) fir1 ->coeficientes h(n)

Tiempo1 = cputime N=256 n= 0 i=0

SI

n=lenght(x)?

NO SI i=N? NO i=1 n=n+1

Y(n)=y(n)+(x(n-i)*h(i)) i=i+1

tiempo2=cputime-tiempo1 Display tiempo2 Plot y(n) Plot Respuesta en Frecuencia

FIN

Figura 41 - Diagrama de Flujo Filtro FIR

76

Obteniendo el sgte resultado:

Figura 42 - Seal de Salida y(n) (double)

Figura 43 - Seal de Salida y(n) (fixed point)

Figura 44 - Respuesta en Frecuencia Filtro Fir

77

3.6.

FIR256 Y FIR_ACCELERATED

En la implementacin usamos como base los ejemplos FIR filter example explicado en el libro Practical FPGA Programming In C de David Pellerin y Scott Thibault citado en las referencias bibliogrficas [3], y Complex FIR Filter example creado por Bruce Karsten [9] de Xilinx. Ambos ejemplos pueden conseguirse contactndose con el soporte al usuario de Impulse a la direccin electrnica support@ImpulseAccelerated.com.

Los coeficientes obtenidos en el diseo del filtro FIR en MATLAB fueron usados en la implementacin de dos filtros C fixed point: FIR256 y FIRACCELERATED, as como la misma seal de entrada para realizar pruebas y corroborar resultados. El uso de algoritmos con operaciones en fixed point se debe principalmente al menor consumo de capacidades computacionales tanto en hardware como en tiempo a comparacin de algoritmos en floating point. La notacin usada corresponde a 1 bit de signo, 8 bits enteros y 23 bits fraccionales; conocida como 1s8.23 y descrita en la siguiente figura:

Figura 45 - Capas de representacin en fixed point. [9]

78

FIR256

Este algoritmo corresponde a un filtro FIR de orden 256 en fixed point donde la operacin de multiplicacin es realizada en un buffer circular con desplazamiento de muestra, el cual fue implementado con el propsito de observar el funcionamiento de un FIR mediante simulacin en Impulse CoDeveloper en una computadora desktop y comparar los resultados al filtrar con los obtenidos en MATLAB.
Sw 1 Coefficients.dat Filter_in.dat 3 Hw coef 2 4 firbuffe r produc er stream_read stream_write FIR consume r

Figura 46 - Funcionamiento de FIR256 por bloques.

La carga de valores de coeficientes se realiza a partir del archivo Coefficients.dat donde se encuentran los valores en fixed point obtenidos en MATLAB. Estos valores pasan del SW al HW mediante un stream de lectura a llenar el array de coeficientes coef, considerando a la entidad de HW en modo lectura y al SW como un productor. Luego se llena el array firbuffer con los valores en fixed point de la misma seal de entrada empleada en MATLAB provenientes del archivo Filter_in.dat por el mismo stream. Una vez llenos los arrays estos pasan a operarse en la estructura FIR y el resultado es enviado mediante un stream de escritura hacia la estructura consumidora de SW y finalmente se expulsan hacia un archivo llamado Filter_out.dat mediante otro stream de escritura.

79

INICIO

int tap; int TAPS=256; co_int32 nSample; co_int32 coef[tap];

tap<TAPS s coef[tap]=nSample; tap++;

no

FIN
Figura 47 - For para el llenado del array coef

El llenado del array coef es completo, mientras que el de firbuffer es con un espacio para una muestra, la cual se toma al momento que inicia la estructura FIR. En ambos se hace uso de una variable llamada nSample que est asignada al stream de lectura, las dos se llenan por el uso de un comando cclico y estn dispuestas en el algoritmo una a continuacin de otra por lo que no es necesario instanciar las variables nuevamente para el llenado de firbuffer. Una vez operados los valores pasan a una variable llamada nFiltered relacionada al stream de escritura utilizado para la salida y luego se realiza el desplazamiento hacia atrs de las muestras para darle lugar a una muestra posterior.

80

INICIO

int tap; int TAPS=256; co_int32 nSample; co_int32 firbuffer[TAPS];

tap=1;

tap<TAPS s firbuffer[tap-1]=nSample; tap++;

no

FIN
Figura 48 - For para el llenado del array firbuffer

81

INICIO

int tap; int TAPS=256; co_int32 nSample; co_int32 firbuffer; co_int32 accum; co_int32 nFiltered;

con firbuffer[TAPS-1]=nSample; accum=0x00000000; no

tap<TAPS s

accum+=FXMUL32(firbuffer[tap],coef[tap],23);

nFiltered=accum; tap=1;

tap<TAPS s firbuffer[tap-1]=firbuffer[tap]

no

FIN
Figura 49 - Funcionamiento de FIR256

82

FIR_ACCELERATED

Es un filtro FIR circular a partir de un soft processor Microblaze, este implementa dos relojes TimeHa y TimeSa para medir el tiempo de operacin en software y hardware y contrastarlos. El objetivo es apreciar la aceleracin en hardware de procesos siendo este caso la operacin de un mismo filtro FIR en fixed point dentro del uBlaze como en el hardware mediante la obtencin de un factor de aceleracin.
XC3S500E SW uBlaze TimeHA TimeSA

fxmul32 call_accelerator HW FIR

Figura 50 - Funcionamiento FIR_ACCELERATED en bloques.

El factor de aceleracin obedece a la ecuacin: , donde:


( )

y es el reloj para medir el tiempo de

operacin en el procesador uBlaze.


( )

y es el reloj para medir el tiempo de

operacin en hardware. FinishIF_TS: es el tiempo final de operacin del timer. StartIF_TS: es el tiempo inicial de operacin del timer.

83

TIMER_FREQ_MILLI: es la frecuencia en HZ del CPU entre 1000. As mismo, se implement una macro llamada fxmul32 la cual permite realizar la multiplicacin de 32 bits requerida por el filtro porque la macro FXMUL32 utiliza en su definicin un tipo de 64 bits. Esta macro implementada se ajusta a las caractersticas del procesador Microblaze el cual es de arquitectura de 32 bits.

INICIO

int16 a1,ah,b1,bh; int16 r1,r2,r3;

a1=a . 0xFF; ah=(a>>16).0xFF; b1=b.0xff; bh=(b>>16).0xFF;

r1=FXMUL16(ah,bh,FRACBITS-16); r2=FXMUL16(ah,b1,FRACBITS-16); r3=FXMUL16(a1,bh,FRACBITS-16);

return (((int16)r1 << 16) + (int16)r2 + (int16)r3);

FIN
Figura 51 - Macro fxmul32, usando la macro de Impulse C FXMUL16 definido FRACBITS=23 en FIR_ACCELERATED.

84

El buffer circular fue implementado a base de punteros. Si tenemos un array de coeficientes llamado coef_values donde sus valores son {b0,b1,b2,,b255} estos pasarn a un buffer para coeficientes llamado coef_mem donde al ingresar se posicionan:
b0

coef_mem[0],coef_values[0] b1 b0

coef_mem[1] b2 b1 b0

coef_mem[2] b255 b254 b253 b3 b2 b1 b0

coef_mem[255], coef_values[255]
Figura 52 - Implementacion de punteros para buffer circular

Es el mismo caso para el buffer de valores a filtrar. Al tener en un array llamado filter_values de tamao N los valores sern sealados por el puntero pvalues, estos pasaran a un buffer filter_mem de tamao de los TAPS para coeficientes sealado por el puntero pmem, en este caso 256, hasta llenarlo, luego el puntero pmem sealar filter_mem[0] y volver a llenarse con la ltima posicin conocida de filter_values ms 1 ; para la primera ronda sera pvalues=255+1. Es decir se estn sealando las posiciones de un array, no las posiciones de memoria. Cuando se invoca al mtodo call_accelerator para operar en hardware se realiza el mismo llenado de buffer con otros nombres en los arrays y punteros. Es bsicamente el principio de funcionamiento de FIR256, el mtodo call_acelerator hace la funcin de productor y consumidor siendo aqu donde se le pasan los datos al hardware para operar y donde se

85

reciben los resultados de operacin para comprobar el buen funcionamiento del filtro en hardware.

FIR_ACCELERATED HACIA LA TARJETA SPARTAN 3E STARTER Una vez terminado el cdigo se pas a la compilacin mediante la herramienta Impulse C Co Developer, de forma que se pueden descartar errores en la sintaxis de cdigo y referencias, as como la creacin de un ejecutable usado para la simulacin. Para esto se hace click en Project>>Build Software Simulation Executable Observamos que la consola no arroj errores al compilar.

Figura 53 - Consola de Mensajes

Se especific el soporte a la plataforma (Xilinx Microblaze FSL). Click en Project>>Options. Y en el cuadro de dilogo se seleccion la plataforma y habilitamos los dual clocks que nos permitieron la correcta incorporacin de nuestro hardware generado hacia la tarjeta posteriormente. Luego se dio click en Aceptar.

86

Figura 54 - Menu Opciones de Impulse C Compiler

Se gener el HDL para la plataforma. Para esto se dio click sobre Project>>Generate HDL

Figura 55 - Menu Generacin de HDL

Se obtuvo en consola un resultado sin ningn error.

Figura 56 - Consola de Errores

87

Luego se export el Hardware generado hacia una carpeta EDK, la cual est contenida dentro de la carpeta donde se alojarn todos los archivos de nuestro proyecto. Se di click sobre Project>>Export Generated Hardware (HDL). Se hizo lo mismo para el software Project>> Export Generated Software.

Figura 57 - Menu Exportacin de HDL

Se procedi a realizar el diseo para el FPGA con la herramienta Xilinx Ise 11.1 SP3 EDK Platform Studio. Al abrirla se inici un proyecto con el Base System Builder wizard el cual es una herramienta que facilita el diseo de sistemas mediante una interfaz paso a paso.

Figura 58 - Menu Abrir Proyecto Xilinx Platform Studio

Se ubic la ruta del proyecto en la misma carpeta EDK donde se gener el software y el hardware en Impulse CoDeveloper para evitar problemas en bsqueda y relacin de archivos.

88

Figura 59 - Menu Proyecto Nuevo empleando el Wizard

Figura 60 - Menu Guardar, Xilinx Platform Studio

En la siguiente pantalla del wizard elegimos crear un nuevo diseo. Click sobre Next.

89

Figura 61 - Bienvenida al Menu Constructor

Elegimos las caractersticas de nuestra tarjeta Xilinx Spartan 3E Starter Board Revision D y continuamos.

Figura 62 - Seleccin de la Tarjeta a emplear

90

Se eligi un sistema de un solo procesador, porque solo queramos un Microblaze corriendo para producir un sistema de co procesador nico como se haba referido en el algoritmo en Impulse CoDeveloper.

Figura 63 - Seleccin del Sistema de Procesamiento

Mantuvimos las frecuencias de los relojes ambas en 50 Mhz tanto la del sistema como la de referencia y la memoria en 8KB. Puesto que el oscilador que trae la tarjeta es de esa frecuencia.

Figura 64 - Configuracin del Procesador

91

Removimos todos los perifricos que no usamos, solo dejamos el puerto RS232 DCE, agregamos un Timer. Quedando la lista de componentes como se observa en la imagen 65.

Figura 65 - Configuracin de los perifricos

Se us la siguiente configuracin del puerto RS232.

Figura 66 - Configuracin del puerto RS232

Se us la siguiente configuracin del timer, a dos timers presente para poder referenciar los relojes de sistema y de aplicacin.

92

Figura 67 - Configuracin del mdulo Timer

Habilitamos la cach de instrucciones y de datos. Ambas en 2K.

Figura 68 - Configuracin de la Memoria Cach

Se mantuvo la configuracin de la seccin Application, en esta seccin del wizard referencian a las aplicaciones de prueba de hardware y memoria, para corroborar el correcto estado y funcionamiento de estas, al igual que se hace en otros dispositivos electrnicos antes de empezar a operar.

93

Figura 69 - Configuracin de la Aplicacin

Observamos el sumario de la implementacin que hemos realizado y se finaliz el wizard.

Figura 70 - Finalizacin de la Creacin del Proyecto

94

Una vez en el entorno del Platform Studio. Agregamos el IP Core correspondiente al hardware creado y definido en Impulse CoDeveloper que en nuestro caso es un FIR acelerado para funcionamiento junto a un co procesador mediante el bus FSL. Para eso click sobre IP Catalog>>Project Local Pcores>>USER y ubicamos fsl_filt. Luego anticlick sobre l y le damos click a Add IP.

Figura 71 - Bus Interfaces

Luego agregamos dos buses FSL que permitirn a fsl_filt comunicarse con el procesador Microblaze. Con un click sobre Bus and Bridge y luego anticlick sobre Add IP (este paso lo hacemos dos veces para obtener los dos buses deseados).

Figura 72 - Aadiendo una IP

95

Configuramos el procesador para que acepte los dos buses FSL. Dimos anticlick sobre microblaze_0 y click sobre configure IP. Al aparecer la ventana de dilogo de configuracin en la pestaa Buses agregamos los 2 links FSL.

Figura 73 - Configurando la IP

Figura 74 - Microblaze

Luego se procedi a realizar esta conexin donde se conectan la aplicacin del filtro con el procesador Microblaze mediante su interface de bus de salida MFSL0 con el de entrada de la aplicacin SFSL0 y el de entrada SFSL0 de

96

Microblaze con el de salida de la aplicacin MSFL1. As obteniendo un bus bidireccional para el intercambio de datos. microblaze_0 MFSL0 con fsl_v20_0 fsl_filt_0 SFSL0 con fsl_v20_0 microblaze_0 SFSL1 con fsl_v20_1 fsl_filt_0 MFSL1 con fsl_v20_1

Figura 75 - Configuracin del Microblaze

Figura 76 - Configuracin del fsl_filt_0

Configuramos los relojes en >>Ports. FSL_Clk en 50 MHz y el SYS_Rst hacia net_gnd en ambos buses FSL asignando de esta forma el mismo reloj al que opera el procesador Microblaze.

Figura 77 - Configuracin de los Relojes

97

Configuramos un reloj adicional el cual definimos su existencia al habilitar el dual clock en el Impulse CoDeveloper. Dimos anticlick sobre

clock_generator_0 y luego click sobre Configure IP. Necesitamos agregar un reloj a 25 MHz la mitad de la frecuencia del reloj de sistema. Para esto en la pestaa System de la ventana emergente seleccionamos en Slow 25.000000 y luego damos click sobre Validate Clocks

Figura 78 - Configuracion de la IP

Figura 79 - Configuracin del Reloj

En la pestaa Ports Overview pudimos ver la aparicin de un CLKOUT3 a 25 MHz. Cerramos la ventana con un click en Ok.

98

Figura 80 - Sumario de los Puertos

Configuramos los relojes de fsl_filt_0 asignando el nuevo clock creado con el cual funcionar. Para co_clk le asignamos el reloj de 25 MHz y a FSL_Rst lo enviamos a net_gnd.

Figura 81 - Configuracin del fls_filt_0

Luego en la pestaa Addresses, click sobre Generate Addresses. Y observamos en consola el mensaje de generacin exitosa.

Figura 82 - Ventana de Direcciones

99

Figura 83 - Ventana de Mensajes de Consola

Generamos el Bitstream, se dio click en >>Hardware>>Generate Bitstream. El proceso tom unos minutos en completarse.

Figura 84 - Generacion del BitStream

Luego se dio click en >>Software>>Build All User Applications.

Figura 85 - Construccin de la Aplicacin de Usuario

100

Actualizamos el bitstream con los cambios al compilar el software. Click sobre >>Device Configuration>> Update Bitstream.

Figura 86 - Actualizacin del bistream.

Agregamos nuestra aplicacin en software. Doble click sobre Add Software Application Project.

Figura 87 - Agregar aplicacin de software al proyecto.

En la ventana que apareci escribimos el nombre de nuestra aplicacin. Click sobre OK.

101

Figura 88 - Insertar nombre a la aplicacin de software.

Agregamos los archivos generados por Impulse en una carpeta llamada Code. Los agregamos a Sources y Header. Para eso se dio doble click sobre Sources lo cual abri una ventana para encontrar los archivos. Se seleccionaron (todos) los archivos respectivos a cada caso y se les dio click en Abrir.

Figura 89 - Agregar source y header files.

102

Figura 90 - Archivos Source dentro de la carpeta code.

Figura 91 - Archivos header dentro de la carpeta Code.

Se compil el proyecto, para esto dimos click en Build Project.

103

Figura 92 - Construccin del proyecto de usuario.

Una vez compilado se genero el Linker Script, para asignar secciones de memoria. Dimos anticlick al proyecto y luego click sobre Generate Linker Script.

Figura 93 - Generacin del linker script.

Se realizaron los siguientes cambios y dimos click a Ok.

Figura 94 - Ventana de opciones del Linker Script.

Compilamos de nuevo el proyecto, para esto dimos click en Build Project.

Figura 95 - Segunda compilacin del proyecto de usuario.

104

Cambiamos la aplicacin de inicio en las BRAMs. Dimos anticlick sobre Default:microblaze_0_bootloop y luego click sobre Mark to Initialize BRAMs.

Figura 96 - Seleccin de la aplicacin de arranque en BRAMs para microblaze.

Actualizamos el bitstream con los cambios. Configuration>> Update Bitstream.

Click sobre >>Device

Figura 97 - Tercera actualizacin del bitstream.

Conectamos la tarjeta por el puerto RS232_DCE y el cable USB para poder programarla y luego la encendimos. Para bajar el proyecto a la tarjeta dimos click en >>Device Configuration>>Download Bitstream.

Figura 98 - Iniciar la descarga del bitstream a la plataforma.

Apareci el cuadro de dilogo Debug Configuration. En la pestaa JTAG Properties verificamos que se encuentre en tipo Auto.

105

Figura 99 - Opciones JTAG.

Iniciamos una sesin en Hyperterminal.

Figura 100 - Configuracin en hyperterminal para la comunicacin con la plataforma.

Lanzamos la consola XMD. Para eso hicimos click >>Debug>>Launch XMD.

Figura 101 - Inicio de la consola XMD.

106

Una vez en consola tipeamos los comandos para empezar a correr el proyecto en la tarjeta.

dow FIR_ACCELERATED/executable.elf con

107

4. RESULTADOS

Al correr la simulacin en CoDeveloper de la aplicacin FIR256 se puede realizar una monitorizacin del proceso simulado con una herramienta llamada Application monitor, esta aplicacin muestra las entidades que componen a la aplicacin, siendo observables incluso en plena simulacin. Al abrir el monitor observamos el diagrama de bloques esperado como muestra la Figura 102, muy similar al mostrado en la descripcin de la aplicacin en la Figura 46 anteriormente. Tres entidades claramente definidas: producer_process, filter_process y consumer_process, que corresponden al productor de valores, al filtro en s y al consumidor de valores respectivamente.

Figura 102 - Diagrama de bloques del filtro FIR256 obtenido al simular en CoDeveloper mediante el Application Monitor.

Figura 103 - Test consumer en funcionamiento del filtro FIR256.

Al seleccionar cada una de las entidades, se vio a la entidad en bloque conectada mediante streams hacia otras entidades, mientras que la consola mostr valores de intercambio y resultados de operaciones que los manipulaban como podemos apreciar en las Figura 103, Figura 104 y Figura 105.

109

Figura 104 - Filter process en funcionamiento del filtro FIR256.

Figura 105 - Test producer en funcionamiento del filtro FIR256.

Al finalizar la simulacin, en la herramienta Stage Master Explorer navegamos en el DFG de la aplicacin como apreciamos en la Figura 106, siendo esta una herramienta til para el planeamiento de optimizacin de la aplicacin puesto que se puede observar los bloques de funciones anidadas y nodos de intercambio.

110

Figura 106 - DataflowGraph (DFG) del filtro FIR256.

Terminada la simulacin, tomamos los valores de la seal filtrada y los introdujimos al MATLAB para compararlos con la seal filtrada inicialmente en MATLAB. El ploteo arroj seales idnticas que se superponan como muestra la Figura 108. Sin embargo al hacer un zoom de acercamiento notamos una desviacin pequea como muestra la Figura 107. Entonces calculamos la tasa de error porcentual mediante el algoritmo descrito en el ANEXO 4 cuyo valor resultante est en la Figura 114 y la funcin correspondiente la ploteamos en la Figura 113.

Figura 107 - Grfica en MATLAB con acercamiento, donde estn ploteados los valores obtenidos con CoDeveloper y los obtenidos al implementar un FIR en MATLAB.

111

Figura 108 - Grfica en MATLAB, donde estn ploteados los valores obtenidos con CoDeveloper y los obtenidos al implementar un FIR en MATLAB.

Una vez terminadas las pruebas con la aplicacin FIR256 pasamos a realizar la implementacin con FIR_ACCELERATED para obtener un factor de aceleracin. Para tener un punto de comparacin calculamos los tiempos de procesamiento en la computadora desktop tanto del FIR en floating point como en fixed point y los mostramos en segundos, Figura 109. Completada la implementacin hacia la tarjeta, empezamos a correr el Microblaze junto a nuestra versin acelerada del FIR. Por lo que vimos en la consola XMD como arranca en la plataforma como mostramos en la Figura 110, y guardamos el logfile del funcionamiento en plataforma segn est en la Figura 111.

Figura 109 - Ventana de Matlab con mensaje del Tiempo de Procesamiento

112

Figura 110 - Consola XMD al correr la aplicacin del FIR creada para Microblaze.

Xilinx Microprocessor Debugger (XMD) Engine Xilinx EDK 11.3 Build EDK_LS3.57 Copyright (c) 1995-2009 Xilinx, Inc. All rights reserved.

Release 11.3 - psf2Edward EDK_LS3.57 (nt) Copyright (c) 1995-2009 Xilinx, Inc. All rights reserved.

Checking platform configuration ... IPNAME:plb_v46 INSTANCE:mb_plb C:\Impulse\CoDeveloper3\Examples\Embedded\ComplexFIR_MicroBlaze\EDK\system.mhs line 66 - 2 master(s) : 3 slave(s) IPNAME:lmb_v10 INSTANCE:ilmb C:\Impulse\CoDeveloper3\Examples\Embedded\ComplexFIR_MicroBlaze\EDK\system.mhs line 73 - 1 master(s) : 1 slave(s) IPNAME:lmb_v10 INSTANCE:dlmb C:\Impulse\CoDeveloper3\Examples\Embedded\ComplexFIR_MicroBlaze\EDK\system.mhs line 80 - 1 master(s) : 1 slave(s) IPNAME:fsl_v20 INSTANCE:fsl_v20_0 C:\Impulse\CoDeveloper3\Examples\Embedded\ComplexFIR_MicroBlaze\EDK\system.mhs line 237 - 1 master(s) : 1 slave(s) IPNAME:fsl_v20 INSTANCE:fsl_v20_1 C:\Impulse\CoDeveloper3\Examples\Embedded\ComplexFIR_MicroBlaze\EDK\system.mhs line 244 - 1 master(s) : 1 slave(s)

113

Checking port drivers... WARNING:EDK:2098 - PORT:IWAIT CONNECTOR:ilmb_LMB_Wait c:\Xilinx\11.1\EDK\hw\XilinxProcessorIPLib\pcores\microblaze_v7_20_c\data\mic

roblaze_v2_1_0.mpd line 234 - No driver found. Port will be driven to GND! WARNING:EDK:2098 - PORT:DWAIT CONNECTOR:dlmb_LMB_Wait c:\Xilinx\11.1\EDK\hw\XilinxProcessorIPLib\pcores\microblaze_v7_20_c\data\mic

roblaze_v2_1_0.mpd line 270 - No driver found. Port will be driven to GND! WARNING:EDK:2098 - PORT:bscan_tdo1 CONNECTOR:bscan_tdo1 c:\Xilinx\11.1\EDK\hw\XilinxProcessorIPLib\pcores\mdm_v1_00_f\data\mdm_v2_1_0

.mpd line 230 - No driver found. Port will be driven to GND! WARNING:EDK:2099 - PORT:I_ADDRTAG CONNECTOR:ilmb_M_ADDRTAG c:\Xilinx\11.1\EDK\hw\XilinxProcessorIPLib\pcores\microblaze_v7_20_c\data\mic

roblaze_v2_1_0.mpd line 232 - floating connection! WARNING:EDK:2099 - PORT:D_ADDRTAG CONNECTOR:dlmb_M_ADDRTAG c:\Xilinx\11.1\EDK\hw\XilinxProcessorIPLib\pcores\microblaze_v7_20_c\data\mic

roblaze_v2_1_0.mpd line 273 - floating connection! WARNING:EDK:2099 - PORT:FSL0_M_CLK CONNECTOR:fsl_v20_0_FSL_M_Clk c:\Xilinx\11.1\EDK\hw\XilinxProcessorIPLib\pcores\microblaze_v7_20_c\data\mic

roblaze_v2_1_0.mpd line 375 - floating connection! WARNING:EDK:2099 - PORT:FSL1_S_CLK CONNECTOR:fsl_v20_1_FSL_S_Clk c:\Xilinx\11.1\EDK\hw\XilinxProcessorIPLib\pcores\microblaze_v7_20_c\data\mic

roblaze_v2_1_0.mpd line 380 - floating connection! WARNING:EDK:2099 - PORT:bscan_tdi CONNECTOR:bscan_tdi c:\Xilinx\11.1\EDK\hw\XilinxProcessorIPLib\pcores\mdm_v1_00_f\data\mdm_v2_1_0

.mpd line 223 - floating connection! WARNING:EDK:2099 - PORT:bscan_reset CONNECTOR:bscan_reset c:\Xilinx\11.1\EDK\hw\XilinxProcessorIPLib\pcores\mdm_v1_00_f\data\mdm_v2_1_0

114

.mpd line 224 - floating connection! WARNING:EDK:2099 - PORT:bscan_shift CONNECTOR:bscan_shift c:\Xilinx\11.1\EDK\hw\XilinxProcessorIPLib\pcores\mdm_v1_00_f\data\mdm_v2_1_0

.mpd line 225 - floating connection! WARNING:EDK:2099 - PORT:bscan_update CONNECTOR:bscan_update c:\Xilinx\11.1\EDK\hw\XilinxProcessorIPLib\pcores\mdm_v1_00_f\data\mdm_v2_1_0

.mpd line 226 - floating connection! WARNING:EDK:2099 - PORT:bscan_capture CONNECTOR:bscan_capture c:\Xilinx\11.1\EDK\hw\XilinxProcessorIPLib\pcores\mdm_v1_00_f\data\mdm_v2_1_0

.mpd line 227 - floating connection! WARNING:EDK:2099 - PORT:bscan_sel1 CONNECTOR:bscan_sel1 c:\Xilinx\11.1\EDK\hw\XilinxProcessorIPLib\pcores\mdm_v1_00_f\data\mdm_v2_1_0

.mpd line 228 - floating connection! WARNING:EDK:2099 - PORT:bscan_drck1 CONNECTOR:bscan_drck1 c:\Xilinx\11.1\EDK\hw\XilinxProcessorIPLib\pcores\mdm_v1_00_f\data\mdm_v2_1_0

.mpd line 229 - floating connection! WARNING:EDK:2099 - PORT:FSL0_S_Clk CONNECTOR:fsl_v20_0_FSL_S_Clk C:\Impulse\CoDeveloper3\Examples\Embedded\ComplexFIR_MicroBlaze\EDK\pcores\fs

l_filt_v1_00_a\data\fsl_filt_v2_1_0.mpd line 13 - floating connection! WARNING:EDK:2099 - PORT:FSL1_M_Clk CONNECTOR:fsl_v20_1_FSL_M_Clk C:\Impulse\CoDeveloper3\Examples\Embedded\ComplexFIR_MicroBlaze\EDK\pcores\fs

l_filt_v1_00_a\data\fsl_filt_v2_1_0.mpd line 18 - floating connection!

Performing Clock DRCs...

Performing Reset DRCs...

115

Overriding system level properties...

Running system level update procedures...

Running UPDATE Tcl procedures for OPTION SYSLEVEL_UPDATE_PROC...

Running system level DRCs...

Performing System level DRCs on properties...

Running DRC Tcl procedures for OPTION SYSLEVEL_DRC_PROC...

XMD% Info:AutoDetecting cable. Please wait. Info:Connecting to cable (Usb Port - USB21). Info:Checking cable driver. Info: Driver file xusb_emb.sys found. Info: Driver version: src=1029, dest=1029. Info: Driver windrvr6.sys version = 8.1.1.0.Info: WinDriver v8.11 Jungo (c) 1997 - 2006 Build Date: Oct 16 2006 X86 32bit SYS 12:35:07, version = 811. Info: Cable PID = 0008. Info: Max current requested during enumeration is 74 mA. Info:Type = 0x0004. Info: Cable Type = 3, Revision = 0. Info: Setting cable speed to 6 MHz. Info:Cable connection established. Info:Firmware version = 1303. Info:File version of c:/Xilinx/11.1/ISE/data/xusb_xlp.hex = 1303. Info:Firmware hex file version = 1303. Info:PLD file version = 0012h. Info: PLD version = 0012h. Info:Type = 0x0004. Info: ESN device is not available for this cable.

JTAG chain configuration

116

-------------------------------------------------Device 1 2 3 ID Code 01c22093 f5046093 06e5e093 IR Length 6 8 8 Part Name XC3S500E XCF04S XC2C64A

MicroBlaze Processor Configuration : ------------------------------------Version............................7.20.c Optimization.......................Area Interconnect.......................PLBv46 MMU Type...........................No_MMU No of PC Breakpoints...............1 No of Read Addr/Data Watchpoints...0 No of Write Addr/Data Watchpoints..0 Instruction Cache Support..........on Instruction Cache Base Address.....0x44000000 Instruction Cache High Address.....0x47ffffff Data Cache Support.................on Data Cache Base Address............0x44000000 Data Cache High Address............0x47ffffff Exceptions FPU Support................off

Support.......................off

Hard Divider Support...............off Hard Multiplier Support............on - (Mul32) Barrel Shifter Support.............off MSR clr/set Instruction Support....on Compare Instruction Support........on Number of FSL ports................2 Extended FSL Support...............off Data Cache Write-back Support......off

Connected to "mb" target. id = 0 Starting GDB server for "mb" target (id = 0) at TCP port no 1234 XMD% dow ComplexFIR/executable.elf

117

System Reset .... DONE Downloading Program -- ComplexFIR/executable.elf section, .vectors.reset: 0x00000000-0x00000007 section, .vectors.sw_exception: 0x00000008-0x0000000f section, .vectors.interrupt: 0x00000010-0x00000017 section, .vectors.hw_exception: 0x00000020-0x00000027 section, .text: 0x44000000-0x44003c0b section, .init: 0x44003c0c-0x44003c2f section, .fini: 0x44003c30-0x44003c4b section, .rodata: 0x44003c4c-0x440053f1 section, .data: 0x440053f4-0x44005923 section, .ctors: 0x44005924-0x4400592b section, .dtors: 0x4400592c-0x44005933 section, .eh_frame: 0x44005934-0x44005937 section, .jcr: 0x44005938-0x4400593b section, .sbss: 0x4400593c-0x4400593f section, .bss: 0x44005940-0x4400780b section, .heap: 0x4400780c-0x4404780f section, .stack: 0x44047810-0x4408780f Setting PC with Program Start Address 0x00000000

XMD% con 0x44000000 Info:Processor started. Type "stop" to stop processor

RUNNING> XMD%

Figura 111 - Registro log de la consola XMD al correr la aplicacin del FIR creada para Microblaze.

Observamos un correcto funcionamiento de nuestra aplicacin junto al Microblaze y pudimos obtener el factor de aceleracin que tratbamos de medir como se observa en la Figura 112. Este resultado apareci en una ventana hyperterminal, puesto que la comunicacin se realiz va puerto serial entre la plataforma y la computadora desktop.

118

Figura 112 - Ventana de Hyperterminal recibiendo datos del puerto RS232 DCE de la tarjeta Spartan.

Figura 113 - Seal de Error

Figura 114 - Mensaje de valor de Error

119

Finalmente ordenamos nuestros resultados de tiempos en una tabla para su posterior anlisis, Tabla 5. FIR FIR_ACCELERATED SLO SOFTWARE FIR_ACCELERATED ACELERADO MATLAB FLOATING POINT MATLAB FIXED POINT TIEMPO 0.116s 0.003 s 0.03125 s 129.4063 s FACTOR ACELERACIN 38x ----------------------------

Tabla 5 - Comparacin de Resultados

120

5. DISCUSION: PRUEBA DE LA HIPOTESIS

El proceso de diseo result muy natural y sencillo al slo tener que describir qu iba a hacer exactamente el algoritmo, ahorrando mucho tiempo en el planeamiento a diferencia del diseo modular por VHDL en el cual tendramos que haber planeado desde la cantidad de mdulos idnticos hasta la correcta interconexin entre ellos. La ventaja radic al usar Impulse CoDeveloper, fue la capacidad del compilador para traducir en forma correcta el nivel de descripcin que maneja el lenguaje C para bajarlo hacia el nivel elctrico que soportan los dispositivos programables y el descarte de errores al compilar el algoritmo hacia un ejecutable para poder simularlo.

A pesar que existen mltiples compiladores de C hacia FPGA, an no se encuentra completamente estandarizado. Esto puede significar un gran problema a futuro, a pesar que todos los fabricantes de compiladores ofrezcan soporte a los fabricantes de dispositivos, migrar de un compilador a otro sera incmodo para el desarrollador, quien tendra que adecuarse a las sentencias propietarias para cada caso y las estructuras algortmicas de cada uno. Siendo una tendencia casi nueva, ya se empezaron a desarrollar compiladores open source para estandarizar como lo son System C y Trident.

Es ms fcil utilizar C y compiladores de C hacia FPGA para el diseo que utilizar netamente HDL, sin embargo existe una relacin de complementacin entre ambos, C y VHDL juntos permiten realizar diseos en corto tiempo y tambin describir mdulos y hacer mejoras, es similar a la relacin que mantienen los lenguajes como C y C++ con el lenguaje ensamblador. A futuro inmediato los diseos se harn a partir de algoritmos y las descripciones de ciertos puertos y mdulos de entrada salida pueden ser en VHDL para agilizar el diseo. Siendo la descripcin de algoritmos tan sencilla, el desarrollador tiene la capacidad de implementar muchas aplicaciones IP para sus necesidades y adecuando cada una segn los requerimientos del proyecto. Lo cual es una ventaja significativa porque no tendr que comprar IP cores de tareas que antes eran difciles de implementar slo con HDL, ahorrando a la larga grandes cantidades de dinero por diseo de un sistema.

122

Considerado el ESL el siguiente paso en descripcin de circuitos, el cual est sobre RTL; los compiladores han dado un gran aporte a la comunidad de desarrolladores por la rpida evolucin de herramientas y documentacin. As como el soporte hacia el usuario que ofrecen estas nuevas e innovadoras empresas.

Al empezar a disear un filtro tomamos el principio de operacin matemtica de un FIR circular y lo traducimos en un algoritmo que posteriormente fue simulado y ejecutado tanto en MATLAB como con el CoDeveloper. Como apreciamos en las Figura 107 y Figura
108, comprobamos la similitud de resultados obtenidos en fixed point mediante FIR256 y

los obtenidos al implementar un FIR en MATLAB, donde al calcular la desviacin obtenemos la tasa de error de 0.6873%.

Como se presenta en las Figura 103 a la Figura 105, al simular nuestra aplicacin apreciamos la operacin de mtodos como entidades independientes la cuales realizan una comunicacin de datos entre s. Mientras se van obteniendo los resultados, estos interactan entre las entidades como si stas existieran fsicamente cuando realidad slo son descripciones de un algoritmo. La Figura 90, corresponde al Data Flow Graph de nuestra aplicacin FIR256, esto quiere decir que la estructura del compilador le otorga al usuario la libertad de trabajar con la optimizacin de su cdigo. Para esto el diseador debe entender el funcionamiento de instrucciones de un compilador C hacia FPGA y como se forman los bloques de instrucciones, empezando a introducir sentencias como #pragma para cambiar y agilizar la interaccin de datos entre nodos y bloques. Cuando diseamos la aplicacin FIR_ACCELERATED mantuvimos el concepto de funcionamiento de FIR256, para obtener una prueba real de la aceleracin y performance de un sistema trabajando con un co-procesador. Como se observa en la Figura 112, obtuvimos un factor de aceleracin de 38X, es decir al correr el filtro en hardware resulta 38 veces ms rpido que correrlo en un procesador Microblaze descrito en software. Los resultados de las Figura 106 a la Figura 108, estn orientados a demostrar la facilidad de diseo y correcta operacin al implementar algoritmos de en compilador de C hacia FPGA. Mientras que los resultados de la Figura 112 y Figura 114, tienen el propsito de demostrar la aceleracin en hardware y el desempeo de un sistema HPRC.

123

Los resultados expuestos en la Tabla 5 indican resultados esperados tras la implementacin de la aplicacin FIR_ACCELERATED. Pero parecieran contradictorios al compararse los tiempos de operacin en MATLAB que se presentan en dicha tabla. A pesar, que la aplicacin en la plataforma es ms rpida que la ejecucin del filtro en la computadora desktop lo cual es un resultado esperado, los tiempos de operacin del mismo filtro en fixed point es mayor al de floating point a pesar de haber corrido en la misma computadora desktop. Siendo el propsito de usar fixed point la disminucin de carga computacional, result extrao esto al no presentarse el caso inverso, donde el filtro FIR en fixed point fuera ligeramente ms rpido que el fixed point. Esto es debido a que MATLAB utiliza la librera BLAS o Basic Linear Algebra Subroutines para realizar sus operaciones en floating point la cual va optimizada para los procesadores Intel o AMD, mientras que para operar en fixed point emula un procesador fixed point y es all donde realiza las operaciones lo cual hace lento el proceso.

124

6. CONCLUSIONES

Tras analizar los resultados concluimos lo siguiente:

En el presente trabajo se estudio acerca e las tecnologas HPRC las cuales derivan de los tres tipos fundamentales de operacin en la aplicacin: hardware modular descrito, soft processor junto a mdulos aceleradores de hardware, hard processor junto a mdulos aceleradores de hardware; y logramos trabajar de forma exitosa con una plataforma de soft processor.

En el presente trabajo se demostr que con procesamiento HPRC obtuvimos mejores tasas de performance. Siendo el diseo de un hard processor junto a mdulos de hardware aceleradores el que menores tiempos de operacin de una misma aplicacin deber obtener, comparado al de soft processor usado en este trabajo y al de mdulo acelerador; as como un correcto planeamiento para evitar desbordamientos en el uso de macros en fixed point agilizar aplicaciones antes descritas en floating point al disminuirse la carga computacional.

La implementacin del diseo del presente trabajo tuvo un costo terico de $11285, sin embargo el precio se redujo a $0, por el prstamo de la tarjeta que nos hizo nuestro asesor, as como las licencias de los productos facilitadas por las empresas, mostrndonos su apoyo incondicional y constante ante el desarrollo de nuestro sistema.

Se implement exitosamente un filtro FIR circular acelerado, que se describe en el presente trabajo, en fixed point de orden 256 obteniendo un factor de aceleracin de 38x contra la operacin en un soft processor.

126

0.14 0.12 0.1 0.08 0.06 0.04 0.02 0

0.129x103 0.116
MATLAB FIXED POINT
FIR_ACCELERATED SLO SOFTWARE MATLAB FLOATING POINT

0.03125 0.003
Tiempos de Procesamiento FIR_ACCELERATED ACELERADO

Figura 115 - Comparacin de los Tiempos de Procesamiento

38x
40 35 30 25 20 15 10 5 0 FACTOR ACELERACIN FIR_ACCELERATED SLO SOFTWARE FIR_ACCELERATED ACELERADO MATLAB FLOATING POINT MATLAB FIXED POINT

--

Figura 116 - Comparacin de los Factores de Aceleracin

Los resultados obtenidos del presente trabajo confirman la hiptesis planteada al inicio de la investigacin y cumplen con todos los objetivos propuestos al inicio de la misma.

127

7. RECOMENDACIONES

Implementar diseos con entradas de datos a travs de mdulos fsicos, donde se aprecie el buen trabajo de HDL con el del resultado de algn compilador. Pudiendo mejorar aplicaciones como FIR_ACCELERATED, y adecuarlo a recibir datos de una fuente externa.

Realizar pruebas con un procesador externo de ms capacidad. Esto incrementara notablemente el desempeo de alguna aplicacin como FIR_ACCELERATED, aunque esto implique inversin en cuanto a hardware para lograr comunicar un procesador externo con un FPGA.

Orientar el diseo a aplicaciones trasladando algoritmos, como son cmputo de grandes datos en el caso de encriptacin, seguridad, trabajo por imgenes, etc. El desarrollador tiene la libertad de trabajar con las aplicaciones que encuentre ms provechosas y entretenidas.

A pesar que el clculo en fixed point facilita y alivia la carga computacional, siempre tener en cuenta el no desbordar registros o variables al operar, sino produciran resultados errneos o inexactos.

Realizar actividades en la Escuela Profesional de Ingeniera Electrnica para conseguir hardware adecuado y financiar la investigacin y diseo de sistemas HPRC, as como capacitar a los docentes del rea de Procesamiento de Seales para que puedan dirigir proyectos y desarrollos con herramientas para HPRC.

129

8. REFERENCIAS BIBLIOGRAFICAS

[1] GOKHALE, Maya y GRAHAM Paul S. Reconfigurable Computing Accelerating Computation with Field-Programmable Gate Arrays: An Introduction to Reconfigurable Computing, Reconfigurable Computing Systems, Signal Processing Applications. Netherlands: Springer, 2005, p. 1 10, 37 49, 87 117.

[2] HAUCK, Scott y DEHON, Andr. Reconfigurable Computing The Theory and Practice of FPGA-Based Computing: Compute Models and System Architectures, Implementing Applications with FPGAs. United States: Morgan Kaufmann Publishers, 2008, p. 107 125, 439 441.

[3] PELLERIN, David y THIBAULT Scott. Practical FPGA Programming in C: The FPGA as a Computing Platform, A Programming Model for FPGA-Based Applications, Massachusetts: Prentice Hall PTR, 2005, p 30 35, 78-89.

[4] KAMAT Rajanish K., SHINDE Santhosh A., SHELAKE Vinod G. Unleash the System On Chip using FPGAs and Handel C: Springer Science+Business Media B.V. 2009, pag 30.

[5] ALPAGO, Octavio H. y SAGRERAS, Miguel A. Lgica Programable: FPGA, documento de trabajo, Facultad de Ingeniera UBA, Buenos Aires, Diciembre de 2007.

[6] RIVERA A. Marco E. Filtros Digitales Filtros FIR e IIR, documento de trabajo, Departamento de Electrnica, Valparaso, Marzo 2009.

131

[7] BUELL, Duncan, EL-GHAZAWI, Tarek, GAJ, Kris y KINDRATENKO, Volodymyr. High Performance Reconfigurable Computing. Computer, 40: 23-27, marzo 2007. ISSN 0018-9162.

[8] Xilinx, FPGA vs. ASIC, en Xilinx, en Xilinx, Abril del 2007, http://www.xillinx.com/company/gettingstarted/fpgavsasic.htm#pcs , consultada el 26 de mayo 2008.

[9] Tutorial 2: Complex FIR on EDK 10.1i, en Impulse Accelerated Technologies, http://www.impulseaccelerated.com/Tutorials/Xilinx/S3ADSP1800/Tutorial_ComplexFI R_MB_SP3ADSP1800_EDK101.pdf , consultada el 21 de Septiembre del 2009.

[10] Impulse Accelerated Technologeis, Accelerating HPC and HPEC Applications Using Impulse C, en ImpulseC, Octubre 2008, http://rssi.ncsa.illinois.edu/docs/industry/Impulse_presentation.pdf, consultada el 21 de Septiembre del 2009.

[11] Una Introduccin a la Tecnologa FPGA: Los Cinco Beneficios Principales, en National Instruments, Diciembre del 2008, http://zone.ni.com/devzone/cda/tut/p/id/8259,

consultada 17 de octubre 2009.

[12] Application note: Fixed-Point Arithmetic in Impulse C, en Impulse Accelerated

Technologies, http://www.impulseaccelerated.com/support_appnotes.htm, consultada el 22 de Agosto del 2009.

132

[13] Computer Engineering, en University of Oulu, www.ee.oulu.fi/research/tklab/courses/.../DLXarkkitehtuuri.pdf, consultada el 24 de Septiempre del 2009.

[14] Microblaze Soft Processor Core, en Xilinx, http://www.xilinx.com/tools/microblaze.htm, consultada el 25 de Agosto del 2009.

[15] Xilinx, Getting Started with FPGAs, en Xilinx, Abril del 2007, http://www.xillinx.com/company/gettingstarted/index.htm, consultada 26 de mayo 2008 .

[16] GONZLEZ CORNEJO, Jos Enrique. Programacin con Diseo modular o TopDown, en DocIRS, Abril 2009, http://www.docirs.cl/programacion_topdown.htm, consultada el 18 de octubre 2009.

133

9. PAGINAS COMPLEMENTARIAS

ANEXO 1 senial_entrada.m
clear variables Fs=48000; % Frecuencia de Muestreo tMax=0.02; % Tiempo lmite del muestreo fo=100; % Frecuencia fundamental de la seal de entrada a=2.5; t=(0:1/Fs:tMax); % tiempo analgico muestreado x=zeros(1,length(t)); % seal de Entrada

for i=1:length(t) x(i)=a; end for i=1:2:200 x=x+((2*a)/(i*pi))*sin(2*pi*fo*i*t); % Generacin de la Seal de Entrada end

figure(1) plot (t,x) figure(2) % fi(Data, Signed, Longitud de la Palabra, Longitud de La Fraccin) t1=fi(t, 1, 16, 10); % tiempo en punto fijo x1=fi(x, 1, 16, 10); % seal de entrada en punto fijo stem(t1,x1)

135

ANEXO 2 filtro_senial
N=256; % Longitud del vector de coeficiente FN=Fs/2; % fc=fo*1.5; % Frecuencia de Corte Wn=(fc/FN); % Frecuencia normalizada de corte Tipo='low'; % Tipo de Filtro y=zeros(1,length(t)); % Seal de Salida y1=fi(y, 1, 16, 10); %Seal de Salida en Punto fijo T=(1:length(t)); % Tiempo discreto h=fir1(N,Wn,Tipo); % Coeficientes del FIR h1=fi(h, 1, 16, 10); %Coeficiente FIR en punto fijo tiempo1=cputime; for n=1:length(x) for i=1:N if n-i==0 break end y(n)=y(n)+(x(n-i)*h(i)); %Filtro FIR double end end tiempo2=cputime-tiempo1; %en segundos disp(['Tiempo de Procesamiento del FIR double',num2str(tiempo2),' segundos']) tiempo1=cputime; for n=1:length(x) for i=1:N if n-i==0 break end y1(n)=y1(n)+(x1(n-i)*h1(i)); %Filtro FIR en Punto Fijo end end tiempo2=cputime-tiempo1; %en segundos disp(['Tiempo de Procesamiento del FIR fixed-point',num2str(tiempo2),' segundos']) figure(3) plot(T,y,'.-b') legend('double') xlabel('n (samples)'); ylabel('amplitude') figure(4) plot(T,y1,'.-r') legend('fixed-point') xlabel('n (samples)'); ylabel('amplitude') figure(5) [H,f] = freqz(h,1,200,Fs); semilogx(f,20*log10(abs(H))); % Respuesta en Frecuencia

136

ANEXO 3
cambiando_valores

ans_fpga_fi=zeros(1,n); for i=1:n a=fi(0,1,32,23); a.hex=ans_fpga_raw{1,i}; ans_fpga_fi(i)=a; end

137

ANEXO 4
determinando_error
error = y-ans_fpga_fi; media = mean (error); maximo =max(error); minimo = min(error); desviacion = std(error); e_porciento = desviacion*100; disp(['El error % de la seal es de: ',num2str( e_porciento) ,'%'])

138

ANEXO 5

139

ANEXO 6

140

ANEXO 7

141

ANEXO 8

142

Вам также может понравиться