Altifigence Academy

17 / 37 · Prática

Prática: verifique reset, retorno modular e invariantes do contador

Compare cada borda com uma referência e separe os efeitos de inicialização, reset e largura.

Circuito e condições de observação

Comece em 3 e aplique 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 na primeira 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. Depois percorra 0,1,2,3,0. Mesmo com reset já ativo, o valor anterior é mantido até a borda.

Antes de começar

Prepare um projeto Desktop do Digital Design Studio com permissões de execução. Salve cada exemplo como rtl/top.sv em sua própria pasta.

Código SystemVerilog

SystemVerilog
module top (
    input logic clk,
    input logic rst,
    output logic [1:0] count
);
    // Active-high synchronous reset: sampled only at the rising clock edge.
    always_ff @(posedge clk)
        if (rst) count <= 2'b00;
        else count <= count + 2'b01;
endmodule

Execução

Em New analysis, selecione Two-state single-clock v1. Clock port é clk e o período, 1000ps. Execute Preflight e Run RTL simulation com estes valores e compare os resultados.

ConfiguraçãoValor
Valores iniciais dos registradores, a partir do LSB[true,true]
Reset portrst · Active high · 1 cycle
Maximum cycles / time5 / 5000ps

Estímulos de entrada

json
[
  {
    "inputs": {}
  },
  {
    "inputs": {}
  },
  {
    "inputs": {}
  },
  {
    "inputs": {}
  },
  {
    "inputs": {}
  }
]

Cada coluna registra uma borda: entradas anteriores e estados «depois» após a atualização. O alinhamento ordena amostras e não representa atraso de propagaçãoAtraso 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. E0–E4 são as bordas de 500,1500,2500,3500,4500ps. Compare todos os estados intermediários, além do final.

As cinco bordas de subida da prática
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
borda23452E0 → E1 → E2 → E3 → E4
reset10...
count antes2345211 → 00 → 01 → 10 → 11
count depois2345200 → 01 → 10 → 11 → 00

Comparação dos resultados

5 cycles · count=00. Confira 00 → 01 → 10 → 11 → 00 em 500,1500,2500,3500,4500ps.

Usa-se RTL 0/1 de um único clock, sem testbenches #delay, initial ou X/Z. A marca de conclusão da aula registra aprendizagem, não uma simulação real.

Calcule o estado esperado em cada borda

O 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 começa em 3, mas reset prevalece na primeira borda. Inicialização e reset são conceitos diferentes.

Borda de subidarstcount antescount depois
500ps11100
1500ps00001
2500ps00110
3500ps01011
4500ps01100

Sem reset, cada borda deve cumprir:

ck+1=(ck+1) mod 4c_{k+1}=(c_k+1)\bmod 4

Conferir apenas o 00 final permite passar mesmo após estados intermediários incorretos. Verifique a sequência completa e a prioridade do reset separadamente.

Mude uma condição por vez

  • Com estado inicial 00, a sequência após o primeiro reset deve ser idêntica. Assim se confere a independência do estado inicial.
  • Com Reset cycles=2, count deve ser 00 nas duas primeiras bordas; o incremento começa uma borda depois.
  • Com largura de três bits, o retorno ocorre a cada oito incrementos. Revise também larguras das constantes, vetor de inicialização e duração da execução.

Generalize para módulo 10

Quatro bits representam 0–15; incrementar sem outra lógica não passa de 9 para 0. Defina outra função, com reset prioritário:

ck+1={0rk=10rk=0 ∧ ek=1 ∧ ck≥9ck+1rk=0 ∧ ek=1 ∧ ck<9ckrk=0 ∧ ek=0c_{k+1}=\begin{cases}0 & r_k=1\\0 & r_k=0\ \land\ e_k=1\ \land\ c_k\ge 9\\c_k+1 & r_k=0\ \land\ e_k=1\ \land\ c_k<9\\c_k & r_k=0\ \land\ e_k=0\end{cases}

Os estados não usados 10–15 retornam a 0 ao habilitar. Outras políticas são possíveis, mas especificação e referência devem coincidir.

Experimente

No contador original de dois bits, após o reset da primeira borda há 11 incrementos, sem enable. Quanto vale count? Calcule sem enumerar os estados.

Ler a explicação

Após reset vale 0 e 11 mod 4=311\bmod4=3, ou seja, 11. «Onze bordas totais» não equivale a «onze incrementos após reset»: se a primeira reinicializa, há apenas dez incrementos.

Lesson files

counter-top.sv ↓counter-inputs.json ↓

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