Carrera lógica del decodificador de línea

Tengo un problema con este circuito lógico que he diseñado:ver diagrama

El comportamiento previsto es : cuando el reloj llega alto, el estado del contador se bloquea y se decodifica

Comportamiento esperado

Lo que sucede es : cuando el reloj está alto, el estado anterior del contador (si se ha incrementado en el último ciclo, por ejemplo) está presente muy brevemente en la entrada del decodificador de línea antes de que los pestillos cambien a los datos 'nuevos' y la salida del decodificador entonces se vuelve correcto

Comportamiento real

Esto significa que el modo 'buscar' se vuelve a habilitar durante unos ns antes de que el decodificador cambie a 'cargar'. ¡Esto hace que el contador se incremente nuevamente, entre otros problemas!

He intentado agregar una cadena de puertas NOT en la habilitación del decodificador de línea, pero no parece ayudar. Además, intenté usar un condensador + resistencia para agregar un retraso, pero esto solo ayuda cuando el retraso creado es de unos pocos microsegundos, demasiado largo.

En resumen, necesito asegurarme de que los datos sean válidos en la entrada del decodificador antes de habilitarlo, para evitar la activación falsa de sus salidas.

NOTA: La entrada de incremento la deciden otros circuitos activados por el decodificador; está en fase con el reloj, pero no es necesariamente el mismo.

El decodificador de línea tl;dr está habilitado demasiado pronto, las cadenas de puertas para retrasar la señal no ayudan

¿La salida de búsqueda está cronometrando el contador en IC3? El uso de la salida de un decodificador será una fuente potencial de problemas sin importar lo que haga aquí. Los decodificadores siempre son una fuente potencial de fallas cuando se pasa de una entrada a la siguiente.
¿Por qué necesita Y el reloj con sus tres salidas al final? Una buena regla que puede seguir es que las señales de reloj solo deben alimentar entradas de componentes sensibles al borde. De lo contrario, es posible que tenga algunos problemas técnicos. Además, segunda regla: debe considerar que todas sus señales solo son válidas en el flanco ascendente del reloj. En cualquier otro momento, pueden estar en estados no válidos debido a retrasos en la propagación.
Entonces, ¿qué hace la entrada arriba?
El deber de su reloj es pequeño/igual al tiempo de retraso....
Su circuito menciona una "tecla" como entrada, lo que podría implicar que se presiona un botón. Si este es realmente el caso, podría tener un problema de rebote de contactos. He tenido problemas similares con las entradas a tales circuitos lógicos que involucraban interruptores de botón, donde el rebote de contacto era un problema.
Disculpe la pregunta tonta, pero ¿por qué no usa un contador Johnson de 3 bits? (con el reloj bloqueado para que cuente solo cuando realmente desee contar).

Respuestas (3)

En general, debe tener cuidado al mezclar diferentes tecnologías de circuitos integrados lógicos :
la salida de una puerta LS (p. ej., IC2a, 74LS08) no se puede usar directamente para una entrada de una puerta CMOS (p. ej., IC3, 4029).

En su caso, esto puede causar que el botón de reinicio se detecte demasiado tarde.

Al menos, debe agregar una resistencia pull-up (porque la salida alta de LS no es lo suficientemente alta para la entrada alta de CMOS) o, mejor, simplemente use puertas AND CMOS (4081) para IC2.

Por cierto: puede reemplazar todo este circuito por un IC 4017 (Contador Johnson) con O3 en cortocircuito para reiniciar y 3 puertas AND:

esquemático

simular este circuito : esquema creado con CircuitLab

Es bastante raro que las entradas lleguen en fase con el reloj. El diseño habitual es que las entradas se muestreen en el flanco ascendente del reloj. Ves esto en el 7474 que usas; se dispara en el flanco ascendente. Consulte, por ejemplo, https://commons.m.wikimedia.org/wiki/File:SPI_timing_diagram2.svg .

Si permite que las entradas entren al mismo tiempo que el reloj, tendrá peligros. Por lo menos, ¡está la carrera de la entrada contra el reloj! A medida que intenta diseñar en torno a eso, generalmente introduce peligros en otras etapas, como ha visto aquí.

Esa es una de las razones por las que a menudo ve diagramas de tiempo que muestran los tiempos de subida y bajada (como en el ejemplo del enlace anterior). Lo hace más claro cuando sus tiempos están introduciendo peligros.

Es posible que desee dibujar un mapa de Karnaugh para su circuito para identificar peligros y asegurarse de que está bien.

Creo que esto se debe al retraso del bloqueo en 4514. Podría considerar eliminar los flip/flops 7474 o, si realmente los necesita, reemplazar 4514 con pocas puertas nand, después de todo, todo lo que necesita son tres salidas decodificadas.