TrabalhosGratuitos.com - Trabalhos, Monografias, Artigos, Exames, Resumos de livros, Dissertações
Pesquisar

A DESCRIÇÃO VHDL RELÓGIO

Por:   •  9/7/2020  •  Ensaio  •  9.755 Palavras (40 Páginas)  •  385 Visualizações

Página 1 de 40

[pic 1]


DESCRIÇÃO VHDL RELÓGIO

-- relogio digital para placa nexys 2 - digilent

-- by Leandro J. Cassol - Unilasalle

library ieee;

use IEEE.STD_LOGIC_1164.ALL;

use ieee.std_logic_arith.all;

use ieee.std_logic_unsigned.all;

entity relogio is

port (clock                                                        : in std_logic;                                                         -- porta de entrada para o clock do sistema

                reset                                                        : in std_logic;                                                         -- porta de entrada para o reset do sistema

                ajusta_minuto                                : in std_logic;                                                         -- porta de entrada para o ajuste dos minutos do sistema

                ajusta_hora                                 : in std_logic;                                                        -- porta de entrada para o ajuste das horas do sistema

      anodes                                                 : out std_logic_vector(3 downto 0); -- sinal para multiplexar displayers

                display_sete_segmentos        : out std_logic_vector(6 downto 0)         -- porta de saida. Sai sinal BCD para as displayers

                );  

end relogio;

architecture Behavioral of relogio is

type tipo_estado is  (D0,D1,D2,D3);

signal fsm: tipo_estado;

signal muda_display : std_logic;

signal controle_mux : std_logic_vector (0 to 2);

signal contador_muda_display : integer :=0;

signal segundo, minuto, hora : integer :=0 ;

signal contador_clock : integer :=0;

signal ck_1hz : std_logic ;

signal saida_mux, display1_hora, display2_hora, display1_minuto, display2_minuto, display1_segundo, display2_segundo :integer :=0 ;

signal codigo_bcd_display : std_logic_vector(6 downto 0);

begin                                                                                -- divisor de frequencias - transforma um clock de 50MHz para 1Hz

divisor_de_clock : process(clock) --processo de divisão de frequencia para tranformar o clock de 24MHz para 1Hz. (depende do sinal clock)

begin

        if(clock'event and clock='1') then

                contador_clock <= contador_clock + 1;

                contador_muda_display <= contador_muda_display + 1;

                if(contador_clock = 49999999) then   --o sinal de entrada tem uma frequencia de 50MHz - converte 50Mhz em 1Hz

                        ck_1hz <= '1';

                        contador_clock <= 0;

                        else

                                ck_1hz <='0';

                end if;

        

                if(contador_muda_display = 49999) then   --o sinal de entrada tem uma frequencia de 50MHz - converte 50 Mhz em 100KHz

                        muda_display <= '1';

                        contador_muda_display <= 0;

                        else

                                muda_display <='0';

                end if;

        end if;

end process divisor_de_clock; --fim do processo de divisão de frequencias

-- contador das horas, minutos e segundos. E botão de ajuste das horas e dos minutos.

relogio : process(ck_1hz, reset)                          --processo relógio (depende dos sinais de ck_1hz e reset)

begin        

 if (reset = '1') then

        segundo <= 0;                                                                 --zera o contador dos segundos quando reset for igual a zero

        minuto <= 0;                                                                --zera o contador dos minutos quando reset for igual a zero

        hora <= 0;                                                                        --zera o contador das horas quando reset for igual a zero

        elsif(ck_1hz'event and ck_1hz='1') then                --a partir desta linha e dentro deste processo todos o sinais são atualizados em função do sinal ck_1hz

                segundo <= segundo + 1;                         --incrementa o contador dos segundos no evento de clock (sinal ck_1hz)

                if (ajusta_minuto='1') then                        --incrementa o contador dos minuntos quando o sinal ajusta_minuto for igual a 1

                        minuto <= minuto + 1;                        --incrementa o contador dos minutos quando o sinal ajusta_minuto for igual a 1

                        if (minuto = 59) then                        --

                                minuto <= 0;                                        --zera contador dos minutos quando apos a contagem ser 59

...

Baixar como (para membros premium)  txt (20.8 Kb)   pdf (132.9 Kb)   docx (96.4 Kb)  
Continuar por mais 39 páginas »
Disponível apenas no TrabalhosGratuitos.com