Altifigence Academy

16 / 37 · Conceito

Contadores modulares, saturação e pulsos de término

Projete a política do máximo e o ciclo exato do sinal de fim de contagem.

Três políticas diferentes ao exceder o intervalo

Com o mesmo 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 N bits, a especificação decide se retorna, satura ou indica erro ao atingir o máximo.

Cnextwrap=(C+1) mod 2NC_{next}^{wrap}=(C+1)\bmod2^N
Cnextsat=min⁡(C+1,2N−1)C_{next}^{sat}=\min(C+1,2^N-1)

Em oito bits, passar de 255 para 0 e permanecer em 255 são funções diferentes. Um acumulador que trate positivos e negativos também precisa do intervalo signed e de saturação nos dois limites.

Cada coluna abaixo registra uma borda de subidaBorda de subida Instante em que o clock passa de 0 para 1. É diferente do nível alto, que abrange todo o intervalo com CLK=1. Saiba mais; entradas anteriores e estados «depois» posteriores. O alinhamento ordena amostras, não representa propagação físicaAtraso de propagação Tempo entre uma mudança de entrada e a estabilização da saída no valor correto. Equivalência lógica e comportamento temporal são propriedades distintas. Saiba mais. Com count=8, reset=0, enable=1 iniciais, módulo 10, retorno de quatro bits e saturação de quatro bits produzem trajetórias diferentes.

Três políticas após o máximo
Ver os dados da forma de onda
Dados da forma de onda: cada caractere é um intervalo; um ponto mantém o estado anterior; p representa um ciclo de clock.
SinalForma de ondaValores do barramento
borda234523452E0 → E1 → E2 → E3 → E4 → E5 → E6 → E7 → E8
mod10 depois2345234529 → 0 → 1 → 2 → 3 → 4 → 5 → 6 → 7
wrap4 depois2345234529 → 10 → 11 → 12 → 13 → 14 → 15 → 0 → 1
sat4 depois2345234..9 → 10 → 11 → 12 → 13 → 14 → 15

Compare o último estado do módulo M

Para um pulso a cada dez incrementos, use estados 0–9 e conte apenas bordas habilitadas. Pode-se registrar pulse com o significado «nesta borda, 9 foi consumido e houve retorno a 0».

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

A atribuição padrão retorna pulse a 0 na próxima borda. Já uma saída count==9 pode durar vários ciclos se enable=0 parar o contador. Distinga estado terminal de evento de conclusão.

De onde o período é contado

Após reset e partindo de count=0, são necessárias dez bordas com enable=1 para o primeiro pulse. Mais do que chamar a primeira borda de 0 ou 1, importa definir entradas, estados e saídas consistentemente.

O controle abaixo é módulo 16. Partindo de 1110, uma borda dá 1111 e a próxima, 0000. Pare em 1111 com enable=0. Manutenção e saturação podem mostrar o mesmo valor, mas diferem ao retomar. Compare qual valor um contador saturante deveria ter nessas condições.

Pare ou faça o contador retornar no máximo de quatro bits

O reset síncrono tem prioridade sobre enable. Com enable=0, o valor armazenado é mantido. q=1110; q_next = (q + 1) mod 16

Experimente

Com count=9 e pulse=0, passam duas bordas com en=0 e outra com en=1. O que ocorre com count e pulse?

Ler a explicação

Nas duas bordas paradas, mantêm-se count=9 e pulse=0. Na terceira, passam para count=0 e pulse=1. Na borda seguinte, a atribuição padrão retorna pulse a 0.

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