El borde lento del reloj causa problemas con el comportamiento del flip flop D

5

Estoytratandodeusarun D flip flop y un botón pulsador como un simple interruptor. Mi objetivo es este: cada vez que presiono el botón, la salida del FF cambiará de estado.

Puse un circuito en un simulador y funcionó bien. Implementé un circuito de rebote para el interruptor que funciona bien por su cuenta, y mi alcance muestra un aumento rápido y suave sin rebotes.

Básicamente, tengo el interruptor presionado y conectado a la entrada CLK. Cuando se presiona el botón, el reloj se pone alto, activando el FF en el borde ascendente de esta señal.

La salida ~ Q está conectada directamente a la entrada D. Cuando el FF es activado por el reloj, ~ Q toma el valor opuesto a D. Por lo tanto, el FF debe cambiar los valores en cada pulsación de botón. Debido a que el FF solo se activa por el flanco ascendente de la señal CLK, no tengo que preocuparme por el cambio de D más rápido de lo que puedo soltar el botón. Todo bien en teoría (y en mi simulador).

Así que compré un D FF y lo conecté a mi placa de pruebas, adjunté mi botón y mis pasivos, encendí un LED en la salida y ... está mal. Se activaría o desactivaría al presionar un botón, con una probabilidad algo igual.

Examiné la señal CLK con mi alcance y creo que encontré al culpable. A medida que el borde del reloj cae, alcanza un cierto voltaje y luego atraviesa una tonelada de pequeñas oscilaciones. Parece que estas oscilaciones se siguen registrando como "flancos ascendentes" en la señal CLK, lo que cambiaría rápidamente el valor de ~ Q (y, en consecuencia, D). Interpreto esto como la razón por la que no puedo predecir la salida de la configuración actual, porque no tengo idea de cuántas docenas de oscilaciones ocurren durante la caída del borde del reloj.

El examen de las líneas ~ Q / D muestra un comportamiento de oscilación similar cuando el CLK va a ser metaestable.

He intentado conectar condensadores en las líneas CLK, D y ~ Q en todo tipo de combinaciones para intentar suavizar el comportamiento. Nada ha funcionado. Parece que el estado metaestable está arruinando mi circuito, del cual he leído un poco y entiendo que es un problema bastante serio en la lógica digital.

¿Existen métodos probados y verdaderos para eliminar este comportamiento metastable? ¿O alguna sugerencia para bajar mi señal CLK lo suficientemente fuerte como para que no quiera oscilar?

Cualquier sugerencia es apreciada. Voy a seguir conectándome lejos.

    
pregunta Ryan Tuck

2 respuestas

7

Desgraciadamente, te has encontrado con un problema relativamente sutil con este flip-flop en particular. (Por cierto, esto no es metastabilidad; es un problema diferente). Está diseñado para funcionar a alta velocidad en una amplia gama de voltajes de suministro, y uno de los compromisos asumidos en su diseño es que tiene un requisito bastante estricto en la entrada del reloj. velocidad de transición.

Si mira la sección 9 de la hoja de datos, la tasa de transición de entrada se da como 10 ns / V máximo . Esto significa que debe hacer que el reloj suba o baje 5 voltios en no más de 50 ns para que el chip funcione correctamente. Con una constante de tiempo RC de 10 ms, tienes aproximadamente 6 órdenes de magnitud demasiado lentos.

    
respondido por el Dave Tweed
8

¿Es esto realmente metastabilidad? Preferiría llamarlo condición de carrera dentro de las células maestras y esclavas FF en o cerca del punto de conmutación FF.

El uso de un RC para limpiar el interruptor del chatter es bueno, pero ralentiza el \ $ \ dfrac {dV} {dt} \ $ del reloj, lo que significa que realiza una transición lenta a través del punto de cambio. Puede o no puede saber esto, pero puede usar puertas lógicas como amplificadores de alta ganancia si los desvía alrededor del punto de conmutación. Cualquier ruido o ondulación causará oscilaciones rápidas de la señal. "limpiar" la señal al filtrarla más solo exacerbará la situación.

¿Tu solución? ponga un disparador Schmidt después del RC para controlar la entrada del reloj.

¿Quieres probar mi hipótesis? coloque un inversor en lugar del FF, conecte su interruptor que no funciona y observe la salida del inversor.

    
respondido por el placeholder

Lea otras preguntas en las etiquetas