Maquina de estados en vhdl

Maquina de estados en vhdl

código vhdl de la máquina moore

En los capítulos anteriores hemos visto varios ejemplos de circuitos combinacionales y circuitos secuenciales. En los circuitos combinacionales, la salida depende únicamente de los valores actuales de las entradas; mientras que en los circuitos secuenciales, la salida depende de los valores actuales de las entradas junto con la información previamente almacenada. En otras palabras, en los circuitos secuenciales se necesitan elementos de almacenamiento, por ejemplo, flip flogs o registros. La información almacenada en estos elementos puede considerarse como los estados del sistema. Si un sistema transita entre un número finito de estos estados internos, entonces pueden utilizarse máquinas de estado finito (FSM) para diseñar el sistema. Las FSM diseñadas pueden clasificarse como «máquina de Moore» y «máquina de Mealy», que se analizan en este capítulo.

Este capítulo está organizado como sigue. En primer lugar, los diseños de Moore y Mealy se discuten en la sección 9.2. Luego se muestra un ejemplo de estos diseños en la Sección 9.3. Después de esto, los diseños de circuitos secuenciales utilizando FSM se discuten en detalle.

El diseño FSM se conoce como diseño Moore si la salida del sistema depende sólo de los estados (ver Fig. 9.2); mientras que se conoce como diseño Mealy si la salida depende de los estados y de las entradas externas (ver Fig. 9.1). Además, un sistema puede contener ambos tipos de diseños simultáneamente.

convertidor de vhdl a diagrama de estados

Soy nuevo en VHDL y estoy tratando de implementar la siguiente máquina de estado en VHDL (diagrama de estado proporcionado a continuación). Cuando presiono un botón en mi tarjeta FPGA Basys3 (entrada P) la salida es un estado aleatorio. Sospecho que esto se debe a que el reloj está pasando por muchos ciclos durante una sola pulsación, por lo que se está tomando más de una entrada de una sola pulsación, pero no estoy seguro. ¿Hay algo que pueda hacer para arreglar esto? Quiero poder pulsar el botón P y que los estados cambien de uno en uno.

Además P no está sincronizado con su reloj maestro y por lo tanto hay un riesgo de meta-estabilidad. Por último, pero no menos importante, si rebota, obtendrá varios cambios de valor en lugar de uno solo. Para resolver el problema de la metaestabilidad necesitas un resincronizador, que no es más que un registro de desplazamiento. Y también puedes usarlo para generar una señal intermedia que se afirme en alto durante un solo periodo de reloj cuando se pulse el botón, es decir, el detector de flanco ascendente que necesitas para tu máquina de estados. Ejemplo con 3 etapas:

Las etapas 1 y 2 de sincronización son seguras de usar porque ya han sido resincronizadas (asumiendo que 2 etapas son suficientes para tu tecnología objetivo y el tiempo medio entre fallos; lee algo sobre meta-estabilidad, quizás, si no entiendes esto).

código vhdl de la máquina de estado con banco de pruebas

El diseño sintetizado no es necesariamente más rápido o más pequeño si la extracción de la máquina de estado está desactivada porque el compilador de síntesis puede elegir entre varias codificaciones cuando sintetiza una máquina de estado. Se puede desactivar la extracción de máquinas de estado a través del menú «Asignaciones» -> «Ajustes» -> «Ajustes de análisis y síntesis» -> «Más ajustes» -> «Extraer máquinas de estado VHDL».

Si utilizamos una FPGA Cyclone IV, por ejemplo, el compilador de síntesis elegirá una codificación de un solo golpe para la máquina de estado. Lo verás en el informe de compilación en «Analysis & Synthesis» -> «State Machines». Se necesitan 4 funciones combinacionales (LUTs) y 3 registros lógicos. Una primera estimación de la velocidad del diseño puede deducirse de la netlist sintetizada accesible a través del menú «Herramientas» -> «Visores de Netlist» -> «Visor de Mapa Tecnológico (Post-Mapping)»:

Aquí fue posible una mejora después de desactivar la extracción de la máquina de estado. Pero, esto no es generalmente el caso porque todo depende de la codificación real del tipo state_type. Si dejamos desactivada la extracción de la máquina de estados y cambiamos la declaración de state_type por

máquina de estado finito vhdl semáforo

XST propone un amplio conjunto de plantillas para describir Máquinas de Estado Finito (FSMs). Por defecto, XST intenta reconocer las FSMs a partir del código VHDL/Verilog, y aplicar varias técnicas de codificación de estados (puede recodificar la codificación inicial del usuario) para obtener un mejor rendimiento o menor área. Sin embargo, se puede desactivar la extracción de FSMs mediante una restricción de diseño FSM_extract.

Para el HDL, el proceso (VHDL) y siempre los bloques (Verilog) son las formas más adecuadas para describir los FSM. (Para la conveniencia de la descripción, Xilinx utiliza «proceso» para referirse a ambos: Procesos VHDL y bloques siempre Verilog).

Puedes tener varios procesos (1, 2 o 3) en tu descripción, dependiendo de cómo consideres y descompongas las diferentes partes del modelo anterior. A continuación se muestra un ejemplo de la Máquina de Moore con Reset Asíncrono, «RESET».

Los registros de estado deben ser inicializados con una señal asíncrona o síncrona. XST no soporta FSM sin señales de inicialización. Consulte la sección «Registros» de este capítulo para ver las plantillas sobre cómo escribir señales de inicialización asíncronas y síncronas.

Entradas relacionadas

Esta web utiliza cookies propias para su correcto funcionamiento. Al hacer clic en el botón Aceptar, acepta el uso de estas tecnologías y el procesamiento de tus datos para estos propósitos. Más información
Privacidad