Usuario anónimo ¿Quieres tener tu propio blog?
Crear blog gratis en OboLog

CPLD

por edgart
viernes, 09 de mayo del 2008 a las 03:59
guardado en

Estructura y funcionamiento de los CPLD.

             Los CPLD son dispositivo lógicos programables con una complejidad entre los dispositivos PLA y FPGA.  La característica principal comun entre los CPLD y PAL, es la configuración de memoria no-volatil, y con respecto a los dispositivo FPGA,  la característica común de éste último es que posee un desarrollo de compuertas de grande densidades, con la diferencia que los FPGA, tienen mayor densidad que los CPLD. A modo general un CPLD es como si se tuviera varios PLD, tipo PAL, dentro de un sólo chip. el tamaño mas grande los CPLD permite implementar  ecuaciones lógicas o diseños mas complicados.  la programación de estos dispositivos es generalmente en lenguajes de descripción de hardware , por ejemplo, VHDL o Verilog.

Dispositivos Lógicos Programables Complejos (CPLD)

                Existen dos tipos de arquitectura de los CPLD: 1) Arquitectura de Matriz de suma de productos y 2) Arquitectura, Look-up Table (LUT), tabla de datos.

Matriz de Suma de Productos

Se relacionan con un mayor número de interconexión de secciones de compuertas programables, tales secciones pueden ser otros PLD, es decir el CPLD puede contener similares PLD de baja densidad, "PAL", interconectados entre sí, en un solo chip.

44606-40891.jpg

Fig. 1 Diagrama de bloque de un CPLD (Por ALTERA)

44606-40926.jpg

Fig. 2 Diagrama de bloque de un CPLD del fabricante XILINX

                La estructura principal son los bloques de matriz lógicos (LAB) o bloques de Función (Funtion Block), que se comunican en un bus interno con la matriz de Interconexión Programable (PIA) o también llamado Fast CONNECT Switch Matrix. Cada bloque es un grupo de 16 macroceldas; tienen entradas y salidas similares a los PLD de baja densidad, con capacidad de programarse. El número de pines de entrada y/o salida dependerá del dispositivo, para el caso de la figura 1, corresponde al modelo MAX7000S, basados en celdas EEPROM, del fabricante ALTERA, de 6 a 16 pines de entrada y salida, estas últimas se encuentran en el bloque de control de entrada y salida, la cual también posee conexión con el PIA, y en la figura 2, el bloque de salida y entrada I/O, poseen un bufer para los dispositivos de entrada y salida.

                Cada bloque de función, para el caso de XILINX modelo de ejemplo "XC9500", esta compuesto de 18 macroceldas independientes. Los bloques funcionales también reciben una señal (reloj) de sincronismo global, una señal para habilitar la salida y una señal para habilitar el reset/set. El bloque funcional genera 18 salidas que maneja el FAST CONNECT. estas 18 salidas y su correspondiente señales de habilitación son gobernadas por el bloque I/O. la lógica dentro de los bloques funcionales es implementada utilizando la representación de  suma de producto

44606-40925.jpg

Fig 3  Bloque de Función

         Las macroceldas pueden ser configuradas individualmente por una función de registro. 5 matriz de compuertas  AND, directos al "product terms "(termino de producto), son utilizados como entrada de datos primario (para las compuertas OR y XOR) para implementar funciones combinacionales, o como entradas de control incluyendo el reloj, señales set/reset, y señal de habilitación de salida. Los registros de las macroceldas pueden ser configurados como FLIP-FLOP tipo D o FLIP-FLOP tipo T. o este puede ser omitido por una operación combinacinoal. Cada registro soporta operaciones set y reset asincronos. durante el encendido del dispositivo, todos los registro son inicializados al estado predefinido por el usuario.

 44606-40918.jpg

Fig. 4 Macrocelda con bloque de función

           Las señales de contro global son desarrolladas individualmente en cada macrocelda, incluyendo señal de reloj, señal de set/reset, y la señales de habilitación. la macrocelda registra señales de reloj de cada uno de los tres relojes globales o del termino producto. La señal GSR, es una señal de Reset/set, de entrada que permite que sea definido por el usuario.

44606-40919.jpg

 Fig. 5 Reloj de Macrocelda

      El termino producto, controla que la matriz de las 5 AND sean asignadas a cada macrocelda, un ejemplo pudiera ser que todas las AND sean manejadas por una OR.  El inconveniente de esto es que se evidencia el retardo de un termino producto a otro como se observa en la siguiente figura.

44606-40920.jpg

Fig. 6 Lógica de la Macrocelda utilizando termino producto 

        44606-40921.jpg

Fig. 7 Lógica de un termino producto 

        El FAST CONNECT Switch Matriz conecta las señales a la entrada del bloque de función; tanto las salidas del bloque I/O como las salidas del bloque de función las manejas el Fast Connect Switch Matrix, cualquiera de estas pueden ser seleccionadas, a través de la programación del usuario, para poder manejar cada bloque con un retardo uniforme.

44606-40922.jpg

Fig. 8 Fast Connect Switch Matrix

         El Bloque I/O es la interfaz entre la lógica interna y los pines de entrada y salida del dispositivo CPLD. Cada bloque de I/O incluye un bufer de entrada y un manejador de salida; un multiplexor que selecciona la salida habilitada, y también incluye una señal de control de tierra para la programación del usuario. El bufer de entrada es compatible con tensión de 5 V CMOS, 5 V TTL, y señales  de voltaje de 3.3 V. El bufer de entrada usa internamente un suministro de potencia de 5 V ( Vccint), para asegurarse que el umbral de entrada permanezca constante y no varie con el voltaje Vccio. la señal de salida se habilita de la siguiente formas: una señal puede ser generada por el termino producto de la macrocelda, cualquiera de las señales globales de OE, o por una señal de tercer estado GTS.

44606-40923.jpg

Fig. 9 Bloque I/O

             Cada salida tiene un control independiente de "Slew Rate" (Máxima variación del voltaje de salida con respecto al tiempo); este control permite reducir o controlar el ruido en el sistema, con sólo modificar el Tslew.

44606-40924.jpg

Fig. 10   Slew Rate

                Estos  CPLD poseen circuito con memoria EEPROM; que permiten reescribirse muchas veces, dependiendo del fabricante puede ser hasta 10.000 veces, como es el caso del fabricante XILINX, los modelos de la serie XC9500.

