¿Por qué no es deseable modificar (agregando puertas adicionales) las entradas de reloj?

Estoy tomando un curso de electrónica digital en la universidad. Soy estudiante de segundo año de ingeniería mecánica, pero sentí que era importante entender algo de electrónica. El disertante en una de las diapositivas, cuando hablaba de hacer un contador síncrono binario con chanclas en T, dijo

No es deseable modificar las entradas del reloj.

No entiendo por qué este es el caso. ¡Lo he pensado un poco, y solo puedo pensar en el retraso de propagación que afecta la frecuencia! Pero seguramente para nMOS y pMOS es <unos pocos nanosegundos. Si solo tiene un reloj de unos pocos MHz, ni siquiera vale la pena pensar en la diferencia.

¿Alguien puede explicar por qué esto no es deseable / corregirme si me equivoco?

"modificar"? Modificar como? ¿Por quién?
Agregando puertas adicionales en la ruta de la entrada de reloj/habilitación. @EugeneSh.
Oh, es mejor que lo agregues a la pregunta para aclarar.
Si el retraso de prop es <1% del ciclo del reloj, no se preocupe, pero si es mayor cuando se usan retrasos de tiempo, el borde del reloj debe ser predecible y estable para evitar errores de RAM cuando se ejecuta en velocidades de GHz. La DRAM en la BIOS de la CPU utiliza los estados de espera del reloj central para cronometrar todos los WR, RD, agregar retrasos en los recuentos de RAM por número de relojes centrales para obtener una velocidad de reloj óptima que coincida con el retraso prop en la RAM. Probablemente hayas visto esto antes... con 4 o más números consecutivos con guiones.
@TonyM Por supuesto, está claro después de la aclaración que se agregó después de mi comentario. Pero, ¿qué agrega su comentario a la pregunta?
@EugeneSh., estuvo bien sin aclaración. Le pido que escriba comentarios claros para el OP, si le parece bien. No puedo quejarme de que una pregunta es críptica con un comentario críptico contundente. Parece justo. Los PO suelen ser nuevos.

Respuestas (5)

Por "modificar", estoy bastante seguro de que se refería a algún tipo de puerta controlada por retroalimentación de las salidas del contador. El problema de hacer esto es que debe tener mucho, mucho cuidado de que la señal de su puerta sea limpia. Si, por ejemplo, está apagando el reloj cuando cambian dos salidas, es posible que las dos no cambien exactamente al mismo tiempo. Esto produce lo que se llama un error de sesgo (las dos señales están "desviadas" entre sí), y esto puede producir un flanco falso en el reloj. A su vez, este borde falso producirá una transición no deseada en los flip-flops y puede hacer que el circuito se mueva a un estado no deseado. Este tipo de condiciones de error pueden ser muy difíciles de detectar y pueden depender de cosas como la temperatura del circuito. Así que es una muy mala idea incluso intentarlo, a menos que sepas lo que estás haciendo.

Probablemente haya más razones, pero enumeraré tres que me vienen a la mente:

Como indicó, el tiempo de propagación de las puertas afectará la ubicación de los bordes del reloj y puede reducir el margen de tiempo del circuito. Esto puede no importar con relojes más lentos como los pocos MHz que mencionaste, pero importará si se ejecuta en un sistema más rápido.

En segundo lugar, dependiendo de cuáles sean las otras entradas a las puertas, las salidas de la puerta pueden terminar siendo ciclos de reloj parciales, generando flancos que están muy alejados de los flancos de reloj esperados (o pulsos cortos o fallas) que pueden registrar datos incorrectos en las chanclas.

Y tercero, si el diseño del circuito se usa en un circuito integrado de producción, el diseño puede modificarse para que pueda probarse en busca de defectos mediante la prueba de exploración. En este modo, los relojes de todos los flip-flops del chip deben estar unidos. La sincronización del reloj puede ser problemática en este caso.

