Contadores de ondulación versus síncronos: pros, contras y consumo de energía

4

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?

    
pregunta supercat

1 respuesta

7

Wow, tu pregunta no está muy enfocada, y no es obvio lo que realmente estás pidiendo. Pero déjame intentarlo. Lo siento si no lo entendí bien.

Contador de ondulación versus contador síncrono normal: ¿Quién dice que las personas no usan contadores de ondulación? Las personas usan lo que tienen disponible que funciona mejor. En los FPGA, nadie usa un contador de rizado porque los bloques lógicos hacen un contador de sincronización mucho mejor que un rizo. Pero si está diseñando un chip personalizado, un contador de ondulación puede ser más ventajoso cuando se trata de consumo de energía y tamaño lógico. No me sorprendería que algunas personas usen contadores de ondas en sus ASIC. Los contadores de sincronización seguirían siendo mejores para la velocidad y la simplicidad de la sincronización.

Contador gris frente a contador binario: las personas usan contadores grises en ASIC y chips personalizados. En los FPGA, donde los contadores binarios son más rápidos, las personas siguen usando contadores grises cuando el valor de recuento tiene que pasar por los dominios de reloj (como en FIFO).

Relojes multifase: estos son ciertamente utilizados. Hay razones por las cuales los PLL en los FPGA a menudo pueden generar versiones de los relojes originales de 0, 90, 180 y 270 grados. Pero a medida que aumentan las frecuencias de reloj, el uso de múltiples relojes se hace más difícil debido a los sesgos del reloj y los problemas de distribución del reloj. No es imposible en altas frecuencias, pero simplemente no se hace tanto.

Sync vs. Async: Sync no solo es más fácil de simular, sino que es más fácil de diseñar y más fácil garantizar que funciona correctamente. Las herramientas de verificación y análisis de temporización son difíciles o imposibles de usar con circuitos asíncronos.

MCU Counter Circuit: ¿SABES que no hay MCU que lo hagan de esa manera? Si lo hiciera, ¿cómo podría decirlo? Tal vez los prescalers en el temporizador son contadores de ondulación. Quizás el temporizador en sí es un contador con codificación gris y leer / escribir los registros automáticamente lo convierte a / desde binario. Mi punto es este: los chicos que diseñan MCU de bajo consumo de energía (como el MSP430) hacen todos los trucos del libro para reducir el consumo de energía. Muchos de esos trucos, como el uso de contadores de ondulación y el código gris cuando sea apropiado, son completamente invisibles para personas como usted y como yo. Pueden, y probablemente lo estén, usando esos trucos más un par de cientos de otros trucos que aún no ha pensado .

Una cosa que no has mencionado es el uso de circuitos completamente asíncronos. Aquí es donde toda su conversación acerca de los relojes finalmente llega cuando se llega a su conclusión lógica. Ha habido compañías que han intentado construir CPU a gran escala que son completamente asíncronas, incluido un grupo que intentó llevar al mercado un ARM asíncrono. Los beneficios son increíbles: súper baja potencia, procesamiento más rápido y menos EMI entre ellos. Pero las desventajas son aún más sorprendentes. La principal es que la complejidad de diseñar este chip es enorme y no es económicamente viable en la actualidad. Un problema secundario es que la cantidad de transistores se duplica cuando se compara con un chip de sincronización equivalente. Aun así, hay CPU en el mercado hoy en día que utilizan lógica asíncrona en algunos de sus bloques, como la FPU, pero nadie la usa a gran escala.

    
respondido por el user3624

Lea otras preguntas en las etiquetas