Contador de dois bits
- Detalhes
- Categoria: Exemplos com CPLD
- Publicado em Terça, 13 Dezembro 2011 10:25
- Escrito por Carolina Westphal
- Acessos: 5129
Contador de dois bits
Este artigo mostra passo a passo a construção de um contador síncrono de dois bits utilizando flip-flops; o projeto trata-se de um exemplo de entrada em modo esquemático com o uso de componentes primitivos do Quartus II, e será convertido para VHDL e simulado no ModelSim-Altera.
O circuito funciona seguindo uma sequência definida, que será 00 → 01 → 10 → 11 e retornará a zero, reiniciando a contagem; este utiliza de dois bits como saída, que alternam de acordo com os pulsos na entrada de clock. Além disso, o projeto poderá ser implementado fisicamente com o uso do kit de CPLD e matriz de LEDs.
Lógica de funcionamento
Para este projeto, assume-se o uso de flip-flops do tipo JK, apresentado na figura abaixo:
Figura 1 - Flip-flop tipo JK;
Os flip-flops geralmente são utilizados como registradores, memórias, entre outras aplicações. Para entender melhor como este será utilizado, é necessário analisar a tabela verdade do mesmo:
Tabela 1 - Tabela verdade do flip-flop tipo JK;
A partir da sequência desejada de funcionamento (citada no início do artigo), projeta-se o circuito lógico, que inclue a realimentação da saída do contador para a entrada de controle. Assim, como mostra a figura 1, a saída Q do flip-flop poderá realimentar o circuito pelas entradas J e K através de uma lógica previamente definida. O seguinte diagrama de blocos resume o circuito:
Figura 2 - Diagrama de blocos;
O flip-flop JK1 representa a dezena da contagem, enquando o flip-flop JK0 representa a unidade da mesma. Assim, quando em 01, JK1 deve estar em zero, e JK0 deve estar em um, e assim sucessivamente durante os possíveis estados. Através da tabela 1, projeta-se a lógica de realimentação de acordo com a saída desejada.
Tabela 2 - Tabela verdade do circuito
Figura 3 - Diagramas de Veitch-Karnaugh;
Para a tabela 2, o valor X corresponde a um estado irrelevante; em outras palavras, ele pode ser tanto 0 quanto 1, pois seu valor não irá interferir na saída. A partir de diagramas de Veitch-Karnaugh mostrados na figura 3, obtêm-se as expressões seguintes:
J1 = K1 = Q0; e J0 = K0 = 1
Constata-se que J = K para todos os flip-flops, e que portanto podem-se usar FFs (flip-flops) do tipo T. Flip-flops desde tipo possui as entradas J e K curto circuitadas; assim, as opções 01 e 10 para JK não são possíveis, e a tabela verdade deste tipo de FF resume-se à inverter o estado anterior ou mantê-lo como era antes. A figura seguinte mostra o diagrama esquemático do projeto no Quartus II.
Figura 4 - Diagrama esquemático do circuito;
Para o projeto, flip-flops tipo T foram utilizados para "compactar" o esquemático, que será convertido para VHDL e simulado. O circuito será constituido de dois flip-flops, uma entrada de clock, um botão de clear (ressaltando que os pinos reset e clear são ativos em nível lógico baixo) e duas saídas, sendo elas o bit mais significativo e menos significativo.
Para a próxima etapa (simulação), é necessário converter o projeto em modo esquemático para VHDL, pois a ferramenta de simulação trabalha apenas com este formato. Para realizar a conversão, leia o tutorial de simulação interativa. Após a conversão, adicione o arquivo no topo de hierarquia, e realize a compilação. Para verificar erros, realize a análise e síntese; neste caso, nenhum aviso relevante foi mostrado.
Simulação
Figura 5 - Forma de onda do contador;
Após a edição e compilação do projeto, transferimos o mesmo para a ferramenta de simulação ModelSim-Altera (para um tutorial sobre esta, clique aqui). É possível, através dela, observar a sequência que o contador realiza.
Um problema encontrado durante a simulação é que a contagem não pode ser iniciada sem um estado anterior; em outras palavras, um flip-flop de um contador síncrono depende do estado anterior para continuar a contagem, e um botão de clear resolve o problema (pois força zero nas saídas, e assim, há um estado anterior).
É importante lembrar também que, nesta simulação, força-se o clock através da janela "wave". Realiza-se o mesmo processo da simulação interativa, "forçando" um valor; contudo, ao invés de selecionarmos "Force...", utilizamos a opção "Clock". Uma janela irá se abrir, como mostra a figura 6.
Figura 6 - Janela de clock do ModelSim-Altera;
Esta opção dispensa o uso do force, tornando mais precisa a oscilação. Observe na figura 6 que a janela de opções permite escolher a razão cíclica (ou ciclo de trabalho) do clock; esta opção corresponde à porcentagem que o nível lógico alto ocupa em relação ao período total. Se a opção "duty" está com o valor definido em 50, significa que o período total está balanceado igualmente para os dois níveis lógicos (em outras palavras, se o período do clock é de um segundo, o nível lógico do clock estará em baixo durante meio segundo, e alto também durante meio segundo). No entanto, caso o valor da opção "duty" seja aumentado, o tempo que o nível lógico alto ocupa no período total será maior que o tempo do nível lógico baixo. Observe na figura a seguir:
Figura 7 - Exemplos de "duty cicle" no ModelSim-Altera;
A opção "first edge" permite a escolha do tipo de borda inicial. Se escolhermos a opção "rising", o clock inicia em borda de subida, e "falling" para borda de descida. Além disso, temos a opção "offset", que define o início da atuação do clock, e "cancel", que define o término da atuação do clock.
Estrutura Física
Neste projeto, utilizamos um módulo de CPLD e uma placa de LEDs conectada no CON2 do CPLD (figura 8). Lembre-se de que o CPLD usado é o EPM7064, da família MAX7000S. Quando iniciado, o clock do kit já permite a contagem, e este contador não possui botão de habilitação. Porém, incluímos um botão de reset (que pode ser arranjado com uma placa de chaves, botões, ou pelo próprio reset do kit), pois o contador inicia sem estado anterior, e para o mesmo iniciar a contagem, é necessário forçar um nível lógico na saída. Os pulsos do contador são fornecidos pelo próprio kit.
Figura 8 - Estrutura física do projeto;
Montagem e Roteamento
Preste atenção nas entradas de Vcc e GND da periferia, pois elas devem estar alinhadas com as mesmas do CPLD. A figura 9 mostra detalhadamente as conexões. É importante lembrar de definir os pinos não utilizados como entradas tri-state.
Figura 9 - Conexões na Matriz de Contato;
Figura 10 - Pin Planner;
Este projeto pode ser gravado e testado no kit com o clock de baixa frequência ou com clock manual. O circuito de gerador de clock para a entrada GCLK2 do CPLD pode ser usado, com os jumpers colocados em uma das seguintes formas:
Figura 11 - Jumpers para o gerador de clock;
Figura 12 - Jumpers para clock manual através do botão;
Neste caso, utilizaremos o gerador de clock; a frequência escolhida será de 2Hz (a menor fornecida pelo kit). No entanto, também pode-se utilizar o botão mostrado na figura 12; ao escolher esta opção, tem-se por consequência o efeito de trepidação.
Gravação
Depois de atribuir os pinos do projeto, faça uma compilação completa, para gerar o arquivo de gravação do projeto, além do programa procurar algum erro ou aviso no mesmo.
Para gravar o projeto, veja o Tutorial de Criação de Projeto em Modo Esquemático na etapa de "Gravação do CPLD" clicando aqui. Lembre-se sempre de gravar o módulo de CPLD sem os periféricos para evitar problemas na pinagem com projetos anteriores. Também não esqueça de configurar as saídas não utilizadas como entradas tri-state.
Para testar o funcionamento desse projeto, monte a periferia indicada na sessão "Montagem e Roteamento" deste artigo. A contagem iniciará automaticamente como mostra o vídeo do projeto na introdução do artigo.
Arquivos do projeto
Para fazer o download do projeto completo, clique aqui.