Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Discentes:
Fernando Henrique Gomes Zucatelli
Fernando Soler
Turma: A/Diurno
Prof Dr. Rodrigo Reina Muoz.
Sumrio
1.
2.
3.
4.
5.
OBJETIVOS ....................................................................................................................... 2
PARTE EXPERIMENTAL ................................................................................................ 2
RESULTADOS E DISCUSSO ....................................................................................... 3
CONCLUSO .................................................................................................................... 6
REFERNCIAS BIBLIOGRFICAS ............................................................................... 6
1. OBJETIVOS
O objetivo deste experimento programar duas mquinas de estados em
VHDL atravs do comando PROCESS e simul-las utilizando o clock interno de 50
MHz da placa DE2-115 da Altera.
2. PARTE EXPERIMENTAL
2.1.
2.2.
3. RESULTADOS E DISCUSSO
A Figura 3 apresenta o teste realizado previamente para verificar o
funcionamento da lgica de contagem baseada no clock da mquina, sendo cada
clkout_i foi configurado para contar a cada 2 eventos do anterior clkout_(i-1), sendo o
primeiro mltiplo do clock_maquina. No caso real cada um divide a frequncia por
mil, deixando o ajuste final para o ltimo contador.
3.1.
3.2.
4. CONCLUSO
Contadores utilizam o comando PROCESS permite aplicar operaes
temporizadas baseadas no clock interno da placa experimental da ALTERA.
5. REFERNCIAS BIBLIOGRFICAS
6. ANEXOS
Mquina de estados 2.
https://dl.dropboxusercontent.com/u/82233214/L%C3%B3gica%20Program%C3%A1
vel%20-%20LAB%204%20%20M%C3%A1quina%20de%20estado%20e%20clock%20autom%C3%A1tico/2014
-11-18%2016.08.08.mp4
6.1.
LIBRARY IEEE;
USE IEEE.STD_logic_1164.all;
ENTITY LAB_4_ex2_real_v1 IS
PORT ( start, clock_maquina, rst
: IN BIT;
q
BIT_VECTOR (2 DOWNTO 0);
: BUFFER
saida
clkout_1, clkout_2, clkout_3
: OUT INTEGER;
: BUFFER BIT
);
END LAB_4_ex2_real_v1;
BEGIN
abc: PROCESS (clkout_3, rst)
VARIABLE count
: INTEGER;
BEGIN
IF rst = '1' THEN -- estado inicial
estado <= e_0;
count := 0;
saida <= 0;
ELSIF (clkout_3'EVENT and clkout_3 = '1') THEN -- ciclo de estados iniciados pelo
start
CASE estado IS
WHEN e_0 =>
IF (start = '1') THEN
estado <= e_1;
END IF;
WHEN e_1 =>
estado <= e_2;
WHEN e_2 =>
estado <= e_3;
WHEN e_3 =>
estado <= e_4;
WHEN e_4 =>
count := count + 1;
saida <= count;
estado <= e_0;
END CASE;
END IF;
END PROCESS abc;
-- Divisores de frequncia
BEGIN
IF (clock_maquina'EVENT and clock_maquina = '1') THEN
IF (counter_1 = 1000) THEN
counter_1 := 1;
clkout_1 <= '1';
ELSE
counter_1:= counter_1 + 1;
clkout_1 <= '0';
END IF;
END IF;
END PROCESS contador_1;
BEGIN
IF (clkout_1'EVENT and clkout_1 = '1') THEN
IF (counter_2 = 1000) THEN
counter_2 := 1;
clkout_2 <= '1';
ELSE
counter_2:= counter_2 + 1;
clkout_2 <= '0';
END IF;
END IF;
END PROCESS contador_2;
10
6.2.
LIBRARY IEEE;
USE IEEE.STD_logic_1164.all;
ENTITY MaqEstados IS
PORT ( clock_maquina, ck, trig : IN BIT;
-- relogio borda subida
delay
BIT_VECTOR (1 DOWNTO 0);
: IN
q, q_delay
BIT_VECTOR (2 DOWNTO 0);
: BUFFER
saida
BIT_VECTOR (2 DOWNTO 0);
: OUT
: BUFFER BIT
-- saida
END MaqEstados;
11
IF (clkout_3'EVENT and clkout_3 = '1') THEN -- ciclo de estados iniciados pelo trig
CASE estado IS
WHEN start =>
IF (trig = '1') THEN -- ciclo de estados iniciados pelo trig
CASE delay IS
WHEN "00" =>
saida <= "000";
estado <= pulso_1;
WHEN "01" =>
saida <= "000";
estado <= wait_1;
WHEN "10" =>
saida <= "000";
estado <= wait_2;
WHEN "11" =>
saida <= "000";
estado <= wait_3;
END CASE;
ELSE
saida <= "000";
END IF;
12
BEGIN
IF (clock_maquina'EVENT and clock_maquina = '1') THEN
IF (counter_1 = 1000) THEN
counter_1 := 1;
clkout_1 <= '1';
ELSE
counter_1:= counter_1 + 1;
clkout_1 <= '0';
END IF;
END IF;
END PROCESS contador_1;
BEGIN
IF (clkout_1'EVENT and clkout_1 = '1') THEN
IF (counter_2 = 1000) THEN
counter_2 := 1;
clkout_2 <= '1';
ELSE
counter_2:= counter_2 + 1;
clkout_2 <= '0';
END IF;
13
END IF;
END PROCESS contador_2;
BEGIN
IF (clkout_2'EVENT and clkout_2 = '1') THEN
IF (counter_3 = 50) THEN
counter_3 := 1;
clkout_3 <= '1';
ELSE
counter_3:= counter_3 + 1;
clkout_3 <= '0';
END IF;
END IF;
END PROCESS contador_3;
END teste;