Você está na página 1de 7

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

AULA PRÁTICA No. 8


IMPLEMENTAÇÃO DE SISTEMAS DIGITAIS COMPLETOS EM VHDL

MARCOS FELIPE SOARES SANTOS


HERICLES FREIRE SOARES
HARRY ANDERSON ANDRADE SANTOS
Engenharia de Controle e Automação e Engenharia de Telecomunicações
6o. Período.

MONTES CLAROS, 12 DE NOVEMBRO DE 2019.


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

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.

Em muitas ocasiões, faz-se necessária a criação de divisores de clock em sistemas de lógica


programável. Isso é comum desde ensaios em placas educacionais, onde a referência de clock externa
é fixa, até aplicações profissionais de tratamento de sinais ou em aplicações com múltiplas
frequências de chaveamento. Este rápido artigo mostra uma solução descrita em VHDL para uma
aplicação onde a fonte de clock externa é de 50MHz, e deseja-se um clock de 25MHz para os
sistemas sintetizados no FPGA.

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 realizamos a pratica utilizamos os seguintes materiais:


 PC com o software QUARTUS II
 Kit didático com FPGA

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.

Começamos então a realizar o contador.

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;

Podemos observar que foi gerador um clock de 50Hz.

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.

O código do contador ficou da seguinte maneira:

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;

Podemos observar que utilizamos um clear assíncrono, fora do clock.

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

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);

Por fim, o código completo ficou da seguinte maneira.


entity pratica8 is

port(clock_50MHz :in bit;


clear, enable :in bit;
a,b,c,d,e,f,g :out bit);
end pratica8;

architecture prat8 of relogio is


signal clock_1Hz:bit;
signal contador1 :integer range 0 to 10;

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);

end process decodificador1;


end prat8;

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

Tendo sucesso em realização da prática.

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

GERADOR DE CLOCK. Disponivel em :< https://luizbitencourt.wordpress.com/2016/03/02/divisao-de-


frequencias-em-vhdl/>

DIVISOR DE FREQUENCIA. Disponivel em :< http://www.del.ufrj.br/~mario.filho/2013/SD13-


2_Louise_2.pdf>

NOTAS DE AULAS

Você também pode gostar