Вы находитесь на странице: 1из 37
Co-Diseño (Hw-Sw) usando FPGA Patricia Borensztejn y Marta Mejail Segundo Cuatrimestre 2012

Co-Diseño (Hw-Sw)

usando FPGA

Patricia Borensztejn y Marta

Mejail Segundo Cuatrimestre 2012

Co-Diseño: Ideas para la materia

El objetivo de esta materia es continuar trabajando con los FPGA , en este caso,

centrándonos en el desarrollo de sistemas

embebidos sencillos cuya implementación esté

formada por:

código (instrucciones, software, programa)

y

lógica (circuitos específicos)

La característica de este cuatrimestre es que nos vamos a concentrar en la implementación de algoritmos de procesamiento de imágenes

Sistemas Embebidos

Un sistema embebido es un sistema computacional

embebido dentro de un producto o componente. Por lo

tanto, está diseñado para realizar una tarea específica, o un rango de tareas específicas, a menudo con restricciones de tiempo real.

para realizar una tarea específica, o un rango de tareas específicas, a menudo con restricciones de

Sistemas Embebidos

Un ejemplo de sistema embebido de procesamiento de

imágenes es una cámara de fotos cuyas funciones son:

exposición, control del foco, pre visualización, compresión, descompresión.

una cámara de fotos cuyas funciones son: exposición, control del foco, pre visualización, compresión, descompresión.

Sistemas Embebidos de

Procesamiento de Imágenes

Sistemas Embebidos de Procesamiento de Imágenes • Además de poseer todas las características comunes a los
Sistemas Embebidos de Procesamiento de Imágenes • Además de poseer todas las características comunes a los

Además de poseer

todas las

características comunes a los sistemas embebidos: muy bajo consumo, pequeños, livianos, respuesta en tiempo real, etc, los de

procesamiento de

imágenes tienen una

característica mas:

Sistemas Embebidos de

Procesamiento de Imágenes

Exhiben mucho paralelismo

de Procesamiento de Imágenes • Exhiben mucho paralelismo • Se aplican varios algoritmos uno detrás de

Se aplican varios

algoritmos uno

detrás de otro

Se aplica la misma operación sobre todos los pixels

Paralelismo Temporal

Temporal: varios algoritmos, uno detrás del otro.

Se puede explotar asignando un proceso

(procesador, circuito hardware, thread, etc) a cada algoritmo. Solo mejora la velocidad si cada uno de los elementos de proceso despues de

pasar los datos al siguiente proceso, vuelve a recibir datos. Se llama segmentación.

los elementos de proceso despues de pasar los datos al siguiente proceso, vuelve a recibir datos.

Paralelismo Espacial

Se puede explotar enviando partes de la

imagen a distintos elementos de proceso

(thread, procesador, circuito hardware)

