Altifigence Academy

29 / 63 · Conceito

Quantidade de estados, largura do contador e códigos não usados

Calcule bits de armazenamento a partir do intervalo e defina a recuperação de estados inválidos.

Contar também é uma máquina de estados

Um contador 0–9 precisa de dez estados e pelo menos ⌈log⁡210⌉=4\lceil\log_2 10\rceil=4 bits. Um registradorRegistrador Circuito que armazena vários bits de estado. Os registradores síncronos deste curso capturam a entrada especificada na borda de clock. Saiba mais de quatro bits tem 16 padrões: escolher a largura correta não completa a função módulo 10.

N=⌈log⁡2M⌉,coˊdigos na˜o usados=2N−MN=\left\lceil\log_2 M\right\rceil,\qquad \text{códigos não usados}=2^N-M

M é a quantidade de estados, não o máximo. Contar de 0 a M−1 difere de contar até M. Se admitir M=1 como parâmetro, use pelo menos um bit e mantenha sempre 0.

Dos 16 códigos de quatro bits, módulo 10 usa dez como estados normais. Depois da largura, projete a comparação e a recuperação.

Largura de armazenamento e condição de retorno são projetos separados
  1. Dez estados: count normal vai de 0 a 9
  2. Armazenamento de quatro bits: 16 códigos; 10–15 ficam livres
  3. Próximo estado: Se en=1 e count≥9, passe para 0

Estados fora do intervalo também são especificados

O que deve ocorrer se o contador módulo 10 chegar a 12? Demonstre as condições de inicialização e resetReset Controle que retorna o estado a um valor inicial especificado. É preciso definir se é síncrono ou assíncrono e sua prioridade em relação a outros controles. Saiba mais que permitem pressupor que isso não ocorre, ou estabeleça recuperação para 0 a partir de 9 ou mais. Recuperação não significa tolerância a toda falha física.

SystemVerilog
always_ff @(posedge clk) begin
  if (rst) count <= 4'd0;
  else if (en) begin
    if (count >= 4'd9) count <= 4'd0;
    else count <= count + 4'd1;
  end
end

O exemplo também recupera 10–15, mas somente numa borda com en=1. Com enable=0, mantém até mesmo o valor inválido; recuperação imediata exigiria mudar a prioridade.

Revisar largura e revisar função são tarefas diferentes

Dez bits bastam para 0–999, mas um incremento livre chega a 1023. São necessárias comparação e seleção para voltar a 0 a partir do máximo especificado. Em contadores de endereços, iterações ou tamanhos de pacote, essa confusão causa acessos ou comprimentos incorretos.

Experimente

Calcule a largura mínima e os códigos não usados de um contador que repete 0–99. O que muda se apenas somar 1 com essa largura?

Ler a explicação

Há 100 estados: são necessários sete bits e restam 128−100=28128-100=28 códigos não usados. Incrementar sem outra lógica não volta a 0 em 99, mas chega a 127: resulta módulo 128, não módulo 100.

Sua escolha vale neste navegador. Altere-a a qualquer momento no rodapé.