Statemachine como un módulo separado en VHDL?

0

Me gustaría crear una máquina de estados como una unidad separada con varias entradas y una salida. La salida será el estado.

Los estados se definen mediante una sintaxis similar a type states is (s1, s2, s3);

Ahora, ¿cómo puedo construir los puertos de las unidades. ¿Qué debo asignarle? ¿Es std_logic_vector o es tipo "estados"?

Si configuro std_logic_vector dice que los tipos son diferentes y no se puede asignar.

Si uso "estados" dice que no puede encontrar este tipo. (porque los estados se definen en su arquitectura)

    
pregunta Arturs Vancans

2 respuestas

3

Puede definir su tipo para los estados en un paquete VHDL. Luego incluya el paquete donde se encuentra su máquina de estado y en el archivo donde se encuentra la instanciación de ese componente.

Otra solución, pero menos bella, podría ser asignar en cada estado del equipo de estadísticas un valor a una salida de std_logic_vector.

Por ejemplo:

case current_s is
    when s0 =>
        ....;
        state <= x"00";
    when s2 =>
        ....;
        state <= x"01";
    when s1 =>
        ....;
        state <= x"02";

Iría por la primera solución si su código no se comparte con otros diseños u otras personas.

Para IP's, buscaría la segunda solución. Algunas reglas de diseño rechazarán entradas y salidas no estándar.

Si desea poner el estado en un registro de depuración, la segunda solución será la mejor (no hay problemas con la recodificación de los estados por la herramienta de síntesis)

    
respondido por el vermaete
2

Pon tu estado en un paquete. Alternativamente, puede generar un número relacionado con el estado en un puerto entero como este:

integer_port_name <= state_type'pos(state_variable_name);

El elemento situado más a la izquierda de state_type estará numerado con 0.

    
respondido por el Martin Thompson

Lea otras preguntas en las etiquetas