La descarga está en progreso. Por favor, espere

La descarga está en progreso. Por favor, espere

Grupo de Investigación Diseño de Sistemas Digitales

Presentaciones similares


Presentación del tema: "Grupo de Investigación Diseño de Sistemas Digitales"— Transcripción de la presentación:

1 Grupo de Investigación Diseño de Sistemas Digitales
Ricardo José Colom Palero Jornada de Arquitecturas para el Cálculo y Comunicaciones Avanzadas Última Actualización 14/11/2018

2 ¿Quiénes Somos? Universidad Politécnica de Valencia
Departamento Ingeniería Electrónica Grupo Diseño de Sistemas Digitales 14 Investigadores Subproyecto CICYT Francisco Mora Ricardo Colom Jornada de Arquitecturas para el Cálculo y Comunicaciones Avanzadas

3 ¿Qué Hacemos? Diseño, estudio y desarrollo de sistemas con microprocesadores, microcontroladores y DSP. Diseño de sistemas digitales y de adquisición de datos utilizando buses normalizados. Diseño microelectrónico. Diseño con dispositivos programables. Diseño de circuitos Integrados de aplicación especifica. Aplicaciones: Sistemas de procesado digital de señales, audio, imágenes, vídeo, etc. Sistemas electrónicos para medicina nuclear. Sistemas para la adquisición y procesado de datos a alta velocidad. Prototipado rápido con dispositivos programables. Jornada de Arquitecturas para el Cálculo y Comunicaciones Avanzadas

4 ¿Cómo Contactar con Nosotros?
Dirección Postal: Ricardo José Colom Palero Universidad Politécnica de Valencia Escuela Técnica Superior de Ingenieros de Telecomunicación Departamento de Ingeniería Electrónica Camino de Vera s/n 46022 Valencia España Dirección Electrónica: Jornada de Arquitecturas para el Cálculo y Comunicaciones Avanzadas

5 Diseño VLSI para Procesado de Imágenes y Vídeo
Ricardo José Colom Palero Jornada de Arquitecturas para el Cálculo y Comunicaciones Avanzadas Última Actualización 14/11/2018

6 Introducción Línea de Investigación, año 1999.
Diseño microelectrónico. Tratamiento digital de señales. Imágenes y vídeo. Proyecto CICYT TIC C07-05. Compresión de vídeo en tiempo real orientado a aplicaciones médicas. Estudio de la segmentación del algoritmo de la transformada wavelet e implementación en VLSI. Tarea: Implementación hardware de la transformada wavelet. Estudio de las especificaciones de diseño electrónico. Elección de los dispositivos lógicos programables. Segmentación de los algoritmos en lenguaje VHDL. Diseño VLSI y optimización. Evaluación y test . Jornada de Arquitecturas para el Cálculo y Comunicaciones Avanzadas

