Escolar Documentos
Profissional Documentos
Cultura Documentos
PRATICA8
PRATICA8
SUMÁRIO
AULA PRÁTICA No. 8 ........................................................................................................................ 1
IMPLEMENTAÇÃO DE SISTEMAS DIGITAIS COMPLETOS EM VHDL .................................... 1
1 - INTRODUÇÃO ................................................................................................................................ 3
2 - DESENVOLVIMENTO ................................................................................................................... 3
3 - CONCLUSÃO .................................................................................................................................. 7
4 - BIBLIOGRAFIA .............................................................................................................................. 7
2
FUNDAÇÃO EDUCACIONAL DE MONTES CLAROS
FACULDADE DE CIÊNCIA E TECNOLOGIA DE MONTES CLAROS
DEPARTAMENTO DE ENGENHARIA DE MONTES CLAROS
CURSO DE ENGENHARIA DE CONTROLE E AUTOMAÇÃO E TELOCOMUNIÇÃO
1 - INTRODUÇÃO
Um divisor de frequências funciona da seguinte maneira: sua entrada é um pulso e sua saída é
também um pulso, mas com frequência menor do que o pulso de entrada. Entretanto, para um uso
mais genérico, sua implementação necessita de um gerenciador de clock para poder gerar frequências
acima de 50 MHz.
O trabalho tem como objetivo implementar um sistema digital completo em um FPGA, utilizando o software
QUARTUS II e programação em VHDL, a fim de observar o funcionamento dos mesmos e praticar o projeto
de sistemas digitais em VHDL. Ou seja, realizar um contador de décadas.
2 - DESENVOLVIMENTO
Para podemos realizar a prática lemos e vimos que pedia para realizar a montagem de um contador de
décadas, como feito em praticas anteriores, mas desta vez teríamos que utilizar um gerador de clock invés de
utilizar um botão para da os pulsos de clock.
Para que isso fosse possível, vimos a explicação do Prof. Maurílio, onde foi dito que precisaríamos criar 3
process: 1 para o divisor, outro para contador e outro para o display de 7 segmentos.
Para o gerador de clock utilizamos o seguinte código, que foi proposto na pratica:
divisor: PROCESS(clock_50MHz)
VARIABLE k: INTEGER RANGE 0 TO 50000000;
BEGIN
IF (clock_50MHz = '1' AND clock_50MHz'EVENT) THEN
IF k > 25000000 THEN
clock_1Hz <= '1';
k := k + 1;
IF k = 50000000 THEN
3
FUNDAÇÃO EDUCACIONAL DE MONTES CLAROS
FACULDADE DE CIÊNCIA E TECNOLOGIA DE MONTES CLAROS
DEPARTAMENTO DE ENGENHARIA DE MONTES CLAROS
CURSO DE ENGENHARIA DE CONTROLE E AUTOMAÇÃO E TELOCOMUNIÇÃO
k := 0;
END IF;
ELSE
k := k + 1;
clock_1Hz <= '0';
END IF;
END IF;
END PROCESS divisor;
Para realizar o contador, utilizamos um contador síncrono, visto na pratica seis, mas desta vez tivemos que
realizar algumas mudanças, colocando um clear e enable, para limpar o display e ativar a contagem
respectivamente.
cont_decada:process(clock_1Hz,clear,enable)
begin
if clear='1'then
contador1 <= 0;
elsif (clock_1Hz = '1' and clock_1Hz'EVENT)then
if enable ='1'then
contador1 <= contador1 + 1;
end if;
end if;
if (contador1 = 10)then
contador1 <= 0;
end if;
end process cont_decada;
Para o display de sete segmentos, configuramos igual proposto na prática sete, mas sem as chaves de ativação
do display, pois neste caso elas não seria necessário.
decodificador1:process(contador1)
variable segments:bit_vector(0 to 6);
begin
case contador1 is
when 0 => segments:= "0000001";
when 1 => segments:= "1001111";
when 2 => segments:= "0010010";
when 3 => segments:= "0000110";
when 4 => segments:= "1001100";
when 5 => segments:= "0100100";
4
FUNDAÇÃO EDUCACIONAL DE MONTES CLAROS
FACULDADE DE CIÊNCIA E TECNOLOGIA DE MONTES CLAROS
DEPARTAMENTO DE ENGENHARIA DE MONTES CLAROS
CURSO DE ENGENHARIA DE CONTROLE E AUTOMAÇÃO E TELOCOMUNIÇÃO
end case;
a <= segments(0);
b <= segments(1);
c <= segments(2);
d <= segments(3);
e <= segments(4);
f <= segments(5);
g <= segments(6);
begin
divisor: process(clock_50MHz)
variable k: integer range 0 to 100000000;
begin
IF (clock_50MHz = '1' AND clock_50MHz'EVENT) THEN
IF k > 25000000 THEN
clock_1Hz <= '1';
k := k + 1;
IF k = 100000000 THEN
k := 0;
END IF;
ELSE
k := k + 1;
clock_1Hz <= '0';
END IF;
end if;
END IF;
END PROCESS divisor;
----------contador----------------------
5
FUNDAÇÃO EDUCACIONAL DE MONTES CLAROS
FACULDADE DE CIÊNCIA E TECNOLOGIA DE MONTES CLAROS
DEPARTAMENTO DE ENGENHARIA DE MONTES CLAROS
CURSO DE ENGENHARIA DE CONTROLE E AUTOMAÇÃO E TELOCOMUNIÇÃO
cont_decada:process(clock_1Hz,clear,enable)
begin
if clear='1'then
contador1 <= 0;
elsif (clock_1Hz = '1' and clock_1Hz'EVENT)then
if enable ='1'then
contador1 <= contador1 + 1;
end if;
end if;
if (contador1 = 10)then
contador1 <= 0;
end if;
end process cont_decada;
---------decodificador-----------
decodificador1:process(contador1)
variable segments:bit_vector(0 to 6);
begin
case contador1 is
when 0 => segments:= "0000001";
when 1 => segments:= "1001111";
when 2 => segments:= "0010010";
when 3 => segments:= "0000110";
when 4 => segments:= "1001100";
when 5 => segments:= "0100100";
when 6 => segments:= "1100000";
when 7 => segments:= "0001111";
when 8 => segments:= "0000000";
when 9 => segments:= "0001100";
when others => segments:= "1111111";
end case;
a <= segments(0);
b <= segments(1);
c <= segments(2);
d <= segments(3);
e <= segments(4);
f <= segments(5);
g <= segments(6);
Após realizamos a montagem do código, configuramos os pinos e realizamos a simulação e vimos que ao
colocar a chave do enable em nível alto, a contagem era realizada se colocássemos a chave clear em nível alto
a contagem era zerada.
6
FUNDAÇÃO EDUCACIONAL DE MONTES CLAROS
FACULDADE DE CIÊNCIA E TECNOLOGIA DE MONTES CLAROS
DEPARTAMENTO DE ENGENHARIA DE MONTES CLAROS
CURSO DE ENGENHARIA DE CONTROLE E AUTOMAÇÃO E TELOCOMUNIÇÃO
3 - CONCLUSÃO
O desenvolvimento do trabalho possibilitou aprender como podemos gerar um clock no FPGA e assim utilizar
para aplicações como a de um relógio.
De modo geral os resultados foram satisfatório, onde conseguimos realizar a montagem de um contador
década e assim ter uma base para poder realizar a montagem do projeto da disciplinha.
O trabalho em trio possibilitou maior entendimento para realizar a pratica.
Portanto, utilizando os conhecimentos adquiridos durante as praticas, pudemos realizar a montagem da pratica
8 e assim realizar o projeto da disciplina de Lab. Sistemas Digitais.
4 - BIBLIOGRAFIA
NOTAS DE AULAS