desktop

FPGA vs Microcontrolador, ¿cual es mejor?

A mi parecer la razon principal de usar micrcontroladores es debido a que la mayoria de los aparatos donde son empleados no requieren de una mayor complejidad de control. Y aunque los precios de uno y de otro en algunos casos pudiera llegar a considerarse ser el mismo, lo cierto es que los microcontroladores son y seguiran siendo mas utilizados tanto en la industria, como en electronica de recreacion o electronica para el hogar. Por otra parte un FPGA es en si mismo una maravilla pero este tipo de controladores estan mas enfocados a lo que podriamos llamar manejo y procesamiento de información, puesto que pueden manejar operaciones mas grandes en un tiempo considerablemente corto, es ahi donde estriba su "poder". Asemejandose mas a un uP el FPGA y tal como el querido PIC-MAN afirma para las empresas resulta ser mas economico y versatil probar el Hardware a desarrollar en un FPGA esto debido a como ya mencionaron su velocidad de respuesta, su capacidad en memoria y la versatilidad para poder ser grabado y borrado (Esto en algunos casos por encima de 1M de veces). Y desde un punto de vista practico no veo por que desperdiciar las capacidades de un FPGA en el desarrollo de un proyecto o producto donde un PIC es mas que suficiente.
 
Primero, NO a las respuestas agresivas como la que dió Rafita-Man

Segundo, no creo que los uC sean mejores ni tampoco las FPGA's, yo tuve poca experiencia con las fpga's de mi universidad y comparando ambos dispositivos digo que creo que los uC tiene sus ventajas y desventajas frente a las FPGA's ...

Volviendo al hilo... uno es mejor que otro con respecto a que? ésa sería la pregunta correcta (eso pienso)... bueno aquí vá una analogía sobre las fpga´s y los uC's:

El cerebro humano, un procesador orgánico que maneja billones de sensores de todo tipo (presión, temperatura, químios, ópticos, sonoros, de equilibrio, etc etc) de forma paralela y ultra rápida y no podría hacerlo si funcionara secuencialmente como un uC; entonces por ahora el cerebro sería similar a una fpga.

Pero el cerebro no solo es procesamiento de "petabytes" de carbono(¿Bytes orgánicos?), en éste órgano también se realizan procesos cognitivos que permiten darle un uso adecuado y creativo a esa cantidad monumental de datos. Dichos procesos no se pueden hacer en paralelo... es decir la parte pensante del cerebro no funciona en paralelo.

NOSOTROS no pensamos en paralelo, es decir no podemos realizar demasiadas al mismo tiempo.. tratamos de simular ese paralelismo usando interrupciones (si! INTERRUPCIONES).. un uC es exactamente eso (bueno parcialmente) un uC funciona similar a un cerbero... todo es secuencial y funciona por interrupciones...

Claro una FPGA puede emular a un uC pero la analogía es partiendo desde el punto de vista de las características sobresalientes de cada dispositivo. Una FPGA es muy "específica" para realizar una tarea, claro, cualquier tarea la realiza exageradamente más rápido que un uC pero no es fácil reacomodar la programación de la fpga para realizar otra tarea (tareas) diferentes... es como tratar de ver con la nariz...

En cambio los micros, que son más "flexibles" (y lentos), son fáciles de acomodar y efectivamente puede tomar esa cantidad de datos, moldearlos y reemplazar los ojos por la nariz (los ciegos reemplazan los ojos por los oídos y el tacto)...(se sacrifica velocidad por flexibilidad)