7 Compresión de Imágenes
Transformación Cuantificador Codificador Coeficientes Indices o Símbolos Pixeles Bits Compresor Predicción Lineal Transformadas Lineales (DCT) Descomposición en Subbandas (Transformada Wavelet) Escalar Vectorial Run-Legth EZW SPIHT Longitud Variable (Huffman o Aritmética) Longitud Fija (Lempel-Ziv) Decodificador Descuantificador Transformación Inversa Coeficientes Indices o Símbolos Pixeles Bits Descompresor El diagrama de bloques de un sistema de codificación sin pérdidas se muestra en estas Figuras. El codificador, Figura superior, toma una imagen de entrada y genera como salida una serie de bits comprimidos. El decodificador, Figura inferior, toma como entrada los bits comprimidos y regenera la imagen original descomprimida. En general, el codificador y el decodificador están formados por tres etapas, que son: La transformación, la cuantificación o conversión de datos a símbolos y la codificación. El bloque de transformación, genera a partir de una imagen de entrada unos coeficientes que por sus características posibilitan que la compresión sea más eficiente. La transformación ayuda en la reducción de la correlación de los datos, cambia la distribución estadística de los datos y/o concentra mayor cantidad de información en unas regiones o subbandas. Entre las transformaciones típicas que se pueden utilizar se encuentran: la predicción lineal, las transformadas lineales como la transformada discreta del coseno (DCT), la descomposición en subbandas como la transformada wavelet, las conversiones del espacio de color e incluso combinaciones de todas ellas. El bloque cuantificador, a partir de los coeficientes genera unos elementos denominados símbolos los cuales permiten ser codificados más fácilmente por la última etapa. Métodos de cuantificación los hay de muchos tipos y formas, desde la utilización de una simple cuantificación escalar hasta el empleo de la compleja cuantificación vectorial. Los cuantificadores escalares uniformes de longitud fija son los más sencillos, ya que realiza un simple redondeo al entero más cercano utilizando siempre el mismo margen de redondeo. Sin embargo existen muchos otros métodos que se utilizan para realizar la cuantificación o la conversión en símbolos, los cuales en ocasiones dependen del tipo de transformación utilizada. Entre estos otros métodos se pueden destacar las técnicas conocidas como codificación run-length (RLC), codificación por truncamiento de bloques (BTC), codificación EZW (embedded zero-tree wavelet) o la codificación SPIHT (set partitioning in hierarchical trees). El tercer bloque convierte los símbolos en una secuencia binaria comprimida, asignando a cada uno de ellos una palabra binaria. Un nivel de compresión sin pérdidas adecuado se consigue asignado palabras binarias cortas a los símbolos que más veces se producen. Esto significa que no todas las palabras binarias serán del mismo tamaño, lo cual es conocido como codificación de longitud variable (VLC) o codificación entrópica, como por ejemplo, la codificación de Huffman y la codificación aritmética. Una alternativa a la codificación de longitud variable es la utilización de palabras binarias de longitud fija, en la que todos los símbolos se codifican con palabras de la misma longitud. Un ejemplo típico de este tipo de codificación es la denominada de Lempel-Ziv. Jornada de Arquitecturas para el Cálculo y Comunicaciones Avanzadas

8 Transformada Wavelet Discreta
H (z) 1 2 y (n) x(n) 3 4 8 Las expresiones que permiten obtener la transformada wavelet discreta de una señal x(n) son las siguientes: Estas ecuaciones representan un banco de filtros que se puede implementar mediante una estructura como la que se ve en la figura. Jornada de Arquitecturas para el Cálculo y Comunicaciones Avanzadas

9 Algoritmo en Árbol H(z) G(z) S (n) ¯ 2 W
(n) 2 1 W 3 En la Figura 3.8 se puede ver el mismo banco de filtros representado mediante una estructura en árbol, lo que se conoce habitualmente como algoritmo de Mallat, en este caso se dice que el banco de filtros es de tres niveles u octavas. En este caso unicamente se utilizan dos tipos distintos de filtros, H(z) es un filtro paso alto mientras que G(z) es un filtro paso bajo. De modo general, se obtiene que M = L+1, donde M es el número de canales del filtro y L el número de niveles del árbol. A cada canal de salida Wk(n), se le suele denominar octava, pues realmente corresponde a una banda frecuencial de anchura una octava, por tanto W1(n) corresponde con la octava de frecuencia más alta y S3(n) a la octava de frecuencia más baja. Con un ligero cambio en la nomenclatura se puede expresar las ecuaciones que describen la transformada wavelet discreta de tal modo que se ajusten a la nueva representación gráfica. Stephane Mallat. ”A Wavelet Tour of Signal Processing" Academic Press Jornada de Arquitecturas para el Cálculo y Comunicaciones Avanzadas

10 Filtros Biortogonales
H(z) G(z) W 1 (n) S x(n) H (z) G 2 En la Tabla 3.1 anterior puede observarse que los filtros no son simétricos, ésto significa que la respuesta en fase del filtro no es lineal, aunque en el caso de los presentados su cambio de fase sea mínimo. Los filtros simétricos presentan una respuesta en fase lineal y además permiten simplificar las implementaciones físicas, al aprovechar su simetría. Se pueden obtener filtros simétricos para la transformada wavelet por medio de lo que se denomina funciones wavelet biortogonales. En las wavelet biortogonales, la condición de que el filtro de análisis y el de síntesis deban tener los mismos coeficientes, impuesta en los ortonormales, se hace menos estricta permitiendo que sean filtros de distintos coeficientes. De este modo los filtros paso bajo H0(z) y F0(z) de la Figura 3.11, serán distintos y por tanto las condiciones reflejadas en las ecuaciones (3.41) se convierten en: (3.46) Jornada de Arquitecturas para el Cálculo y Comunicaciones Avanzadas

