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?
Respuestas:
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.
fuente
"¿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) .
fuente
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.
fuente
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'.
fuente
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).
fuente
X=(someComplexFormula)
yY=X & D
, y si el compilador sustituye esa fórmula por X y determina queX & D
es equivalente aA & 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.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.
fuente
Realmente hay TRES tipos de diseños.
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.
fuente
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.
fuente
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.
fuente