¿Puede un diseño FPGA ser en su mayoría (o completamente) asíncrono?

32

Tuvimos un curso muy corto de FPGA / Verilog en la universidad (hace 5 años), y siempre usábamos relojes en todas partes.

Ahora estoy comenzando con los FPGA de nuevo como un pasatiempo, y no puedo dejar de preguntarme sobre esos relojes. ¿Son absolutamente necesarios, o puede un diseño basado en FPGA ser completamente asíncrono? ¿Se puede construir un montón complejo de lógica y hacer que las cosas lo atraviesen tan rápido como sea posible?

Me doy cuenta de que hay muchos problemas con esto, como saber cuándo la señal se ha propagado a través de todas las partes del circuito y la salida se ha estabilizado. Eso no viene al caso. No es que quiera construir un diseño que sea totalmente asíncrono, sino simplemente para mejorar mi comprensión de las capacidades.

Para mi ojo principiante, parece que la única construcción que requiere absolutamente un reloj es un reg , y mi entendimiento es que un FPGA típico (por ejemplo, un ciclón II) tendrá sus flip-flops precableados para Señales de reloj específicas. ¿Es esto correcto? ¿Hay otros relojes implícitos como este y, por lo general, pueden ser manejados manualmente por el diseño?

    
pregunta Roman Starkov

9 respuestas

27

Una respuesta corta sería: sí; Una respuesta más larga sería: no vale la pena su tiempo.

Un FPGA puede ejecutar un diseño completamente asíncrono sin problemas. El resultado que obtienes es el problema ya que la sincronización a través de cualquier FPGA no es muy predecible. El mayor problema es el hecho de que la sincronización y el diseño resultante variarán casi definitivamente entre las diferentes sesiones de ruta y lugar. Puedes poner restricciones en rutas asíncronas individuales asegurándote de que no tomen demasiado tiempo, pero no estoy seguro de que puedas especificar un retraso mínimo.

Al final, significa que su diseño será impredecible y potencialmente variable, incluso con un ligero cambio de diseño. Tendrías que revisar el informe de tiempo completo cada vez que cambies algo para asegurarte de que aún funcione. Por otro lado, si el diseño es sincrónico, solo busca un pase o falla al final del lugar y la ruta (asumiendo que tus restricciones están configuradas correctamente, lo que no toma mucho tiempo).

En la práctica, la gente apunta a diseños completamente sincrónicos, pero si necesita simplemente amortiguar o invertir una señal, no necesita pasar por un flip flop siempre que lo limite adecuadamente.

Espero que esto se aclare un poco.

    
respondido por el Andrey
16

"¿Se puede construir un montón complejo de lógica y hacer que las cosas lo atraviesen tan rápido como sea posible?" Sí. Se han construido CPU completas que son completamente asíncronas, al menos una de ellas fue la CPU más rápida del mundo. enlace

Me molesta que las personas rechacen las técnicas de diseño asíncrono, aunque en teoría tienen varias ventajas sobre las técnicas de diseño sincrónico, simplemente porque (como han dicho otros) los diseños asíncronos no están tan bien respaldados por las herramientas disponibles.

Para mí, es como recomendar que todos los puentes estén hechos de madera, porque hay más personas que tienen herramientas para trabajar la madera que herramientas para trabajar el acero.

Afortunadamente, algunas de las ventajas del diseño asíncrono pueden obtenerse mientras se siguen usando técnicas de diseño en su mayoría sincrónicas mediante el uso de un síncrono local asíncrono global ( GALS) diseño.

    
respondido por el davidcary
5

Un factor que aún no se ha mencionado es la metastabilidad. Si un circuito de retención se golpea con una secuencia de entradas / transiciones tal que el estado resultante dependería de los retrasos de propagación u otros factores impredecibles, no hay garantía de que el estado resultante sea limpio o "alto" o "bajo". Considere, por ejemplo, un flip-flop activado por borde que actualmente está emitiendo un "bajo", y tiene su cambio de entrada de bajo a alto casi al mismo tiempo que llega el borde del reloj. Si el borde del reloj es lo suficientemente largo antes del cambio de entrada, la salida simplemente se sentará baja hasta el próximo borde del reloj. Si el borde del reloj pasa el tiempo suficiente después del cambio de entrada, la salida cambiará rápidamente una vez de bajo a alto y permanecerá allí hasta el siguiente borde del reloj. Si ninguna de estas condiciones se aplica, la salida puede hacer cualquier cosa . Puede permanecer bajo, o cambiar rápidamente una vez y permanecer alto, pero puede permanecer bajo por un tiempo y luego cambiar, o cambiar y luego un tiempo más tarde volver a cambiar, o alternar unas y otras veces, etc.

Si un diseño es completamente síncrono y todas las entradas están sincronizadas doble, es muy poco probable que un impulso de sincronización golpee el primer pestillo de un sincronizador de tal manera que haga que se conmute en el momento perfecto para Confundir el segundo pestillo. En general, es seguro considerar estas cosas como "simplemente no sucederá". En un diseño asíncrono, sin embargo, a menudo es mucho más difícil razonar acerca de tales cosas. Si se viola una restricción de tiempo en un circuito de enclavamiento (no solo los flip flops, sino cualquier combinación de lógica que actúe como un enclavamiento), no se sabe qué hará la salida hasta la próxima vez que exista una condición de entrada válida que obligue al enclavamiento. a un estado conocido. Es totalmente posible que las salidas retrasadas causen la violación de las restricciones de tiempo de las entradas en sentido descendente, dando lugar a situaciones inesperadas, especialmente si se utiliza una salida para calcular dos o más entradas (algunas pueden calcularse como si el seguro fuera alto, otras como aunque fuera bajo).

