DIferencia entre un DSP y un FPGA

#1 por kaslampard el 10/09/2012
Hola, no se si este es el lugar indicado para el hilo, de no ser así que algún moderador lo cambie, pero no sabia muy bien donde meterlo, y como por aquí suele haber gente bastante entendida de electrónica pues por aquí pregunto.

Mi pregunta es precisamente esa, cuales son las diferencias fundamentales a la hora de trabajar de un DSP y una FPGA. Creo que comprendo el funcionamiento interno de la FPGA, pero no del todo el del DSP.

A ver si alguien de por aquí puede explicármelo. Un saludo!
Subir
#2 por nanodocl el 01/12/2012
La principal diferencia es que con FPGA trabajas "creando" hardware y DSP trabajas haciendo software para un hardware que ya está hecho.
Para que aplicación lo quieres audio o video?. Supongo que la elección dependerá de la frecuencia de muestreo y el tipo de lenguaje en el que tengas desarrollado el código.
Subir
#3 por kaslampard el 01/12/2012
Hola, gracias por la respuesta.
No es para ninguna aplicación en concreto, es una duda teórica completamente.
Podrías explicarte un poco a lo que te refieres creando hardware?
Es que he programado con ambos dos y digamos que con el DSP programaba de una manera más similar a la programación normal, y con el FPGA enfocándolo como a máquinas de estados.
Pero quería saber un poco cuales son su diferencias internas y porque se enfoca la programacion de cada uno de una forma diferente.
Un saludo
Subir
#4 por nanodocl el 02/12/2012
Claro, si te fijas, en FPGA normalmente se trabaja con VDHL, que es una lenguaje para hardware. El FPGA es un dispositivo con millones de puertas logicas programables de las cuales puedes disponer para "crear" hardware para realizar una tarea específica.
En DSP el hardware ya esta hecho y solo tienes que decirle lo que quieres que haga con las herramientas que dispone. El DSP parece ser mas fácil por que puedes programar en C que es un lenguaje bastante comun y tiene una lógica mas entendible. Espero haberte aclarado la duda, de todas formas te dejo un par de enlaces por si te sirven de ayuda

http://es.wikipedia.org/wiki/VHDL
http://es.wikipedia.org/wiki/Field_Programmable_Gate_Array
http://es.wikipedia.org/wiki/Procesador_digital_de_se%C3%B1al
Subir
#5 por pablofcid el 05/12/2012
Me parece alucinante que hayas programado los dos y no hayas tenido que conocer un poco cómo son por dentro. Yo he impartido cursos sobre esas materias, y el aprovechamiento que puedes hacer de los dispositivos si conoces un poco su interior es mucho mayor que si simplemente los programas 'a ciegas' usando un lenguaje y despreocupándote de la arquitectura interna. Muchas veces puede ser indiferente conocer el interior, pero cuando la aplicación es crítica en algún aspecto (se necesita un rendimiento extraordinario, o la longitud o velocidad de los buses es larga, etc.) entonces es imprescindible conocer el 'hard' real para que el 'soft' que escribas extraiga toda la potencia posible.

Respecto a tu duda concreta, y simplificando al extremo:

Una FPGA (en origen, ahora las hay mucho más complejas) es un dispositivo de lógica programable en el que existen dentro un altísimo número de elementos básicos de lógica electrónica (como puertas, biestables, etc.) y por encima de ellas (en la oblea) hay unas matrices de interconexión que pueden programarse. Imagínate que tuvieras unos cuantos cientos o miles de NANDs, Biestables, etc. y que pudieras decidir cuáles conectan con cuáles. Eso (muy simplificado) es una FPGA. Se usan lenguajes como VHDL, ABEL, y otros para poder describir qué queremos hacer con el circuito. La descripción en estos lenguajes puede ser muy 'ligada' al hardware o puede ser realizada en mas alto nivel (una descripción más algorítmica que de implementación), puesto que los compiladores de estos lenguajes acaban sabiendo realizar los ajustes necesarios en la matriz de conexiones.
Generalmente si se acude a un diseño con FPGA es porque se necesitan una prestaciones críticas, que no es fácil asegurar por la vía (mucho más simple) de un procesador (un microprocesador, un microcontrolador, un DSP, o del tipo que sea). Es por ello que al final en el uso de FPGAs se suelen hacer especificaciones todavía cercanas al mundo del diseño hardware, aunque con la enorme ventaja de que se realiza por lenguaje y volcado al dispositivo, con lo que es posible el rediseño y la corrección de errores por reprogramación. No es de extrañar por tanto que cuando los usaste hiceras tu diseño concebido en términos de hard (máquinas de estado, etc.) y con un lenguaje y una visión más pegados al hard.

