FPGA vs Microcontrolador, ¿cual es mejor?

Quiero poner mi opinion, desde un punto de vista de desarrollador, ya que he trabajado con todo tipo de dispositivos electrónicos: desde el venerable y ya "jubilado" Z80 (alla por los años 80) hasta las últimas FPGA de millones de puertas, pasando por los 8080, 8085, toda la familia mcs-51, los PIC y los nuevos ARM, incluyendo las viejas pal/gal, debo deciros que es ahora necesario conocer no solo las fpga, sino la programacion adecuada: para muchos quizá resulte mas cómodo realizar desarrollos con los microprocesadores (cualquiera sea su sabor-léase arquitectura) porque la lógica interna ya está hecha. En cambio "programar" FPGA requiere un esfuerzo adicional, ya que solo se dispone de las instrucciones aritméticas básicas, cualquier instrucción "extra" debe ser hecha desde cero, eso incuye la multiplicación/división, funciones trigonométricas etc. todo aquello debe hacerse utilizando técnicas que muchos no habéis oido, como CORDIC (muy util para funciones trascendentales). la razón es muy importante: las FPGA (adecuadamente programadas) son MUY rápidas para el procesamiento de la información, es como tener a cientos (quizá miles) de microprocesadores en paralelo trabajando de manera coordinada: de ahí que la programación sea mas dificil, la gente que viene de los microprocesadores suele hacer una programación "lineal" en el tiempo (en "serie") y cuesta un poco acostumbrarse a programar en "paralelo", pero una vez logrado, se ve la potencia real de las FPGA.
Con las nuevas FPGA es posible programar microprocesadores enteros (incluyendo nuevas funcionalidades, con memoria de muy alta velocidad), ahor amismo estoy trabajando con una fpga a una frecuencia de 350MHz. Puede ser incusive una interfas de alta velocidad para u microprocesador estándar.
Muchos fabricantes de FPGA tienen librerías con las que se puede, de una manera mas sencilla trabajar con funciones trascendentales (LOG, EXP, SIN/COS, etc), incluso algunos tienen librerías para emular un microprocesador.
 
Hola:

Este vídeo parace que habla algo de paralelo, no había escuchado programar en paralelo. Es de América Sur o Centro.


Gracias por compartir sus experiencia.
 
La "programacvión en paralelo", se conoce también como programación "multi-threading" o programación de multi-ordenadores, de hecho el primer lenguaje capaz de hace algo así es ADA, y no es casualidad que el lenguaje de programación mas comunmente utilizado (VHDL) sea una variante de ADA. La programación de muchos PLC's es también (mas o menos, salvando las distancias) una programación en paralelo, y una de sus principales cualidades es que cuando programas, el estado de la variables que estas tratando es siempre su estado "anterior" y no el "actual"...
Bueno no quiero aburriros con eso, hay mucha información sobre eso en internet
Saludos,
 
Creo que realmente los viejitos aquí, nikotesla y miborbolla, me incluyo en ese grupo, pero fui ferviente amigo del MC6809, han dicho lo correcto. Me gustó la analogía expresada con la pregunta, que era mejor, una resistencia o un capacitor.

Los modernos FPGAs ya vienen con un controlador incluido. La integración de la lógica TTL a Pals, luego a GALs represento un gran avanze que redució el número de componentes lógicos en una placa de forma dramática. Hoy en día los CPLDS so componentes de una integración tal, que alcanzan para realizar la gran mayoría de los circuitos que podamos necesitar como aficionados a la electrónica. Los CPLDs son baratos y existen descripciones en el internet para armarse uno mismo el adaptador de programación!

El nombre de los lenguajes de programación de estas componentes en su principio, HDL, no era mas que la abreviación para el término inglés de: hardware description language. De alli HDL!

Los FPGA, field programmable gate array, matris de gates programable, era el próxima paso de integración. Recordemos que el objetivo inicial de este tipo de componentes era la integraccion de componentes lógicas para reducir el espacio en las placas, el consumo de energía y lograr una mayor estabilidad. Una capacidad adicional era la posibilidad de modificar los circuitos en placas ya realizadas evitando así en algunos casos el rediseño. En un principio estas componentes aún eran caras.

