¿Cómo diseño una máquina de estado síncrona con reloj para una cerradura de combinación?

Necesito ayuda para completar una tarea, estoy atascado en bastantes cosas. Como soy muy nuevo en este tema sobre máquinas finitas.

Intenté el diagrama de estado, la tabla de estado, la tabla de transición, los valores de K-map y los k-maps (Karnaugh - mapa) en sí mismos. Sin embargo, mucho está incompleto, porque no sé cómo continuar.

Cualquier sugerencia o ayuda es apreciada; No estoy pidiendo respuestas, solo orientación, lo he intentado durante toda una semana pero aún no he podido completar esto.

Puedes leer mi tarea abajo. Y en mis dibujos hay preguntas resaltadas en amarillo, que muestran dónde estoy atascado o dónde tengo más problemas para encontrar una solución.

Tarea: Diseñe una máquina de estado síncrona con reloj para una cerradura de combinación con dos entradas (X e Y) y una salida (Z).

La entrada 'X' se utiliza para inicializar la entrada de secuencia. La entrada 'Y' se usa para ingresar la secuencia binaria para desbloquear. La salida 'Z' se encenderá si y solo si la secuencia binaria se ingresa en el orden correcto después de la inicialización y debe permanecer encendida mientras la entrada X permanezca alta.

Este candado de combinación funciona de la siguiente manera. La entrada 'X' debe haber cambiado de baja a alta en el período de reloj anterior y debe permanecer alta después (Inicialización). La entrada del primer dígito binario debe realizarse antes de que comience el siguiente ciclo de reloj y la entrada de los dígitos restantes se realiza en los relojes subsiguientes.

Si se ingresa una secuencia incorrecta, será necesario reiniciar para comenzar a ingresar la secuencia correcta.ingrese la descripción de la imagen aquí

Mis tablas y dibujos para esta tarea:

Diagrama de estado

Tabla de estado y tabla de transición

Valores de mapa K

K-mapas

¡ACTUALIZAR!

Diagrama de estadotabla de estado

Tabla de estadoDiagrama de estado

Antes de continuar, tenga en cuenta que el diagrama de tiempo muestra el código que se ingresa primero con LSB en la entrada Y. Su diagrama de estado lo está procesando MSB primero.
+1 para una gran pregunta. Este es un excelente ejemplo de cómo se deben hacer las preguntas de la tarea.
La parte 'divertida' de escribir la tabla de decisiones es que tiene una tabla de transición escasa; ¡la mayoría de los bordes posibles en el gráfico son indiferentes! Felizmente he lanzado dicha síntesis en compiladores automatizados para todo mi trabajo reciente de máquina de estado. . .
@user2943160: Sí, pero eso pasa por alto el objetivo de la pregunta, que es desarrollar una comprensión detallada de lo que la herramienta de síntesis realmente está haciendo por usted.
Creo que el estado de inicialización no es deseado y es incorrecto. Una vez que muestreó 'x' como alta, los siguientes estados muestrearán inmediatamente la secuencia 'y' correcta (o no). Debido al estado de inicialización, falta el primer valor 'y'.
@ user2943160 Como en 'no me importa', ¿te refieres a 'x'? Eso es bueno entonces y todavía estoy un poco confundido sobre cómo completar mi tabla de transición, ¿convertir mis estados a binario sería lo correcto? Como 0000 para bloqueo, 0001 para inactivo, etc.
@DaveTweed Ya veo, ¿entonces debería mantener mi código binario en orden inverso (LSB primero) al crear el diagrama de estado? Gracias por el consejo.
@VladimirCravero, estás en lo cierto, excelente publicación de OP, también he hecho +1, para que te animes.
@ClaudioAviChami Estoy confundido sobre cuál es el flujo de la pregunta cuando se trata de "x tiene que ir de menor a mayor en su período de reloj anterior. Y cómo se debe ingresar el primer dígito binario antes de que comience el próximo ciclo de reloj". Entonces, ¿debería mantenerme inactivo y pasar a la siguiente instrucción desbloquear 1 con x = 0, luego desbloquear 1 va a desbloquear 2 con xy = 11?
Primeros estados: IDLE -> (x=1) -> UNL1 -> (xy = 11) -> UNL2 -> (xy = 10) ... etc.
Este problema es un caso evidente en el que tiene mucho más sentido pensar en el problema con una ruta de datos en mente. En abstracto, requiere más o menos exactamente un registro de desplazamiento y un comparador como su ruta de datos. Espolvoree un poco de lógica de pegamento y señales de control y luego administre esas señales de control con una máquina de estado. Pero entiendo que está destinado a ser un ejercicio instructivo, y dicho hardware debería "caerse" de la síntesis mediante la aplicación rigurosa de metodologías de diseño de circuitos secuenciales convencionales. Tal vez esté destinado a ilustrar un caso en el que el diseño de abajo hacia arriba es "el camino difícil".
@ClaudioAviChami Además (al menos para completar) su diagrama de estado probablemente necesite una forma de permanecer en el estado Desbloqueado indefinidamente si X permanece alto, ¿verdad? De hecho, ¿tiene todas las combinaciones de entrada posibles cubiertas como bordes salientes de cada estado en su diagrama (creo que posiblemente no)? Es decir, técnicamente, cada estado debería tener XY=00,01,10,11 contabilizado en un borde saliente (incluso si ese borde vuelve al mismo estado).
@vicatcu ¿Podría explicar esto? Mi comprensión del inglés es deficiente y me confunde mucho con el diagrama de estado "La entrada 'X' debe haber cambiado de menor a mayor en el período de reloj anterior y debe permanecer alta después (Inicialización). La entrada del primer dígito binario debe realizarse antes comienza el siguiente ciclo de reloj y la entrada de los dígitos restantes se realiza en los relojes subsiguientes".
@ClaudioAviChami Gracias. Solo me preguntaba dónde x será igual a cero. ya que x necesita ser 0 primero y luego 1.
@Omuse, la forma en que leo esa declaración es que la entrada Y debe ignorarse hasta que haya una transición 0-> 1 en la entrada X. Además, si X tiene una transición 1->0 antes de encontrar una coincidencia, se aborta la búsqueda de una coincidencia.
@vicatcu Gracias, ahora tiene sentido. Actualicé mi diagrama de estado y la tabla de estado de arriba.

Respuestas (1)

ingrese la descripción de la imagen aquíAquí hay una versión parcial de la tabla que necesita hacer. Hay 64 filas en total. Usted determina el Q3*(Q3+) y los demás pensando cuál es el siguiente estado si estoy en el estado actual y miro X, Y.

Tome como ejemplo la línea 2: Estado actual 0000 (RESET) y X=1, Y=0, esto significa que el siguiente estado es 0001 (DESBLOQUEO). También Z es 0 cuando estoy en el estado 0000.

Luego obtiene la lógica de salida para Q0* tomando todos los 1 en su columna Q0*. Por ejemplo, por ahora tengo (\ significa "no")

Q0*= \Q3\Q2\Q1\Q0X\Y + \Q3\Q2\Q1\Q0XY + \Q3\Q2\Q1Q0\X\Y + etc...

Entonces lo más probable es que puedas simplificar esta expresión. Realmente no podrá hacer tablas de Karnaugh porque hay 4 bits de estado y 2 entradas = 6 dimensiones. Le sugiero que use el método canónico para la lógica como expliqué antes.

Puede consultar aquí para obtener más información: https://en.wikipedia.org/wiki/Canonical_normal_form