Un DSP es un tipo de microprocesador especializado para tareas de procesado de señal. En las técnicas de procesado digital de señal hay determinado tipo de operaciones que son muy habituales. Por ejemplo realizar un filtro en digital supone multiplicar una colección de las últimas muestras de la señal por los respectivos valores (fijos) de la respuesta impulsiva del filtro, y sumar todas esos productos parciales para obtener el resultado final. Los DSPs tienen una arquitectura interna que permite hacer esas cosas a velocidad máxima. Suelen tener varios buses de datos independientes ligados a un multiplicador y un acumulador; tienen instrucciones en su juego de instrucciones máquina que realizan todas esas funciones (que en un procesador convencionale podrían suponer toda una cadena de instrucciones del procesador y por tanto tiempo de proceso); tienen modos de direccionamiento específicamente diseñados para procesado digital (como el direccionamiento 'swap' que es útil al calcular FFTs para realizar procesado espectral -realizar ese direccionamiento en un procesador normal lleva muchos ciclos de máquina, y en los DSPs ese direccionamiento está resuelto por hardware y sólo gasta un ciclo de máquina-).
Desde el punto de vista del uso, los DSP se pueden programar (como cualquier micro) en su propio lenguaje máquina (si queremos exprimirlos al máximo) pero lo normal es programarlos en algún lenguaje de alto nivel (C y derivados) y dejar que el compilardor tome las decisiones de cómo llevarlo adelante en el procesador. Se puede después medir el rendimiento del resultado y si en alguna parte se está gastando más tiempo de lo debido esas rutinas se pueden rediseñar directamente en máquina y enlazar con el resto, para así asegurar unas mejores prestaciones.

A día de hoy hay mucho híbrido. Hay FPGAs que iuncluyen un pequeño módulo de DSP junto a las puertas, hay DSPs que tienen una sección de FPGA dentro, unos y otros pueden llevar dentro A/Ds y D/As, módulos para comunicación serie y USB, etc. De tal forma que, al reunirlos, en un solo chip puedes desarrollar todo el sistema.
Incluso he visto DSPs y FPGAs que añaden también circuitería analógica programable/configurable.

No me enrollo más que ya ha sido bastante. Espero que te sea útil para entender un poco más.

Pablo

Pablo Fdez-Cid

http://www.cicloquintas.es (formación en síntesis y tecnologías para la música)
http://www.hispasonic.com/pablofcid/articulos (artículos sobre música y tecnología)

Subir
#6 por nanodocl el 09/12/2012
Alguien escribió:
Me parece alucinante que hayas programado los dos y no hayas tenido que conocer un poco cómo son por dentro.

Totalmente de acuerdo!

Tu explicación no podría ser mas clara, por lo que dices, veo que tienes bastante experiencia con estos dispositivos. Alguna recomendación para empezar a trabajar con efectos de guitarra tipo delay, chorus?

saludos!
Subir
#7 por pablofcid el 09/12/2012
Para ese tipo de cosas yo optaría por la vía dsp o incluso un procesador convencional. Pero siempre desarrollaría primeromel algoritmo y lo probaría y ajustaría en entornos tipo Matlab o semejantes, con progamación fácil, pese a que sean simulaciones no en tiempo real.
Necesitarás localizar y estudiar algoritmos, pero a día de hoy ya hay libros publicados y congresos. Todo depende del nivel y formación previa que tengas.

Pablo Fdez-Cid