Si miramos los FPGAs mas modernos entonces en cierto sentido volvemos a la función, al objetivo inicial que se maisfestaba en los PAls y GALs y dentro de ciertos límites los CPLDs. Pero esto ahora en el entorno de sistemas embebidos.

Miremos lo que es un microcontrolador a diferencia de un microprocesador:
Un microprocesador es un procesador con recursos externos como memorias, una placa madre de un PC es un buen ejemplo.
Un microcontrolador es una unidad de procesamiento de datos que tienen sus recursos disponibles de forma local en el pedazito de silicio. Esos recuros por un lado son memorias de los diferentes tipos y funciones periféricas. Pues bien, los mas modernos y avazados FPGAs tienen un microcontrolador integrado y las periferias pueden ser incluidas por programación de las matrices del lógica programable. Si en un microcontrolador de cierto tipo tenemos definido que periferias incluye y como las funciones son asignadas a los pines, en un FGA moderno estas funciones periféricas son definidas por descripciones de sus implementación. Es mas, en ciertos sistemas modernos de FPGA y de los IDEs correspondientes existen módulos que definen periferias y las que incluimos en nuesttro diseño, las posicionamos en el pedazo de silicio y les asignamos pines. es mas IDEs modernas hasta crean elementos de bibliotecas que son usadas para que el programa el el microcontrolador que incluyen, las use. 3 buenos ejemplos de tales IDEs, son la nueva IDE de Xilinx, la IDE de Cypress y la llamada "Altium", una IDE profesional e independiente de un provvedor de componentes, que no es gratuita!

Esos FPGAS los considero ser tan complejos, que el especialisarse en ellas es una especialisación profesional en su propio derecho. Yo confieso que no me meto en eso! Pero si me fascina observar y estudiar el desarollo de esas tecnologías y sus implicaciones.

Lo triste de ello es, que el apoyo de los proveedores para CPLDs disminuye, pues los CPLDS son económicos y no hay mucho potencial de ganancia en ellos. Pero para lo que un aficionado a la electrónica puede beneficiarse del uso de una compnente programable soy ferviente aficionado de los CPLDs!
 
Hellmut1956

Interesante su aporte, me gustaría saber si conoce diseños de hardware abierto que permitan realizar mi propia tarjeta de desarrollo bien sea con un CPLD o una FPGA, y conocer las formas de programación, SPI, JTAG etc.
 
Te recomendaría ir a los sitios de empresas como Xilinx, Altera u otros. Allí existe mucha información. pero también vale la pena estudiar la hoja de datos de un CPLD de Xilinx por ejemplo. Es una componente muy económica y relativamente sencilla. Allí encontrarás referencia de como usar la componente.

Realmente todo lo que necesitas para empezar es, si vas por ejemplo con productos de la empresa Xilinx es una componente CPLD, además buscas en el internet la descripción como hacer un cable para conectar el PC al CPLD y una descripción sencilla de como hacer una placa con esa componente. Ademas de descargas el Web Pack de Xilinx que es gratuito, es la software para desarrollar programas para grabar en el CPLD.

Vas a encontrar en el Internet ejemplos muy sencillos de un programa en la lengua VHDL, algo equivalente al dejar blinquear una LED con un microcontrolador.

Si dominas lo suficiente la lengua inglesa, en mi sitio predilecto,
encuentras bajo el enlace:

http://www.digilentinc.com/classroom/realdigital/

Un curso que contiene toda la información que requires. No requieres la placa que recomiendan. El programa y su simulación, todo lo puedes hacer en el PC dentro del entorno del Xilinx Webpack. creo que lo mas sencillo es un programa que implementa el elemento combinatorio "AND". Ese lo considero equivalente al programa de "Hola Mundo" en microcontroladores! Lo que a mi me gusto mucho es, que tambien te introduce de forma muy metódica al proceso, en inglés "work flow", de realizar un programa, y todo lo que va con ello, por ejemplo el crear un archivo que define señales que se ponen a las entradas del circuito, llamado testbench, y donde en el entorno del webpack puedes ver como si tuvieras un osciloscopio o un analizador lógico las curvas tanto de las entrads como de las salidas.