La forma más segura de modelar un circuito asíncrono sería hacer que casi todos los circuitos de salida produzcan una "X" por un tiempo cada vez que cambie entre "0" y "1". Desafortunadamente, este enfoque a menudo da como resultado que casi todos los nodos muestren una "X", incluso en casos que en realidad casi con seguridad han dado como resultado un comportamiento estable. Si un sistema puede funcionar cuando se simula que todas las salidas se convierten en "X" inmediatamente después de que cambie una entrada y permanezcan en "X" hasta que las entradas estén estables, es una buena señal de que el circuito funcionará, pero hacer que los circuitos asíncronos funcionen bajo tales restricciones A menudo es difícil.

    
respondido por el supercat
4

Por supuesto, si sus requisitos de diseño son lo suficientemente lentos como para que una gran cantidad de retrasos internos sigan siendo órdenes de magnitud más largos que los tiempos que le interesan, entonces no es un problema, y puede mirar el informe de tiempo para estar atento. esto, pero hay un límite a lo que puede hacer útilmente sin información interna del estado. Si solo desea hacer algo como un multiplexor de 100 entradas, entonces recuerde que cada entrada tendrá un retraso de propagación diferente. De hecho, es posible que obtengas algunos efectos interesantes y caóticos con un gran número de bucles de realimentación oscilantes con retardo impredecible, tal vez un sintetizador basado en FPGA totalmente asíncrono podría ser el próximo 'análogo' ...

    
respondido por el mikeselectricstuff
3

Sí. Si no tiene construcciones de tipo de proceso, entonces no debería hacer cosas como inferir registros. Habrá cosas como la memoria integrada que requieren relojes, aunque si realmente lo desea, probablemente podría generarlos de forma asíncrona.

    
respondido por el mikeselectricstuff
3

Como lo señaló @Andrey, no vale la pena dedicarle tiempo. Específicamente las herramientas no hacen esto, por lo que estaría completamente solo. Además, dado que tienen registros incorporados, no se guardaría nada al no usarlos.

    
respondido por el Brian Carlton
3

Sí, puedes. Puede ignorar completamente los flip-flops y construirlos todos a partir de LUTs. Y / o puede usar los elementos de estado de la mayoría de los FPGA de Xilinx como pestillos (disparados por nivel) en lugar de flip-flops (disparados por el borde).

    
respondido por el Martin Thompson
3

Realmente hay TRES tipos de diseños.

  1. combinatoria. No hay relojes ni rutas de retroalimentación y el sistema no tiene "memoria". Cuando una o más entradas cambian, los cambios ondulan a través de la lógica. Después de algún tiempo, la salida se establece en un nuevo estado donde permanece hasta que las entradas cambian nuevamente.
  2. Sincrónica secuencial. Un sistema está construido a partir de registros y bloques de lógica combinatoria, los registros están sincronizados por un pequeño número (a menudo 1) de relojes. Si hay varios relojes, es posible que se necesiten precitaciones especiales en las señales que pasan de un dominio de reloj a otro.
  3. Secuencial asíncrono. Hay rutas de retroalimentación, latches, registros u otros elementos que proporcionan a la memoria de diseño eventos pasados y que no están sincronizados por líneas de reloj analizadas con facilidad.

En general, al sintetizar / optimizar la lógica combinatoria, las herramientas asumirán que lo único que importa es cuál es el resultado final y el tiempo máximo necesario para establecer ese resultado.

Puede crear un diseño que sea puramente combinatorio y obtendrá el resultado correcto. Las salidas pueden cambiar en cualquier orden y pueden cambiar varias veces antes de alcanzar sus valores finales. Tales diseños son un desperdicio de recursos lógicos. La mayoría de los elementos lógicos pasarán la mayor parte del tiempo inactivos, mientras que en un sistema secuencial podría haber reutilizado esos elementos para procesar múltiples elementos de datos.

En un sistema síncrono secuencial, lo único que importa es que las salidas del bloque combinatorio se hayan asentado en su estado correcto cuando se registren en el siguiente flip flop. No importa en qué orden cambian o si son fallos en el camino. Una vez más, las herramientas pueden convertir esto fácilmente en una lógica que, dado que el reloj es lo suficientemente lento, da la respuesta correcta (y pueden decirle si el reloj que desea usar es lo suficientemente lento).

En un sistema secuencial asíncrono, esas suposiciones salen de la ventana. Las fallas pueden importar, el orden de los cambios de salida puede ser importante. Tanto las herramientas como los FPGA fueron diseñados para diseños sincrónicos. Ha habido mucha discusión (diseño asíncrono de FPGA de Google si desea saber más) sobre la posibilidad de implementar sistemas asíncronos en FPGA estándar o en sistemas de diseño especial, pero aún se encuentra fuera de las prácticas de diseño aceptadas de forma generalizada

    
respondido por el Peter Green
1

FWIW Pensé que debería agregar ese objetivo obvio en las soluciones de lógica asíncrona que sería la reducción global en el consumo de energía.

Esos relojes / PLL / buffers globales queman muchos julios.

Como las soluciones FPGA serpentean en arenas alimentadas por baterías (por ejemplo, Lattice Icestick), este aspecto adquirirá mucha más atención.

    
respondido por el Harrygoz

Lea otras preguntas en las etiquetas