para no alargar la cosa... hay tareas que no requieren tales velocidades y flujo de datos tan elevado... ¿ o no es cierto que para identificar un objeto basta con abrir los ojos y "pensar"? no es necesario hacer el barrido de los conos y bastones (células sensitivas de los ojos) y convertir esa información a señales eléctricas y enviarlas en paralelo al cerebro... (esto lo harían las fpga's), simplemente basta con abrir los ojos y ya tenemos video en altísma pero altísima definición y simplemente el "micro" (nosotros) compara con lo que haya en memoria para saber que es lo que estan percibiendo las fpgas "ojos"

- la fpga solo se encarga de ver (oler, oír)
- el micro compara, analiza, aprende(bueno aprende parcialmente o tendríamos cientos de T-1000 en las calles!), y puede utilizar otras fpga´s (oidos o tacto) para "triangular"(determinar) la respuesta correcta

Conclusión: los micros y las fpga´s van de la mano.:
=>Para procesamiento y almacenamiento a altas velocidades y en paralelo: FPGA
=>Para toda de decisiones y procesos Lógicos dinámicos que casi siempre son secuenciales: Microcontroladores

PD: es solo una opinión, yo no tengo la última palabra...
PD2: ojalá los procesadores de los computadores fueran fpga's
PD3: ya sé que se puede implementar un procesador con fpga's.. pero entonces ya no sería una fpga sino un procesador...¿cierto?
 
Bueno, si un FPGA se porta como microcontrolador, no le veo porqué deberia dejar de ser FPGA, porque despues de todo, la mona aunque de seda se vista, mona se queda. Jejeje :LOL:

Un punto de gran atractivo de un FPGA es el de poder montar sistemas completos en un solo chip (SoC). Se puede, por ejemplo, montar un procesador asi como la cantidad exacta de perifericos que se necesitan, ni uno mas ni uno menos, creando un sistema verdaderamente a la medida. Necesitas mas canales de PWM? no hay problema, solo montas mas perifericos de PWM! Al CPU le vendria bien una nueva instruccion? bueno, podemos modificar la unidad de control del mismo para implementarla!

He sabido que otra aplicacion muy buena de los FPGAs esta en la capacidad de montar mas de un solo procesador en un mismo chip, para procesamiento masivo de datos. Una de estas areas de aplicacion es la criptografia, donde algunos algoritmos pueden solo ser rotos a fuerza bruta, y si se tiene por ejemplo 128 procesadores a 100MHz trabajando en conjunto, puede ser un ataque efectivo contra estos algoritmos.

Por otra parte, es de mi saber que los FPGAs son tambien muy apropiados para los procesos secuenciales, utilizando las técnicas de codificacion adecuadas, tales como el desarrollo de FSMs (tipo moore o mealey), incluso es posible crear secuencias relativamente complejas. Tan asi es, que un procesador dentro de un FPGA es en si un sistema secuencial, el cual ejecuta en orden las actividades: tomar una instruccion, decodificarla, tomar argumentos, procesar la instruccion y guardar resultados.

Para mi que la ventaja o desventaja de FPGA vs microcontrolador no es tecnológica, sino de caracter de precio/costos, tiempo de desarrollo, y conveniencia. Por eso mismo los microcontroladores tienden a ser utilizados en muchas areas, porque tienen todas esas ventajas: baratos, rapido desarrollo (faciles de programar) y convenientes (disponibilidad de herramientas, variedad de lenguajes de programacion, amplificadora gama de librerias y aplicaciones, etc).

Saludos.
 
Hoy estuve leyendo mucho sobre fpgas... y leí algunas cosas que mencionaste.... estoy de acuerdo contigo f_point y bueno, el ganador tecnológicamente hablando es: FPGA!...

PD; el premio de consolación por ser bastante barato es para el uC
PD2: pienso que para las tareas "simples" (como prender un led) en donde no necesitemos procesadores a 100MHz un PIC o AVR (etc) es más que suficiente
 
Hola, yo llevo poco tiempo trabajando con fpga's y se los recomiendo para los que quieran utilizar la electronica digital a su maxima expresion. Con los lenguajes de descripcion de hardware se puede realizar cualquier sistema ya sea VHDL o Verilog.
Y la ventaja que he notado, es que puedes personalizar tu unidad de procesamiento. Si requieres un microprocesador solo lo montas agregando los ip cores o modulos que necesites(usart,pwm usb, ethernet,contadores,memorias,IIC,Spi, etc. o crear tus modulos y agregarlos a tu CPU. Por ejemplo yo les recomiendo Xilinx , con una tarjeta spartan 3, pueden programarlo en Vhdl -verilog o descargarle un soft core Micoblaze, que es un microprocesador risc de 32bits y el picoblaze de 8bits y programarlas en C con el SDK de xilinx. Puedes combinar HDL y C.
 
no son lo mismo, un micro es muchisimo mas potente, y vale menos, debido a su comercialización, además los encontras desde cero pesos hasta lo que quieras. Parte de la ingeniería es aplicar lo mas económico, siempre que funcione, claro.
saludos che
 
Hola,soy nuevo en el foro,según lo que yo entiendo es que un FPGA nos sirve como herramienta para diseñar dispositivos digitales,como diseñar microprocesadores,microcontroladores,etc;en cambio el microcontrolador ps ya está de sobra decir sus aplicaciones no?,esa es la diferencia,ninguno gana ya que no están orientados a un uso en común,obviamente el FPGA tiene unos recursos mucho mayores,pero esto es por que es una herramienta para diseño,no directamente para ser implementado como solución a una necesidad,saludos.
 
Hola a todos,

Soy nuevo en todo el tema de la electronica, que siempre me ha apasionado por asi decirlo, y ahora tengo la oportunidad de conseguir herramientas, material, etc, que me permita de forma autodidacta aprender y divertirme un poco ya que para mi seria otro de mis tantos hobbies.

Como he empezado por el tema de conocimientos basicos (aunque hoy logre despues de mucho sudor conectar un switch a un motor y una pila 9V y crear un mini-ventilador, cosa tonta para el 99% de ustedes pero para mi fue todo un logro :LOL:) y no tan basicos (ya que siempre me gusta tragar mucho conocimiento para tener un panorama general amplio), he mirado algunas cosas de la Spartan 3 y Arduino etc.

Si alguno(s) de ustedes seria tan amable de colaborarme dandome una luz, les agradeceria su valioso tiempo ;)

Basicamente ya entendi que un microcontrolador es una especie de CPU como las conocemos hoy en dia (arquitectura Intel, PowerPC etc) pero a muy muy reducida escala, que me permite realizar ciertas cosas "avanzadas" en un circuito.
Entiendo lo que es un programador de PICs (es mas, ya ordene uno :D) y adelantandome un poco en base al libro guia que compre (trata sobre el 16F84A, que ya compre por cierto) veo que hay un entrenador para realizar algunos proyectos. Desde mi punto de vista el entrenador no es mas que un circuito con algunos componentes en el, organizado de cierta forma que permita a las personas novatas como yo, iniciarse en este mundo sin tanto problema. Luego lo que supongo es que cada circuito que haga en adelante por mi propia cuenta podria servir como "entrenador" con una funcion especifica.

Ahora, entiendo que el DSPic es como un Pic comun (series 16F, 18F etc) pero mas avanzado y permite el manejo de mas instrucciones o algo asi por el estilo y mas calculos.

Entiendo que el Arduino vendria siendo una especie de entrenador como el del libro, solo que en vez de un PIC usa otro microcontrolador de la empresa Armtel o algo asi (no Microchip que son los que crearon la arquitectura del 16F, 18F etc).

Ahora, donde me confundo un poco (si es que la retahila anterior es coherente, de lo cual no estoy totalmente seguro) es en lo que es una FPGA, ya que he visto comparaciones entre esta arquitectura y la de microcontroladores.
Hay algun ejemplo "facil" de lo que vendria siendo la FPGA? Es como quien dice una motherboard Intel x86 con un Pentium I dentro por asi decirlo o que?
O es simplemente otro tipo de arquitectura que no existe mas que en kits de desarrollo pero no en produccion en masa al consumidor?
La Spartan 3 por lo que veo es como un "entrenador" de FPGA?

Y la ASIC como se compara?

Muchas gracias por su tiempo ;)

