Trabajé en la familia Arduino (específicamente el Sanguino), construí algunos dispositivos simples y un fotótropo simple. Por lo tanto, estoy bastante cómodo con los microcontroladores, específicamente los de Atmel. Tengo curiosidad por saber cómo difieren los FPGA de los microcontroladores estándar. Soy de una formación técnica (programación C / C ++) y, por lo tanto, me encantarían las respuestas técnicas. Solo tenga en cuenta que soy un novato (en relación con mi experiencia s / w) en el dominio de la electrónica. :)
Realicé esta consulta y fue buena, pero estoy buscando más detalles más profundos.
¡Gracias! Sushrut
fpga
microcontroller
Sushrut J Mair
fuente
fuente
Respuestas:
El diseño para un FPGA requiere un lenguaje de descripción de hardware (HDL). Los HDL no son absolutamente nada como C. Mientras que un programa en C es una serie secuencial de instrucciones y debe contorsionarse para lograr la ejecución paralela, un HDL describe un circuito concurrente y debe contorsionarse para lograr la ejecución secuencial. Es un mundo muy diferente y si intentas construir un circuito en un FPGA mientras piensas como un desarrollador de software, te dolerá.
Una MCU es por tiempo limitado. Para lograr más trabajo, necesita más ciclos de procesador. Los relojes tienen límites muy reales para sus frecuencias, por lo que es fácil golpear una pared computacional. Sin embargo, un FPGA tiene espacio limitado. Para lograr más trabajo, simplemente agrega más circuitos. Si su FPGA no es lo suficientemente grande, puede comprar uno más grande. Es muy difícil construir un circuito que no pueda caber en el FPGA más grande, e incluso si lo hace, hay notas de la aplicación que describen cómo encadenar los FPGA juntos.
Los FPGA se centran mucho más en la ejecución paralela. En ocasiones, debe preocuparse por el tiempo que tarda el ISR de su MCU en atender la interrupción y si podrá alcanzar sus límites en tiempo real. Sin embargo, en FPGA hay muchas máquinas de estado finito (FSM) ejecutándose todo el tiempo. Son como "femto-controladores", como pequeñas nubes de lógica de control. Todos se ejecutan simultáneamente, por lo que no hay que preocuparse por perder una interrupción. Es posible que tenga un FSM para conectarse a un ADC, otro FSM para conectarse a la dirección / bus de datos de un microcontrolador, otro FSM para transmitir datos a un códec estéreo, otro FSM para almacenar el flujo de datos del ADC al códec ... Usted necesita usar un simulador para asegurarse de que todos los FSM canten en armonía.
Los FPGA son el sueño húmedo de un diseñador de diseño de PCB. Son extremadamente configurables. Puede tener muchas interfaces lógicas diferentes (LVTTL, LVCMOS, LVDS, etc.), de voltajes variables e incluso potencias de accionamiento (por lo que no necesita resistencias de terminación en serie). Los pasadores son intercambiables; ¿Alguna vez has visto un bus de direcciones MCU donde los pines estaban dispersos alrededor del chip? Su diseñador de PCB probablemente tenga que soltar un montón de vías solo para unir todas las señales correctamente. Con un FPGA, el diseñador de PCB puede ejecutar las señales en el chip en casi cualquier orden que sea conveniente, y luego el diseño puede anotarse en la cadena de herramientas FPGA.
Los FPGA también tienen muchos juguetes bonitos y elegantes. Uno de mis favoritos es el Digital Clock Manager en chips Xilinx. Se alimenta una señal de reloj, y puede derivar cuatro más usando una amplia variedad de multiplicadores y divisores de frecuencia, todos con un ciclo de trabajo prístino del 50% y 100% en fase ... e incluso puede dar cuenta de la inclinación del reloj que surge de retrasos de propagación externos al chip!
EDITAR (respuesta al apéndice):
Puede colocar un "núcleo blando" en un FPGA. Literalmente, está conectando un circuito de microcontrolador, o mejor dicho, probablemente está colocando el circuito de otra persona en su diseño, como PicoBlaze de Xilinx o MicroBlaze o Nios de Altera. Pero al igual que los compiladores C-> VHDL, estos núcleos tienden a ser un poco hinchados y lentos en comparación con el uso de un FSM y una ruta de datos, o un microcontrolador real. Las herramientas de desarrollo también pueden agregar una complejidad significativa al proceso de diseño, lo que puede ser algo malo cuando los FPGA ya son chips extremadamente complejos.
También hay algunos FPGA que tienen "núcleos duros" incrustados en ellos, como la serie Virtex4 de Xilinx que tiene un IBM PowerPC real y dedicado con un tejido FPGA a su alrededor.
EDIT2 (respuesta al comentario):
Creo que veo ahora ... estás preguntando acerca de cómo conectar un MCU discreto a un FPGA; es decir, dos chips separados. Hay buenas razones para hacer esto; Los FPGA que tienen núcleos duros y los que son lo suficientemente grandes como para soportar núcleos blandos decentes suelen ser monstruos con muchos cientos de pines que terminan requiriendo un paquete BGA, lo que aumenta fácilmente la dificultad de diseñar un PCB en un factor de 10.
Sin embargo, C es mucho más fácil, por lo que los MCU definitivamente tienen su lugar trabajando en conjunto con un FPGA. Como es más fácil escribir C, puede escribir los "cerebros" o el algoritmo central en la MCU, mientras que el FPGA puede implementar sub-algoritmos que pueden necesitar aceleración. Intente poner cosas que cambian en el código C, porque es más fácil de cambiar, y deje que el FPGA sea un tipo de letra más dedicado que no cambiará a menudo.
Las herramientas de diseño de MCU también son más fáciles de usar. Las herramientas de diseño tardan varios minutos en construir el archivo de bits FPGA, incluso para diseños algo simples, pero los programas complejos de MCU generalmente demoran unos segundos. Hay mucho, mucho menos que salir mal con el MCU, por lo que también son más fáciles de depurar ... No puedo entender cuán complejos pueden ser los FPGA. Realmente necesita obtener la hoja de datos de la que tiene, y debe intentar leer cada página. Lo sé, son unos cientos de páginas ... hazlo de todos modos.
La mejor manera de conectarlos es usar una MCU con una dirección externa y un bus de datos. Luego, simplemente puede mapear la memoria de los circuitos FPGA en la MCU y agregar sus propios "registros" que tienen su propia dirección. Ahora el FPGA puede agregar periféricos personalizados, como un temporizador de 32 bits que puede enganchar los 4 bytes a la vez cuando se lee el primer byte para evitar desbordamientos entre las lecturas de 8 bits. También puede usarlo como lógica de pegamento para asignar más periféricos de memoria de otros chips, como un ADC separado.
Finalmente, algunas MCU están diseñadas para usarse con un "maestro externo" como un FPGA. Cypress fabrica algunas MCU USB que tienen un 8051 en su interior, pero la intención es que los datos USB sean producidos / consumidos por, por ejemplo, un FPGA.
fuente
"¿Ejemplos en el mundo real ... combinando FPGAs con microcontroladores?"
En principio, un FPGA suficientemente grande solo puede hacer cualquier cosa que un FPGA más un microcontrolador pueda hacer, tal vez mediante la implementación de una CPU suave dentro del FPGA. En la práctica, un nivel de rendimiento dado a menudo tiene costos de piezas más bajos y requiere menor potencia cuando se implementa con un FPGA más un microcontrolador separado que con FPGA solo (o MCU solo). Estos son algunos de los dispositivos más famosos con FPGA y microcontroladores a bordo:
fuente
A menudo, los FPGA se usan específicamente para realizar tareas que un microcontrolador no puede realizar de manera eficiente, como operaciones altamente paralelas o de baja latencia, operar en dominios de reloj múltiples o hacer lógica personalizada a velocidades de hardware. Como tal, harán el trabajo pesado, y rara vez se necesita una MCU para ser central en el diseño; se pueden mover a puestos de administración, como cargar el flujo de bits de configuración. Un ejemplo de esto es el PIC o ARM en el Minimig , que implementa la interfaz de almacenamiento.
Sin embargo, algunos productos difuminan las líneas. Algunos ejemplos:
Procedente de un entorno de programación imperativo, es un gran ajuste para diseñar en hardware, ya que necesita obtener las ventajas de los FPGA. Sin embargo, también encontrarás la experiencia útil en otros lugares.
fuente
Realmente no hay ninguna diferencia entre un MCU como un AVR, y uno programado en un FPGA. El sitio OpenCores tiene un código VHDL para un AVR que puede usarse en un FPGA. Puede estudiarlo y ver cómo funciona, e incluso probarlo usted mismo en un simulador sin comprar una placa FPGA adecuada.
fuente
Los microcontroladores son circuitos digitales que ejecutan comandos desde la memoria de su programa secuencialmente uno tras otro. El circuito de hardware digital de un microcontrolador es fijo y las interconexiones entre las diferentes puertas que comprenden el circuito digital son permanentes y están grabadas en el silicio. Donde los FPGA pueden considerarse como un conjunto de puertas digitales (en realidad, aunque hay luts presentes) que tienen interconexiones programables. Ahora cualquier circuito digital (incluso un microcontrolador) se puede hacer en el fpga programando las interconexiones.
fuente