Universidade Federal de São Carlos
Disciplina: Laboratório de Circuitos Digitais
Prof. Dr. Emerson Carlos Pedrino
5ª Prática: “Projeto Sequencial e Hierarquia”
Data: 01/05/2014
Nome: Adrián Agüero Faraldo
Introdução
RA: 612227
O seguinte trabalho é um relatório dos fatos realizados nas aulas do dia 01 de
maio do 2.014. Onde foi realizado o montagem do um contador hexagesimal ativado
mecanicamente e basado num projeto anterior, o qual presenta seus resultados em
dois displays de 7 segmentos (00 a FF), mais tarde o mesmo circuito foi melhorado para
funcionar como um relógio, o montagem, a simulação e execução do circuito foi realizado
no PLD da família ALTERA e software de desenvolvimento chamado Quartus II.
1
Materiais utilizados
Altera Cyclone II: é um FPGA (Field Programmable Gate
Array) de baixo costo, é dizer, é um dispositivo semicondutor que contem blocos lógicos inter-conetados e sua
funcionalidade pode ser configura mediante um linguaje de
descrição de hardware. A lógica programável pode realizar
desde funções tão sencilhas como las levadas por uma porta
lógica o um sistema combinacional hasta complexos
sistemas em um chip.
Quartus II: é uma ferramenta de software produzida pela Altera para o análises y la sínteses
de desenhos realizados em HDL.
Desenvolvimento
Desenvolvimento de Contador Mecânico.
Um contador é um circuito sequencial construído com biestáveis y portas lógicas capaz
de realizar o calculo dos impulsos que recibe numa entrada para essa função, armazenar
dados ou atos como divisor de frequência.
Objetivo: uso de 2 displays de 7 segmentos para contagem hexadecimal; uso da chave
deslizante H-H SW0 para incremento da contagem. Os demais componentes a serem
utilizados estão descritos a seguir:
I/O Divice
DE1
count
sw0
reset
key3
HEX display
7-Segments LEDs HEX1 & HEX2
2
Clock
50 MHz
1. Criar um novo projecto na plataforma Quartus II basados no Projeto CHAP4
Para poder utilizar o projeto CHAP4 devemos fazer os seguintes passos:
A. Instalação da biblioteca FPGAcore para a placa DE1, copiando a pasta “CHAP4”
fornecida pelo professor como diretório de projeto corrente.
B. Em CHAP4 abrir o projeto TUTOR2.
C. Apagar todos os componentes da tela.
D. Através do menu Tools->MegaWizard Plug-In Manager, criar um contador crescente
de 8 bits com clear assíncrono.
Primeira tela, selecionamos Criar um novo elemento.
Criar um contador utilizando MegaWizard Plug-In Manager de Altera.
Um contador é um circuito sequencial formado pelos flip flops e portas lógicas, o qual
armazena o número de vezes que um evento ou processo acontece. Existem muitas
classes de contadores por exemplo:
● Contadores Asíncronos (ripple).
● Contadores Síncronos - todos os estados de bits trocam sobre o controle de um clock
simples.
● Contadores de década - contagem através de dez estados por ciclo.
●
Contadores de pulso crescente/decrescente
●
Entre outros.
Para nosso projecto desenvolveremos um contador síncrono.
3
Selecionamos Plugin -> Arithmetic -> LPM_Conter como na figura e preenchemos um nome
para o novo archivo
.
Se vai abrir uma nova tela, onde temos que selecionar “input options” e agregamos uma
entrada assíncrona de apagar.
4
E. Após a criação do contador, clicar 2x sobre o bloco do mesmo e clicar no botão:
Documentation->Generate Sample Waveforms, para ver mais detalhes sobre sua
operação de contagem.
Obs.: Um barramento é formado por uma coleção paralela de bits.
Para criar um barramento utilize o botão direito do mouse sobre a linha e a opção
Bus Line.
Na documentação observamos os seguintes dados: “As seguintes formas de onda
mostram o comportamento de lpm_counter megafunction para o conjunto escolhido de
parâmetros no desenho "lpm_counter0.vhd". O desenho "lpm_counter0.vhd" é um contador
de incremento de 8 bits. O contador tem um entrada assíncrono de limpeza.”
5
F. Clicar 2x na tela do projeto e em Libraries->Project escolher todos os componentes
a serem utilizados no projeto corrente.
G. Clicar 2x em cada bloco para visualizar sua codificação. A menos do contador, todas
as demais implementações foram realizadas em VHDL.
Hierarquia do Projeto
A hierarquia do projeto pode ser visualizada em: View->Utility Windows->Project Navigator.
Máximo Clock
6
Para o circuito sequencial considerado, para encontrar seu clock máximo utilize a opção:
Processing->Classic Timing Analyser Tool.
Se o relógio fora mais rápido que 94.95 MHz nosso circuito já não vai funcionar porque o
tempo de resposta dos elementos para mudar sua estado de saída não vai perceber essas
mudam e só permanecerão num mesmo estado.
Bouncing
O Bouncing é a tendência de todos os dois contatos de metal em um dispositivo eletrônico
para gerar vários sinais como os contatos próximos ou abertas; também debouncing é
qualquer tipo de dispositivo de hardware ou software que garante que apenas um único
sinal será atendido por uma única abertura ou fechamento de um contato.
Criamos um arquivo .vwf para nossa simulação, agregamos os pinos e montamos o
seguinte formas de ondas.
7
Onde podemos notar que quando temos uma entrada externa a traves de “pb” e o “clk” tem
uma subida de sinal o “debounce” produze uma saída alta durante os seguintes 5 pulsos
do clock. Se o sinal externo de entrada comutar no mesmo instante do clk do circuito, o
sinal de saída só vai durar 4 pulsos do clock. Para evitar isso poderíamos acrescentar a
velocidade do clock de forma que seja menos provável que isso aconteça.
2. Desenhar o circuito Contador
Agora que já conhecemos todos os componentes precisados para nosso circuito os
colocamos na tela da seguinte forma:
Até formar o seguinte circuito:
3. Compilar programa.
Para compilar o programa deve-se pressionar as teclas “ctrl” + “L”
4. Colocar nomes aos pinos
8
Para colocar os nomes aos pinos, deve selecionar só uma entrada ou saída e colocar seu
nome correto para o sistema. Para nosso trabalho os pinos de entrada são sw[numero] e
para as saídas HEX”Numero”[numero] para dar nome aos LED do display de 7 segmentos.
Também utilizamos um pushbottom chamado KEY[numero] e um clock chamado
Clock_25MHz.
5. Cargar arquivo dos pinos
Para que o software identifique a placa que estamos utilizando temos que cargar o arquivo
de pinos, então selecionamos a opção “Assignments” -> “Importar assignments”, logo
procuramos nosso arquivos de pinos dentro de nossa computadora e pressionamos aceitar.
Compilamos de novo, como no passo 3.
6. Simulação do circuito
Para simular o circuito devemos seguir os seguintes passos:
Ir para file -> novo -> “vector waveform”
Insertar as entradas e saídas fazendo click direito sobre a pantalha de simulação e logo
pressionar a opção “insertar”, uma vez aqui, pressionamos listar e agregar todos os pinos. E
aceitar.
Apos isso, agregamos as sequência de entradas com respeito ao tempo para o circuito,
para isso selecionamos a ferramenta “forma de onda” e arrastre o mouse sobre a linha da
entrada que desejamos trocar. Em nosso exemplo quedara assim:
Para simulação sem debounce:
O resultado aparecera nas linhas de saídas HEX0 e HEX1 onde podemos notar como
o display de 7 segmentos HEX0 vai mudando suas valores de 0 a 1, 2, 3, 4… e assim
sucessivamente, até alcançar 9 e então volta a 0 enquanto que HEX1 agora tem o valor 1.
É dizer temos um contador de 8 bits que apresenta seus resultados em dois Displays.
Onde agora a saída confirma nosso planteamento inicial. Cada vez que mudamos a
entradas SW[0] de baixo para alto, nosso circuito acrescenta o contador.
7. Executar desenho na placa.
9
Finalmente para executar nosso desenho dentro da placa temos que selecionar a opçõa
“ferramentas” -> “programar”. Selecionar nossa placa se estão instalados os “drivers” da
placa.
Se não temos que ir para administradão de dispositivos -> atualizar “drivers” do dispositivos
desconhecido -> procurar o diretório onde estão os “drivers” da placa (estos são baixado da
página web do fornecedor da placa ) -> aceitamos.
Testamos se o funcionamento da placa também é correto.
Exercício 1: Relógio.
Por meio do circuito anterior construa um relógio. Use dois pushbuttons para configurar o
relógio.
1. Criamos um novo projeto.
Seguindo as instruções do passo 1 do exemplo anterior do contador hexadecimal.
2. Desenhamos nosso circuito de relógio como na seguinte imagem
Onde utilizamos um divisor de tempo para converter nosso 25MHz (fornecidos
pelo Clock interno da placa) a 1Hz. É dizer de acordo á equação de movimento uniforme
periódico temos que o período T é igual A base de tempo de nosso relógio será o segundo.
Também usaremos um contador de 4 bits com entrada de limpeza síncrona e
controle acrescentamento. Utilizaremos também 4 decodificadores de LED de 7 Segmentos
para representar os minutos e horas. E um Flip-Flop tipo D para iniciar o relógio.
Primeira parte:
Segunda parte:
10
Da imagem anterior podemos observar que temos 2 contadores mais para o controle dos
demais displays e dos portas AND para reiniciar o circuito quando o relógio seja as 23:59.
3. Compilar programa.
Para compilar o programa deve-se pressionar as teclas “ctrl” + “L”
4. Colocar nomes aos pinos
Mesmos passos que no exemplo anterior.
5. Cargar arquivo dos pinos
Mesmos passos que no exemplo anterior. Para que o software identifique a placa que
estamos utilizando temos que cargar o arquivo de pinos, então selecionamos a opção
“Assignments” -> “Importar assignments”, logo procuramos nosso arquivos de pinos dentro
de nossa computadora e pressionamos aceitar.
Compilamos de novo, como no passo 3.
6. Simulação do circuito
11
Para la simulação geraremos uma sinal de clock cada 1 ms (e não cada seg minuto como
deveria funcionar realmente nosso relógio) e esto é assim porque para simplificar tempo de
execução da simulação.
Na seguinte imagem podemos observar como ao pressionar KEY[3] liga nosso relógio e
este começa a acrescentar o primeiro clock e mostrar os números no display HEX0[6..0].
Se a chave KEY[2] é ativada o relógio volta para 00:00 e se ambas chaves KEY[3] e KEY[2]
são ativadas ao mesmo tempo o relógio permanecerá no estado 00:00.
A continuação observamos como os leds vão acrescentando seu valor, lembre que são
led de polarização inversa e que os números estão representados em hexadecimal, para a
frente uma tabela com a correspondente equivalência.
HEX
BIN
40
1000 0000
79
0111 1001
24
0010 0100
30
0011 0000
19
0001 1001
12
0001 0010
DEC
12
02
0000 0010
78
0111 1000
00
0000 0000
10
0001 0000
Então, podemos observar como o display HEX1 tem os valores 0,1,2,3,4,5,6,7,8,9 e
imediatamente quando HEX1 volta para 0, HEX2 muda para 1, e assim para todos os
displays.
Finalmente, notamos que quando o relógio chega até 23:59 volta todo para 00:00 como
mostra a ultima imagem.
Conclusão
O presente projeto include um conjunto de elemento já estudados em práticas
passadas mas com um enfoque diferente, como a utilização das funções de “MegaWizard
Plug-In” para implementar contadores, o bem, a utilização de flip-flop para armazenar
resultados. Também foi visto o funcionamento do elemento “debounce” que permite a
13
limpeza do ruido da mudança de posição de uma chave. Também foi presentado o uso da
ferramenta de análises de tempo e clock máximo.Finalmente foi realizado um projeto que
involucra todos os conhecimentos desta prática no desenvolvimento de um relógio.
Bibliografia
●
●
●
ftp://ftp.altera.com/up/pub/Altera_Material/9.1/Tutorials/Schematic/
Quartus_II_Introduction.pdf no dia 28/03/2014
http://pt.wikipedia.org/wiki/Contador_(eletr%C3%B4nica) no dia 28/03/2014
http://pt.wikipedia.org/wiki/Flip-flop no dia 28/03/2014
14
Download

Projeto Sequencial e Hierarquia