Tabla de datos (Look-Up Table)

                Esta arquitectura se basa en la implementación lógico de bus de interconexión de filas y columnas, estas interconexiones también proveen conexión al bloque de matriz lógicos (LAB). El LAB consiste de varios elementos lógicos (LE); según el modelo pueden ser 10 LE, por cada LAB. Los LE es una pequeña unidad lógica que proveen una eficiente implementación de funciones lógicas del usuario. El Multitrack Interconnect provee una rápida conexión entre los LAB.

 44606-40896.jpg

                               Fig. 11 Diagrama de bloque de la arquitectura de tabla de datos

                Look-Up Table (LUT), Es un circuito que implementa una función de lógica combinacional  para almacenar una lista de valores de salida que correspondan a todas las posibles combinaciones de entradas, es decir un número de elementos almacenados son usados; para resumir una función lógica, almacenando cada función como una tabla de la verdad, esto se ilustra en la figura 12.

 

 

 44606-40897.jpg

Fig. 12 Look-Up Table

                Tomando como ejemplo la tabla de la verdad de la figura 12,  como comparador A1A0=B1B2 , hace que la salida lógica AEQB = 1 lógico. Una matriz de 16 flip-flops (Q0 hasta Q15), contiene data de todas las posibles combinaciones A1A0B1B0, por cada combinación se necesita un flip-flop. La entrada de cada LUT son decodificada por un decodificador de direcciones, cada salida del decodificador activa una buffer de tres estados, que pasa por un bloque de salida de flip-flop. Cuando se activa un buffer para pasar el contenido del flip-flop, el resto de los buffer permanecen en estado de alta impedancia, de esta manera se bloquea la data de los otros flip-flops. El contenido de los flip-flop son cargados cuando el LUT es programado, con las funciones requeridas. Continuando con el ejemplo de la figura 12, los 16 elementos almacenados en dicha tabla, combinados , para  seleccionar una salida combinacional y para interconectar con otras partes del chip, es llamado Elemento Lógico (LE). La función del desempeño del elemento lógico es similar a la de macroceldas en los PLD de suma de producto. La estructura de un elemento lógico se muestra en la figura 13.

 44606-40898.jpg

Fig. 13 Elemento Lógico

El circuito "Cascade Chain",  permite al usuario programar la función boleana, este circuito puede ser de compuertas AND o OR.

 44606-40899.jpg

Fig. 14 Operación en Cascada

Bloque de Matriz Lógico (LAB), consiste en un número de elementos lógicos e interconectados localmente; el bloque LAB, esta conectado con el resto del dispositivo por medio de una serie de columnas y filas interconectadas, lo cual para este caso el fabricante ALTERA ha llamado FastTrack Interconnect, también se le conoce como Multitrack Interconnect.

 44606-40901.jpg

Fig. 15 Bloque de Matriz Lógicos

                Embedded Array Block (EAB), este bloque es una matriz de 2048 elemento de almacenaje que pueden ser usado eficientemente en la implementación de funciones lógicas complejas.

El FLEX10K es un dispositivo del fabricante ALTERA, tiene una matriz de 6 filas por 24 columnas de  bloque de matriz lógico (LAB), es decir que tendrá 144 LAB, que a su ves son 8 x 144LAB= 1152 elementos lógicos, estos elementos también tienen 6 EAB; 6X2048 = 12288 bits de almacenaje de EAB, note que un EAB tiene mas capacidad de almacenaje que un LAB combinado.

                Algunos los dispositivos basados en LUT, son de tecnología de memoria de acceso aleatorio estática (SRAM), la ventaja de esta configuración es que este puede ser fabricado en densidades muy altas de celdas de almacenajes y programar rápidamente, comparado con un dispositivo, (suma de producto, SOP), basado en EEPROM. La desventaja es que las celdas SRAM, son volátiles; es decir que deben reconfigurarse cada vez que se reinicia el sistema.

 44606-40902.jpg

Fig. 16 Diagrama en bloque de un dispositivo de estructura de datos como es el caso del FLEX10K del fabricante ALTERA.

El mismo  fabricante ALTERA, posee el modelo MAXII, "tabla de datos LUT", tal modelo contiene un bloque de memoria "falsh", dentro del dispositivo. La mayoría de estos almacenajes de memorias flash, son particionadas como un bloque de programación o configuración de memoria flash (CFM);  este provee un almacenaje no volátil; la CFM descarga y configura la lógica.  Una porción pequeña de la memoria flash es utilizado para  la  data de usuario, este pequeño bloque de memoria UFM, provee una almacenaje para el usuario de propósito general, en este bloque se provee la conexión del puerto programable para el arreglo lógico de lectura y escritura.

 44606-40892.jpg

Fig. 17 Diagrama de bloque del modelo MAXII

 44606-40893.jpg

Fig. 18 Diagrama del bloque de memoria UFM

                El bloque UFM, puede ser utilizado como el EEPROM serial, para almacenar información no volátil, este bloque se conecta al bloque de arreglo lógico a través del bus Multitrack interconectado, de esta manera se permite la interface con el bloque de elemento lógico.

FABRICANTES DE CPLD

  • 1- Altera