Es un entorno que a aquellos que estamos familiarizados con la programación de controladores al principio se nos parece ajeno, pero cuyas capacidades y posibilidades son impresionantes! Ojalá recién tuviera 30 años, mis conocimientos y el tiempo que tengo hoy, para poder estudiar y usar todas estas tecnologías! pero iré estudiando las materias hasta que Dios me llame, o el diablo, o me quede demasiado demente para poder seguir! Que mundo mas maravilloso este de la electrónica y que posibilidades tenemos hoy en día y hasta gratuitos, también gracias al Internet! Y no de menos valor, un foro como este!

Lo primero que harías es
 
Yo con mis 68, para recordar como se enciende un Led consulto intenret. ;)

Si tanto es potente y muy bueno los FPGA, ¿Por qué no hay libros sobre ellos?

Más bien hay PIC y Arduino pero FPGA, ni eso, a parte que no hay mucha gente que digamos, los usen con frecuencia.

Saludos.
 
Pero claro que hay libros! La cuestión es primero entender de que demonios se trata cuando se habla de una componente lógica programable:

2 formas de decir que son:

1. Una serie de circuitos que podemos concatenar definiendo el como los concatenamos!

2. Una componente que permite definir la hardware, no la software, para ejecutar un programa lógico!

2 lenguas prevalecen desde hace décadas para definir un circuito que haga lo que deseamos:

1. VHDL:
HDL está para: "Hardware Description Language", "Lenguaje de descripción de la hardware"
La "V" expresa que es una versión mas avanzada del lenguaje original, "Very"

2. Verilog: igualmente una HDL!

Teniendo esto en mente, una lengua de programación de circuitos, no de software, hay que adquirir el conocimiento de que secuencia de trabajos llevan de un "objetivo" a la implementación de ese "objetivo=circuito". Esto se denomina en Inglés "workflow" y representa la secuencia de trabajos que debemos hacer para lograr el objetivo.

Como se trata de "Hardware" tenemos que definir que "Entradas" = "Input" requerimos y a cuales pines de la componente conectamos esas entras, que característica tienen los datos de esa entrada y que voltaje.

Lo mismo hay que hacer para las "Salidas" = "Output"!

Tomemos como ejemplo una señal de entrada de un "clock" o reloj"! Si la frecuencia con la cual el "reloj" es alta, entonces es importante analizar si el reloj hace su "tick" en el momento, donde los datos en las entradas están estables!

Lo mismo hay que hacer para las "Salidas" = "Output"!

Cuando dejamos que la lengua y el "Webpack" de Xilinx traduzca el circuito de tal forma que dentro del FPGA se "conectan" las partes usadas.

Ahí aparece el paso de "verificación"! Creamos un archivo, el tal "testfile" que contiene para cada "tick" del reloj los valores de las entradas y compara si las salidas corresponden a la secuencia de valores de las "salidas" que deseamos! Con frecuencias bajas del reloj y con tecnologías avanzadas así encontramos si en nuestro archivo escrito en VHDL o Verilog hay algún error lógico, un error de programación!

Pero en frecuencias altas y con tecnologías ya algo mas viejas aparece lo que se llama "critical path". El la ruta de aquella señal donde se requiere un máximo de velocidad o donde ciertas señales deben estar estables y presentes en alguna parte del circuito que programamos.

Allí viene lo que se denomina "floor planing". Se trata de poner dentro de la componente las partes usadas en los "critical path" posicionarlas de tal forma que las señales esten donde deben estar en el rango de tiempo requerido. A veces también toca cambiar las asignaciones a pines por estar estos en un sitio inoportuno para lograr los objetivos de tiempo de ejecución!

Esto, cuando la programación era usando componentes de baja complejidad como PAL, GAL y CPLDs era relativamente sencillo manejar los aspectos mencionados arriba manualmente. Pero la programación de CPLDs permite aprender lo básico sin perderse.