11 La Transformada Wavelet 2-D. Con Filtros 1-D
H(z) G(z) S (n 1 ,n 2 ) Columnas Filas W 3 en él se representa el cálculo de una octava de la transformada wavelet discreta para una señal bidimensional. Tal como puede apreciarse, el cálculo se realiza filtrando primero por filas la imagen y luego por columnas. La señal W1 contiene las altas frecuencias verticales, ya que se obtiene filtrando la señal S0 con un filtro paso bajo en la dirección horizontal y un filtro paso alto en la dirección vertical. De igual modo, la señal W2 contiene las altas frecuencias horizontales y la señal W3 las altas frecuencias en ambas direcciones. Tal como se observa en la Figura 3.12, para aplicar la DWT a una imagen, primero debe realizarse un filtrado por filas y posteriormente por columnas, ya que se trata de señales bidimensionales filtradas con filtros unidimensionales. Sin embargo, se pueden utilizar directamente filtros bidimensionales, de este modo, se obtienen en paralelo las cuatro salidas como se ve en la Figura 3.13. Jornada de Arquitecturas para el Cálculo y Comunicaciones Avanzadas

12 La Transformada Wavelet 2-D. Con Filtros 2-D
(n 1 ,n 2 ) H(z)H(z) H(z)G(z) G(z)H(z) G(z)G(z) W 3 Los coeficientes de los filtros bidimensionales pueden obtenerse bien multiplicando entre sí los vectores de los coeficientes de los filtros unidimensionales, o bien directamente como coeficientes de filtros bidimensionales no separables. En ambos casos, el resultando será una matriz de coeficientes. Jornada de Arquitecturas para el Cálculo y Comunicaciones Avanzadas

13 Procesado de 3 Octavas de una Imagen
1 ,n 2 ) W HH HG GH GG W22 W21 W23 S3 W31 W32 W33 W11 W12 W13 Por tanto, a partir de una imagen de 512 x 512 pixeles, tras el procesado se obtienen cuatro imágenes de 256 x 256 pixeles. De estas cuatro imágenes resultantes, se tomará la que se ha obtenido del filtro G(z)G(z) para volver aplicar la transformada wavelet, así sucesivamente tantas veces como octavas (o niveles) se deseen obtener. En la Figura 3.15 se ve el ejemplo de aplicar la transformada wavelet con tres octavas a una imagen concreta. Jornada de Arquitecturas para el Cálculo y Comunicaciones Avanzadas

14 Implementación de los Filtros 2-D
Con la finalidad de atender la nuevas exigencias se ha diseñado un nuevo data_path. A partir de dos pixeles de entrada, proporciona en paralelo los cuatro pixeles de salida de los filtros. En la Figura (5.14) se muestra el diagrama de bloques funcional de la implementación realizada. Las salidas son registradas (bloque "Registro_G01") en el momento adecuado para ser almacenadas en una memoria. Tarda la mitad de ciclos en sacar un resultado, que el Data_Path_G01 anterior. En la siguiente Figura se puede ver la estructura de la unidad de filtrado, formada por dos Data_path, que calculan los coeficientes de salida par e impar, a la vez que tienen como entrada dos pixeles. Tras comprobar su correcto funcionamiento, el bloque Wavelet_G31 se emplazó y rutó en la FPGA Virtex 300 de Xilinx, obteniendo los siguientes resultados: · Número de ciclos de reloj: N2+4N+12, para una imagen de N x N pixeles. · Ocupación en Slices: 2619 (85% de una Virtex 300). · Ocupación de BlockRAMs: 7 (43% de una Virtex 300). · Estimación de la frecuencia máxima de trabajo: 39 MHz. Según estos resultados, el cálculo de dos octavas de la trasformada wavelet de una imagen de 512 x 512 pixeles con un reloj de 20 MHz, tardaría aproximadamente alrededor de 13,2 ms. Jornada de Arquitecturas para el Cálculo y Comunicaciones Avanzadas

