¿Puede un diseño FPGA ser mayormente (o completamente) asíncrono?

39

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

Ahora estoy comenzando con FPGA nuevamente como un pasatiempo, y no puedo evitar preguntarme sobre esos relojes. ¿Son absolutamente necesarios o un diseño basado en FPGA puede ser completamente asíncrono? ¿Se puede construir una lógica compleja y hacer que las cosas se muevan tan rápido como sea posible?

Me doy cuenta de que hay muchas trampas con esto, como saber cuándo la señal se ha propagado por 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 completamente asíncrono, sino solo 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 entiendo que un FPGA típico (digamos, un Ciclón II) tendrá sus chanclas pre-cableadas a señales de reloj específicas. ¿Es esto correcto? ¿Hay otros relojes implícitos como este y, por lo general, el diseño puede manejarlos manualmente?

Roman Starkov
fuente
3
Sé que Simon Moore, de la universidad de Cambridge, investigó mucho sobre el diseño asincrónico, incluida la fabricación de un chip de prueba. Requiere un conjunto completamente nuevo de herramientas de diseño y tiene efectos secundarios extraños: velocidad de ejecución inversamente proporcional a la temperatura, por ejemplo.
pjc50

Respuestas:

27

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

Un FPGA en sí mismo puede ejecutar un diseño completamente asíncrono sin problema. El resultado que obtienes es el problema, ya que el cronometraje a través de cualquier FPGA no es muy predecible. El mayor problema es el hecho de que su sincronización y el diseño resultante variarán casi definitivamente entre diferentes lugares y sesiones de ruta. Puede establecer restricciones en las rutas asíncronas individuales asegurándose de que no demoren demasiado, pero no estoy seguro de que pueda especificar un retraso mínimo.

Al final, significa que su diseño será impredecible y potencialmente completamente variable, incluso con un ligero cambio de diseño. Tendría que revisar todo el informe de tiempo cada vez que cambie algo para asegurarse 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 (suponiendo que sus restricciones estén configuradas correctamente, lo que no lleva mucho tiempo).

En la práctica, las personas aspiran 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 restrinja correctamente.

Espero que esto lo aclare un poco.

Andrey
fuente
3
Tuve que usar algunos dispositivos con diseños FPGA asíncronos. Eran difíciles de trabajar. Al menos use restricciones de tiempo
Tim Williscroft
1
Si bien es cierto que es posible implementar diseños asincrónicos con un FPGA, la mayoría de los FPGA están diseñados para admitir diseños específicamente sincrónicos. Tienen muchos recursos (PLL, circuitos de distribución de reloj y una gran cantidad de flip-flops) que se desperdiciarán en un diseño asíncrono.
Dmitry Grigoryev
2
Esta respuesta no proporciona consejos particularmente buenos. Puede crear un FPGA sin reloj y en realidad simplifica el lugar y la ruta, elimina una tonelada de problemas con respecto a los requisitos de tiempo y, debido a la canalización de grano fino, puede tener un rendimiento considerablemente mayor. El verdadero problema surge cuando intenta asignar un circuito con reloj a un FPGA sin reloj porque tienen características de temporización muy diferentes. Se puede hacer, solo requiere un poco más de procesamiento frontal para hacer la conversión. vlsi.cornell.edu/~rajit/ps/rc_overview.pdf
Ned Bingham
20

"¿Se puede construir una lógica compleja y hacer que las cosas se muevan tan rápido como sea posible?" Sí. Se han construido CPUs completas que son completamente asíncronas, al menos una de ellas fue la CPU más rápida del mundo. http://en.wikipedia.org/wiki/Asynchronous_circuit#Asynchronous_CPU

Me molesta que las personas rechacen las técnicas de diseño asíncrono, a pesar de que en teoría tienen varias ventajas sobre las técnicas de diseño síncrono, simplemente porque (como han dicho otros aquí) los diseños asincrónicos no son tan compatibles con las herramientas disponibles.

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

Afortunadamente, algunas de las ventajas del diseño asincrónico se pueden obtener mientras se utilizan técnicas de diseño principalmente sincrónicas mediante el uso de un diseño global asincrónico sincrónico local (GALS) .

