Portal - FPGA para Todos

Contador de dois bits

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.

O arquivo está no formato ".zip", e inclui os arquivos de projeto do Quartus (".qpf"), de modo esquemático (".bdf"), de modo VHDL para simulação (".vhd"), de gravação do CPLD (".pof"), de símbolo para usar em projetos mais avançados (".bsf"), entre outros.

Referências

Quem está Online

Temos 20 visitantes e Nenhum membro online

Apoio

Login Form