FSM para un proceso predesignado (Cómo dibujar el diagrama de estado)

1

permítame comenzar diciendo que esto implica algunos problemas con la tarea, así que si pudiera ayudarme un poco, se lo agradecería enormemente.

He estado trabajando un poco con máquinas de estados finitos en mi curso y siempre he tratado con diseños que requerían la participación del usuario. Recientemente, hemos tratado algunos diseños que incluían saltos predeterminados de un estado a otro, como en un orden de luces que deben encenderse.

Por ejemplo, un escenario de luz de frenado donde, después de una cierta cantidad de ciclos de reloj, el color verde pasa a ser amarillo, después de que más ciclos de reloj predefinidos pasen a rojo, después de más ciclos de reloj regresen a verde. Este ciclo se repite para siempre.

Otro ejemplo incluye un registro de desplazamiento con salidas conectadas a 8 leds, al encender el led 1, al siguiente ciclo de reloj led 2 y así sucesivamente hasta llegar al último led (led 8), momento en el que se enciende el séptimo led y el la secuencia se invierte hasta alcanzar el primer led y la secuencia vuelve a fluir, y así sucesivamente. El ciclo se repite para siempre.

En el pasado, no tuve problemas para diseñar máquinas de estados finitos cuando se basaban en las aportaciones de los usuarios, pero me siento un poco perdido ahora que los ciclos se repetirán para siempre en un ciclo conocido. Cualquier información o recurso sería muy apreciado.

    
pregunta StevenSeagal

1 respuesta

1

Las máquinas de estado que pasan por un bucle de estados se implementan exactamente de la misma manera que las máquinas de estado que tienen estados inactivos. No hay ninguna diferencia en absoluto.

La decisión sobre qué estado pasar a la siguiente (incluida la opción de permanecer en el estado actual) es exactamente la misma; en su ejemplo de semáforo, es tan simple (en Verilog algo incompleto) como:

case (state)
 STATE_RED:   if (cnt > RED_CNT) nextstate = STATE_GREEN; else nextstate = STATE_RED;
 STATE_GREEN: if (cnt > GREEN_CNT) nextstate = STATE_YELLOW; else nextstate = STATE_GREEN;
 STATE_YELLOW: if (cnt > YELLOW_CNT) nextstate = STATE_RED; else nextstate = STATE_YELLOW;
endcase

y la asignación síncrona de estado:

state <= nextstate;
    
respondido por el markt

Lea otras preguntas en las etiquetas