Se puede explotar enviando partes de la imagen a distintos elementos de proceso (thread, procesador, circuito

Recursos para explotar

paralelismo

Hay muchos:

Instrucciones MMX, SSE, dentro del repertorio de instrucciones

de un procesador típico: misma operación sobre distintos datos, en paralelo. Paralelismo espacial.

Programación paralela en threads: si el sistema es multicore y los threads operan en distintos cores. Paralelismo espacial y temporal.

GPU: procesadores dedicados a imágenes. Explotan paralelismo espacial.

DSP: Digital Signal Processors explotan paralelismo espacial

(muchos son VLIW: paralelismo explícito)

Hardware dedicado: ASICs y FPGA

Lo más paralelo, mas rápido, de menos consumo y mas pequeño es el hardware dedicado. ASIC y FPGA.

¿Porque es paralelo el

hardware?

Esta es la pregunta del millón…

¿Quien me la puede responder?

El hardware es paralelo

Es decir, los transistores , piezas elementales

de los circuitos del hardware, funcionan siempre

que se les suministre potencia.

Y funcionan todos a la vez.

Esa es la magia.

Normalmente tanto paralelismo es excesivo, y no le sirve a nadie….

Por lo tanto, el diseño de sistemas secuenciales

es nada mas y nada menos que una manera de controlar el paralelismo.

El hardware es rápido

No solo porque es paralelo sino porque el

diseño de un problema está acotado en

tiempo por las características de ese problema, y de ninguno otro mas…. Es

decir, podemos hacerlo tan óptimo como

querramos.

Y por supuesto, podemos replicar parte

de la solución, lo cual permite agregar un

nivel superior de paralelismo.

Placas de desarrollo con que

contamos

Spartan-3E Starter Kit donada por XUP (Xilinx University Program)

Spartan-3 Starter Board (Digilent) donada por XUP

Xilinx Spartan-3A EVALUATION KIT (Avnet) (propio)

Virtex-II Pro Development System (donada por Xilinx University Program) (esta discontinuada)

Virtex4 FX12 Evaluation Board (Avnet) con Audio/Visual Card (Avnet)

(Propiedad del Grupo de Investigación: Embebidos)

Virtex-5 OpenSPARC Evaluation Platform (Donación de University Program OpenSparc)

Nexys-2 comprada con subsidio UBACYT (2011-2013)

Atlys comprada con subsidio UBACYT (2011-2013)

Otros dispositivos

VmodCam: Placa conteniendo dos sensores CCD con cable para

conexión a la placa Atlis

Módulos parlantes y micrófonos

Entorno de Desarrollo

Las herramientas que usamos son:

ISE Webpack 11.1 (xilinx.com)

ModelSim PE Student Edition (model.com)

ISE Design Suite 14.1 (incluye SDK y EDK) versión…

Procesadores

Para la parte software del co-diseño tenemos varias

posibilidades:

Usar los procesadores embebidos en las FPGA

Procesar en la PC

Las placas de desarrollo que nosotros tenemos nos permiten utilizar los siguientes procesadores embebidos:

Picoblaze (cualquiera)

MicroBlaze (cualquiera)

PowerPC (virtexII, virtex4)

OpenSparc (virtex5)

Software: procesadores

Picoblaze:

Es código abierto. Se usa con las herramientas que ya conocemos. ISE 11.1

Se programa en ensamblador

MicroBlaze

Es un IP core. O sea, es lógica que se sintetiza en la FPGA, pero xilinx no da los fuentes. Está incluído en la herramienta

EDK-SDK. Necesitamos aprender a usar esa nueva

herramienta. La herramienta NO es free. Tenemos algunas licencias dentro del Xilinx University Program.

Se programa en C. Mas librerías propias del SDK.

PowerPC (virtexII, virtex4)

Es hard core. Se usan de manera similar al MicroBlaze, con las herramientas EDK y SDK.

Se programa en C.

OpenSparc (virtex5)

Es soft core y abierto. Tenemos los fuentes. No sé si se usa con el EDK-SDK… hay que estudiarlo.

La propuesta es entonces

Elegir una aplicación de procesamiento de

imágenes e intentar explotar su

paralelismo de cuantas formas se nos ocurra utilizando como plataforma las

FPGA.

Una posibilidad, ya que el nombre de nuestra materia es co-diseño, es utilizar

uno o varios procesadores. (picoblaze,

salvo que alguien se anime al microblaze)

Co-Diseño: Ideas para la

materia

Lo que necesitamos para hacer un Co-

Diseño son dos cosas:

Un problema a co-diseñar

Hardware y Software para su implementación

Co-Diseño

Co-Diseño: Decidir que partes de un diseño

serán implementadas por un procesador y que

partes serán realizadas por circuitos específicamente diseñados.

La decisión tiene que ver esencialmente con los requerimientos de tiempos de la aplicación.

Por ejemplo: una instrucción de multiplicación usando un multiplicador hardware es mas rápida que una rutina que utilice repetidas sumas para multiplicar. ¿Se acuerdan?

Co-Diseño: Ideas para la materia

Esta es la propuesta:

Hardware: placa Nexys2

Sofware: PicoBlaze Aplicación:

Dada una imagen de la PC cargarla en la

memoria PSRAM de la placa Nexys2, aplicarle un procesado de imagen (a definir) , visualizarla en la VGA y enviar el resultado o la

imagen postprocesada a la PC.

La transferencia de la imagen de/hacia la PC se realizará utilizando el puerto USB.

O sea:

O sea: Imagen en formato raw Imagen procesada en formato raw
O sea: Imagen en formato raw Imagen procesada en formato raw

Imagen en formato raw

O sea: Imagen en formato raw Imagen procesada en formato raw

Imagen procesada en formato raw

Debemos saber:

Transferir imágenes de/hacia la PC por el

puerto usb hacia la memoria externa de la

placa nexys2.

Como es la memoria externa y como se la lee y se la escribe desde el puerto usb, y desde la aplicación de la FPGA

Como es la memoria de video de la VGA y como se transfieren imágenes a ella.

Como acceder a la memoria externa

desde el PicoBlaze

Y luego que sepamos todo eso:

Elegir que proceso le haremos a nuestra

imagen de entrada

Decidir si el proceso se hará:

Todo en hardware En hardware y en software: y en ese caso que parte a que sitio Todo en software (y porque no?)

HACERLO!

Y luego….

En dieciseis clases…

• Y si, son pocas….

Asi que yo….

Estuve trabajando estas vacaciones de

invierno para darles muchas cosas ya

hechas….

¡Me basé en una aplicación desarrollada en Estonia! Pero era para nexys3, asi que tuvimos que adaptarla, y jamas hubiera tenido éxito si no fuera por Andres Stoliar,

que me ayudó un montón. (y aun me

sigue ayudando) (ah, no debo decirlo

porque eso está prohibido)

La aplicación elegida

Tiene un controlador de memoria

El PicoBlaze accede a la memoria

hablando con el controlador y modifica la

imagen.

La aplicación de video se ocupa de

transferir de memoria a un buffer de

BRAM, y de allí al VGA.

Seria así:

PicoBlaze App1

c
c

Video Pipeline App2

c
c

FPGA

A

 

Dual Port

Memory

Controller

B

c

c Video Pipeline App2 c FPGA A   Dual Port Memory Controller B c Nexys2 PSRAM

Nexys2

PSRAM

App2 c FPGA A   Dual Port Memory Controller B c Nexys2 PSRAM Via USB PC
App2 c FPGA A   Dual Port Memory Controller B c Nexys2 PSRAM Via USB PC
App2 c FPGA A   Dual Port Memory Controller B c Nexys2 PSRAM Via USB PC

Via USB

PC

Seria así:

App1

c
c

App2

c
c

FPGA

A

 

Dual Port

Memory

Controller

B

c

App1 c App2 c FPGA A   Dual Port Memory Controller B c Nexys2 PSRAM

Nexys2

PSRAM

c App2 c FPGA A   Dual Port Memory Controller B c Nexys2 PSRAM Via USB
c App2 c FPGA A   Dual Port Memory Controller B c Nexys2 PSRAM Via USB
c App2 c FPGA A   Dual Port Memory Controller B c Nexys2 PSRAM Via USB

Via USB

PC

Una consideración importante

La aplicación de Estonia ha sido

desarrollada para la placa nexys3.

Digilent nexys3 es exactamente igual a nexys2 salvo que:

en lugar de tener una spartan3, tiene una

spartan6

El reloj es de 100 MHz, en lugar de 50MHz de

nexys2.

Relojes

Como la aplicación accede a Memoria

Externa y a Video, ambos dispositivos con

restricciones de tiempos de acceso , no era posible obviar alegremente el detalle

del reloj. Por lo tanto, agregamos un IP

que se llama DCM (Digital Clock Module) que recibe 50Mhz y lo transforma en

100Mhz.

Spartan6 y PicoBlaze

Spartan6 es una FPGA bastante mas

poderosa que Spartan3. Entre otras

grandes diferencias, tiene LUTS de 6 direcciones, en lugar de 4 direcciones, y

tiene 2 FF por celda básica.

Ken Chapman, el hacedor de PicoBlaze, hizo una nueva version de PicoBlaze:

PicoBlaze6.

Pero nosotros usamos PicoBlaze3.

PicoBlaze3

El ensamblador de PicoBlaze3 NO

funciona sobre windows7!!!!!!

Ese problema habra que resolverlo para poder compilar codigo….

Algunas consideraciones sobre

la imagen

La transferencia por el puerto USB debe ser de

una imagen RAW.

En el caso de la aplicación de muestra, y debido a que el video standard utilizado es VESA

800x600, entonces la imagen utilizada es de

esa tamaño: 800x600 pixels.

La placa nexys tiene solamente 8 señales de color: (3 red, 3 green and 2 blue), o sea que para evitar conversiones adicionales, la imagen RAW que cargamos ya esta convertida a ese formato: pixels de 8 bits.

Algunas consideraciones sobre

la imagen

Si lo desean utilizar, el programa de conversion

a ese formato, a partir de un BMP de 24 bits y

de 800 por 600, está disponible.

Tambien estan disponibles los fuentes si lo

quieren cambiar, para hacerlo mas flexible.

El programa actualmente deja la imagen invertida (porque se hizo en un santiamen, y de onda).

Otras consideraciones

La transferencia por el puerto USB de la imagen

no forma parte del módulo de la aplicación, sino

de un modulo que se precarga que esta en la flash de programacion, y que interactua con Adept software.

Si uno quiere incorporar la transferencia por usb dentro de la aplicación, será necesario importar esos módulos, y, según entiendo, hacer un

software propio que corra en la PC.

Ahora la Demo