Ha desarrollado tres familias de la categoría CPLD. MAX5000, MAX7000 y MAX9000. El MAX5000 representa la tecnología mas antigua que ofrecen soluciones de costo efectivo; el MAX7000 ofrece altas capacidades lógicas y mayor desempeño en velocidad; el MAX9000 es similar al MAX7000, excepto que el MAX9000 ofrece una mayor capacidad lógica. El MAX7000 contiene bloques de matrix lógicos LAB, matrix de interconexión programable PIA, esta serie fueron desarrollados en tecnología EPROM y EEPROM, la desventaja de esta serie es que se debe programar fuera del circuito de desarrollo; desde 1996 Altera, desarrollo el modelo MAX7000S, capaz de programarse en línea, es decir en el mismo circuito. Altera FlashLogic CPLDs, anteriormente conocido como Intel`s FlEXlogic, caracterizado por programarse dentro del sistema y provee bloques SRAM en el dispositivo. La configuración de compuertas AND-OR, son por celdas SRAM, respaldadas por celdas EPROM o EEPROM. Al realizar un suministro de potencia las celdas SRAM son cargadas con un copia de la memoria EEPROM o EPROM, pero es la celda SRAM la que controla la configuración del dispositivo

  • 2- Atmel

Ofrece el modelo ATF1500A, alto desempeño y alta densidad de compuertas, construido con tecnología FLASH, con un retardo de 7.5 ns de pin a pin.

  • 3- AMD

Ofrece una familia de CPLD con 5 sub-familias llamadas Mach 1 a Mach 5. Cada dispositivo Macth, contiene bloques con múltiplos PAL; Match 1 Y 2 consiste en el modelo 22V16PALs, Match 3 y 4 consiste en el modelo 34V16PALs y el Match 5 ofrece modelos parecidos a los anteriores pero con mayor desempeño en velocidad. Todos los Match están basados en tecnología EEPROM. El rango de capacidad lógicas están cercas de 2000 a 5000 compuertas.

  • 4- Cypress Semiconductor

Son similares a los dispositivos AMD y Lattice en muchas maneras; el Cypress CPLD, llamado FLASH370, esta basado en tecnología FLASH EEPROM, y ofrece un desempeño en el retardo de velocidad de 8.5 a 15 ns de pin a pin, la desventaja es que no es programable en el sistema.

  • 5- Lattice Semiconductor

Lattice ofrece un completo rango de CPLD; con dos líneas de productos principales: Lattice pLSI que consiste en tres familias de EEPROM de CPLD; y el ispLSI que son los mimos dispositivos pLSI, con la diferencia de los ispLSI son programables en el sistema. Los rangos de capacidades lógicas están cercas de 1200 a 4000 compuertas y el retardo de pin a pin es de 10 ns. El Lattice de la serie 3000 representa su desarrollo mas grande con 5000 compuertas  y un retardo de 10 a 15 ns.

  • 6- Xilinx

Ofrecen el modelo XC7000 y el XC9500; hay dos familias principales en el XC7000: la serie 7200 y 7300, el 7200 es un dispositivo moderadamente pequeño con 600 a 1500 compuertas; y con un retardo de pin a pin de 25 ns. El 7300 ofrece 3000 compuertas y lo otro que diferencia al 7200 es que el 7300 incluye dos compuertas OR en cada macroceldas. Finalmente el XC9500 ofrece la programación dentro del  circuito, con una capacidad de 6200 compuertas y un retardo de 5 ns.

Construcción y Diseño

                Las vías están compuesta de 100 porciento metal de aluminio diluido, aquí se identificará como Metal 2, los contactos son 100 porciento metal de aluminio diluido, identificado como Metal 1. Como características especiales posee tecnología "FLASH FAST". Las compuertas en el canal N son del orden de 0.45 micra, y el canal P son del orden de 0.5 micra. El dispositivo esta formado por una capa de nitruro de silicio sobre otra capa de  dióxido de silicio. Posee dos capas de polisilicio. El PLOY 1 fue utilizada exclusivamente en compuertas flotantes, y POLY 2 (polisilicio y silicio de tusteno) fue utilizado para todas las compuertas estándar, en la matrix de lineas de programas y de palabra. La matrix de celdas programables son EEPROM (tecnología FAST FLASH), el Metal 2, será utilizado para las líneas de programa y de la palabra de dato. El Metal 1 distribuye la tierra GND y una línea de un bit. El dielétrico se encuentra entre las capas POLY es de ONO "óxido-nitruro-óxido".  el color anaranjado es Nitruro de Silicio, el color azul es Metal 1 y 2, el color amarillo es Óxido, el color verde es polisilicio, color rojo difusión del canal P y N, y el color gris es el substrato P. Ver figura 12.

               Si el dispositivo es borrable eléctricamente EEPROM, sus conexiones es a base de transistores  MOS de puerta flotante, que contiene una puerta adicional embebida en el aislante entre la puerta normal (accesible desde el exterior) y el substrato. esta puerta extra, sin conexión al exterior y completamente rodeada de material aislante, es la puerta flotante. los transistores MOS, inicialmente no tienen carga en la puerta flotante, de forma que actúan como transistores normales: en cada linea vertical se realiza la operación lógica Y; es necesario que todas las líneas horizontales estén bajas (a=b=c=d=L) para que las líneas verticales sean altas (x=y=z=H), y basta que una de las entradas sea baja (a=L, por ejemplo) para que su línea correspondiente sea alta, y por tanto los transistores cuyas puertas están conectadas a esa línea de entada pasan a conducción, y entonces las líneas verticales se hacen L. En otras palabras, los transistores hacen el punto de conexión entre las líneas verticales y horizontales. Para desconectar un punto de conexion (un transistor), en la fase de programación se aplica una tensión relativamente elevada (15 a 20)V en la puerta del transistor a desconectar; esta tensión hace que, por un proceso físico conocido como efecto túnel, atraviesen electrones desde el substrato por la fina capa de aislante y queden almacenados en la puerta flotante. En definitiva la introducción de electrones en la puerta flotante desconecta el transistor del circuito, ya que siempre estará cortado (estado off).

 44606-40894.jpg

Fig. 12 Construcción de un CPLD

         44606-41048.jpg

Fig. 13 línea de productos 

CRITERIOS DE SELECCIÓN

           Es importante tomar en cuenta la densidad de compuertas que se requiere, y para ello es necesario determinar el número de macroceldas que debe poseer el dispositivo; también es importante determinar el número de entradas y de salida, según la ecuación lógica obtenida. los retardos de propagación  entre la señal de entrada y de salida se debe de tomar en cuenta cuando se esta trabajando con altas velocidades de procesamiento. hay sistemas que trabajan con diferentes niveles de tensión por lo que es importante conocerlos tomarlo en cuenta en el dispositivo CPLD. estos niveles de tensió pueden oscilar entre 1.5 V a   5 V.

            En la metodología modernas de diseños digitales, para sistemas de relativa complejidad, en lugar de utilizar descripciones del comportamiento del sistema en forma de tablas (tablas de la verdad, de transición de estado, etc) se utilizan lenguajes específicos, los lenguajes de descripción de hardware o HDL (Hardware Description Language), que pueden describir tanto el comportamiento como la estructura de un sistema.

            Diseño de un decodificador binario de 2 a 4.

            Paso 1: Se realiza la descripción del sistema, de forma que el entorno de desarrollo pueda generar una representación interna del mismo. se puede optar entre una descripción estructural, con ayuda de un editor gráfica de captura de esquemas, o una descripción del comportamiento con un lenguaje HDL.

44606-41047.jpg

Fig. 14  Descripción del decodificador: a) estructural; b) funcional.

             Paso 2: Se realiza una compilación funcional, con la que se verifican posibles errores en el diseño (salidas cortocircuitadas, entradas flotantes...) y además se genera una representación interna del sistema, con la que puede efectuarse una simulación funcional del mismo. en esta fase la simulación es sólo funcional y es independiente de la tecnología de implementación, que es la que depende de los retardo que se produzcan.

            Paso 3: En el software (compilador) se especifica la tecnología de implementación. Se proyecta el diseño al tipo de celdas lógicas, celdas de entradas y salida, y recurss de conexión del CPLD seleccionado. tras la compilación se obtiene una representación interna del sistema implementado y se genera un fichero informativo donde se detalla el porcentaje de ocupación del dispositivo, las asignaciones de celdas y pines de entrada y salida, y otros..)

             Paso 4: Se hace una simulación y análisis temporal. con la información detallada de las características técnicas de cada uno de sus componentes de la biblioteca de elementos se puede realizar una nueva simulación mas real y se puede establecer los tiempos de retardos.

             Paso 5: Una vez compilado y simulado el circuito; se debe configurar físicamente el CPLD, lo que puede realizarse físicamente con un programador de PLD o en el propio sistema (ISP). Es preferible utilizar este último para reducir los psibles daños mecánicos en los pines del dispositivo, por lo tanto suelen configurarse los CPLD en la propia tarjeta del sistema final, con una programación ISP (In-System Programming), esta opción se utiliza en circuitos borrables eléctricamente EEPROM o configurables con celdas SRAM. Comúnmente se utiliza el protocolo JTAG (joint Test Action Group). que utiliza cuatro lineas para transferir bit a bit entre el computador y la tarjeta del sistema la información de configuración.

44606-41041.jpg

Fig. 15 Esquema de conexión utilizando el programador CPLD

 

44606-41042.jpg

Fig 16 Esquema de conexión utilizando un cable de descarga

Referencias

[1] Antonio Lloris Ruiz, Alberto Prieto Espinosa, Luis Parrilla Roure: Sistemas Digitales;  Mc Graw Hill, pag. 501-535;  2003

[2] http://www.xilinx.com/

[3] http://www.altera.com/

[4] Digital Design with CPLD applications and VHDL

[5]  Altera Device Package Information Data Sheet

[6]  XC9500 In-System Programmable CPLD Family (XILINX)

DESCRIPCIÓN DE UN ARTICULO SOBRE LA UNIDAD SIMD RECONFIGURABLES PARA EL PROCESAMIENTO DE IMAGEN

por edgart
lunes, 24 de diciembre del 2007 a las 22:00
guardado en

Para el lector que no esta familiarizado con las unidades SIMD, y otros aspectos que se desarrollan en el artículo, se recopiló una breve información con ejemplos, muy similares a la ejecución del desarrollo de este artículo, lo cual se encuentra posterior al desarrollo de la explicación del artículo en cuestión que sigue a continuación:

         Parte del tema de la introducción y motivación del artículo habla un poco de la reseña histórica y una breve descripción de los procesadores PowerPC, lo cual también se profundiza en este compendio, mas adelante. Para hacer la explicación mas dinámica tomaremos como referencia la siguiente figura 1.

                                                            Virtex-4 FX PowerPC 48906-44881.jpg

Figura 1   

        El artículo manifiesta diseñar o implementar a la medida una unidad SIMD dentro de un dispositivo lógico programable "FPGA", utilizando la familia de FPGA Virtex-4 serie FX de XILINX. ¿Cómo lo realiza?, empezaremos primero por entender esta familia de FPGA que se propone. Esta familia de FPGA posee un controlador de la Unidad de Procesamiento Auxiliar (APU), que provee una interface con alto ancho de banda entre la lógica configurable de la FPGA y el procesador PowerPC 405 integrado. Un Fabric co-processor modules (FCM), "módulo coprocesador", implementado en la FPGA, esta conectado al procesador PowerPC embebido, a través de la interface del controlador APU, para habilitar el acelerador hardware configurable, definido por el usuario. La función de estos aceleradores hardware es operar como una extensión del procesador PowerPC 405, con lo que descarga de la CPU exigentes tareas computacionales. Esta última oración es uno de los objetivos principales de la FPGA, manejar data de alto contenido de actividad computacional a altas velocidades y también es una de las razones por la que se seleccionó para el desarrollo del experimento de este artículo, tal experimento consiste en medir el rendimiento en dos procesadores PowerPC uno es el modelo 7400 y el otro 970FX, los cuales fueron denominados OSSIAN, mediante la ejecución de una aplicación de estabilización de imagen en modo "batch". Obviamente procesar una imagen en tiempo real es una tarea de alto contenido de data. Mas adelante volveremos a tocar este punto.

     El controlador APU permite extender el juego de instrucciones nativas PowerPC 405, que son ejecutadas en el FCM. Las instrucciones que soporta la APU son clasificadas en tres categorías principales:

  • - Instrucciones definidas por el usuario UDI
  • - Instrucciones de punto flotante del PowerPC.
  • - Instrucciones de APU de carga y almacenaje (load/store).

Las instrucciones definidas por el usuario son dinámicamente programadas dentro de otro controlador a través del registro de control del procesador PowerPC 405. La unidad de punto flotante, " floating-point unit FPU, es un ejemplo de un FCM. El juego de instrucción de punto flotante del PowerPC es decodificado en el controlador APU. Mientras que el cálculo se realiza en función de la FPGA. Para soportar la FPU con diferentes complejidades, el controlador APU permite seleccionar un grupo de instrucciones de punto flotante del procesador PowerPC. Estas instrucciones son ejecutadas en el FCM mientras que otro grupo de funciones son computadas a través de la emulación del software FPU o puede ser ignorado completamente. Esto optimiza los recursos de la FPGA mientras se acelera los cálculo casi críticos con la lógica dedicada. Esto explica un poco mas la importancia de aplicar la FPGA en este desarrollo del artículo, tomando como punto de referencia que se necesita realizar multiplicaciones matriciales, del tamaño 8x8 y en tiempo real, resulta una carga computacional muy grande para un solo CPU, mientras que con esta familia de FPGA, posee como cualidad estratégica un controlador APU que no sólo sirve de interface para la comunicación con el PowerPC, sino que es el encargado de direccionar los diferentes subgrupos de instrucciones simultáneamente. Para entender un poco mas esto se realizará una secuencia paso a paso; una vez que la instrucción alcance la etapa de decodificación, ésta es simultáneamente presentada en el bloque de decodificador APU y en el CPU. Si la instrucción es detectada como una instrucción de CPU, el CPU continuará ejecutando la instrucción como lo hace normalmente, de otro modo dentro de mismo ciclo, el CPU busca una respuesta en el controlador APU, si el controlador APU reconoce la instrucción, este proveerá información necesaria para respaldar al CPU. Si el controlador APU no responde dentro del mismo ciclo, se genera una instrucción inválida por el CPU.

El procesador PowerPC y el FCM residen en dominios de reloj  separados, el módulo de sincronización del controlador APU maneja la diferencia de frecuencia de reloj, esto permite al FCM operar a mas baja frecuencia que el procesador. En esta instancia el controlador APU recibe la data resultante del coprocesador (en este caso de la unidad SIMD) y en un buen tiempo de ejecución envía los datos de vuelta al procesador.

La idea de expresar lo antes dicho es para poder entender como se comunica  la FPGA con el procesador específicamente en esta familia FX, que es la que posee el PowerPc 405, también para entender como se realiza la aceleración hardware en la FPGA. Implementar una unidad SIMD en esta FPGA tiene una gran sentido y es que ya cuentas con el procesador y el pipeline para poder trabajar con instrucciones vectoriales, ya que para el procesamiento de imagen se requiere mucho cálculos matriciales. Con la ayuda del compilador GCC se  genera código que utiliza el FCM, y al FCM se puede accesar realizando las instrucciones en código ensamblador o código C. el GCC genera el código que utiliza una unidad de punto flotante  FCM, para cálculos de operaciones de punto flotante.

Haciendo referencia a la multiplicación de matrices de los coeficientes de la transformada de wavelet de haar (se explica mas adelante), en tiempo real fue muy bien indicado por el artículo implementar la unidad SIMD en la FPGA, ya que este dispositivo programable adaptará dicha técnica a la medida y no tan sólo eso sino que permite implementar a futuro otras transformadas de tipo wavelet, sin necesidad de desmontar la FPGA y el resto de los dispositivo. Para este tipo de estudios donde la exigencia de velocidades y la carga computacional es alta, este dispositivo representa una alternativa poderosa y mas económica que la tecnología ASIC. Virtex-4 FPGA contiene tres tipos de familias LX, FX y SX, ofreciendo múltiples características de selección y combinación para todas las aplicaciones complejas. El artículo utilizó la serie FX por tener implementado no sólo el procesador PowerPC sino por la nueva tecnología de interface del controlador APU ofreciendo todas las ventajas antes nombradas y que no las tenían las otras series. Es por eso que la serie FX es para aplicaciones de plataformas embebidas. El Virtex-4 posee 960 pines de entrada/salida, soporta memorias de interface DDR y DDR-2. En este artículo el Virtex-4 FX, demostró ser una plataforma embebida capaz de implementar una unidad SIMD totalmente reconfigurable a un precio mas bajo que desarrollar una unidad SIMD (ILLIAC IV) para un objetivo específico. Para tener una cierta idea de las unidades SIMD y de otros aspectos que habla el artículo, como lo es profundizar en la carga computacional de las transformadas de wavelet en la FPGA, se desarrollo el siguiente contenido:

 

La Unidad SIMD es una técnica empleada para el manejo en paralelo de datos. Como un procesador de vector. En una arquitectura SIMD el paralelismo se logra por múltiples unidades de proceso llamados elementos de procesamiento (PE), cada una es capaz de ejecutar una operación especializada autónomamente. Esta arquitectura se caracteriza por el hecho de que la misma operación es realizada en un momento dado sobre un gran conjunto de datos en todos los (PE). Las computadoras SIMD están especialmente diseñadas para realizar cómputos vectoriales sobre matrices de datos.

48906-44866.jpg

Ejecución de una SIMD

Los procesadores SIMD pueden manejar un único flujo de instrucciones y múltiple flujos de datos. Dado que un elemento de procesamiento no constituye una unidad de procesamiento central CPU, y que no es capaz de funcionar independientemente, el sistema es en esta caso de procesamiento paralelo y no es un sistema multiprocesador. Estos procesadores pueden tener uno o dos configuraciones ligeramente diferentes, una ha sido implementada en la muy conocida computadora ILLIAC IV cuya esquematización puede verse a continuación:

48906-43885.jpg

Para este caso esta computadora tiene 256 (PE) distribuidos en cuatro cuadrante de 8x8 (PE). Los PEs de un cuadrante  son controlados por una unidad de control común, como resultado de esto los PES de dicho cuadrante pueden ejecutar la misma operación simultáneamente. En la siguiente figura se muestra la comunicación entre los Pes dentro del cuadrante. Cada PE  se comunica con su vecino, la mayor distancia entre dos PEs no vecino es 8.

48906-44862.jpg

 

 

 

 

 

 

 

 

 

 

 

 

 

Cada PE es esencialmente una unidad aritmético y lógica (ALU) con registros de trabajos que le pertenecen y una memoria local (PEM) para el almacenamiento de datos distribuidos. La unidad de control (CU) cuenta con una memoria de para el almacenamiento de programas. En ella se cargan lo programas del usuario desde el almacenamiento principal. La función de la CU es decodificar todas las instrucciones  y determinar donde debe de ejecutarse las instrucciones decodificadas; las instrucciones escalares se ejecutan directamente dentro de la CU. Las instrucciones vectoriales se envían  a los PEs para una distribución de la ejecución a fin de alcanzar un paralelismo, gracias a la multiplicación de unidades aritméticas PEs.

Todos los elementos de procesamiento realizan la misma función sincrónicamente en forma esclava bajo el control de la CU. Los operandos vectoriales se distribuyen en la PEM antes de lanzar la ejecución paralela de los PEs.

48906-43886.jpg

 

En la figura anterior se muestra la estructura interna de un elemento de procesamiento.

Di indica la dirección asignada a este elemento de procesamiento

Si indica si este procesador esta o no activo para realizar ciertos cálculos.

Ii es un registro índice

Ri es el registro que apunta  a otros procesadores

Formalmente una unidad SIMD se caracteriza por el siguiente conjunto de parámetros:

C:{N,F,I,M}

N= es el número de procesadores

F= es el conjunto de funciones de ruteo de datos previsto por la red de interconexión.

I= el conjunto de instrucciones para las operaciones escalares y vectoriales, de ruteo de datos y manejo de la red.

M= conjunto de mascara que habilitan o deshabilitan a los procesadores.

Ejemplo de funcionamiento de un procesador SIMD.

Para mostrar cómo es el ruteo de datos en un procesador SIMD veremos en detalle una instrucción vectorial dentro de los N PEs.

Se desea la suma de S(k) de las primeras k componentes de un vector A para k = 0,1,.......n-1. Sea A= (A0, A1, ......An-1)

Necesitamos calcular las siguientes sumas:

Este vector de n sumas puede calcularse recursivamente realizando las n-1 iteraciones definidas como:

S(0) = A(0)

S(k) = S(k-1) + A(k) para k = 1,2, ...., n-1

Esta sumas recursivas para n = 8 se implementaron en un procesador SIMD N=8 PEs

En la implementación se utilizan tanto el ruteo de datos como el enmascaramiento de PEs. Inicialmente cada A(i) que reside en cada PEM(i) es movido al registro D(i) en cada PE(i) para i = 0,1,..., n-1 (sumiendo n=N=8).

En el primer paso A(i) es ruteado desde R(i) a R(i+1) y sumando al A(i+1). Obteniéndose la suma A(i) + A(i+1) en R(i+1) para i =0,1,...8.

Las flechas de la siguiente figura muestran las operaciones de ruteo y la notación abreviada ∑Ai a Aj se utiliza indicando la suma intermedia de A(i) + A(i+1)+....+A(j).

48906-43884.jpg

En el paso 2, la sumas intermedias en R(i) son ruteadas a R(i+2) para i = 0,1,...5.

En el paso final las sumas intermedias en  R(i)  son ruteadas en R(1+4) para i =0,1...,3

Consiguientemente el PE(k) tiene el valor final de S(k) para k =0,1,...7.

Cuanto más lejos se extienden las operaciones de ruteo cada vez menos PEs son los intervinientes. Nótese que en el paso 1 PE(7) recibe pero no transmite; en el paso 2 son los PE(6) y PE(7), en tanto que en el paso 3 son los PE(4), PE(5), PE(6) y PE(7) los que reciben solamente.

Estos PEs que se desean que se transmitan son enmascarados durante el paso correpondiente.

Los PEs que son enmascarados en cada paso dependen de la operación (ruteo de datos o suma aritmética) que se realice. Aun así los patrones de enmascaramiento varían en los diferentes ciclos de operación.

 Un arreglo de PEs es una unidad aritmética pasiva esperando ser invocada para las tareas de cómputo paralelo.

Procesamiento pipeline/paralelo

El multiprocesamiento es una consecuencia natural de las actividades que están viajando simultáneamente en distintos elementos de procesamiento de la red. El pipeline puede pensarse como una forma de multiprocesamiento que optimiza la utilización de recursos y saca ventaja de las dependencias entre los cálculos.

 

Filosofía de diseño de los procesadores  RISC

Antes de la aparición de los procesadores RISC (Reduced Instruction Set Computer), la filosofía de diseño de los procesadores se basaba en aumentar la potencia de proceso agregando mayor capacidad de almacenamiento en forma de registros. Este hecho condujo a un problema y es que los registros se implementan en los procesadores usando transistores en el propio dado del procesador, además de que incrementan en gran medida la complejidad de las CPUs, pues todas sus unidades funcionales han de estar "cableadas" con todos los registros. En este sentido, la utilización de la memoria principal simplificaba el diseño y lo abarataba, por lo que los microprocesadores limitan el número de registros que implementan en su interior.

Para poder usar la memoria principal para almacenar la información de las unidades funcionales de la CPU, se intentó implementar las instrucciones de manera que ofrecieran varias versiones en función de la posición de los operandos de las mismas, ya sea en registros internos o memoria principal, y simplificar la programación. Este concepto se conoce como ortogonalidad. Hace que un menor número de instrucciones permitan realizar las mismas operaciones, pues la misma instrucción puede ser configurada para diferentes modos de direccionamiento.

Breve reseña histórica de la arquitectura PowerPC.

La filosofía RISC fue introducida por John Cocke en los años 70. La primera implementación de un procesador RISC llegaría con el proyecto 801 de IBM, dedicado especialmente a computación empotrada. Ofreció un rendimiento bastante malo, por lo que IBM emprendió el Proyecto América, creando el primer procesador de la arquitectura POWER [3], incluido en el RISC System/6000 a principios de los 90.

En 1991, IBM se dio cuenta de las posibilidades de su diseño y se creó la alianza AIM (Apple, IBM & Motorola, actualmente Freescale), con el objetivo de terminar con el domino del tándem Microsoft-Intel que ofrecía sistemas basados en 80386 y 80486 y tenía al Pentium en desarrollo. Para Motorola supuso una salida al poco éxito que estaba teniendo su serie 88000, por lo que requirió que la nueva solución fuera compatible con el bus del 88000 a nivel de hardware.

El resultado de estos requerimientos fue la arquitectura PowerPC (Performance Optimization With Enhanced RISC Performance Computing).

La primera implementación de un procesador PowerPC llegó en 1993 con el PowerPC 601 de IBM.

Ejemplos de implementaciones de sobremesa fueron los procesadores 750 (G3), 7400 (G4), 7450 (G4e) y sus múltiples versiones (7447, 7447a y 7448) y el 970 (G5) y sus derivaciones: 970FX, 970MP y 970GX.

La ISA (Instruction Set Architecture) de PowerPC se describió originalmente en tres libros [6] que contemplaban las instrucciones de nivel de usuario, el entorno virtual y el entorno operativo.

48906-44870.jpg

 

Modos de direccionamiento a memoria

Las CPUs PowerPC direccionan al byte y sólo es posible el acceso a memoria mediante las instrucciones LOAD y STORE, que copiarán a los registros del procesador los valores de la memoria principal o los transferirán a ésta.

Para generar las direcciones se sumará el contenido de un registro base a un índice proporcionado en la propia instrucción o en un registro índice. PowerPC permite actualizar el registro base con la última dirección generada para, por ejemplo, procesar elementos consecutivos.

Conjunto de registros

La arquitectura define 32 registros de propósito general y otros 32 registros de coma flotante de 64 bits. En función del modo de operación, los registros de propósito general tendrán un ancho de 32 ó 64 bits.

Las implementaciones que incorporan el motor vectorial AltiVec [9] (también llamado VMX por IBM o Velocity Engine por Apple) incorporan 32 registros adicionales de 128 bits.

Motor de cálculo vectorial

Además de los 32 registros vectoriales, los procesadores PowerPC que implementen el motor AltiVec implementan instrucciones de control de caché para evitar sobrecargar el uso de la memoria caché y producir un descenso del rendimiento.

Como ocurre con las extensiones SSEx de los procesadores x86, operan en paquetes de datos usando los registros especiales definidos a tal efecto. La diferencia radica en que PowerPC define 32 frente a 8 registros de x86 (AMD64 amplía esta cifra hasta 16) y que ejecuta las instrucciones vectoriales de forma independiente en un ciclo y sin requerir un cambio de modo [9], cosa que no se ha conseguido en los procesadores x86 hasta 2006 con la introducción de la microarquitectura Core de Intel.

AltiVec fue desarrollado entre 1996 y 1998 y la primera implementación se produjo en el MPC7400 de Motorola (G4) que Apple usó para optimizar parte del código de su nuevo sistema operativo, Mac OS X. Recientemente, se ha incluido el motor VMX en los procesadores de la línea POWER de IBM con el futuro POWER6.

A continuación se describe solamente los procesadores que se hace referencia al articulo.

PowerPC 7447

Tras las implementaciones de la serie 6XX, llegó la serie 7XX, denominada por Apple como G3, que permitió superar el rendimiento de la serie 6XX, pero que tuvo una importante carencia: el motor vectorial, que ya tenían sus competidores x86. El motor vectorial llegaría con el 7400 de Motorola, que sería básicamente un 750 con el añadido de las extensiones AltiVec.

En 2001 presenta el 7450, que supondría un rediseño completo de la anterior versión. Con un pipeline un poco más largo (7 etapas frente a las 4 del 7400) pudo alcanzar frecuencias mayores, desde los 667 MHz en 2001 a los 2 GHz en la actualidad. La última revisión, el MPC7448 está fabricada en 90 nm y ofrece cotas de rendimiento por vatio de entre las mejores del mercado.

El PowerPC 7447 es una pequeña evolución del 7450, con el cual comparte filosofía arquitectónica. También tiene un pipeline de 7 etapas, está fabricado con tecnología de 130 nm e implementado con 58 millones de transistores. El 7447 implementa las extensiones AltiVec, que añaden 162 nuevas instrucciones a la ISA Power y tiene 4 unidades de ejecución vectoriales, permutación de vectores, operaciones de enteros simples, operaciones de enteros complejos y operaciones de coma flotante, además de los 32 registros de 128 bits estándar.

48906-44857.jpg 

PowerPC 970

La filosofía de diseño del PowerPC 970 varió respecto a la del 7450, en este caso se usó un pipeline bastante  largo, de 14 etapas en el caso de operaciones con enteros, frente a las 7 del 7450. Esto permite tener hasta 200 instrucciones al vuelo pendientes de confirmar (lo que incrementa el número de registros de renombrado necesarios), además de escalar mejor frecuencia. Estas características, combinadas con un consumo relativamente reducido (el 970 de 1,8 GHz consume 42 W frente a los 69 del Pentium 4 a 2,8 GHz y los escasos 30 W del 7450 a 1,2 GHz), hicieron que se convirtiera en un chip muy popular.

El PowerPC 970 es un microprocesador superescalar con modos de operación de 32 y 64 bits que desciende directamente del POWER4 de IBM e implementa el motor vectorial VMX (AltiVec).

Comparado con el PowerPC 7450, el 970 tiene un rendimiento general mayor, pero el tener muchas más etapas de segmentación hace que cuando es necesario vaciar el pipeline, la penalización de rendimiento sea también mayor. Por este motivo, el 970 tiene una caché de instrucciones el doble de grande que la del 7450 (64 KiB frente a 32 KiB), además de que ha de incorporar técnicas avanzadas de predicción de saltos para minimizar los fallos de pipeline, penalizando el rendimiento [12].

48906-44856.jpg

Para mantener el pipeline lleno de instrucciones en todo momento, se leen de memoria ocho instrucciones por ciclo. Estas instrucciones se decodifican y dividen en una especie de micro operaciones llamadas IOPs, que se ejecutarán fuera de orden.

Pero la mayor mejora de rendimiento del 970 es el bus frontal que incorpora. Éste está compuesto por dos canales unidireccionales de 32 bits de ancho que pueden funcionar hasta a la mitad de la frecuencia de la CPU, es decir, ésta última tiene un multiplicador de 2x. Los comandos de control se multiplexan en bus junto con los datos, lo que hace que se pierda una pequeña cantidad de ancho de banda (en torno a un 10%), aunque sigue manteniendo una tasa de transferencia bastante alta (para un FSB de 900 MHz se llega a los 6,4 GiB/s).

Para concluir, es necesario mencionar que el 970 posee dos unidades de enteros asimétricas, una unidad de coma flotante que permite ejecutar operaciones en doble y simple precisión a la misma velocidad y que tiene 80 registros disponibles (32 de la ISA PowerPC y 48 de renombrado) y una implementación total de las extensiones AltiVec, con unidades de aritmética en coma flotante y entera, lógica y permuta de vectores [13]. En la figura 8 de aprecian todos los bloques constitutivos del PowerPC 970.

PowerPC 401

El PowerPC 401 es un chip contemporáneo al PowerPC 601. Fue diseñado para entornos empotrados, como microcontroladores, elementos de redes (routers, switches...), etc. Para reducir el coste, consumo y tamaño se eliminaron elementos como la unidad de gestión de memoria (desparece la paginación) y las unidades de coma flotante, lo que permitió un consumo de tan sólo 0,1 W en su versión de 100 MHz (1996). Fue implementado usando únicamente 85.000 transistores. Sólo puede emitir una instrucción por ciclo y posee un pipeline de tres etapas.

Lo antes dicho complementa la información suministrada en la introducción y motivación del  artículo en cuestión.  Básicamente la idea del artículo es implementar los elementos de procesamientos PE dentro de la lógica de la FPGA y a su vez tener comunicación con el procesador PowerPC a través de la unidad de control CU, o de la APU (unidad de procesamiento auxiliar) como lo identifica el artículo, con la gran diferencia con respecto a la Altivec o SSE, de poder ser reconfigurable en a la medida que se desee; dado que el módulo se puede redefinir mediante un lenguaje de descripción de hardware VHDL.

METODOLOGÍA DE TRABAJO DEL ARTÍCULO 

En la metodología del artículo se explica la acción de reescribir el código de bucles (escalar) en formato vectorial, es decir aplicar  el proceso de vectorización.  En el siguiente cuadro se representa una tabla de referencia para convertir de vectorial a escalar.

 48906-44858.jpg

 Y un ejemplo de esta conversión de vectorial a escalar sería:

 48906-44868.jpg

Luego de escalar a vectorial se cumple conciertas reglas como:

48906-44861.jpg

Y tomando como ejemplo la figura B del código de escalar se convertirá a vectorial de la siguiente forma:

48906-44867.jpg

El compilador GCC 4.x viene con un vectorizador que implementa ciertas aproximaciones basadas en bucle, lo que significa que no tiene en cuenta el código directo. Por lo tanto el artículo informa que aparte de la vectorización automática (por el compilador GCC), se puede realizar también en forma manual tomando en cuenta como referencia los ejemplos antes nombrados.

RESULTADOS PRELIMINARES

En los resultados preliminares el artículo nombró su sistema OSSIAN, basados en procesadores  PowerPC 7400 y la PowerPC 970, el sistema OSSIAN consiste en el dispositivo Virtex-4 modelo XC4FX12.

La  medición de rendimiento se realizó mediante la ejecución de una aplicación de estabilización de imagen en modo "batch", es decir en modo de procesamiento de imagen en bloque, estas se leen y se almacena su resultado en la memoria. Cuando el artículo expresa que el algoritmo se realiza con la transformada de wavelet se trata de los siguiente:

La Transformada Wavelet Discreta (DWT) esta siendo muy utilizada en el campo del procesado de imágenes gracias a su flexibilidad en la representación de señales no estacionarias y sus buenas características de adaptabilidad a la visión humana. La DWT está relacionada con el análisis multiresolución y la descomposición en subbandas, lo cual se utiliza en el procesado de imágenes. Este método de transformación que fue desarrollado por Mallat [7], ofrece ortogonalidad y la posibilidad de representación tiempo-frecuencia.

La transformada Wavelet discreta (DWT) descompone recurrentemente una señal de entrada, So(n), en dos subseñales de menor resolución consideradas como aproximación y detalle. Las señales Si(n) y Wi(n) son la aproximación y el detalle respectivamente de la señal en el nivel i. la aproximación de la señal en el nivel i+1 se puede calcular como:

Si+1(n) = ∑g(k)Si(2n-k)

El detalle de la señal en el nivel i+1 se puede calcular como:

Wi+1(n) = ∑h(k)Si(2n-k)

48906-44885.jpg

Es decir la señal original pasa por dos filtros un pasa bajo y pasa alto.

48906-44871.jpg

Y se vuelve a mostrar la forma de obtener los coefienciente de wavelet de haar realiando downsampling, como se ve en el ejemplo siguiente:

48906-44859.jpg

Estos coeficientes es  a lo que nos referimos como los detalles de la señal y es lo que se necesita para formar la matriz coeficientes de wavelet de haar. Se puede formar tres matrices de coeficientes de haar dependiendo del número de niveles que se tome, mientras mayor sea el nivel mayor será el número de coeficientes de haar.

48906-44877.jpg

 

48906-44864.jpg

Down-Sampler

 Hacer un down-sampling de un factor entero M>1 consiste en guardar uno de cada M valores muestreados y eliminando los M-1 muestreos intermedios, generando una señal de salida xd[n] de acuerdo con la siguiente relación: xd[n]=x[nM]. Al igual que la operación de up-sampling, el downsampling es lineal pero es variante en el tiempo. Disminuir la frecuencia puede tener implicaciones a la hora de cumplir el teorema del muestreo, por lo que se explica la razón por la que va después del filtro pasobajo o pasaalto, para evitar que sea variante en el tiempo.

        (↓2)y=(...,y(-4),y(-2),y(0),y(2),y(4),......)

El símbolo (↓2) indica downsampling o decimacion, para compensar la pérdida de componentes durante el downsampling, es necesario multiplicar y(2n) por raiz de 2, este factor se incluye de una vez en el filtro, es decir el filto pasa bajo por ejemplo: Ho(w) cambia C(w) = raiz(2)Ho(w), por lo tanto los coeficientes del filtro "C", en los filtros  promedios los coeficientes se incrementan en raiz(2)/2; por lo tanto :

c(o)=c(1)=  raiz(2)/2   el cual es 1/raiz(2)

por lo tanto la matriz de downsampling para el filtro pasa bajo será:

48906-44887.jpg

por lo tanto la matriz de downsampling para el filtro pasa alto será:

 

48906-44888.jpg

Luego se habla de una matriz de correlación que se puede definir de la siguiente manera:

48906-45383.jpg

Donde I es la función de entrada y h es el operador filtro (templete).

Se realizará un ejemplo para entender mejor como funciona este filtro de correlación:

48906-45385.jpg

Para calcular la correlación en el pixel (2,4) de la imagen se siguen los siguientes pasos:

  • 1- Se desliza el filtro de manera que su pixel central quede alineado con el pixel (2,4) de la imagen.
  • 2- Se multiplica cada peso del filtro por los elementos de la imagen que se encuentran abajo.
  • 3- Se suman los productos individuales calculados en el paso 2.

48906-45384.jpg

Por lo tanto la salida del pixel (2,4) después de la correlación será:

1x8 + 8x1 + 15x6  + 7x3 + 14x5 +  16x7  +  13x4  +  20x9  + 22x2  = 585

En el artículo utilizan una ventana de seguimiento de 41x41 pixeles y la máscara o filtro de correlación es de 8x8 pixeles. Los elementos de esta máscara al solaparse con la ventana de seguimiento será la manera de seguir los puntos en las aproximidades, este solapamiento  implica una multiplicación matricial tal como se observó en el ejemplo anterior, por lo tanto es una tarea destinada a la unidad SIMD, que será un multiplicador matricial.

NOTA: cuando se habla de pixel es importante entender que en el mismo se toma en cuenta la profundidad, esto no es mas que la suma de la combinación de la matriz de color rojo, verde y azul, donde se obtienen 8 combinaciones de colores, al definir mas elementos de la matriz de color se incrementa también en número de combinaciones, para aproximarse a los colores reales.

El proceso de realizar esta multiplicación de matrices lo realiza la unidad SIMD, implementada en la FPGA virtex-4 modelo XC4FX12. Este modelo consta de 64x24 bloques lógicos de control (CLB), 5472 silicios, 10944 LUTs, 86Kb como máxima distribución de RAM y 10944 fliflops. Cada CLB contiene 4 silicios, 8 LUTs, 8 flipflops, 8 MULT_ANDs, 2 cadenas de acarreo y aritmético, 64 bits para la distribución de RAM, registros de 64 bits.

El modelo XC4VFX12 contiene 16 entrada de reloj, los cuales pueden ser configurados por los pines de entrada/salida del dispositivo.

 REFERENCIAS

http://cpdsi-fich.wikidot.com/local--files/teorias/teoria1b.pdf

http://www.depi.itchihuahua.edu.mx/electro/archivo/electro2001/mem2001/articulos/dsp3.pdf

http://www.cudi.edu.mx/primavera_2004/presentaciones/Ricardo_Fuentes2.pdf

http://www.atc.us.es/descargas/Tecnologias_para_la_adquision_de_imagenes_(Bloque2).pdf

http://catarina.udlap.mx/u_dl_a/tales/documentos/lep/hernandez_g_d/capitulo5.pdf

http://www.iberchip.org/iberchip2007/articulos/3/a/paper/2-Arquitectura_Hibrida_FPGA.pdf

http://www.mathworks.com/access/helpdesk/help/pdf_doc/wavelet/wavelet_ug.pdf

http://www-2.dc.uba.ar/materias/so/datos/cap05.pdf

http://en.wikipedia.org/wiki/SIMD

http://www.tecnun.com/asignaturas/tratamiento%20digital/tema11.pdf 

http://www.xilinx.com/bvdocs/ipcenter/data_sheet/apu_fpu.pdf

http://cpdsi-fich.wikidot.com/local--files/teorias/teoria1b.pdf

http://www.depi.itchihuahua.edu.mx/electro/archivo/electro2001/mem2001/articulos/dsp3.pdf

http://www.cudi.edu.mx/primavera_2004/presentaciones/Ricardo_Fuentes2.pdf

http://www.atc.us.es/descargas/Tecnologias_para_la_adquision_de_imagenes_(Bloque2).pdf

http://www.xilinx.com/products/silicon_solutions/fpgas/virtex/virtex4/

[1] Alexandre E. Eichenberger, Peng Wu, Kevin O'Brien, Vectorization for SIMD Architectures with Alignment Constraints, IBM T.J. Watson Research Center Yorktown Heights, NY

[2] Ricardo José Colom†, Rafael Gadea†, Angel Sebastia†, Marcos Martínez†, Francisco allester†,

Vicente Herrero, Implementación de la Transformada Wavelet Discreta 2-D con filtros no Separables, Universidad Politécnica de Valencia. Departamento de Ingeniería Electrónica. Camino de Vera s/n 46022 Valencia

Ver álbum de fotos »

Sobre el blog

UNIDAD SIMD Y PROCESAMIENTO DE IMAGEN

Universidad Nacional Experimental Politécnica Antonio José de Sucre
Post-Grado: Maestría en Ingeniería Electrónica
Materia: Electrónica Integrada
Profesor: Ing. Angel Custodio Ph D
Alumno: Ing. Edgart Marchán
edgartmarchan@cantv.net

Ver ficha del blog en OboLog

Login

Suscripción

Suscríbete al Feed RSS XML

También puedes suscribirte directamente con alguno de los siguientes enlaces:

  • Suscríbete en Bloglines
  • Suscríbete en Google