Los circuitos que están diseñados en torno a un reloj síncrono a menudo asumen que todos los elementos de almacenamiento activados por el borde, como los flip-flops, se sincronizan simultáneamente. La razón de esto es que inmediatamente después de la sincronización, el estado de todos los flip-flops cambia simultáneamente, y sus nuevos estados se propagan a través del cableado en un par de nanosegundos en preparación para el siguiente cambio de reloj/estado. Si el reloj llega a un flip-flop lo suficientemente tarde, sus datos de entrada pueden cambiar antes de que tenga la oportunidad de procesarlos. Por lo tanto, un diseño destinado a ejecutarse en un solo reloj sincronizado fallará porque algunos dispositivos reciben lo que es esencialmente una señal de reloj diferente, derivada del reloj original, pero una versión retrasada.

Si modifica la ruta del reloj a algunos de los flip-flops usando algún tipo de lógica adicional, podría retrasarlo lo suficiente como para causar este problema.

Al modificar los relojes, quiere decir activarlos de alguna manera para producir un nuevo reloj proveniente de una puerta lógica.

A menudo, es tentador hacerlo en un FPGA/CPLD: desactivar relojes para control o para obtener poca potencia, ejecutar un contador y tomar la salida de un flip-flop como un nuevo reloj CLKIN dividido por n. Un ejemplo podría ser hacer un controlador de comunicaciones (I2C, UART, SPI) al producir un reloj cerca de la frecuencia de bits.

El problema es que produce un nuevo reloj (llámelo CLKG) que cambia justo después de que lo hace el CLKIN original.

Esto se muestra a continuación, con la salida de DFF1 cambiando justo cuando DFF2 está marcando su nivel. Esto puede hacer que DFF2 se vuelva metaestable o que tome el nivel incorrecto porque el voltaje de salida de DFF1 no ha hecho la transición lo suficiente.

esquemático

simular este circuito : esquema creado con CircuitLab

Esta podría ser la situación en su circuito controlador de comunicaciones, pasando bytes de datos desde la lógica CLKIN rápida al registro de desplazamiento CLKG para la transmisión.

Es posible diseñar circuitos de reloj controlados perfectamente bien, circuitos que eliminen estos problemas o los eludan. Los verá de forma rutinaria en los ASIC. Pero el circuito es más complicado de diseñar y mantener por otros. El esquema de reloj más simple y confiable es un reloj lógico único que va desde un PLL o pin de entrada a todos los relojes flip-flop, el software de síntesis requerirá el menor esfuerzo de su parte para producir un circuito confiable. Use más de un dominio de reloj con moderación y porque es absolutamente necesario.

Primero, parece subestimar la importancia de los retrasos en la propagación. Unos pocos nanosegundos de sesgo de reloj es mucho , incluso en bajas frecuencias. Tener su pulso de reloj adelantado por 5-10 ns no es tan malo, porque estará violando sus tiempos de configuración , y la reducción de su circuito, por ejemplo, de 10 MHz a 9 MHz contrarrestará eso. Tener su reloj retrasado es mucho peor, ya que estará violando los tiempos de espera , y simplemente ejecutar su diseño a una velocidad de reloj más lenta no ayudará. Por supuesto, si el pulso del reloj llega antes para un disparador, el reloj del siguiente disparador parecerá estar retrasado, por lo que es casi seguro que ocurra el peor de los casos.

En segundo lugar (y más importante), los circuitos combinatorios son propensos a peligros o fallas , como se describe, por ejemplo, aquí :

ingrese la descripción de la imagen aquí

Los peligros producirán flancos ascendentes/descendentes adicionales en su señal antes de que alcance un valor estable. Eso no importa demasiado para las señales de datos que se muestrean al final del ciclo del reloj cuando son estables. Sin embargo, en un circuito de reloj, tales fallos darán como resultado un comportamiento indefinido porque producirán flancos de reloj adicionales y violarán los requisitos de sincronización de todos sus disparadores.