Nenhum comentário

Tutorial de Verilog: Contador binário síncrono crescente Mod 10 com reset síncrono em nível lógico baixo

Circuitos contadores são utilizados em projetos de sistemas digitais com múltiplos propósitos. Eles podem ser utilizados para contar o número de ocorrências de um determinado evento, gerar intervalos de tempo específicos para controle de várias tarefas em um sistema, detectar o tempo decorrido entre dois eventos específicos, divisão de frequências e etc.

Contadores podem ser implementados utilizando os circuitos somadores/subtratores, registradores (conjunto de flip flops) e lógica combinacional. Os contadores podem ser projetados com todos os tipos de flip flops existentes (D, SR, JK e T). Cada tipo de flip flop possui uma tabela de transição específica e a escolha do tipo de flip flop pode simplificar o projeto do contador.

Existem diferentes maneiras de classificar os contadores. Eles podem ser classificados como contadores síncronos ou assíncronos, contagem crescente ou decrescente, nível lógico do sinal de reset e tipo de transição de contagem:

  • Contadores síncronos: No contador síncrono, as entradas de clock de todos os flip flops são conectadas ao sinal de clock global do sistema projetado;
  • Contadores assíncronos: No contador assíncrono, apenas a entrada de clock do flip flop do bit menos significativo do contador está conectada ao sinal de clock global do sistema projetado;
  • Contagem crescente: Como o próprio nome sugere, uma nova palavra binária de maior magnitude é formada pelo conjunto dos flip flops do contador a cada iteração de contagem;
  • Contagem decrescente: Como o próprio nome sugere, uma nova palavra binária de menor magnitude é formada pelo conjunto dos flip flops do contador a cada iteração de contagem;
  • Reset nível alto: Quando a lógica de reset apresenta como resultado o nível lógico alto, o contador muda para seu estado inicial;
  • Reset nível baixo: Quando a lógica de reset apresenta como resultado o nível lógico baixo, o contador muda para seu estado inicial;
  • Transição positiva de contagem: A iteração de contagem ocorre na borda positiva do sinal, ou seja, quando o sinal de iteração sai de nível lógico baixo e vai para nível lógico alto;
  • Transição negativa de contagem: A iteração de contagem ocorre na borda negativa do sinal, ou seja, quando o sinal de iteração sai de nível lógico alto e vai para nível lógico baixo.

Em particular, dentro do universo dos contadores síncronos, existem duas outras classificações: reset síncrono e reset assíncrono:

  • Reset síncrono: Nos contadores com reset síncrono, o sinal de reset somente afetará o estado dos flip flops em uma transição ativa (positiva ou negativa) do sinal de clock;
  • Reset assíncrono: Nos contadores com reset assíncrono, o sinal de reset afeta o estados dos flip flops quando o nível lógico desejado do sinal de reset ocorre, ou seja, independente de uma transição ativa (positiva ou negativa) do sinal de clock.

As vantagens e desvantagens dos contadores síncronos para os contadores assíncronos, do modo de contagem crescente e modo de contagem decrescente, do reset em nível alto ou reset em nível baixo, da transição positiva de contagem ou transição negativa de contagem e do reset síncrono e assíncrono para os contadores síncronos são temas para futuros artigos que serão desenvolvidos nesta coluna.

O projeto deste artigo é um contador binário síncrono, de contagem crescente, com reset síncrono em nível baixo, contagem na transição positiva do clock e modular em década (mod 10). O contador modular em década deve fazer a contagem de 0 a 9 e recomeçar sua contagem. Sendo assim, um total de quatro bits são suficientes para armazenar a palavra de saída do contador.

Implementação do contador binário síncrono em Verilog

Utilizando o software Altera Quartus II 13.0 Web Edition, criou-se o módulo deste projeto. O módulo foi descrito como segue:

No código apresentado temos as evidências de todas as características do projeto do contador deste artigo.

Como a contagem acontece dentro de uma estrutura always com somente a transição positiva do sinal de clock na lista de sensibilidade, linha 17, pode-se afirmar que este contador é do tipo síncrono e com transição positiva de contagem.

Como a análise do nível lógico do sinal de reset é realizada somente na transição positiva do sinal de clock, linha 19, tem-se a evidência de um contador de reset síncrono.

