Download Tutorial 2: Pasar de diagrama ASM a un circuito

Document related concepts
no text concepts found
Transcript
Tutorial 2: Pasar de diagrama ASM a un circuito
Introducción
En este segundo tutorial veremos cómo transformar nuestros diagramas ASM en circuitos que puedan ser
implementados utilizando la placa DEO. Para ello debemos traducir el diagrama ASM en un circuito. El
objetivo de este tutorial es comprender completamente la correspondencia unívoca entre el diagrama ASM
y el circuito implementado final. Se obtendrá un primer circuito completo y se verificará su correcto
funcionamiento en la placa DEO.
Parte 1
En el tutorial 1 se presentó un ejemplo del diseño de un circuito con su respectivo diagrama ASM. En este
caso se presenta el circuito implementado para dicho ejemplo. En el anexo se encuentra el diagrama ASM,
el bloque de control implementado en VHDL, el bloque de datos en un esquemático de Quartus y el circuito
completo que une ambos bloques en un esquemático de Quartus. Todos correspondientes al ejemplo
presentado en el tutorial 1. Se adjuntan todos los archivos del proyecto con el circuito implementado.
Se debe comprender completamente la correspondencia unívoca entre el diagrama ASM y el circuito.
Simular el circuito de igual manera que fue realizado en el tutorial 0. Una vez verificado el correcto
funcionamiento del circuito a través de las simulaciones, se deben asignar los pines y compilar el proyecto.
Utilizaremos el reloj de 50MHz que nos provee la placa.
La asignación de pines para probar el circuito en la placa DE0 se muestra en la siguiente tabla:
Señal I/O
Pin
clk
reset
In1
Switch0
Led1
clk_out
PIN_G21
PIN_H2
PIN_H5
PIN_J6
PIN_J2
PIN_D13
Recurso en la
DE0
CLOCK_50
BUTTON [0]
SW[1]
SW[0]
LEDG[1]
HEX0_DP
Luego de la asignación, programamos el circuito en la placa y verificamos que efectivamente funciona de
acuerdo a lo esperado.
Parte 2
En segunda instancia, se debe modificar el circuito entregado para que la correspondencia sea con el
diagrama ASM modificado en el tutorial 1, estos cambios fueron:
•
El circuito prenda el LED si el pulso es igual o mayor que 4T.
•
El LED se encienda solo si el Switch0 está en 1.
Luego de realizar las modificaciones en el circuito, se debe simular el nuevo circuito y verificar el correcto
funcionamiento en la placa DEO.
Preguntas
¿Cuál es la función del bloque Divisor? ¿Por qué es necesario?
¿De qué período es la señal clk_out? ¿Es razonable utilizarla para probar el circuito en la placa DE0?
¿Qué ocurriría si utilizaramos clk en lugar de clk_out para el testeo?
Entrega
Los grupos deben entregar en su clase de seguimiento, durante la cual realizarán la defensa del tutorial, las
simulaciones realizadas de cada uno de los circuitos y una breve respuesta a las preguntas planteadas.
Deben utilizar la caratula que se encuentra en el EVA.
Anexo
Diagrama ASM
Bloque de Control en VHDL
-- Bloque de Control
library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_unsigned.all;
entity Bloque_control is
port
(
clk
reset
In1
PASO_1
PASO_2
PASO_3
PASO_4
);
end entity;
:
:
:
:
out
out
out
out
: in
std_logic;
: in
std_logic;
: in
std_logic;
std_logic;
std_logic;
std_logic;
std_logic
architecture Control of Bloque_control is
-- Build an enumerated type for the state machine
type state_type is (p1, p2, p3, p4);
-- Registers
signal state : state_type;
-- Combinatorial
signal nextstate : state_type;
begin
process (state,In1)
begin
-- default values
case state is
when p1=>
PASO_1 <= '1';
PASO_2 <= '0';
PASO_3 <= '0';
PASO_4 <= '0';
nextState <= p2;
when p2=>
PASO_1 <= '0';
PASO_2 <= '1';
PASO_3 <= '0';
PASO_4 <= '0';
if In1 = '0' then
nextState
else
nextState
end if;
when p3=>
PASO_1 <= '0';
PASO_2 <= '0';
PASO_3 <= '1';
PASO_4 <= '0';
if In1 = '1' then
nextState
else
nextState
end if;
when p4=>
PASO_1 <= '0';
PASO_2 <= '0';
PASO_3 <= '0';
PASO_4 <= '1';
nextState <= p2;
when others =>
PASO_1 <= '0';
PASO_2 <= '0';
PASO_3 <= '0';
PASO_4 <= '1';
nextState <= p1;
end case;
end process;
-- Registro de estado:
process (clk, reset)
begin
if reset = '0' then
state <= p1;
elsif clk'event and clk = '1' then
state <= nextstate;
end if;
end process;
end Control;
<= p3;
<= p2;
<= p4;
<= p3;
Bloque de Datos en esquemático de Quartus
Circuito completo en esquemático de Quartus