En las notas de circuitos secuencias se presenta como ejemplo la construcción de un circuito reconocedor de la secuencia "11011". De las dos alternativas, elegí la Alternativa 2 (es decir, la que no reconoce dos tiras "11011" consecutivas solapadas en el último 1), y al igual que en la clase 21 de OpenFING, decidí utilizar flips-flops JK. La tabla de verdad, a partir de la ecuación característica de dichos flip-flops, me quedó:
Estado | Entrada | Próximo estado | Salida | Entrada flip-flop 2 | Entrada flip-flop 1 | Entrada flip-flop 0 |
---|---|---|---|---|---|---|
q2q1q0 | e | q2q2q1 | s | J2K2 | J1K1 | J0K0 |
000 | 0 | 000 | 0 | 0X | 0X | 0X |
000 | 1 | 001 | 0 | 0X | 0X | 1X |
001 | 0 | 000 | 0 | 0X | 0X | X1 |
001 | 1 | 010 | 0 | 0X | 1X | X1 |
010 | 0 | 011 | 0 | 0X | X0 | 1X |
010 | 1 | 010 | 0 | 0X | X0 | 0X |
011 | 0 | 000 | 0 | 0X | X1 | X1 |
011 | 1 | 100 | 0 | 1X | X1 | X1 |
100 | 0 | 000 | 0 | X1 | 0X | 0X |
100 | 1 | 000 | 1 | X1 | 0X | 0X |
101 | 0 | XXX | X | XX | XX | XX |
101 | 1 | XXX | X | XX | XX | XX |
110 | 0 | XXX | X | XX | XX | XX |
110 | 1 | XXX | X | XX | XX | XX |
111 | 0 | XXX | X | XX | XX | XX |
111 | 1 | XXX | X | XX | XX | XX |
Después de hacer los diagramas de Karnaugh correspondientes, he llegado a que:
J2 = q1q0e, K2 =1
J1 = q2'q0e, K1 = q1q0
J0 = q2'q1'e + q1q0'e, K0 = 1
s = q2e
En base a estas expresiones, he dibujado el circuito:
Mi duda surge al probarlo en el editor de ondas con la cadena "110111111...", en el instante en que se lee el 1 en negrita:
A los 35ns, hay un flanco ascendente de la entrada de reloj, el circuito está posicionado en el estado 011 (cuya semántica es "Vino 110") y la entrada es 1. En estas situación, lo esperado es que se mueva al estado 100 (cuya semántica es "Vino 1101"), y la salida sea 0. Pero la salida es 1. Creo que el problema está en que s está definido como el AND de q2 y la entrada e, ¿pero qué valor de q2? Como el nuevo valor de q2 es 1 (pues el nuevo estado es 100), parece que toma este valor en lugar del que tenía antes, y entonces el AND de s vale 1. ¿Pero cómo corregir este problema? ¿En qué me equivoqué?
Otra duda que me surge es sobre la utilidad de la señal de reset. En este caso, aunque tenga el reset en 0, el MAX+plus II arranca en el estado inicial. ¿En el archivo .scf de prueba debía haber puesto al comienzo reset en 1 y después que siempre valga 0?
Agradecería mucho si alguien me aclarara estas dudas. Gracias de antemano.
Saludos.
PD. Adjunto el .gdf por si acaso (había agregado también el .scf pero no me permitió la plataforma agregar más de un archivo adjunto).