Conmutación de reloj usando puertas de reloj

Estoy trabajando en un diseño ASIC y necesito usar diferentes fuentes de reloj para un bloque digital en diferentes modos operativos.

¿Puedo usar de forma segura la activación del reloj en combinación con una puerta OR para generar el reloj como en el siguiente diagrama?

Esquemático

Si eso está bien, ¿qué restricciones necesitan las señales clk _enable (es decir, sin fallas, sin superposición, temporización con relación al clk respectivo , ...)?

Tenga en cuenta que las puertas del reloj utilizan un pestillo D que es transparente cuando el reloj respectivo es BAJO.

Respuestas (3)

La sofisticación de su compuerta de reloj depende de cuánto responderá la lógica descendente a un pulso de reloj defectuoso.

Por ejemplo: si la lógica descendente siempre se restablece después de que los relojes cambian, entonces puede salirse con la suya con casi cualquier cosa para su lógica de compuerta de reloj.

Sin embargo, si espera que la lógica descendente continúe funcionando correctamente cuando se cambian los relojes (sin un reinicio), entonces la lógica de activación debe estar diseñada para que nunca tenga pulsos de reloj que sean demasiado cortos y violen sus restricciones de tiempo.

El peligro de los pulsos de reloj cortos que violan las restricciones de tiempo es que podría poner una máquina de estado en un estado no válido del que no puede recuperarse. Esto es realmente fácil de hacer, así que no dé por sentado que no le sucederá a usted.

Diseñar una buena lógica de activación/conmutación de reloj que no produzca pulsos de reloj cortos es difícil y, por lo general, requiere un conocimiento profundo de su proceso ASIC. En lugar de inventar el suyo propio, le sugiero que hable con su casa ASIC o con quien haya obtenido sus bibliotecas ASIC. Las probabilidades de que ya tengan el circuito que necesitas son muy altas.

Actualizar:

El OP indicó que las puertas del reloj en los esquemas son de la biblioteca ASIC. Si esas puertas están diseñadas para no fallar (es decir, nunca producen un pulso demasiado corto), entonces el único truco es dejar suficiente tiempo entre deshabilitar un reloj y habilitar el siguiente. De esta manera, puede cambiar limpiamente entre relojes y no tener fallas en los relojes.

Diseñar la lógica para hacer esto (mantener suficiente tiempo entre deshabilitar/habilitar) sigue siendo difícil, pero no muy difícil. En una escala del 1 al 10, esto sería un 6. Por otro lado, diseñar una puerta de reloj sin fallas sería un 10 o incluso un 12.

La puerta del reloj, como se muestra en el esquema, es exactamente eso: una celda que obtuve de la biblioteca ASIC. Sin embargo , esa celda solo activa un reloj, lo que necesito es algo para cambiar un par de relojes. Por lo tanto, mi pregunta es si esa solución de puerta OR está bien y qué restricciones impone a las señales de habilitación.
Escuché que el problema tiene muchos nombres diferentes: metaestabilidad, límites de dominios de reloj, fallas, plesiosincronía. Creo que nunca se resolvió. Creo que la única solución con integridad garantizada para cruzar dominios de reloj es la votación. Diga chips de comunicación en serie o ethernet.
@AllInOneBoat Si se garantiza que las puertas del reloj no fallarán en la salida, entonces podría hacer exactamente lo que dibujó SI permite suficiente tiempo entre apagar un reloj antes de habilitar el siguiente.
@RocketSurgeon: si el cambio se realiza correctamente, no debería haber problemas de metaestabilidad ya que los relojes se controlan de forma sincrónica. Usando la celda de activación del reloj que se muestra en el esquema, no hay fallas en gated_clk . La pregunta sigue siendo si la combinación de varios de ellos usando una puerta OR a) funcionaría sin fallas y b) qué restricciones se requieren para las señales de habilitación.
De acuerdo al 99%. El 0,99% restante del problema son las condiciones de carrera (ese es otro nombre más para el "mismo" problema)
@RocketSurgeon: Parece que David acaba de responder la pregunta; según tengo entendido, para eliminar el 0,99% del que está hablando, uno debe asegurarse de que haya suficiente tiempo en el que todas las señales de habilitación sean bajas antes de habilitar el siguiente clk. David, ¿podrías confirmar esto (tal vez incorporarlo a la respuesta para que pueda aceptarlo )?
@AllInOneBoat Sí, esto es de lo que estaba hablando. Agregué a mi respuesta.

EEtimes tiene un artículo que habla sobre el circuito de conmutación de reloj sin fallas. Basado en este artículo, Young Rhoney también tiene un buen blog, cambio de reloj 2x1 y Nx1 .

Como se explicó, la idea clave para cambiar el reloj sin fallas es apagar un reloj antes de encender el otro. El blog también proporciona un circuito para la conmutación del reloj Nx1.

Además de los comentarios de David: existen riesgos más allá de los pulsos de reloj cortos. A menos que pueda emitir una garantía inquebrantable en cuanto a la validez de las líneas de habilitación del reloj, es posible que desee considerar controlar las habilitaciones del reloj mediante la salida de un decodificador, para evitar (por ejemplo) superponer varias señales de reloj a través del OR. Si puede garantizar que tienen la misma frecuencia y fase, no hay problema, pero probablemente no tenga sentido tener varios relojes en primer lugar.

Conducir las habilitaciones del reloj desde un decodificador podría hacer que tengan (más) fallas... ¿no sería eso un problema en sí mismo?