Circuito para habilitar el reloj (invertido) libre de fallas

Esta es una pregunta de seguimiento de https://electronics.stackexchange.com/a/95195/13354 , en la que preguntaba sobre una solución específica para el problema más general descrito aquí.

Me gustaría crear una función lógica que alterna con el reloj (invertido) cuando está habilitado y permanece bajo cuando está deshabilitado, así:

clk ena out
 0   0   0
 1   0   0
 0   1   1
 1   1   0

Además de eso, me gustaría que la outseñal no tuviera fallas, como se muestra en la siguiente forma de onda de ejemplo:

forma de onda deseada

enaComo se muestra en esta imagen, pueden ocurrir fallas potenciales de la entrada poco después de los clkbordes; sin embargo, la outforma de onda debe estar libre de fallos.

De acuerdo con esta respuesta a la pregunta antes mencionada , el circuito debería ser una puerta de reloj en lugar de un flip-flop de reinicio automático. Este es el esquema propuesto:

esquemático

simular este circuito : esquema creado con CircuitLab

Desafortunadamente, esto todavía causa fallas cuando enabaja, porque la Qsalida del flip-flop se retrasa con respecto a clk(tenga en cuenta que ignoré el retraso común entre clky su inversión, que creo que no contribuye al problema):

Forma de onda con puerta de reloj

Ahora mi pregunta: ¿Qué circuito debo elegir para tener la outseñal libre de fallas?

Respuestas (1)

Creo que, en este caso, debe retrasar la señal del reloj invertido, utilizando el número par de inversores entre la entrada CLK de REG1 y la entrada inferior de la puerta AND.

Tenga en cuenta que, incluso en este caso, puede tener problemas causados ​​por la metaestabilidad de REG1. Para reducir este riesgo, sugeriría agregar una etapa más de sincronización de la señal ena (sin embargo, por supuesto, cambiará ligeramente la funcionalidad, ya que ENA se retrasará).

esquemático

simular este circuito : esquema creado con CircuitLab

También puede probar otros circuitos que se muestran en el artículo vinculado en mi respuesta a su pregunta anterior, sin embargo, debe tener en cuenta que el último y más prometedor parece estar patentado :-(.

¡Gracias por la respuesta! ¿Podría explicar por qué podría haber un problema de metaestabilidad en REG1 si no hay REG2? Para aclarar, las fallas enasolo ocurren después de un clkborde (ascendente o descendente), por lo tanto, cualquier clkmuestreo de borde enadebe ser seguro.
Si enacambia su estado cerca del borde activo de la clkseñal (violando los requisitos de tiempo de configuración y tiempo de espera ), el flip-flop puede responder de una manera no estándar, debido a la metaestabilidad. Por ejemplo, su tiempo de propagación puede aumentar significativamente. La adición de otra etapa de sincronización (REG2) disminuye el riesgo de que la señal en la entrada D de REG1 infrinja los requisitos de tiempo de configuración y tiempo de espera (sin embargo, dicho riesgo aún existe).
Gracias por la explicación. Desafortunadamente, no puedo aceptar su respuesta tal como está porque no produciría el mismo tiempo que el que pedí. Si asumimos que los tiempos de configuración y espera enacon respecto a clksiempre se cumplen, creo que es seguro eliminar REG2, en cuyo caso su circuito exhibe el comportamiento que pedí, pero solo si la demora causada por NOT2 y NOT3 es lo suficientemente grande para "cubrir" los fallos, o me estoy perdiendo algo más?
En caso de metaestabilidad, siempre hay una compensación entre el retraso introducido por los biestables de sincronización adicionales y la confiabilidad del sistema. Tenga en cuenta que la metaestabilidad también puede causar una fluctuación de la señal gclk. Si acepta este riesgo, puede omitir REG2
Sé acerca de los problemas de metaestabilidad, lo que estoy tratando de decir es que creo que no se aplican aquí porque enacambia sincrónicamente con clk, es decir, después de cualquiera de clklos bordes. Por lo tanto, creo que tener REG2 solo introduce un retraso y no agrega nada valioso al comportamiento. Por supuesto, si enafuera asincrónico con clk, usaría tantas etapas de registros como sea posible para evitar la metaestabilidad.
Si enalos cambios son sincronizados clky los tiempos de configuración y espera son correctos, puede omitir REG2.