15 Unidad de Filtrado Filtro Par Impar Píxel A Píxel B S Unidad Control -
Mux W 1 2 3 Un aspecto importante a destacar es el control distribuido. Realizado mediante dos bloques (Control_Path_G31 y Control_General_G11) consistentes en dos máquinas de estados que se utilizan en diferentes niveles jerárquicos y que se comunican entre sí. En la figura se ve el diagrama de bloques simplificado de la arquitectura recurrente implementada. Como se ve está formada por dos unidades de filtrado, dos unidades de almacenamiento y una unidad de control. Las unidades de filtrado presentan la siguiente estructura interna: Un filtro par y otro filtro impar, tal como ya se ha comentado. Podemos apreciar la existencia de un bloque denominado Control-P, correspondiente con el control_path del bloque de filtrado. Este bloque a partir de la señal de "Inicio", pone en marcha el generador de direcciones para leer la imagen (Generador_G41 o Generador_G31) y activa el bloque encargado de realizar las operaciones de filtrado (Data_Path_G11). También detiene el proceso cuando se le indica por medio de la señal "Stop". Las señales "Inicio" y "Stop" provienen del módulo de control general (Control_General_G11) de la jerarquía superior. Aprobechando las características de modularidad del diseño, la implementación recurrente se ha realizado empleando una unidad de control-P en la unidad de filtrado 1 y dos unidades en la unidad de filtrado 2. Han sido necesarias dos unidades ya que se realizan dos octavas utilizando un solo data_path. La unidad de control está formada por dos unidades de control-G. Cada unidad de control-G pone en marcha el cálculo de cada una de las octavas en el momento adecuado, encargándose del sincronismo entre ambas para que la transformada wavelet se realice correctamente. También detiene el proceso cuando se han completado las operaciones. La unidad control-G1 se encarga de iniciar y controlar el cálculo de la primera y segunda octava, a partir de la información recibida del control-P1, actuando sobre el control-P2 para detener el cálculo de la segunda octava. La unidad control-G2, recibe información de control-P2 y actua sobre control-P3 iniciando y deteniendo el cálculo. En la Figura 5.24 puede verse un diagrama temporal, en el que se reflejan cómo se realizan las operaciones de cálculo de las filas de cada una de las octavas. La segunda octava, en régimen permanente, no inicia las operaciones de una fila hasta que la primera octava no haya generado dos nuevas filas de salida. Por tanto, cuando la segunda octava haya generado dos nuevas filas, la tercera octava iniciará el cálculo de una nueva fila de salida. Según esto, en el peor de los casos, se concatenara el cálculo de una fila de la segunda octava y una fila de la tercera octava, el tiempo total de cálculo de ambas filas es 3/4 partes del tiempo de cálculo de una fila de la primera octava. Además, como se necesitan dos filas de la primera octava para iniciar la segunda, puede considerarse que el tiempo empleado es 3/8 partes del tiempo de dos filas de la primera octava. Por tanto, el cálculo de una fila de la segunda octava no puede ser nunca activado cuando se está realizando el cálculo de una fila de la tercera. Jornada de Arquitecturas para el Cálculo y Comunicaciones Avanzadas

16 Secuencia de Lectura Datos
Comienzo Filtro Impar Comienzo Filtro Par 1 2 3 4 5 6 7 Reanuda Filtro Impar Sentido Lectura S(1,1) W1(1,1) W2(1,1) W3(1,1) S(1,2) W1(1,2) W2(1,2) W3(1,2) Ya que el número de ciclos se debe reducir a la mitad, una técnica sencilla sería leer dos pixeles de la memoria y procesarlos en paralelo. Con esto conseguimos reducir el número de ciclos a la mitad, ahora tendremos un dato cada cuatro ciclos de lectura. Sin embargo esto afecta a las memorias y lo primero es saber, si con la memorias que estamos utilizando se pueden realizar este tipo de operaciones. Jornada de Arquitecturas para el Cálculo y Comunicaciones Avanzadas

