-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathproj_sinaleiro.txt
107 lines (96 loc) · 3.18 KB
/
proj_sinaleiro.txt
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
--Autores: Igor, Larissa, Eric
--Projeto_08_sinaleira
--Professor: Querido Dalton
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.all;
USE IEEE.STD_LOGIC_ARITH.all;
USE IEEE.STD_LOGIC_UNSIGNED.all;
ENTITY proj_08_sinaleira IS --Definir pinos de entrada e saida
PORT(clk_50Mhz,SW0 : IN STD_LOGIC; --Pino de entrada,chave
LEDR : OUT STD_LOGIC_VECTOR(5 DOWNTO 0); --leds de saída
HEX0 : OUT STD_LOGIC_VECTOR(6 DOWNTO 0)); --ESCREVE NO DISPLAY HEX0
END proj_08_sinaleira;
ARCHITECTURE a OF proj_08_sinaleira IS --Definir variaveis (a=behavior)
SIGNAL CLK_COUNT_1HZ : STD_LOGIC_VECTOR(27 DOWNTO 0); --28bits (tipo da variavel: VETOR)
SIGNAL CLK_1HZ : STD_LOGIC; --1bit
SIGNAL Display : STD_LOGIC_VECTOR (3 DOWNTO 0); -- flip-flop
BEGIN
PROCESS
BEGIN
WAIT UNTIL CLK_50MHZ'EVENT AND CLK_50MHZ = '1'; --espera transição para 1
IF CLK_COUNT_1HZ < X"1312D00" THEN --X = numeração hexa
--IF CLK_COUNT_1HZ < X"0000001" THEN -- valor hexadecimal A para teste
CLK_COUNT_1HZ <= CLK_COUNT_1HZ+1; -- enquanto menor do que 25000000
ELSE -- incrementa variável
CLK_COUNT_1HZ <= X"0000000" -- se for maior zera variável Clk_Count_1Hz
CLK_1HZ <= NOT CLK_1HZ -- e inverte o bit CLK_1HZ
END IF;
END PROCESS;
PROCESS -- Logica para CONTAR
BEGIN
WAIT UNTIL CLK_1HZ'EVENT AND CLK_1HZ = '1'; -- espera transição do CLK_1Hz
if SW0 = '1' then
IF Display <= X"A" THEN
Display <= Display + 1; -- Aumenta 1 no contador ou variável - UP
ELSE
Display <= X"0"; -- reset na variável = Comentado não tem essa função
END IF;
else
IF (Display <= X"E") THEN
Display <= Display + 1; -- Aumenta 1 no contador ou variável - UP
ELSE
Display <= X"C"; -- reset na variável = Comentado não tem essa função
END IF;
end if;
CASE Display IS -- Decodificador p/ mostrar no display e led sinaleira
WHEN X"0" =>
HEX0 <= "1000000";
LEDR <= "100001";
WHEN X"1" =>
HEX0 <= "1111001";
LEDR <= "100001";
WHEN X"2" =>
HEX0 <= "0100100";
LEDR <= "100001";
WHEN X"3" =>
HEX0 <= "0110000";
LEDR <= "100001";
WHEN X"4" =>
HEX0 <= "0011001";
LEDR <= "100001";
WHEN X"5" =>
HEX0 <= "0010010";
LEDR <= "100010";
WHEN X"6" =>
HEX0 <= "0000010";
LEDR <= "100100";
WHEN X"7" =>
HEX0 <= "1111000";
LEDR <= "001100";
WHEN X"8" =>
HEX0 <= "0000000";
LEDR <= "001100";
WHEN X"9" =>
HEX0 <= "0010000";
LEDR <= "001100";
WHEN X"A" =>
HEX0 <= "0001000";
LEDR <= "010100";
WHEN X"B" =>
HEX0 <= "0000011";
LEDR <= "100100";
WHEN X"C" =>
HEX0 <= "1000110";
LEDR <= "010010";
WHEN X"D" =>
HEX0 <= "0100001";
LEDR <= "000000";
WHEN X"E" =>
HEX0 <= "0000110";
LEDR <= "010010";
WHEN OTHERS =>
HEX0 <= "0001110";
LEDR <= "000000";
END CASE;
END PROCESS;
END a;