Cómo obtener 1 botón pulsando para dar la salida 1 - "activo" - marque según un reloj

6

Antecedentes: soy un ingeniero de software con poco conocimiento de los circuitos, todo de manera informal, que trata de construir una calculadora binaria de suma de 8 bits a partir de compuertas lógicas básicas.

Pregunta: ¿Existen circuitos conocidos para hacer que se presione un botón (después de realizar el desglose) solo activan una señal para exactamente un ciclo de reloj mientras se presiona? ¿Cómo se llaman para que pueda aprender más sobre ellos?

Contexto: Tengo los botones "1", "0", "+" y "borrar" en mi calculadora, pero cuando los presiono, solo quiero la salida de esta el circuito se mantendrá activo durante un ciclo de reloj único, pero completo (no puedo dejar que permanezca alto ya que el reloj puede oscilar miles de veces mientras mantengo el botón presionado, y cada tic se tratará como si se presionara otro botón ). Básicamente 1 pulsación = 1 marca "activa". Tenga en cuenta que esto es después de rebotar el botón.

Hasta ahora tengo este circuito, que parece estar funcionando en Logisim:

simular este circuito : esquema creado usando CircuitLab

Trate el interruptor como ya se ha anunciado y el LED a la derecha como "salida". ¿Es esta la manera correcta de abordar este problema? ¿O estoy reinventando completamente la rueda? Esto suena como un problema multivibrador monoestable, pero todos los ejemplos que he visto utilizan esos circuitos RC, y envían pulsos en lugar de señales altas en el tiempo con un reloj ...

    
pregunta 0x24a537r9

1 respuesta

7

Aquí hay una solución de dominio digital. No hay un nombre para un componente que se ajuste a la función que describe, pero puede usar un sincronizador junto con una máquina de estados finitos.

simular este circuito : esquema creado usando CircuitLab

Synchronizer

Primero, su dedo no está sincronizado con el reloj, por lo que se supone que el botón es una señal asíncrona. Si la entrada cambia cerca del reloj, podría violar la configuración o mantener los requisitos de tiempo de la DFF0. Esto puede hacer que la salida de DFF0 sea impredecible (metaestable), incluso un nivel no lógico. Un DFF que va a ser metaestable es como una moneda que cae de lado cuando lo volteas. Debería ser 0 o 1, pero en realidad, en casos raros, no lo es.

El problema no es que el DFF retenga un nuevo valor 1 ciclo temprano o tarde, el problema es que la salida puede fallar de un lado a otro antes de estabilizarse en un valor particular. Esto podría ser malo aguas abajo del diseño. En este caso, nuestro FSM puede generar una falla o un pulso de dos ciclos de reloj, por ejemplo. La probabilidad de que ocurra la metástrabilidad es generalmente bastante baja y depende de su DFF, la velocidad de reloj operativa, la tensión de alimentación, el ruido aleatorio y la hora exacta en que presiona el botón.

Este problema se denomina cruce de dominios de reloj (CDC) y requiere una técnica de sincronización. Un enfoque popular es sólo dos DFF como arriba. Esto agrega una latencia de dos ciclos de reloj a la señal de entrada, pero este retraso es trivial en su aplicación. El sincronizador no elimina el problema por completo, pero lo hace una posibilidad extremadamente baja. Los errores debidos a no dirigirse a un CDC son muy difíciles de depurar. Puede pasar 1000 pruebas y fallar la prueba 1001. Esto puede llevar a un seguimiento y depuración minuciosos para tratar de encontrar la fuente del error muy raro.

Si lo que está creando tiene una baja tolerancia a los errores, debe usar un sincronizador. Puede usar uno como el anterior, o usar uno con tres DFF para una probabilidad aún menor de falla. De lo contrario, si puede tolerar un error ocasional, puede salirse con solo dos DFF y una compuerta AND para todo su diseño.

El nivel de robustez en el diseño debe coincidir con su aplicación. Si está construyendo un circuito de misión crítica como un sistema de guía de cohetes, probablemente debería usar un sincronizador 3 DFF. Si está creando un producto de consumo con alta confiabilidad, vaya con el sincronizador 2 DFF. Si se trata de un juguete de comida feliz de McDonald's, solo use un solo DFF. Un buen ingeniero eléctrico debe conocer los requisitos de MTBF para el diseño, y calcular la probabilidad de falla permitida para el circuito del botón , la tasa real de fallos de las opciones del sincronizador, y elija en consecuencia.

Máquina de estados finitos

Lo que quieres para tu generador de impulsos es en realidad una máquina de estados finitos. Si usted es un principiante completo o un profesional experimentado, siempre se recomienda comenzar con un diagrama de estado.

Comenzamos en el estado A. Cuando la entrada cambia a 1, queremos que la salida, \ $ y [n] \ $, sea 1. Un ciclo de reloj más tarde, \ $ y [n] \ $ debería volver a 0, por lo que necesitamos cambiar el estado a B para recordar que no salga 1. Luego esperamos que \ $ a [n] \ $ sea 0 antes de que el estado regrese a A. Desde allí comenzamos desde el principio. Con la señal de entrada ahora sincronizada como \ $ a [n] \ $, podemos dibujar el diagrama según lo que queramos.

Desdeallí,deberíapoderpasardeldiagramadeestadoaunatabladeestadoyluegoauncircuitodeFSM.SolonecesitaunDFFensuFSMpararepresentarlosdosestados.Enelejemploanterior,elestadoAyelestadoBrepresentanQ=1yQ=0respectivamente,peropuedeobtenerunFSMalternativoigualmenteválidocambiandolosdosestados.SinoesobviocómollegaralcircuitodeFSM,sigaalgunas FSM simple tutoriales hasta que lo aprendas.

La salida del FSM anterior será \ $ a [n] \ cdot \ overline {a [n-1]} \ $. Esto significa que solo emite un pulso de 1 ciclo cuando hay una transición de 0 a 1 en la señal de entrada.

Una nota final es que si no puede tolerar los errores durante el inicio, deberá agregar un restablecimiento a sus tres DFF. De lo contrario, se garantiza que el diseño anterior se estabilizará en la salida correcta después de tres ciclos de reloj después del encendido.

    
respondido por el travisbartley

Lea otras preguntas en las etiquetas