17 Arquitectura Directa Unidad Almac. 1 Píxel A Píxel B S Almac. 2
Filtrado 3 Filtrado 1 Control 2 W Filtrado 2 Un aspecto importante a destacar es el control distribuido. Realizado mediante dos bloques (Control_Path_G31 y Control_General_G11) consistentes en dos máquinas de estados que se utilizan en diferentes niveles jerárquicos y que se comunican entre sí. En la figura se ve el diagrama de bloques simplificado de la arquitectura recurrente implementada. Como se ve está formada por dos unidades de filtrado, dos unidades de almacenamiento y una unidad de control. Las unidades de filtrado presentan la siguiente estructura interna: Un filtro par y otro filtro impar, tal como ya se ha comentado. Podemos apreciar la existencia de un bloque denominado Control-P, correspondiente con el control_path del bloque de filtrado. Este bloque a partir de la señal de "Inicio", pone en marcha el generador de direcciones para leer la imagen (Generador_G41 o Generador_G31) y activa el bloque encargado de realizar las operaciones de filtrado (Data_Path_G11). También detiene el proceso cuando se le indica por medio de la señal "Stop". Las señales "Inicio" y "Stop" provienen del módulo de control general (Control_General_G11) de la jerarquía superior. Aprobechando las características de modularidad del diseño, la implementación recurrente se ha realizado empleando una unidad de control-P en la unidad de filtrado 1 y dos unidades en la unidad de filtrado 2. Han sido necesarias dos unidades ya que se realizan dos octavas utilizando un solo data_path. La unidad de control está formada por dos unidades de control-G. Cada unidad de control-G pone en marcha el cálculo de cada una de las octavas en el momento adecuado, encargándose del sincronismo entre ambas para que la transformada wavelet se realice correctamente. También detiene el proceso cuando se han completado las operaciones. La unidad control-G1 se encarga de iniciar y controlar el cálculo de la primera y segunda octava, a partir de la información recibida del control-P1, actuando sobre el control-P2 para detener el cálculo de la segunda octava. La unidad control-G2, recibe información de control-P2 y actua sobre control-P3 iniciando y deteniendo el cálculo. En la Figura 5.24 puede verse un diagrama temporal, en el que se reflejan cómo se realizan las operaciones de cálculo de las filas de cada una de las octavas. La segunda octava, en régimen permanente, no inicia las operaciones de una fila hasta que la primera octava no haya generado dos nuevas filas de salida. Por tanto, cuando la segunda octava haya generado dos nuevas filas, la tercera octava iniciará el cálculo de una nueva fila de salida. Según esto, en el peor de los casos, se concatenara el cálculo de una fila de la segunda octava y una fila de la tercera octava, el tiempo total de cálculo de ambas filas es 3/4 partes del tiempo de cálculo de una fila de la primera octava. Además, como se necesitan dos filas de la primera octava para iniciar la segunda, puede considerarse que el tiempo empleado es 3/8 partes del tiempo de dos filas de la primera octava. Por tanto, el cálculo de una fila de la segunda octava no puede ser nunca activado cuando se está realizando el cálculo de una fila de la tercera. Jornada de Arquitecturas para el Cálculo y Comunicaciones Avanzadas

18 Arquitectura RPA Unidad Almac. 1 Mux Píxel A Píxel B S Almac. 2
Filtrado Control 2 3 W Un aspecto importante a destacar es el control distribuido. Realizado mediante dos bloques (Control_Path_G31 y Control_General_G11) consistentes en dos máquinas de estados que se utilizan en diferentes niveles jerárquicos y que se comunican entre sí. En la figura se ve el diagrama de bloques simplificado de la arquitectura recurrente implementada. Como se ve está formada por dos unidades de filtrado, dos unidades de almacenamiento y una unidad de control. Las unidades de filtrado presentan la siguiente estructura interna: Un filtro par y otro filtro impar, tal como ya se ha comentado. Podemos apreciar la existencia de un bloque denominado Control-P, correspondiente con el control_path del bloque de filtrado. Este bloque a partir de la señal de "Inicio", pone en marcha el generador de direcciones para leer la imagen (Generador_G41 o Generador_G31) y activa el bloque encargado de realizar las operaciones de filtrado (Data_Path_G11). También detiene el proceso cuando se le indica por medio de la señal "Stop". Las señales "Inicio" y "Stop" provienen del módulo de control general (Control_General_G11) de la jerarquía superior. Aprobechando las características de modularidad del diseño, la implementación recurrente se ha realizado empleando una unidad de control-P en la unidad de filtrado 1 y dos unidades en la unidad de filtrado 2. Han sido necesarias dos unidades ya que se realizan dos octavas utilizando un solo data_path. La unidad de control está formada por dos unidades de control-G. Cada unidad de control-G pone en marcha el cálculo de cada una de las octavas en el momento adecuado, encargándose del sincronismo entre ambas para que la transformada wavelet se realice correctamente. También detiene el proceso cuando se han completado las operaciones. La unidad control-G1 se encarga de iniciar y controlar el cálculo de la primera y segunda octava, a partir de la información recibida del control-P1, actuando sobre el control-P2 para detener el cálculo de la segunda octava. La unidad control-G2, recibe información de control-P2 y actua sobre control-P3 iniciando y deteniendo el cálculo. En la Figura 5.24 puede verse un diagrama temporal, en el que se reflejan cómo se realizan las operaciones de cálculo de las filas de cada una de las octavas. La segunda octava, en régimen permanente, no inicia las operaciones de una fila hasta que la primera octava no haya generado dos nuevas filas de salida. Por tanto, cuando la segunda octava haya generado dos nuevas filas, la tercera octava iniciará el cálculo de una nueva fila de salida. Según esto, en el peor de los casos, se concatenara el cálculo de una fila de la segunda octava y una fila de la tercera octava, el tiempo total de cálculo de ambas filas es 3/4 partes del tiempo de cálculo de una fila de la primera octava. Además, como se necesitan dos filas de la primera octava para iniciar la segunda, puede considerarse que el tiempo empleado es 3/8 partes del tiempo de dos filas de la primera octava. Por tanto, el cálculo de una fila de la segunda octava no puede ser nunca activado cuando se está realizando el cálculo de una fila de la tercera. Jornada de Arquitecturas para el Cálculo y Comunicaciones Avanzadas