Hoy vemos que existen FPGAs de complejidad similares a los procesadores de Intel en nuestros PCs! Frecuentemente en estos FPGAs complejos tenemos núcleos de controladores pre instalados al producir la componente. Asi la versión "tradicional" de las herramientas de Xilinx, sus IDEs, que vemos de forma gratuita en sus "webpacks" empezó a llegar a sus límites por la complejidad de los diseños y de las componentes. Así Xilinx creó una segunda IDE llamada "Vivado".

Los CPLDS de Xilinx solo se pueden grabar hasta la versión 13.4 del webpack.

Igualmente Vivado solo es posible usar con componentes mas avanzadas!

Xilinx tiene diversas versiónes de sus IDEs dependiendo de que tipo de funcionalidad se desea trabajar. Las versiones disponibles de forma gratuita representan una funcionalidad "básica" pero muy por encima que la gran mayoría de aficionados a la electrónica en general y a las componentes programables en el sentido de FPGs. Allí entra la ventaja u oportunidad para aficionados o estudiantes o que puedan poner la órden a traves de un estudiante registrado en nuestro país de residencia! Digilent ofrece una multitud de placas con los diversos FGAs y también uniendo la placa a una versión especializada de la IDE. Sus precios para el público en general so muy módicos y si un estudiante registrado en nuestro país de residencia pone la ordén, hasta precios súper bajos!

Aquí el enlace al subforo de Digilent Inc para FPGAs! Realmente comprándose una placa que sea usada en uno de los cursos gratuitos de Digilent.

Aquí el enlace a los cursos ofrecidos gratuitos para FPGAs.

Cada grupo de productos tiene listado el enlace a los cursos correspondientes!
 
Microcontrolador o FPGA, Cual es mejor? A priori contesto que el FPGA. Ahora, para encender un led seria como clavar un clavo con una retroexcavadora :)

El proyecto es el que decide si es mejor uno u otro. Que microcontrolador accesible podria:

- Capturar datos en un bus de 64 bits
- Procesarlos y enviarlos a una SDRAM de 64 megas
- Generar una señal de video VGA
- Reprocesarlos desde la SDRAM para hacer algo con ellos
- Todo lo anterior, en paralelo al mismo tiempo y a 200 mhz

Como se ve, no hay con que darle a un FPGA pero no tiene sentido en entornos sencillos. Igualmente super recomiendo aprenderlas porque:

a- No son tan caras hoy en dia
b- Son fascinantes
c- El cielo es el limite

Y por ultimo agrego, entre FPGA y microcontrolador, puedo decir que con un FPGA podrias meter 2, 3, 4, 5.... los que se te ocurra si te da el espacio, microcontroladores de 32 bits adentro de ella, trabajando todos juntos. (NIOS II cof... cof) :D
 
@seearg: Se ve que eres mucho menor que yo, supongo. Lo que escribes es correcto para FPGAs, para CPLDs lo mismo es verdad, pero como "pegante entre componentes de una placa también son muy útiles. Yo en mi caso quería usar un CPLD como "switch" inteligente en un modelo de un velero. Se trataba de implementar una tabla de verdades para controlar los flujos de corriente.

La tabla constaba de un switch de encender y apagar el modelo.

La fuente de energía para el modelo podía o ser
el pack de baterías en el modelo o
el cargador de las baterías
y/o una fuente externa de mi laboratorio electrónico
si estaba trabajando en el modelo en mi taller.

Esto por llamarlo de alguna manera eran las entradas. Las "salidas" eran
la corriente del cargador a las baterías
la corriente de las baterías a los consumidores eléctricos
la corriente de la fuente externa a los consumidores

La intención era que el "switch fuera tan inteligente para hacer imposible el "conectar" algo indeseados. Para algo así que en su implementación es relativamente sencillo, un CPLD es ideal por ser económico, por ser programable y por ocupar muy poco espacio en una placa electrónica. Anterior a PAls, GALs y CPLDs se usaban componentes discretas. Hoy los FPGA son demasiado caros y contienen mucha mas hardware de lo que se requiere en tales aplicaciones!
 