Postdata:
Siento mucho si esta no es la seccion apropiada, la verdad es que la de "Diseño digital" no tiene un area general.
 
Última edición:
Bueno... la verdad no es tan complicado....

Como bien dijiste un microcontrolador es una computadora reducida lo mas posible a un solo chip, de estos hay varias marcas, modelos y arquitecturas diferentes: Microchip, Atmel, Freescale, Intel, Risc, Cisc, x86, Von Newman, Harvard modificada solo por nombrar algunas variantes

Ahora un FPGA o un CPLD solo contienen electronica digital "sin conectar"... es decir puedes verlo como un juego de lego donde te dan las piezas y armas lo que necesites... desde un circuito combinacional clasico hasta un Procesador Intel Core i7, siempre y cuando el numero de compuertas lo permita... y tengas el tiempo para programar la arquitectura :LOL:, al ser compuertas sin conectar te permite mayor flexibilidad, velocidad y los puedes reconfigurar aun teniendo tu aplicacion terminada y corriendo, pero por otro lado son mas complejos de programar y en la mayoria de los casos se deben programar 2 veces, la primera para lograr la configuracion adecuada y la segunda para cargar el programa en forma dentro de la configuracion que acabas de programar

Un ASIC es la maxima expresion de flexibilidad.... un FPGA o un CPLD tienen el inconveniente de que solo contienen electronica digital en su interior... si necesitas soporte analogico necesitas añadirlo externamente... en cambio un ASIC contiene absolutamente todo lo que necesites sea digital o analogico... sin embargo es el mas complicado y caro de usar, ya que son diseñados a la medida en la fabrica de circuitos y solo se usan en corridas extremadamente elevadas... (encima de varios miles de integrados)
 