19 Arquitectura RPA Modificado
Unidad Almac. 1 Mux Píxel A Píxel B S 1 Almac. 2 Filtrado 2 Filtrado 1 Control 2 3 W Un aspecto importante a destacar es el control distribuido. Realizado mediante dos bloques (Control_Path_G31 y Control_General_G11) consistentes en dos máquinas de estados que se utilizan en diferentes niveles jerárquicos y que se comunican entre sí. En la figura se ve el diagrama de bloques simplificado de la arquitectura recurrente implementada. Como se ve está formada por dos unidades de filtrado, dos unidades de almacenamiento y una unidad de control. Las unidades de filtrado presentan la siguiente estructura interna: Un filtro par y otro filtro impar, tal como ya se ha comentado. Podemos apreciar la existencia de un bloque denominado Control-P, correspondiente con el control_path del bloque de filtrado. Este bloque a partir de la señal de "Inicio", pone en marcha el generador de direcciones para leer la imagen (Generador_G41 o Generador_G31) y activa el bloque encargado de realizar las operaciones de filtrado (Data_Path_G11). También detiene el proceso cuando se le indica por medio de la señal "Stop". Las señales "Inicio" y "Stop" provienen del módulo de control general (Control_General_G11) de la jerarquía superior. Aprobechando las características de modularidad del diseño, la implementación recurrente se ha realizado empleando una unidad de control-P en la unidad de filtrado 1 y dos unidades en la unidad de filtrado 2. Han sido necesarias dos unidades ya que se realizan dos octavas utilizando un solo data_path. La unidad de control está formada por dos unidades de control-G. Cada unidad de control-G pone en marcha el cálculo de cada una de las octavas en el momento adecuado, encargándose del sincronismo entre ambas para que la transformada wavelet se realice correctamente. También detiene el proceso cuando se han completado las operaciones. La unidad control-G1 se encarga de iniciar y controlar el cálculo de la primera y segunda octava, a partir de la información recibida del control-P1, actuando sobre el control-P2 para detener el cálculo de la segunda octava. La unidad control-G2, recibe información de control-P2 y actua sobre control-P3 iniciando y deteniendo el cálculo. En la Figura 5.24 puede verse un diagrama temporal, en el que se reflejan cómo se realizan las operaciones de cálculo de las filas de cada una de las octavas. La segunda octava, en régimen permanente, no inicia las operaciones de una fila hasta que la primera octava no haya generado dos nuevas filas de salida. Por tanto, cuando la segunda octava haya generado dos nuevas filas, la tercera octava iniciará el cálculo de una nueva fila de salida. Según esto, en el peor de los casos, se concatenara el cálculo de una fila de la segunda octava y una fila de la tercera octava, el tiempo total de cálculo de ambas filas es 3/4 partes del tiempo de cálculo de una fila de la primera octava. Además, como se necesitan dos filas de la primera octava para iniciar la segunda, puede considerarse que el tiempo empleado es 3/8 partes del tiempo de dos filas de la primera octava. Por tanto, el cálculo de una fila de la segunda octava no puede ser nunca activado cuando se está realizando el cálculo de una fila de la tercera. Jornada de Arquitecturas para el Cálculo y Comunicaciones Avanzadas

