40 votos

FPGA vs Microcontroladores

He trabajado en el Arduino de la familia (específicamente la Sanguino), construyó un par de dispositivos sencillos y un simple phototrope. Estoy bastante cómodo con microcontroladores - específicamente de Atmel. Tengo la curiosidad de saber cómo hacer del FPGA distintos de los estándares de los microcontroladores. Yo soy de un fondo técnico (C/C++ programming), y por lo tanto el amor de respuestas técnicas. Sólo ten en cuenta que soy un novato (en relación a mi s/w de la experiencia) en la electrónica de dominio. :)

Me hizo ir a través de esta consulta y que era bueno, pero estoy mirando para más detalles más profundos.

Gracias! Sushrut.

48voto

Duncan Smart Puntos 9195

Diseño para una FPGA requiere de un Lenguaje de Descripción de Hardware (HDL). Las hdl son absolutamente nada como C. Considerando que un programa en C es una serie secuencial de instrucciones y deben retorcer sí mismo para lograr la ejecución en paralelo, un nivel de HDL describe un concurrente de circuito y debe retorcer sí mismo para lograr una ejecución secuencial. Es un mundo muy diferente, y si se intenta construir un circuito en una FPGA mientras pensando como un desarrollador de software que va a doler.

Un MCU es por tiempo limitado. Con el fin de lograr más trabajo, usted necesita más ciclos de procesador. Los relojes tienen muy real, los límites a sus frecuencias, por lo que es fácil de golpear un computacional de la pared. Sin embargo, un FPGA es un espacio limitado. Con el fin de lograr más trabajo, que se limita a añadir más circuitos. Si su FPGA no es lo suficientemente grande, puedes comprar uno más grande. Es muy difícil construir un circuito que no puede caber en el más grande de la FPGA, e incluso si hay app de notas que se describe cómo conectar en cadena FPGAs juntos.

Los FPGAs se centran más en la ejecución en paralelo. A veces usted tiene que preocuparse acerca de cuánto tiempo su MCU del ISR lleva al servicio de la interrupción, y si vas a ser capaz de lograr su disco en tiempo real de los límites. Sin embargo, en la FPGA hay un montón de Máquinas de Estado Finito (FSM) que se ejecuta todo el tiempo. Son como "femto-controladores", como las nubes de la lógica de control. Todos ellos están ejecutando de forma simultánea, por lo que no hay que preocuparse por la falta de una interrupción. Usted podría tener una FSM a la interfaz para un ADC, otro FSM a la interfaz de un microcontrolador de la dirección/bus de datos, otro de la FSM para transmitir datos a un codec estéreo, sin embargo, otro FSM para amortiguar el flujo de datos desde el ADC para el códec...necesita utilizar un simulador para asegurarse de que todas las FSMs cantar en armonía. Si cualquier lógica de control es incluso un solo ciclo de reloj (y esos errores son fáciles de hacer), a continuación, usted recibirá una cacofonía de fracaso.

Los FPGAs son un diseño de la PCB del diseñador de los sueños húmedos. Son muy configurable. Usted puede tener diferentes interfaces de lógica (LVTTL, LVCMOS, LVDS, etc), de diferentes voltajes e incluso conducir fortalezas (por lo que no necesita de la serie de resistencias de terminación). Las patillas son intercambiables; ¿alguna vez has visto un MCU bus de direcciones donde los pines estaban esparcidos alrededor de la viruta? Su diseñador de PCB probablemente tiene que caer un montón de vias sólo para atar todas las señales correctamente. Con un FPGA, el diseñador de PCB puede, a continuación, ejecute las señales en el chip en casi cualquier orden que sea conveniente y, a continuación, el diseño se puede volver anotados para el FPGA conjunto de herramientas.

Los FPGAs también tienen un montón de bonitos, elegantes juguetes. Uno de mis favoritos es el Reloj Digital Manager en Xilinx fichas. Que se alimentan de una señal de reloj, y puede derivar cuatro más de ella, usando una amplia variedad de frecuencia de los multiplicadores y divisores, todos con prístina 50% de ciclo de trabajo y el 100% en la fase...y puede que incluso cuenta para el sesgo del reloj que surge de retardos de propagación externa al chip!

EDITAR (respuesta a la adición):

Usted puede colocar un "núcleo blando" en un FPGA. Estás literalmente cableado juntos un microcontrolador circuito, o más bien usted está probablemente caída de alguien circuito en su diseño, como Xilinx del PicoBlaze o MicroBlaze o Altera los Nios. Pero como la C->VHDL compiladores, estos núcleos tienden a ser un poco hinchado y lento en comparación con el uso de FSM y datapath, o un microcontrolador. Las herramientas de desarrollo también puede agregar una complejidad significativa en el proceso de diseño, que puede ser una cosa mala cuando los FPGAs son ya muy complejo fichas.

También hay algunos FPGAs que tienen "núcleos duros" incrustados en ellos, como Xilinx del Virtex4 series que tienen un real, dedicado IBM PowerPC con FPGA de la tela a su alrededor.

EDIT2 (respuesta para el comentario):

Creo que voy a ver ahora...usted está preguntando acerca de la conexión de un discreto MCU para un FPGA, es decir, independiente de dos chips. Hay buenas razones para ello; la FPGA que han duro núcleos y los que son lo suficientemente grandes como para apoyar decente suave núcleos generalmente son monstruos con muchos cientos de alfileres que acaba requiriendo un paquete BGA, que fácilmente se aumenta la dificultad de diseñar un PCB por un factor de 10.