davidcary
fuente
Siento exactamente lo mismo sobre la tendencia moderna de enrutar PCB en una cuadrícula cuadrada , aunque los beneficios de la migración son mucho menos significativos.
Roman Starkov
@romkyns: Eso se debe más al hecho de que escribir software de PCB que utiliza cuadrículas no rectilíneas es difícil .
Connor Wolf
1
@supercat: sospecho que estás aludiendo a la lógica de cuatro fases . Es una de las señales de reloj multifase que parece olvidarse.
davidcary
1
@davidcary: más o menos, excepto ambas "fases" en un cable: una fase controlada por el borde ascendente y otra por el borde descendente. Básicamente, dividiría los relojes de cierre en cuatro categorías: levantamiento limpio, caída limpia, levantamiento tardío, caída tardía. Los pestillos sincronizados con (L / CB) un borde ascendente o descendente limpio podrían tomar datos de cualquier borde ascendente o descendente. L / CB un borde ascendente tardío podría tomar datos del borde ascendente limpio L / CB de cualquier borde descendente. L / CB por caída tardía podría tomar datos de caída limpia L / CB o cualquier aumento.
supercat
1
@davidcary: siempre que el tiempo de propagación más rápido para cualquier enganche exceda el tiempo de retención más largo, y siempre que la ruta de señal más larga desde un borde de reloj, a través de la lógica de activación de reloj y enganches "tardíos" activados por ese borde, a cualquier enganche activado por el siguiente borde, no excede el tiempo mínimo entre los bordes del reloj, creo que dicho diseño debería ser completamente confiable y libre de metaestabilidad generada internamente bajo cualquier combinación de retrasos de propagación.
supercat
5

Un factor aún no mencionado es la metaestabilidad. Si se golpea un circuito de enclavamiento con una secuencia de entradas / transiciones de modo 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 "alto" o "bajo". Considere, por ejemplo, un flip flop activado por el borde que actualmente está emitiendo un "bajo", y tiene su cambio de entrada de bajo a alto casi al mismo tiempo que llega un borde de reloj. Si el borde del reloj ocurre lo suficiente antes de que cambie la entrada, la salida simplemente se quedará baja hasta el próximo borde del reloj. Si el borde del reloj ocurre lo suficiente después del cambio de entrada, la salida cambiará rápidamente una vez de bajo a alto y permanecerá allí hasta el próximo borde del reloj. Si ninguna de esas condiciones se aplica,. Puede permanecer bajo, o cambiar rápidamente una vez y mantenerse alto, pero puede permanecer bajo por un tiempo y luego cambiar, o cambiar y luego, algún tiempo después, volver atrás, o cambiar varias veces, etc.

Si un diseño es totalmente sincrónico y todas las entradas están sincronizadas doblemente, es muy poco probable que un pulso de temporización golpee el primer pestillo de un sincronizador de tal manera que haga que cambie en el momento perfecto para confundir al segundo pestillo. En general, es seguro considerar cosas como "simplemente no sucederá". Sin embargo, en un diseño asincrónico, a menudo es mucho más difícil razonar sobre tales cosas. Si se viola una restricción de tiempo en un circuito de enclavamiento (no solo flip flops, sino cualquier combinación de lógica que actuaría como un enclavamiento), no se sabe qué hará la salida hasta la próxima vez que haya una condición de entrada válida que fuerce el enganche a un estado conocido. Es completamente posible que las salidas retrasadas causen la violación de las restricciones de tiempo de las entradas aguas abajo, lo que lleva a situaciones inesperadas,

La forma más segura de modelar un circuito asíncrono sería hacer que casi todos los circuitos de salida produzcan una salida "X" durante un tiempo cada vez que cambie entre "0" y "1". Desafortunadamente, este enfoque a menudo da como resultado que casi todos los nodos muestren "X", incluso en casos que en realidad habrían 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 una entrada cambia, y permanece en "X" hasta que las entradas estén estables, es una buena señal de que el circuito funcionará, pero conseguir que los circuitos asincrónicos funcionen bajo tales restricciones A menudo es difícil.

Super gato
fuente
4

Por supuesto, si sus requisitos de diseño son lo suficientemente lentos como para que muchos 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 tiempos para vigilar esto, pero hay un límite para lo que puede hacer útilmente sin información interna del estado. Si solo quiere hacer algo así como un multiplexor de 100 entradas, entonces bien, solo recuerde que cada entrada tendrá un retraso de propagación diferente. De hecho, puede obtener algunos efectos interesantes y caóticos con un gran número de bucles de retroalimentación oscilante de retardo impredecible; tal vez un sintetizador basado en FPGA completamente asíncrono podría ser el próximo 'análogo'.

mikeselectricstuff
fuente
4

Sí tu puedes. Puede ignorar los flipflops por completo y construirlo todo a partir de LUT. Y / o puede usar los elementos de estado de la mayoría de los FPGA de Xilinx como pestillos (activados por nivel) en lugar de flipflops (activados por borde).

