Paso 3: Máquina de estado finito
El primer módulo en el diseño es la machine(FSM) de estados finitos. Este módulo tiene cinco Estados diferentes que se utilizan para controlar cómo y cuándo el sistema reacciona. De los cinco Estados, un estado es control manual en el que los servos pueden ser controlados por los botones de a bordo. Los otros cuatro Estados se producen secuencialmente cuando se presiona el botón central en el tablero. Estos Estados se llaman los Estados de calibración. Durante la calibración, el servo horizontal va en el estado de barrido horizontal, barrido de 180 grados. Como está analizando las tensiones, busca la tensión horizontal máxima. Una vez que pasa a través de su movimiento, el FSM transiciones en el estado máximo horizontal que controla el servo para devolver la ubicación de la tensión máxima que recibió. El FSM va a continuación, en el estado de barrido vertical que controla el servo vertical para buscar hacia arriba y abajo de 45 grados para el nuevo voltaje máximo. Por último, el FSM entra el estado máximo vertical una vez que encuentre el voltaje máximo y vuelve a ese punto, justo como el servo horizontal. Vez finalizada la calibración, los servos entran en estado manual.
Aquí está la descripción de la entidad de la FSM en VHDL:
entidad es de FSM
Puerto (BTN_L, BTN_R, BTN_U, BTN_D, BTN_C: en RAMB16_S36;---botones de entrada
CNT_L, CNT_RU, CNT_D: En RAMB16_S36; ---servo permiten señales de contador
CLK: En RAMB16_S36; ---señal de reloj
HS, VS, MC: A RAMB16_S36; ---contador permiten señales
SERVO_L, SERVO_R, SERVO_U, SERVO_D: hacia fuera RAMB16_S36; ---servo permiten señales
CNT_RST: A RAMB16_S36); ---señal de reset para uno de los contadores
final FSM;
El FSM es el cerebro del sistema. Controla todas las señales que permiten a otros componentes reaccionar a la entrada en consecuencia. La descripción de arquitectura VHDL consta de dos partes. El primero es un proceso sincrónico que cambia el estado actual (PS) de la máquina del estado al siguiente estado (NS). El segundo es el proceso combinacional que todas las entradas y decide el estado próximo de máquinas. Juntos, estos procesos constituyen el FSM.
Aquí está algo de código de nuestra descripción de la arquitectura. Contiene el proceso sincrónico y los dos primeros estados de nuestro proceso combinacional:
tipo de estado es (hombre, hor_sweep, hor_max, vert_sweep, vert_max); ---definir nuestros Estados
señal PS: estado;
señal de NS: estado;
sync_proc: proceso (CLK, NS)---sincrónica
comenzar
Si rising_edge(CLK) entonces
PS < = NS;
End if;
final proceso sync_proc;
comb_proc: proceso (PS, BTN_L, BTN_R, BTN_U, BTN_D, BTN_C, CNT_L, CNT_RU, CNT_D)
comenzar
SERVO_L < = '0'; SERVO_R < = '0'; SERVO_U < = '0'; SERVO_D < = '0';
es el caso PS
Cuando el hombre = >
Si (BTN_C = '1') entonces
NS < = hor_sweep; ---entrar en el primer estado de la calibración si se presiona el botón del centro
CNT_RST < = '0';
Capítulo < = '1'; VS < = '0'; MC < = '0'; ---Dile el contador Horizontal para empezar a contar
otra cosa
Si (BTN_L = '1') entonces SERVO_L < = '1'; SERVO_R < = '0'; ---desde estas se puede ver cómo se
SERVO_L demás < = '0'; ---administrada los servos en estado manual
End if;
Si (BTN_R = '1') entonces SERVO_R < = '1'; SERVO_L < = '0';
SERVO_R demás < = '0';
End if;
Si (BTN_U = '1') entonces SERVO_U < = '1'; SERVO_D < = '0';
SERVO_U demás < = '0';
End if;
Si (BTN_D = '1') entonces SERVO_D < = '1'; SERVO_U < = '0';
SERVO_D demás < = '0';
End if;
NS < = hombre; ---permanecen en estado manual
CNT_RST < = '1'; ---mantener el reset de contador máximo
Capítulo < = '0'; VS < = '0'; MC < = '0'; ---no permitan a ninguno de los contadores
End if;
Cuando hor_sweep = >
SERVO_U < = '0'; SERVO_D < = '0';
CNT_RST < = '0';
Si (CNT_L = '1') entonces
SERVO_L < = '1'; SERVO_R < = '0';
Capítulo < = '1'; VS < = '0'; MC < = '0';
NS < = hor_sweep;
otra cosa
SERVO_L < = '0'; SERVO_R < = '0';
Capítulo < = '0'; VS < = '0'; MC < = '1';
NS < = hor_max;
End if;
Los otros tres Estados están maximizando el voltaje horizontal, barrido vertical servo y luego maximizar la tensión vertical. Una vez que se realiza calibrando, vuelve al estado manual. En términos de variables, HS, VS y MC son permiten señales que van a los contadores. CNT_L, CNT_RU y CNT_D son las señales que vienen de los contadores y Dile a la unidad de la FSM el servo correspondiente. Todos los botones se asignan a la entrada en el FSM. Estos controlan el movimiento inicial en el estado de calibración, así como mover los servos en el estado manual.