Duda FPGAs

Hola antes de nada saludar a todos pues soy nuevo en el foro. Estoy empezando a iniciarme en el mudo de las FPGAs y cuando digo a iniciarme he empezado ayer a buscar información en toda la red y cada vez me invaden mas dudas que consigo resolver por mi mismo.
Mi primera duda es: Una FPGA se programa el hardware mientras que en un sistema basado en microcontrolador o microprocesador se programa un serie de instrucciones que se ejecutan secuencialmente. Por lo que tengo entendido se puede llegar a implementar un microcontrolador en un FPGA pero como implementas los PWM los conversor A/D la USART, i2c...
Otra duda es si hay algo que una FPGA no pueda hacer con respecto a un sistema basado en microprocesador porque de poderlo hacer todo a velocidad hardware no entiendo porque los ordenador se basan en la tecnologia del microprocesador y en la ejecucion secuencial y no en la tecnologia de los FPGA.
Son unas dudas un poco "existenciales" pero tengo una mente muy adaptada a los microcontroladores, tengo un conocimiento avanzado sobre los microcontroladores y hace tiempo que conocia las FPGA pero nunca las habia estudiado a fondo, creia que eran limitadas a la logica combinacional y que habria tareas que realizan los microcontroladores que un FPGA no podria realizar, pero por lo que he adquirido hasta el momento en red parece ser que lo pueden hacer todo. Entonces si lo pueden hacer todo para que los DSP microprocesadores microcontroladores...
Perdonad por esta "brainstorming" pero es para que veais el cacao que tengo montado en mi cabeza, lo mismo me paso al principio con los uC. Tengo pensado adquirir algun entrenador para FPGA si me recomendais alguno os lo agradeceria. Muchas gracias por anticipado por vuestras respuestas. Un saludo.
 
Un microcontrolador te sirve mas para desarrollar aplicaciones de proposito general, mientras que un FPGA te sirve mas para aplicaciones de proposito especifico.

Si bien, hay cosas que puedes hacer en ambos.

Supongamos que quieres procesar una imagen, si lo haces en un microcontrolador esto sera lento, si lo haces directo en un FPGA esto sera mas rapido.

Y que pasa si quieres hacerlo en un micro montado en un FPGA, tambien sera lento.

El FPGA te da flexibilidad, por ejemplo puedes montar un micro con solo los componentes que vayas a utilizar, por ejemplo 8 UARTs, 2 SPI y 1 PWM. En un microcontrolador eso es imposible por hardware, tal vez por software lo puedes hacer pero el sistema ya no sera tan eficiente.

Los FPGA son bastante poderosos para diseñar y modelar, es decir eres una compañia que diseña circuitos electronicos, pues bien, puedes hacer tu diseño en VHDL (uno de los lenguajes principales para FPGA), lo simulas, lo sintetizas y mandar a un FPGA y ya tienes un diseño, pues bien ahora ese diseño lo puedes enviar a la fabrica de circuitos integrados y ellos a partir de ese diseño te pueden hacer tu circuito integrado.

Por ultimo te dejo un link, es de un proyecto que realize para un control de acceso con RFID basado en FPGA, en el se implementan algunos modulos como comunicación serial, reloj de tiempo real desde cero. Todo esto por la duda que planteabas acerca de como se implementan algunas cosas en FPGA.

http://www.embedded.com.mx/AC-RFID.pdf

Saludos,
 
¿El codigo que usas en el proyecto es para ilustrar los algoritmos que luego implementas en VHDL o programas la FPGA con este lenguaje?
Tengo otra duda ahora que he visto este proyecto, por ejemplo para inicializar el LCD tienes que realizar una secuencia para que arranque correctamente, esta secuencia supongo que necesitara una memoria de la cual vamos leyendo valores secuencialmente, entonces al realizar estas tareas secuenciales no seria mejor realizar a traves de microcontrolador, despues de todo ese es su problema, que tiene que realizarlo todo secuencialmente por lo que por lo menos estara optimizador para realizar esta funcion mas eficientemente que una FPGA. Lo que a mi me resulta muy dificil de asimilar es como una FPGA puede realizar tareas secuenciales teniendo en su interior puertas logicas y flip-flops. Gracias por tu ayuda. Saludos.

Otra duda. Un microcontrolador tiene una memoria de programa de la cual va leyendo las instrucciones que va a ejecutar, entonces a traves de estas instrucciones genera las salidas dependiendo de las entradas y las instrucciones que ejecuta, pero una FPGA no tiene memoria de programa de la cual lee datos secuenciales (o eso creo yo, a lo mejor estoy diciendo una burrada!?) entonces yo supongo que sus salidas dependeran de los que le introduzcamos en las entradas unicamente (como un circuito realizado con puertas NAND, AND, OR...) entonces dependiendo de las entradas, da unas salidas. ESTOY HECHO UN LIO. Me ayudaria mucho que me explicases como funciona una FPGA es decir desde el punto de vista de un microcontrolador tenemos un contador de programa que cada vez apunta a una posicion de memoria en la cual hay una instruccion, hay interrupciones en la cual se guarda la posicion de memoria de programa en la que se estaba en la pila para atender la interrupcion y luego regresar al programa principal... Algo asi pero so la FPGA, muy basico, porque tengo mas o menos claro lo que lleva por dentro la FPGA pero no entiendo como trabaja. Haber si me puedes hechar un cable. Gracias por ayudarme a entender mejor esta tecnologia. Un saludo.
 