C es mucho más fácil, aunque, por lo Mcu sin duda tienen su lugar de trabajo en tándem con un FPGA. Ya que es más fácil escribir C, usted puede escribir el "cerebro" o el algoritmo central en el MCU, mientras que la FPGA puede implementar sub-algoritmos que pueden necesitar acelerado. Tratar de poner las cosas que cambiar en el código de C, porque es más fácil cambiar y salir de la FPGA, para ser más dedicado el tipo de cosas que no cambian con frecuencia.

MCU herramientas de diseño son también más fáciles de utilizar. Tarda varios minutos para el diseño de herramientas para construir la FPGA bits de archivo, incluso para algo diseños simples, pero complejo MCU programas suelen tardar unos segundos. Hay mucho, mucho menos a ir mal con el MCU, por lo que también es más fácil de depurar...no puedo subestimar lo complejo de los FPGAs pueden ser. Usted realmente necesita para obtener la hoja de datos para el que usted tiene, y usted debe tratar de leer cada página. Lo sé, es un par de cientos de páginas...a hacer de todos modos.

La mejor manera de conectar con ellos es el uso de un MCU con una dirección externa y el bus de datos. A continuación, puede simplemente mapa de memoria los circuitos FPGA en el MCU, y añadir su propio "registros" que cada uno tiene su propia dirección. Ahora la FPGA puede agregar periféricos, como una de 32-bit de temporizador que puede pestillo de todos los 4 bytes a la vez cuando el primer byte es leer para evitar desbordamientos de entre 8-bit lee. También se puede utilizar como pegamento lógica para el mapa de memoria más periféricos de otros chips, como un independiente ADC.

Por último, algunos Mcu están diseñados para su uso con un "maestro externo" como un FPGA. Cypress hace un par de USB Mcu que tienen un 8051 en el interior, pero la intención es que el USB de datos para ser producidos/consumidos por ejemplo en un FPGA.

10voto

Jeremy Ruten Puntos 59989

ejemplos en el mundo real ... la combinación de los FPGAs con microcontroladores?"

En principio, suficientemente grandes FPGA único que puede hacer cualquier cosa que un FPGA, además de un microcontrolador puede hacer, tal vez por la aplicación de una suave CPU dentro de la FPGA. En la práctica, un determinado nivel de rendimiento a menudo tiene menores costos de partes y requiere menor energía cuando se implementa con una FPGA más un microcontrolador que con FPGAs solo (o Mcu). Aquí están algunos de los más famosos dispositivos con FPGAs y microcontroladores a bordo:

  • La cámara Elphel; Elphel Wiki del Proyecto tiene una Xilinx (R) Spartan 3e 1200K puertas de la FPGA y un ETRAX FS procesador ejecutando GNU/Linux.
  • El TS-7500 tiene un 5000 LUT Celosía FPGA y un 250MHz Cavium ARM9 de la CPU que se puede ejecutar en Linux.
  • El Globo de la junta tiene un FPGA Xilinx Spartan y una CPU ARM
  • varios Teeny muy, muy Linux SBCs incluyen tanto un FPGA y un CPU
  • El Armadeus wiki del Proyecto los documentos de un par de juntas de la junta con una Xilinx Spartan-3 FPGA y un 400 MHz ARM9 de la CPU.
  • El Blackfin la Mano de la Junta incluye tanto una Xilinx Spartan 3e FPGA y un 600 MHz Dispositivos Analógicos Blackfin® ADSP-BF537 procesador. (No tiene un MMU, por lo que no se puede ejecutar completo a Linux, pero se puede ejecutar uClinux).
  • El "Minimig" (mini Amiga) incluye una Xilinx Spartan-3 FPGA, un M68000 de la CPU, y un pequeño PIC MCU actuando como controlador de disco.

4voto

Jordan S. Jones Puntos 1023

A menudo, los FPGAs acostumbrarse específicamente para realizar las tareas de un microcontrolador no puede hacer de manera eficiente, tales como altamente paralelo o de baja latencia de las operaciones, que operan en múltiples dominios de reloj, o haciendo la lógica personalizada en hardware velocidades. Como tal, va a hacer el trabajo pesado, y rara vez necesitan de una MCU para ser el centro de para el diseño - que puede ser trasladado a puestos de gestión, tales como la carga de la configuración del flujo de bits. Un ejemplo de esto es la foto o el BRAZO en el Minimig, que implementa la interfaz de almacenamiento.

Un par de productos de desenfoque de las líneas, sin embargo. Algunos ejemplos:

  1. Mayor FPGAs tienden a tener difícil Cpu integrado (proyectos más grandes a menudo necesitan ellos de todos modos), como la memoria RAM y el multiplicador de bloques
  2. Algunos microcontroladores objetivo en operaciones paralelas (XMOS XS1, Atmel Xmega, GreenArray, Paralaje de la Hélice)
  3. Algunos de los chips están diseñados como híbridos (Ciprés de PSoC, Atmel FPSLIC)

Viniendo de una programación imperativa de fondo, es un gran ajuste para el diseño de hardware que usted necesita para obtener las ventajas de los FPGAs. Usted encontrará la experiencia útil también en otros lugares, sin embargo.

1voto

Mark Biek Puntos 41769

Realmente no hay ninguna diferencia entre un MCU como un AVR, y uno programado en un FPGA. El OpenCores sitio tiene código VHDL para un AVR que puede ser utilizado en un FPGA. Usted puede estudiar y ver cómo funciona, e incluso probar por ti mismo en un simulador sin necesidad de comprar un adecuado FPGA de la junta.

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X