Edición sustancial: tenga en cuenta que la respuesta de David Kessner se escribió en respuesta a la publicación original; ver el historial de edición para ver a qué estaba respondiendo
Por lo que he leído del diseño digital, hay una fuerte tendencia hacia el uso de circuitos estrictamente síncronos en los que los únicos subsistemas "secuenciales" son flip flops que comparten un reloj común. Las señales que se cruzan entre dominios de reloj casi siempre requieren sincronizadores dobles.
He visto una serie de artículos que sugieren que los diseños totalmente asíncronos son muy difíciles y tienden a tener dificultades imprevistas. Ciertamente puedo apreciar que si las entradas a cualquier tipo de elemento de retención no tienen una relación de tiempo especificada, es matemáticamente imposible garantizar absolutamente nada acerca de la salida, y que incluso llegar a un punto en el que los comportamientos extraños son tan poco probables que, por razones prácticas , que no ocurran es a menudo difícil sin un doble sincronizador.
Varios blogs también hablan sobre los males de los relojes cerrados, y sugieren que es mucho mejor enviar un reloj sin clasificación a un pestillo junto con una señal de "habilitación de cierre" que a la puerta del reloj. Los relojes cerrados no solo requieren gran cuidado en su implementación para evitar pulsos de reloj "runt", sino que, a menos que se tenga mucho cuidado para compensar los retrasos, los circuitos operados desde relojes separados deben considerarse en su propio dominio de reloj.
Lo que no he visto mucho es la noción de circuitos que utilizan subsistemas secuenciales que no son todos activados por el mismo reloj, pero que siempre serán estables dentro de una cierta duración de un borde de reloj. Si uno está tratando de implementar algo como un contador de eventos de N bits, tener muchos flip flops controlados por un reloj común requerirá, como mínimo, cargar y descargar las puertas de los transistores 2N con cada transición de reloj. Si en su lugar se utilizara una disposición de "ondulación" para las primeras etapas, se podría reducir sustancialmente la frecuencia de las señales que llegan a las etapas superiores, reduciendo así el consumo de corriente.
He visto algunos procesadores que cuentan con una etapa prescalar asíncrona en la entrada de un contador, pero ninguno de los presalarios que he visto permite que el procesador los lea. Además, casi todos los chips que he visto que tienen tales precolúmenes hacen que sea imposible escribir en el valor del temporizador sin borrar el preclar. Mi sospecha es que en muchos de estos dispositivos, el prescalar no marca el contador principal, sino que se utiliza para determinar, en cualquier ciclo dado del reloj del sistema, si el contador debe avanzar o no. Si bien algunos de estos sistemas proporcionan un modo en el que uno de los contadores puede configurarse en modo "totalmente asíncrono", lo que permite el funcionamiento en reposo, tiende a evitar ganar o perder cuentas si se necesita usar los temporizadores para otra cosa que no sea un completo el período se desborda y haga que cuenten de forma consistente al cambiar entre despertarse y dormir.
Parecería que algunos de estos problemas podrían aliviarse mediante el uso de un contador de código gris, y que la implementación de dicho contador podría facilitarse mediante el uso de un diseño "semi-sincrónico" como se describe anteriormente. Es posible diseñar un contador de código gris bidireccional de entrada en cuadratura bidireccional, relativamente compacto y rápido, que tolerará la metastabilidad en cada entrada siempre que la otra sea estable (durante el tiempo que una entrada es metaestable, una salida no estará definida; siempre que la entrada metaestable se estabilice antes de que la otra entrada tenga una transición, la salida se resolverá al estado adecuado). Las salidas no estarían sincronizadas con ningún reloj en particular, pero si las entradas cambian en un borde de reloj en particular, la relación con las salidas sería predecible. ¿Alguna vez alguien ha oído hablar de un circuito como este?