Chico3001, muchísimas gracias por la explicación tan excelente! Ni mandada a hacer :)
Era justo lo que necesitaba ya que para ciertas cosas admito que sin una analogía no me entran en la cabeza ni a palo...
Creo que ahora la tengo más clara, ya con el panorama no tan nubloso seguiré investigando un poco más sobre FPGAs y luego que me llegue el quemador de PIC y que haya realizado algunos circuitos entraré de lleno con el 16F84A.

Meta, sí, en un futuro pienso usarlo, una vez sienta que tengo un conocimiento avanzado sobre PICs. La verdad es que la parte de programación et. al. es mi fuerte ya que soy proficiente en esta; la electrónica es el mundo en el que apenas me adentro, pero entonces la idea es conseguir el starter kit de la Spartan 3E o 3N que no son tan caros, solo que toca mandarlos a pedir de USA, ya que me parece interesante creo que cambiar un poco la perspectiva sobre la programación tradicional secuencial, ya que creo si no estoy mal que las FPGAs manejan otros terminos como el paralelismo en ejecución de la misma instrucción en diferentes procesadores simultáneamente etc, no sé si esto sea lo mismo que multithreading (no creo) pero con el tiempo me daré cuenta.

Bueno en todo caso muchas gracias, ya había perdido un poco la esperanza en los sistemas de foros ya que siempre tiendo a hacer preguntas de media página que nadie ni se toma la molestia de leer :)
 
ya que me parece interesante creo que cambiar un poco la perspectiva sobre la programación tradicional secuencial, ya que creo si no estoy mal que las FPGAs manejan otros terminos como el paralelismo en ejecución de la misma instrucción en diferentes procesadores simultáneamente etc, no sé si esto sea lo mismo que multithreading (no creo) pero con el tiempo me daré cuenta.

Todas las instrucciones que generes en lenguaje de descripción de hardware (VHDL o Verilog - los más comunes para FPGAs) serán sintetizadas a componentes lógicos (e.g. compuertas, flip-flops). Si hay dos o mas instrucciones que se sintetizan y entre ellas no existen dependencias de datos, entonces se ejecutaran en paralelo.

En un FPGA no existen multiples procesadores (por lo menos de inicio), pero como te comento anteriormente toda instrucción es sintetizada en componentes lógicos (los cuales posee el FPGA).

Solo quisiera agregar que un procesador lo que hace es ejecutar un programa, este está compuesto por instrucciones, existen diversos tipos de instrucciones - para cada una de ellas hay que hacer cosas en especifico {leer la instrucciones, decodificarla, traer los operandos, realizar la operación, etc} -, las instrucciones se ejecutan junto con sus operandos, y se obtiene el resultado, el cual puede moverse entre diferentes partes del procesador/memoria/perifericos.

Ya cuando estes mas adentrado en este mundo, verás que es posible sintetizar microprocesadores completos dentro de un FPGA (ya sea uno o varios).

Esto no tiene mucho que ver con multithreading, ya que este se refiere a la ejecución de diferentes hilos en un solo procesador, el concepto pudiese en algún momento parecerse pero en realidad difieren por mucho, pero esto ya es otro tema.
 
Muchisimas gracias eidtech por el insight.
Creo que entonces FPGA en el tema tratado es comparable con una arquitectura multi-core como el Core Duo etc.
Y aqui es donde me surge la inquietud si algo similar a las FPGAs existe en la actualidad para el "consumidor" y se trata por ejemplo de una board con un Core II Quad encima o algo por el estilo. Creo que seguire averiguando.
 
Muchisimas gracias eidtech por el insight.
Creo que entonces FPGA en el tema tratado es comparable con una arquitectura multi-core como el Core Duo etc.
Y aqui es donde me surge la inquietud si algo similar a las FPGAs existe en la actualidad para el "consumidor" y se trata por ejemplo de una board con un Core II Quad encima o algo por el estilo. Creo que seguire averiguando.

:unsure: Tómatelo con calma chavo,todavía no aprendes a gatear y ya quieres correr :confused:,empieza con los PIC de 8 bits,despues migra a los AVR de 8 bits,despues podrás empezar con los dsPIC de 16 bits y despues con los PIC32 que casi nadie los ha usado y con ellos nos basta para hacer muchas cosas (como host USB y uso de pantallas táctiles de color,tratamiento con uso de librerias con funciones DSP),el FPGA se usa cuando quieres hacer un trabajo que definitivamente exige mucho y la electrónica que tienes a tu alcance no llena esos requisitos,si quieres leer libros de FPGA registrate en gigapedia y busca libros del tema,están en inglés,pero eso no es problema,o sí?,bueno,para empezar con los PIC te recomiendo el 16F628A,es mas barato y tiene mejores prestaciones que el 16F84A.
 
Atrás
Arriba