O sinal de reset externo do contador foi combinado com uma lógica do tipo AND com uma operação ternária, linha 15. O operador ternário da linguagem Verilog foi utilizado para retornar o valor da comparação do conteúdo do registrador reg_count com o valor 9, último valor válido para o contador de década. Na operação ternária quando reg_count for igual ao valor 9, o resultado é nível lógico baixo e em qualquer outro caso o resultado é nível lógico alto. Como o projeto do artigo tinha como premissa um reset em nível lógico baixo, a combinação do reset externo com o operador ternário através da lógica AND foi o circuito mais simples desenvolvido.

Como a análise do nível lógico do sinal de reset nega o sinal de um bit reset_comb, a contagem só é reiniciada quando o valor de reset_comb é igual a nível lógico baixo, evidenciando o requisito do projeto em reset em nível baixo.

A última evidência, referente ao modo de contagem positivo, é apresentada na linha 20. O sinal de soma com a constante de um bit igual a 1 evidencia que a contagem é positiva. Note que para esta soma não é necessário fazer o tratamento do carry de saída do somador sintetizado pela ferramenta, uma vez que o contador não ultrapassar o valor 9.

Testbench para o Contador binário síncrono em Verilog

Existem muitas metodologias para preparar um vetor de testes para verificar o funcionamento de um projeto digital. Os engenheiros de verificação são responsáveis por elaborar vetores de testes para cobrir todos os casos de um projeto digital. No testbench desenvolvido para este projeto, optou-se por fazer uma conferência automática simples onde em cada iteração do sinal de clock é testado o valor do contador. O testbench foi dividido em 4 partes para facilitar o entendimento dos testes.

Durante a primeira parte da simulação, 5 pulsos de clock foram enviados para o contador com o sinal de reset em nível lógico baixo. Dessa forma, o comportamento esperado do circuito é manter o valor de saída do contador igual a 0, ou seja, o seu estado de reset.

Durante a segunda parte da simulação, 18 pulsos de clock foram enviados para o contador com o sinal de reset em nível lógico alto. Dessa forma, o comportamento esperado do circuito é fazer a contagem como um contador de mod 10.

Durante a terceira parte da simulação, 15 pulsos de clock foram enviados para o contador com o sinal de reset em nível lógico baixo. Repare que o contador não muda o valor atual da contagem, pois é necessária uma borda positiva do sinal do clock para que o reset tenha efeito. Em seguida, 15 pulsos de clock foram enviados para o contador. Conforme era de se esperar, o contador mantém o valor de saída igual a 0, ou seja, em seu estado de reset.

Na quarta e última parte da simulação, 25 pulsos de clock foram enviados para o contador com o sinal de reset em nível lógico alto. O contador segue sua contagem em mod 10 até que o comando para interromper a simulação acontece.

A forma de onda resultante foi de acordo com o esperado. No console do ModelSim não foram reportadas as mensagens de erros das conferências automáticas. Somente a mensagem “Fim do Testbench.” apareceu, comprovando que não houve nenhum comportamento inesperado no teste do contador.

Forma de onda resultante do teste – Resultado do teste

A forma de onda da janela Wave do ModelSim também pode ser utilizada para analisar o resultado da simulação. Verifique o resultado apresentado pela ferramenta.

Contador binário síncrono - Wave no ModelSim

Caso queira reproduzir o teste completo ou mesmo só estudar o código, faça Download do Projeto para o Quartus da Altera e aperte o play:

download

Comentários, sugestões, críticas são sempre bem-vindas!

Referências

Fundamentals of Digital Logic with VHDL Design (2nd Ed.) - Stephen Brown, Zvonko Vranesic

Outros artigos da série

<< Tutorial de Verilog: Conversor BCD para 7 Segmentos
Licença Creative Commons Esta obra está licenciada com uma Licença Creative Commons Atribuição-CompartilhaIgual 4.0 Internacional.

Receba os melhores conteúdos sobre sistemas eletrônicos embarcados, dicas, tutoriais e promoções.

Hardware » Sistemas Digitais » Tutorial de Verilog: Contador binário síncrono crescente Mod 10 com reset síncrono em nível lógico baixo
Comentários:
Notificações
Notificar
guest
0 Comentários
Inline Feedbacks
View all comments
Talvez você goste:

Séries



Outros da Série

Menu

WEBINAR
 
Debugging
em Linux embarcado

 

Data: 30/09 às 19:30h - Apoio: Mouser Elecctronics
 
INSCREVA-SE AGORA »



 
close-link