Última edición:
El código que se muestra esta escrito en el lenguaje VHDL, despues se pasa por una etapa de sintesis(algo similar a la compilación) para obtener el archivo "binario" que se mandara al FPGA.

Realizar tareas secuenciales es sumamente sencillo con compuertas logicas y flip-flops retomando el concepto de maquina de estados finitos. Y es mas eficiente que hacerlo en un microcontrolador, ya que para una maquina de estados finitos tienes un hardware que puede realizar esa tarea, en el caso de un microcontrolador esto es hecho por software, compuesto por instrucciones de todo tipo, aritmeticas, de salto, de acceso a memoria, donde cada instruccion tiene sus etapas (fetch, decode, execute, etc etc)...

Un FPGA no tiene memoria de programa, todo es logica combinacional o secuencial, y el sintetizador se encarga de analizar codigo y traducirlo a compuertas y flip-flops.

En el caso de la inicialización del LCD, el sintetizador genera una maquina de estados para inicializar el display.

Programar el hardware directamente, (es decir sin el sintetizador) puede ser muy complicado, te tendrias que meter a nivel de compuertas y flip-flops, es decir como a nivel ensamblador en el caso de los microcontroladores.

Si gustas hacerlo, lo puedes hacer. En caso de que no lo deses asi, puedes programar en VHDL (o verilog), sintetizar tu codigo y generar el archivo que va al FPGA. La ventaja de hacerlo en VHDL (a un alto nivel) es mas facil, por que el sintetizador se encarga de traducir ese codigo a una representación de hardware.

Espero haber aclarado un poco mas tus dudas, cualquier cosa ya sabes que aqui estamos.
 
Gracias, me has ayudado a acomodar mis ideas. Tengo ganas de hacerme con algun entrenador para meterme a fondo en el tema y aprender algo nuevo. Una ultima cosa, ¿las FPGA estan limitadas por hardware?, es decir, podras implemetar una pequeña parte de un programa secuencial de un uC mientras que en los uC se podran implementar programas mas complejos y estensos (cuanta mas memoria mas programa). Es decir con la FPGA puedo hacer una pequeña parte de un programa que necesite ejecutarlo exageradamente rapido, pero limitado, no se si entiendes lo que quiero decir. Y por ultimo si quisiese implemtar un uC en una FPGA necesitaria colocar componentes discretos como conversores AD, compradores analogicos, memoria de programa y memoria de datos, pila, contador de programa... para poder implementar el uC propiamente dicho? Gracias por todo.
 
Y por ultimo si quisiese implemtar un uC en una FPGA necesitaria colocar componentes discretos como conversores AD, compradores analogicos, memoria de programa y memoria de datos, pila, contador de programa... para poder implementar el uC propiamente dicho? Gracias por todo.

Tendrias que agregar los conversores, comparadores, memorias, etc.

La pila y contador de programa, registros se implementarian internamente.

La UART podria utilizar un circuito externo o implementarla internamente.

La limitante del FPGA es principalmente por el numero de compuertas, flip-flops, relojes.


Checa la pagina de opencores.org, ahi hay distintos micros modelados en VHDL y algunos es posible sintetizarlos directamente a un FPGA.

Tambien checa algunas implementaciones como MicroBlaze, PicoBlaze, etc.
 
Hola:

Te voy aclarar las FPGAS son muchisimo mas rapidas que los Microcontroladores, las FPGAS puede correr hasta a 100MHZ mientars qeu uhn microcontrolador no!

Si necesitas Una Uart la puedes implementar en la FPGA como un sistema Embebido y listo la usas

Si necesitas un micrcontrolador, es mentira que sea lento correra a la velocidad de la FPGA, y es un microcontrolador embebido


Si deseas un conversor ADC o DAC tambien los puedes utilizar facilmente en la FPGA mira te dejo este datasheet de la Spartan3e veras que este KIT tiene todo lo que preguntas

http://www.digilentinc.com/Data/Products/S3EBOARD/S3EStarter_ug230.pdf

si necesitas algo mas con gusto te colaborare en lo que necesites!

se me olvidaba, no necesitas ningun circuito externo con este link que te deje, ojala puedas hacerte a una FPGA vas a ver la diverisdad de cosasque puedes hacer, ademas que un sistema en una FPGA es muchisimo mas robusto.
 
Última edición:
Atrás
Arriba