Si soy menor que vos, pero tampoco soy un pibe jaja

Lo que me gusta de los CPLD es la capacidad de hacer cosas y tener ROM interna. Eso si, son "chicos" al lado de un FPGA.

Por mi parte, yo comence con logica programable luego de que cayeron en mis manos unas placas de videojuegos llenas de integrados series 74 para reciclar. Encontre un chip que decia GAL22v10 y dije "que es esto???".

Cuando baje el datasheet y vi lo que era, no pare desde ahi. Me documente y aprendi a hacer cosas con ellos.

Luego consegui unos CPLD de Altera e hice un osciloscopio portatil con un micro PIC y un CPLD como controlador de captura.

A partir de ahi, los proyectos dictaron como seguir hasta que cai en un FPGA EP3C16 y alucine con todo lo que podia hacer con el.

Actualmente lo uso en mi proyecto de osciloscopio. El mismo controla la captura, la DRAM (chips extraidos de un DIMM PC-133), la generacion de VGA para display, el panel de controles y un sinfin de cosas adentro. Tambien elimine el uso de microprocesador mediante un soft core como el NIOS.

En fin, como dije antes, el cielo es el limite y si, tambien se pueden usar como un arreglo de compuertas simple GIGANTESCO :)
 
Buenas:

Los FPGA es más bien para casos específicos y velocidad en los datos. El microcontrolador y se sabe para qué es. En realidad, lo mejor de todo son los microprocesadores, no hace falta decirlo.

Mejor uno o otro depende del uso que le vayas a dar.

Saludos.
 
lo mejor de todo son los microprocesadores

Técnicamente, un microcontrolador lleva un microprocesador, en el tema de la versatilidad de reprogramarse la FPGA gana indiscutiblemente, si hablamos de velocidad de ejecución, adelante de la FPGA irían las ASIC, solo que estas no se programan, se crean específicamente para la aplicación, por ello superan a la FPGA ya que eliminas la gestión y dejas solo lo necesario para directamente hacer lo que deben hacer.
 
Sigo pensando que un procesador I7 de Intel de las últimas es mucho mejor que cualquier FPGA dispobible que haya en el mercado en estos momentos. Incluido de AMD y ARM.
 
Hola, indiscutiblemente depende de la aplicación cuál es mejor si un fpga o microcontrolador, lo que es una realidad es que un microcontrolador ya tiene una arquitectura de ejecución definida, mientras que un fpga no, y sólo por aclarar algo a un fpga no se le "programa", se hace descripcion de hardware.
 
Sigo pensando que un procesador I7 de Intel de las últimas es mucho mejor que cualquier FPGA dispobible que haya en el mercado en estos momentos. Incluido de AMD y ARM.

Por favor, eso es como decir que la Tianhe-2 es mejor que mi notebook, pero no viene al caso :LOL: en computo bruto y general claro que lo supera, pero para una ejecución especifica que es para lo que describes a las FPGA y diseñas a los ASIC, el rendimiento es mucho mayor que cualquier CPU de propósito general, solo mira por ejemplo el calculo de los hash de bitcoin, usar las CPU es el método más lento, las GPU son mas eficientes pero consumen mucha energía, las FPGA tienen un rendimiento comparable a las GPU pero el consumo de energía es muy inferior, las ASIC llegan a superarlas aun más, una ASIC AntMiner S9 computa 13.5 Th/s mientras que un Core i7 3930k calcula 66.6Mh/s, una FPGA Spartan-6 LX150T computa 100Mh/s dejando atrás al i7.

En resumen, un procesador de propósito general no puede ganarle en rendimiento a uno de aplicación especifica, sí es mas versátil por que los cambios los puedes hacer sobre el vuelo, pero si la solución es fija, la FPGA tiene más poder, y las ASIC no se pueden comparar, aunque en el precio de fabricar una ASIC . . . :LOL:
 
solo diganle a Meta

que una FPGA es plastilina, un microcontronador es un cortador de galleta en forma de oso.

¿puedes hacer figuras de aviones con cortador en forma de oso?
 
Atrás
Arriba