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

ingrese la descripción de la imagen aquí

Estoy tratando de usar un flip flop D 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.

Armé un circuito en un simulador y funcionó bien. Implementé un circuito antirrebote para el interruptor que funciona muy bien por sí solo, y mi visor muestra un aumento rápido y suave sin rebotes.

Esencialmente, tengo el interruptor bajado y conectado a la entrada CLK. Cuando se presiona el botón, el reloj se eleva, activando el FF en el borde ascendente de esta señal.

La salida ~Q se conecta directamente a la entrada D. Cuando el FF es activado por el reloj, ~Q toma el valor opuesto de D. Por lo tanto, el FF debe cambiar de valor cada vez que se presiona un botón. Debido a que el FF solo se activa con el flanco ascendente de la señal CLK, no tengo que preocuparme de que D cambie 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 protoboard, coloqué mi botón y mis pasivos, encendí un LED en la salida y... no funciona bien. Se encendería o apagarí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 pasa por una tonelada de pequeñas oscilaciones. Parece que estas oscilaciones siguen registrándose 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 el borde descendente del reloj.

El examen de las líneas ~Q / D muestra un comportamiento oscilante similar cuando el CLK se vuelve metaestable.

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

¿Hay algún método probado y verdadero para eliminar este comportamiento metaestable? ¿O alguna sugerencia para bajar mi señal CLK lo suficientemente fuerte como para que no quiera oscilar?

Cualquier sugerencia es apreciada. Seguiré desconectando.

¿Qué tecnología de flip-flop estás usando? ¿TTL o CMOS?
Pruebe 100 ohmios en serie con el interruptor y asegúrese de tener tapas de desacoplamiento de energía en el dispositivo lógico. He visto interruptores en los que las tapas cortas hacen rebotar circuitos lógicos por todas partes, especialmente si está alimentando el FF cerca del extremo positivo de la tapa. ¡Mi suposición es que no se trata de metaestabilidad sino de una mala disposición/ubicación de las conexiones!
Dave, me vinculé a la hoja de datos de arriba. Es CMOS.
Andy, gracias por la entrada, pero cualquier capacitor que agregue a la placa solo exacerba el problema. Incluso colocar la resistencia entre el interruptor y el pin del reloj no ayuda.

Respuestas (2)

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

Si observa la sección 9 de la hoja de datos, la tasa de transición de entrada es de 10 ns/V como 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, usted es aproximadamente 6 órdenes de magnitud demasiado lento.

Creo que esto es correcto. Puedo hacer que el borde CLK se eleve lo suficientemente rápido, lo que explica por qué eso no me causa problemas. Pero el flanco descendente realmente está dictado por la cantidad de tiempo que tarda la tapa en descargarse a través de la resistencia desplegable, que es mucho más larga que los 50 ns asignados. Aquí es donde comienza el problema. ¡Interesante!
Creo que lo que sucede es que el FF maestro pasará la señal siempre que el nivel lógico esté muy por debajo de VDD (en lugar de esperar a que se acerque a VSS), y el FF esclavo pasará cuando el nivel esté por encima de VSS (en lugar de esperar para que se acerque a VDD). Esto le permite capturar y emitir la señal antes que si tuviera que esperar transiciones de reloj completas, pero significa que el tiempo que el reloj pasa en la zona de doble paso debe ser menor que el tiempo requerido para que la señal se propague a través de ambos pestillos.
El problema anterior solo tiene un flip-flop. No estoy seguro de cómo su comentario se aplica aquí.
Eche otro vistazo a la Figura 3 en la hoja de datos. Cada uno de los dos bucles de retroalimentación representa un flip-flop o pestillo, y están conectados entre sí por el TG en el medio. Individualmente, cada uno es activado por un nivel particular de la señal del reloj. Este arreglo se llama maestro-esclavo y se usa comúnmente para crear flip-flops activados por borde.

¿Es esto verdaderamente metaestabilidad? Preferiría llamarlo una condición de carrera dentro de las celdas maestra y esclava de FF en o cerca del punto de conmutación de FF.

Usar un control remoto para limpiar la vibración del interruptor es bueno, pero ralentiza el d V d t del reloj, lo que significa que pasa lentamente por el punto de cambio. Puede o no saber esto, pero puede usar puertas lógicas como amplificadores de alta ganancia si las polariza alrededor del punto de conmutación. Cualquier ruido u ondulación provocará oscilaciones rápidas de la señal aguas abajo. "limpiar" la señal filtrándola más solo exacerbará la situación.

¿Tu solución? coloque un gatillo 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 sin fallas y observe la salida del inversor.

Voto por esta respuesta porque tiene una solución útil: agregue una puerta de activación Schmidt. También de acuerdo: esto no es metaestabilidad.
@RolfOstergaard: Es posible que el "problema" no sea la metaestabilidad, pero no me sorprendería si el pestillo a veces también exhibe un comportamiento metaestable, ya que la salida oscilante retroalimentada a la entrada claramente no cumpliría ningún tipo de requisitos de configuración/retención.
El término real utilizado en la literatura de diseño de FF es "carrera". Simplemente podría verlo como una mayor susceptibilidad a la metaestabilidad porque el dV/dt es tan bajo que acaba de abrir su ventana. Es una manifestación de la propagación de la señal dentro de la FF, independientemente de cómo quieras llamarlo.