La idea aquí es diseñar un circuito que vaya de un estado al siguiente (línea de valores Z_i) en un borde del reloj o posiblemente en el borde del reloj más la entrada habilitada.
Esto suele ser una máquina de Moore: todas las salidas solo dependen de sus variables de estado. Al construir una máquina Moore, debe decidir su representación interna y cómo descodificar su representación interna a sus valores de salida. Esto significa que tendrá que crear tanto a) la lógica de transición entre los estados como la b) la lógica de decodificación de salida.
También puede construir una forma especial de máquina Moore llamada máquina Medvedev. Es una máquina de Moore donde el estado interno y la salida coinciden, es decir, son lo mismo.
Comenzar con un contador binario puede ser útil si tiene el lujo de usar una tabla de consulta (LUT), donde proporciona una dirección en una parte de la memoria que genera tantos bits como sea necesario en paralelo. Para la codificación manual, puede que no sea el mejor punto de partida.
Para encontrar una codificación adecuada para su estado interno, normalmente verá los valores de salida y creará una forma inteligente de reducirlos. Encuentre bits duplicados (grupos de bits que son siempre los mismos por estado), encuentre simetrías, etc.
En su caso, una cosa que es inmediatamente obvia es la simetría en sus estados.
11111
00111
00101
10000
11011 <-- point of symmetry
00001
10100
11100
11111
Inmediatamente, esto significa que puede usar un bit en su representación interna para simplemente cambiar todas las salidas. Su patrón tiene una naturaleza circular, por lo que algo como un contador Johnson viene a la mente:
salida del estado
salida del estado
0000 11111
1000 00111
1100 00101
1110 10000
1111 11011
0111 00001
0011 10100
0001 11100
0000 11111
Observe que la transición del contador Johnson es muy simple, simplemente cambia cada bit a la derecha, tome el bit del estado más a la derecha, invierta, cambie al primer bit del estado: s2 '< = s3; s1 '< = s2; s0 '< = s1; s3 '< = no s0;
Realice los pedidos de bit de salida y bit de salida del conmutador de bits de Johnson más a la derecha:
state state output output
switched switched
0000 0000 11111 11111
1000 1000 00111 00111
1100 1100 00101 00101
1110 1110 10000 10000
1111 1111 11011 11011
0111 1110 10000 00001
0011 1100 00101 10100
0001 1000 00111 11100
0000 0000 11111 11111
Observe cómo la inversión reduce su espacio de estado:
state outputs
switched
0000 11111
1000 00111
1100 00101
1110 10000
1111 11011
Tendrá que hacer el cambio usted mismo usando la lógica de estilo de multiplexor q0' <= (s0 and q4) or (not s0 and q0)
etc. Lo mismo para las entradas de estado conmutadas a su lógica de salida: v0 <= (s0 and s3) or (not s0 and s0)
etc.
Ahora puedes usar los mapas de Karnaugh para simplificar tus expresiones. Luego conecte las ecuaciones del multiplexor en sus expresiones lógicas de salida y debería terminar.
Note como esta es una posibilidad. Podría usar un contador binario, podría usar estados aleatorios para comenzar, etc.
Por ejemplo, lógicamente, dado que ninguna de sus líneas son iguales, técnicamente solo necesita los bits ld (#states) para codificar la información. Esto tiene la ventaja de ahorrar un flip flop. La desventaja es que ahora tiene que diseñar la lógica de transición de estado y la lógica de decodificación de salida.