20 Unidad de Almacenamiento
Memoria Doble Puerto Datos_b Direcciones_a Datos_a Direcciones_b Clock 28 10 11 14 Dato_1 Dato_2 Dato_3 Dato_4 Dato_N Dato_N-1 14 bits Dirección 0 Dirección 1 Dirección 2 Dirección 3 Dirección 2047 Dirección 2046 Dato_1 Dato_2 Dato_3 Dato_4 Dato_N Dato_N-1 28 bits Dirección 0 Dirección 1 Dirección 1023 En la implementación anterior se ha utilizado una memoria de doble puerto para enlazar un nivel de la transformada con el siguiente. Esta memoria es un bloque de memoria embebida que forma parte de los dispositivos de la familia Virtex de Xilinx. Utilizando la herramienta CoreGen de Xilinx se pueden definir o generar las memorias con las características que se deseen, siempre que no se superen las limitaciones del dispositivo. Analizando la herramienta CoreGen, se observa que pueden generarse memorias de doble puerto donde uno de los puertos es del doble de tamaño que el otro. Por tanto, si se define un puerto únicamente de escritura con un tamaño de 14 bits, se puede definir el otro puerto como sólo de lectura de 28 bits de tamaño, de este modo, al realizar una operación de lectura en la memoria se obtiene el contenido de dos células de memoria consecutivas. Así, se pueden leer en un sólo ciclo dos pixeles consecutivos. Teniendo en cuenta las consideraciones sobre las memorias entre octavas, se puede extender el concepto a la memoria de entrada que contiene la imagen. En este sentido se realizará un nuevo rediseño de la implementación anterior, en el que se leerán dos pixeles de la imagen a la vez. Los pixeles leídos corresponderán a los de la posición par e impar de la imagen, por tanto, habrá que diferenciarlos de los pixeles par e impar que se generan de salida. Jornada de Arquitecturas para el Cálculo y Comunicaciones Avanzadas

21 Control Distribuido Unidad Filtrado 2 Unidad Filtrado 1 Unidad
Control-P1 Control-G1 Control-G2 Control-P2 Control-P3 Unidad Control Un aspecto importante a destacar es el control distribuido. Realizado mediante dos bloques (Control_Path_G31 y Control_General_G11) consistentes en dos máquinas de estados que se utilizan en diferentes niveles jerárquicos y que se comunican entre sí. En la figura se ve el diagrama de bloques simplificado de la arquitectura recurrente implementada. Como se ve está formada por dos unidades de filtrado, dos unidades de almacenamiento y una unidad de control. Las unidades de filtrado presentan la siguiente estructura interna: Un filtro par y otro filtro impar, tal como ya se ha comentado. Podemos apreciar la existencia de un bloque denominado Control-P, correspondiente con el control_path del bloque de filtrado. Este bloque a partir de la señal de "Inicio", pone en marcha el generador de direcciones para leer la imagen (Generador_G41 o Generador_G31) y activa el bloque encargado de realizar las operaciones de filtrado (Data_Path_G11). También detiene el proceso cuando se le indica por medio de la señal "Stop". Las señales "Inicio" y "Stop" provienen del módulo de control general (Control_General_G11) de la jerarquía superior. Aprobechando las características de modularidad del diseño, la implementación recurrente se ha realizado empleando una unidad de control-P en la unidad de filtrado 1 y dos unidades en la unidad de filtrado 2. Han sido necesarias dos unidades ya que se realizan dos octavas utilizando un solo data_path. La unidad de control está formada por dos unidades de control-G. Cada unidad de control-G pone en marcha el cálculo de cada una de las octavas en el momento adecuado, encargándose del sincronismo entre ambas para que la transformada wavelet se realice correctamente. También detiene el proceso cuando se han completado las operaciones. La unidad control-G1 se encarga de iniciar y controlar el cálculo de la primera y segunda octava, a partir de la información recibida del control-P1, actuando sobre el control-P2 para detener el cálculo de la segunda octava. La unidad control-G2, recibe información de control-P2 y actua sobre control-P3 iniciando y deteniendo el cálculo. En la Figura 5.24 puede verse un diagrama temporal, en el que se reflejan cómo se realizan las operaciones de cálculo de las filas de cada una de las octavas. La segunda octava, en régimen permanente, no inicia las operaciones de una fila hasta que la primera octava no haya generado dos nuevas filas de salida. Por tanto, cuando la segunda octava haya generado dos nuevas filas, la tercera octava iniciará el cálculo de una nueva fila de salida. Según esto, en el peor de los casos, se concatenara el cálculo de una fila de la segunda octava y una fila de la tercera octava, el tiempo total de cálculo de ambas filas es 3/4 partes del tiempo de cálculo de una fila de la primera octava. Además, como se necesitan dos filas de la primera octava para iniciar la segunda, puede considerarse que el tiempo empleado es 3/8 partes del tiempo de dos filas de la primera octava. Por tanto, el cálculo de una fila de la segunda octava no puede ser nunca activado cuando se está realizando el cálculo de una fila de la tercera. Jornada de Arquitecturas para el Cálculo y Comunicaciones Avanzadas