http://www.cicloquintas.es (formación en síntesis y tecnologías para la música)
http://www.hispasonic.com/pablofcid/articulos (artículos sobre música y tecnología)

Subir
#8 por nanodocl el 10/12/2012
Nivel 0 y experiencia previa muy poca. Soy ingeniero técnico de telecomunicaciones, lo visto en el laboratorio de la asignatura de sistemas elect. digitales y poco mas.
Que opinion te merecen los DSPIC para este tipo de aplicaciones?
Comentabas también que impartes cursos sobre estos, me recomiendas algun curso en particular para dominar y entender un poco mas sobre esto?
Subir
#9 por pablofcid el 10/12/2012
Impartí tiempo atrás varios cursos sobre técnicas de procesado digital para audio en la Univ. Politécnica de Madrid (en la ETSIT).
Si estás con nivel 0 la recomendación es ni DSPIC ni ningún otro. Empieza por entornos tipo Matlab y no te líes con hardware (perderías mucho tiempo en cuestiones HW y no en la cuestión de los efectos en sí).
Siempre es muy atractivo eso de ir directamente a 'fabricar' cosas, pero hay que empezar la casa bien, y lo primero (salvo que sólo quieras pasar el rato pero no tener unos efectos de buena calidad) es desarrollar y valorar los algoritmos. Sólo con los algoritmos ya desarrollados se puede decidir sobre qué tipo de hard lo quieres ejecutar.
Otra alternativa sería la de ir por la vía de los desarrollos de plug-ins. Así desarrollas el soft y no pierdes el tiempo con cuestiones de hard si lo que quieres es aprender sobre los efectos en sí y sus algoritmos. Aun con todo, el desarrollo de un plugin te llevaría tiempo hasta conocer el entorno y tendrías toda la fase de compilación, carga, etc. para cualquier prueba, y la depuración es complicada.
Un entorno como Matlab es muy útil para el aprendizaje y muy rápido para el prototipado de algoritmos y su valoración.

Puedes buscar en internet 'DAFX'. Son una serie de congresos que se han organizado desde final de los 90 en torno al tema (inicialmente, luego se ha ido ampliando) de 'digital audio effects' => DAFX. Las actas (si manejas inglés) tienen mucha información. No todo te valdrá, pero seguro que muchas cosas te darán ideas. Eso sí, hay que estar bien armado matemáticamente (en cuestiones como filtrado digital, transformadas de Fourier / FFT, etc.).

Si puedes cógete asignaturas relacionadas con el procesado digital de señal (aunque sean aplicadas a comunicaciones te darán la base para luego moverte en la aplicación de las técnicas DSP al audio)

Pablo Fdez-Cid

http://www.cicloquintas.es (formación en síntesis y tecnologías para la música)
http://www.hispasonic.com/pablofcid/articulos (artículos sobre música y tecnología)

Subir
#10 por kaslampard el 02/01/2013
Hola Pablofcid, muchas gracias por tu respuestas se nota que tienes experiencia en la materia, y la verdad que perfecta es lo que buscaba.

Soy estudiante también de ingeniería superior en telecomunicaciones y bueno, hay veces que te acabas estudiando las cosas corriendo y mal y se te quedan algunos conceptos por el camino. Como bien dices, en la fpga programamos máquinas de estados en VHDL y en el DSP una mezcla entre c y ensamblador para segun que cosas, de hecho hicimos una minipráctica sobre efectos de audio mediante un DSP y como bien dices los efectos eran programados en ensamblador con instrucciones específicas.
He programado con ambos porque realizamos practicas con ambos, pero como en algún caso usamos ambos dispositivos con la misma finalidad pues desconocía las ventajas de trabajar con uno o con otro.
Un saludo!
Subir
#11 por pablofcid el 02/01/2013
¡Mucha suerte con tus estudios! Me alegra haberte servido

Pablo Fdez-Cid

http://www.cicloquintas.es (formación en síntesis y tecnologías para la música)
http://www.hispasonic.com/pablofcid/articulos (artículos sobre música y tecnología)

Subir
Respuesta rápida

Regístrate o para poder postear en este hilo