(MEF) con una entrada de datos llamada EN y que

Anuncio
Oscar Ignacio Botero Henao.
MEF – MODELADO POR DIAGRAMAS DE ESTADO
Diseñe una Máquina de Estado Finito (MEF) con una entrada de datos llamada EN
y que cumpla el siguiente Diagrama de Estados. El sistema secuencial debe tener
un RESET que se activa con ‘0’ y cada vez que llegue al estado S2 se activará
una salida llamada Z.
1
0
0
S1
0
S0
0
0
1
S2
1
1
MODELOS
MODELO MOORE
EN
ACTUAL
Circuito Combinacional
de Entrada Memoria RESET
CLK
Z
Circuito Combinacional
de Salida Oscar Ignacio Botero Henao. MODELO MEALY
EN
Z
Circuito Combinacional
de Entrada Memoria ACTUAL
Circuito Combinacional
de Salida RESET
CLK
MODELACIÓN POR DIAGRAMA DE ESTADOS
Haremos el Diagrama de Flujo con sus estados estables e inestables mediante la
herramienta StateCAD de Xilinx.
El ejercicio consiste en detectar la secuencia del diagrama de estados, estará
compuesto de una entrada de datos “EN”, la salida “Z” se activará cuando cumpla
la secuencia y los pulsos de reloj “CLK” se realizan de forma manual mediante un
interruptor.
Comenzamos creando el proyecto como se realiza habitualmente (File / New
Project), ponemos el nombre de nuestro proyecto, en este caso “MEF_1” y
configuramos las especificaciones de nuestro dispositivo y el tipo de lenguaje, en
este caso “HDL”.
2 Oscar Ignacio Botero Henao. En la siguiente ventana seleccionamos “New Source” y añadiremos una nueva
fuente que será el Diagrama de Estados.
3 Oscar Ignacio Botero Henao. Ahora, pasaremos al entorno “StateCAD”, el cual nos sirve para diseñar maquinas
de estados. Seleccionamos “Options/ Variable” y declararemos las variables que
vamos a utilizar.
Pondremos “EN“ como entrada
por donde se ingresarán los
datos para la secuencia, “CLK“
el reloj que será manual y “Z“
será la salida por donde se
visualizará
un
“1”
al
completarse la secuencia; esta
salida la ponemos como
registro para que se mantenga
encendida
hasta
dar
el
siguiente pulso de reloj.
A continuación, vamos a la herramienta “Add State” y colocamos los 3 estados
que necesitamos o con la herramienta “Draw State Machines” (SO, S1, S2), así:
4 Oscar Ignacio Botero Henao. STAT E0
STAT E1
STAT E2
Continuamos… colocando a los estados las
transiciones con la herramienta “Add
Transition”.
Los cuadritos pequeños que se ven al lado
de las transiciones son puntos que podemos
establecer para que la línea quede curvada,
se hacen con solo hacer clic con el mouse
en la posición que queramos antes de llevar
la transición a su destino.
Ahora, vamos a colocar el RESET para controlar el estado de inicio del programa,
para ello utilizamos la herramienta “Add Reset” y lo colocamos desde un punto
externo hasta el ESTADO 0.
Configuramos el RESET como asíncrono y activo en bajo “0”, para lo cual lo
igualamos a 0 con comillas simples RESET=’0’.
5 Oscar Ignacio Botero Henao. @ELSE
RESET ='0'
STAT E0
Ahora configuramos los estados estables e inestables dando doble clic sobre los
globos o las transiciones. En las transiciones pondremos el estado del dato de
entrada EN (EN=’0’ o EN=’1’), en los globos pondremos el estado de la salida Z,
(Z=’0’; o Z=’1’;).
6 Oscar Ignacio Botero Henao. EN='1'
RESET='0'
S0
Z='0'
EN='0'
EN='1'
EN='1'
EN='0'
S1
S2
Z='0'
Z='1'
EN='0'
Grabe el Diagrama de Flujo del StateCAD y luego genere el archivo de código
VHD
7 Oscar Ignacio Botero Henao. Cada estado comprueba el dato de entrada “EN”. Dependiendo del estado en el
que se encuentre compara el dato con los asignados en la secuencia y si es
correcto pasará al estado siguiente, de lo contrario irá al estado asignado por
medio de las transiciones.
8 Oscar Ignacio Botero Henao. Ahora vamos a generar el archivo para hacer la simulación con el Xilinx dando clic
sobre “State Bench”.
Se genera de forma automática dando clic en el icono “Automatic Testbench”
Cuando está en el Estado S2 la salida Z se activa 9 Oscar Ignacio Botero Henao. Añadimos los archivos generados al proyecto (código HDL y Simulación), NO
VUELVA A GRABAR el Diagrama de Flujo del StateCAD.
Volvamos al proyecto que habíamos creado en ISE y damos clic derecho sobre él
y “Add Source”.
Seleccionamos el documento con extensión “MEF_1.vhd” que es la generación y
compilación del programa echo en el StateCAD. 10 Oscar Ignacio Botero Henao. Repetimos el procedimiento pero adicionamos el archivo de la simulación
“MEF_1_TB.VHD”.
Luego Sintetiza, Asigna Pines o Terminales, Implementa el diseño y Genera los
archivos de Programa para finalmente pasarlo a la tarjeta Spartan 3E.
11 Oscar Ignacio Botero Henao. DIAGRAMA DE ESTADO MODELO MOORE – FORMA 1
RESET ='0'
EN='1'
MODELO MOORE
S0
Z='0'
EN='0'
EN='0'
EN='1'
EN='1'
S1
S2
Z='0'
Z='1'
EN='0'
CÓDIGO GENERADO
LIBRARY ieee; USE ieee.std_logic_1164.all; ENTITY MOORE1_DED IS PORT (CLK,EN,RESET: IN std_logic; Z : OUT std_logic); END; ARCHITECTURE BEHAVIOR OF MOORE1_DED IS ‐‐ State variables for machine sreg SIGNAL S0, next_S0, S1, next_S1, S2, next_S2 : std_logic; BEGIN PROCESS (CLK, RESET, next_S0, next_S1, next_S2) BEGIN IF ( RESET='0' ) THEN S0 <= '1'; S1 <= '0'; S2 <= '0'; ELSIF CLK='1' AND CLK'event THEN S0 <= next_S0; S1 <= next_S1; S2 <= next_S2; END IF; END PROCESS; PROCESS (EN,S0,S1,S2) BEGIN 12 IF (( EN='1' AND (S0='1')) OR ( EN='1' AND (S2='1'))) THEN next_S0<='1'; ELSE next_S0<='0'; END IF; Oscar Ignacio Botero Henao. IF ((EN='0' AND (S0='1')) OR (EN='0' AND (S1='1')) OR (EN='0' AND (S2='1'))) THEN next_S1<='1'; ELSE next_S1<='0'; END IF; IF ((EN='1' AND (S1='1'))) THEN next_S2<='1'; ELSE next_S2<='0'; END IF; IF (((S2='1'))) THEN Z<='1'; ELSE Z<='0'; END IF; END PROCESS; END BEHAVIOR; DIAGRAMA DE ESTADO MODELO MOORE – FORMA 2
RESET ='0'
EN='1'
S0
MODELO MOORE
Q0='0';Q1='0';Z='0'
EN='0'
EN='1'
EN='1'
EN='0'
S1
S2
Q0='1';Q1='0';Z='0'
Q0='0';Q1='1';Z='1'
EN='0'
CÓDIGO GENERADO
LIBRARY ieee; USE ieee.std_logic_1164.all; ENTITY MOORE1_DEJK IS PORT (CLK,EN,RESET: IN std_logic; Q0,Q1,Z : OUT std_logic); END; 13 Oscar Ignacio Botero Henao. ARCHITECTURE BEHAVIOR OF MOORE1_DEJK IS ‐‐ State variables for machine sreg SIGNAL S0, next_S0, S1, next_S1, S2, next_S2 : std_logic; SIGNAL next_Z : std_logic; BEGIN PROCESS (CLK, RESET, next_S0, next_S1, next_S2, next_Z) BEGIN IF ( RESET='0' ) THEN S0 <= '1'; S1 <= '0'; S2 <= '0'; Z <= '0'; ELSIF CLK='1' AND CLK'event THEN S0 <= next_S0; S1 <= next_S1; S2 <= next_S2; Z <= next_Z; END IF; END PROCESS; PROCESS (EN,S0,S1,S2) BEGIN IF (( EN='1' AND (S0='1')) OR ( EN='1' AND (S2='1'))) THEN next_S0<='1'; ELSE next_S0<='0'; END IF; IF (( EN='0' AND (S0='1')) OR ( EN='0' AND (S1='1')) OR ( EN='0' AND (S2='1'))) THEN next_S1<='1'; ELSE next_S1<='0'; END IF; IF (( EN='1' AND (S1='1'))) THEN next_S2<='1'; ELSE next_S2<='0'; END IF; IF (( (S1='1'))) THEN Q0<='1'; ELSE Q0<='0'; END IF; IF (( (S2='1'))) THEN Q1<='1'; ELSE Q1<='0'; END IF; IF (( EN='1' AND (S1='1'))) THEN next_Z<='1'; ELSE next_Z<='0'; END IF; END PROCESS; END BEHAVIOR; 14 Oscar Ignacio Botero Henao. DIAGRAMA DE ESTADO MODELO MEALY – FORMA 1
EN='1'
Z='0'
RESET ='0'
S0
EN='0'
EN='1'
Z='0'
EN='1'
Z='1'
EN='0'
Z='0'
S1
S2
EN='0'
Z='0'
CÓDIGO GENERADO
LIBRARY ieee; USE ieee.std_logic_1164.all; ENTITY MEALY_DE1 IS PORT (CLK,EN,RESET: IN std_logic; Z : OUT std_logic); END; ARCHITECTURE BEHAVIOR OF MEALY_DE1 IS ‐‐ State variables for machine sreg SIGNAL S0, next_S0, S1, next_S1, S2, next_S2 : std_logic; SIGNAL next_Z : std_logic; BEGIN PROCESS (CLK, RESET, next_S0, next_S1, next_S2, next_Z) BEGIN IF ( RESET='0' ) THEN S0 <= '1'; S1 <= '0'; S2 <= '0'; Z <= '0'; ELSIF CLK='1' AND CLK'event THEN S0 <= next_S0; S1 <= next_S1; S2 <= next_S2; Z <= next_Z; END IF; END PROCESS; 15 Z='0'
Oscar Ignacio Botero Henao. PROCESS (EN,S0,S1,S2) BEGIN IF (( EN='1' AND (S0='1')) OR ( EN='1' AND (S2='1'))) THEN next_S0<='1'; ELSE next_S0<='0'; END IF; IF (( EN='0' AND (S0='1')) OR ( EN='0' AND (S1='1')) OR ( EN='0' AND (S2='1'))) THEN next_S1<='1'; ELSE next_S1<='0'; END IF; IF (( EN='1' AND (S1='1'))) THEN next_S2<='1'; ELSE next_S2<='0'; END IF; IF (( EN='1' AND (S1='1'))) THEN next_Z<='1'; ELSE next_Z<='0'; END IF; END PROCESS; END BEHAVIOR; 16 
Descargar