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