Martin Thompson
fuente
3
Un peligro con eso es que, a menos que uno restrinja el compilador lógico, puede producir lógica que tenga un tiempo de propagación negativo para algunas puertas. Por ejemplo, si uno especifica X=(someComplexFormula)y Y=X & D, y si el compilador sustituye esa fórmula por X y determina que X & Des equivalente a A & D, el compilador podría reemplazar el cálculo Y en términos de A y D, en lugar de en términos de X, permitiendo así el cálculo de Y proceder más rápido que el de X. Tales sustituciones son válidas con lógica combinatoria, pero causan estragos en la lógica secuencial asíncrona.
supercat
@supercat: nunca trabajé con las herramientas de Xilinx, pero cuando trabajé con Altera FPGAs, siempre tuve la opción de especificar rutas críticas como módulos de puerta conectados en lugar de en RTL, momento en el que estas optimizaciones son discapacitado.
Julio
@Jules: Todos mis diseños de lógica programable han utilizado Abel, que es un lenguaje algo tonto, pero hace posible especificar cosas de maneras que algunos CPLD pueden implementar, pero que pueden presentar dificultades para una herramienta de síntesis VHDL o Verilog. Por ejemplo, en uno de mis proyectos, aproveché el hecho de que las partes de Xilinx tienen reloj, ajuste asíncrono y restablecimiento asíncrono para implementar un registro de desplazamiento cargable asíncrono. Si necesito hacer esas cosas en un FPGA, sin haber usado Verilog o VHDL, ¿cómo debo saber qué se necesita para hacer eso? Por cierto, si la memoria sirve, usé T flops para la palanca de cambios, y ...
supercat
... el tiempo era tal que la escritura asincrónica solo podía ocurrir en momentos en que la entrada T sería baja, suponiendo que si ocurriera un reloj nop cerca del comienzo de un pulso de escritura, la escritura asincrónica se extendería lo suficiente más allá para asegurar un valor estable, y si el reloj nop ocurriera cerca del final, simplemente estaría bloqueando un valor aún estable. No estoy seguro de cómo uno podría manejar eficientemente tales casos en VHDL o Verilog.
supercat
@supercat: tomando un problema similar, mirando el Manual del dispositivo Cyclone IV veo que el mejor enfoque para el mismo problema sería usar la opción "Carga sincrónica en todo el LAB" (un "LAB" es un grupo de 16 elementos lógicos , por lo que si el tamaño de dicho registro no termina en un múltiplo de 16 bits, algunos bits se desperdiciarán, pero esta parece ser la opción más útil de todos modos). Ahora tengo dos opciones: puedo escribir verilog funcional que requerirá que la herramienta de síntesis elija una forma de implementar el registro requerido (que generalmente sería la mejor opción) o, si tengo un tiempo estricto ...
Jules
3

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

Brian Carlton
fuente
3

Realmente hay TRES tipos de diseños.

  1. Combinacional. No hay relojes ni rutas de retroalimentación y el sistema no tiene "memoria". Cuando una o más entradas cambian, los cambios se ondulan a través de la lógica. Después de un tiempo, la salida se establece en un nuevo estado donde permanece hasta que las entradas cambien nuevamente.
  2. Sincrónico 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, entonces se pueden necesitar precauciones especiales en señales que pasan de un dominio de reloj a otro.
  3. Asíncrono secuencial. Hay rutas de retroalimentación, pestillos, registros u otros elementos que proporcionan la memoria de diseño de eventos pasados ​​y que no se sincronizan con líneas de reloj fácilmente analizadas.

En general, cuando se sintetiza / optimiza la lógica combinatoria, las herramientas supondrán que todo lo que importa es cuál es el resultado final y el tiempo máximo necesario para resolver 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 muy derrochadores 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, todo lo 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 cambien o si son fallas en el camino. Una vez más, las herramientas pueden convertir esto fácilmente en lógica, siempre que el reloj sea lo suficientemente lento como para dar la respuesta correcta (y pueden decirle si el reloj que desea usar es lo suficientemente lento).

En un sistema secuencial asíncrono, esas suposiciones desaparecen. Las fallas pueden importar, el orden de los cambios de salida puede importar. Tanto las herramientas como los FPGA mismos fueron diseñados para diseños sincrónicos. Se ha debatido mucho (diseño de FPGA asíncrono de Google si desea obtener más información) sobre la posibilidad de implementar sistemas asincrónicos, ya sea en FPGA estándar o en diseños diseñados especialmente, pero aún se encuentra fuera de la práctica de diseño aceptada de la corriente principal.

Peter Green
fuente
2

Sí. Si no tiene construcciones de tipo de proceso, 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 asincrónica.

mikeselectricstuff
fuente
1
¿Querías hacer de esta una respuesta única?
Kevin Vermeer
1

FWIW Pensé que debería agregar que un objetivo obvio en las soluciones lógicas asíncronas sería la reducción global del consumo de energía.

Esos relojes globales / PLL / buffers queman muchos julios.

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

Harrygoz
fuente
Este es un buen punto, aunque vale la pena considerar que un circuito combinatorio mal diseñado que realiza la misma operación que un circuito secuencial podría en muchos casos realizar muchas transiciones transitorias a medida que se calculan los resultados parciales y la salida final se actualiza para tenerlos en cuenta. y en los circuitos CMOS (como lo son la mayoría de los FPGA) el consumo de energía es aproximadamente proporcional al número de transiciones. Los relojes pueden causar transiciones innecesarias, pero también puede hacer muchas reducciones de potencia deshabilitando los relojes en partes del circuito que no son necesarias en este momento.
Julio