22 Resultados de la Implementación
Características Arquitectura Directa Arquitectura RPA Arquitectura RPA Modificada Tamaño Imagen Procesada 512  512 pixels Precisión de los datos de entrada 8 bits Precisión de los datos de salida 14 bits Coeficientes de Filtrado Biortogonal 4  4 Niveles de la DWT 3 Dispositivo XC2V1000 Num. Slices 930 Num. Multiplicadores 40 16 32 Num. Block RAM's 4 Tamaño RAM (Bytes) 2304 Frecuencia Máxima 50 MHz Tiempo de computo (45MHz) 5,88 ms 7,68 ms Eficiencia del Hardware 43.75 % 99 % 65.6 % Jornada de Arquitecturas para el Cálculo y Comunicaciones Avanzadas

23 Filtros Implementados
Filtros escogidos: CDF 2/2, filtro biortogonal KF=2, KH=2. (5/3 Coeficientes) CDF 3/1, filtro biortogonal KF=3, KH=1. (4/4 Coeficientes) CDF 9/7, filtro biortogonal JPEG2000. (9/7 Coeficientes) Como se ha visto anteriormente, el cálculo de la transformada wavelet discreta depende en gran medida de los filtros que se escojan. En la literatura existe una gran variedad de coeficientes, como los vistos anteriormente. En el presente apartado se pretende escoger un número determinado de distintos filtros y establecer comparaciones evaluando la calidad de las imágenes, el número de operaciones necesarias y el número de bits requeridos. Los filtros escogidos para realizar el estudio han sido los que presentan una mayor utilidad en el procesado de imágenes y que a continuación se detallan: · Daub-4, es un filtro ortonormal cuyos coeficientes se obtienen de la Tabla 3.1 haciendo K = 2. · CDF 2/2, son filtros de carácter biortogonal cuyos coeficientes se obtienen de la Tabla 3.2 haciendo KF = 2 y KH = 2. · CDF 3/1, son filtros de carácter biortogonal cuyos coeficientes se obtienen de la Tabla 3.2 haciendo KF = 3 y KH = 1. · CDF 9/7, son los filtros biortogonales propuestos en la futura norma JPEG 2000 y que corresponden con las ecuaciones (utilizando la nomenclatura de la Figura 3.9 y de la Figura 3.10): Jornada de Arquitecturas para el Cálculo y Comunicaciones Avanzadas

24 Conclusiones Arquitectura modular, escalable y flexible.
Tamaño de Imagen, Número de Niveles. Arquitectura: Directa, RPA y RPA modificado. Coeficientes de filtrado: CDF 2/2, 3/1 y 9/7. Con los bloques básicos diseñados en VHDL y un Package de parámetros se realiza la implementación deseada. Control distribuido, no hace falta rediseñar. Síntesis e implementación en FPGA. Capacidad de procesar vídeo en tiempo real. Mínimo uso de las memorias intermedias. Jornada de Arquitecturas para el Cálculo y Comunicaciones Avanzadas

25 Actividad Futura Transformada Wavelet 2-D. Codificador.
Cerrar el diseño haciendo de el un módulo IP. Realizar un ASIC. Codificador. Estudio de codificadores para completar la compresión de imágenes. Implementación del codificador. Mediante un Microprocesador. Mediante una arquitectura dedicada. Jornada de Arquitecturas para el Cálculo y Comunicaciones Avanzadas


Descargar ppt "Grupo de Investigación Diseño de Sistemas Digitales"

Presentaciones similares


Anuncios Google