FPGA
Siendo esto un tema dedicado a la mecatrónica, y para personas que esten deseando incorporarse al mundo de los pics y FPGA
En los comentarios pueden pedirme algun tema en especifico y lo investigaré.
Una FPGA (matriz de puertas programables) 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 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.
Se usan lenguajes como VHDL, ABEL, (primordialmente).
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 realizando 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.
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.
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.