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.
As aulas podem ser lidas gratuitamente. Inscreva-se para salvar o progresso.
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
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;
endmoduleExecuçã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ção | Valor |
|---|---|
| Valores iniciais dos registradores, a partir do LSB | [true,true] |
| Reset port | rst · Active high · 1 cycle |
| Maximum cycles / time | 5 / 5000ps |
Estímulos de entrada
[
{
"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.
Ver os dados da forma de onda
| Sinal | Forma de onda | Valores do barramento |
|---|---|---|
| borda | 23452 | E0 → E1 → E2 → E3 → E4 |
| reset | 10... | |
| count antes | 23452 | 11 → 00 → 01 → 10 → 11 |
| count depois | 23452 | 00 → 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 subida | rst | count antes | count depois |
|---|---|---|---|
| 500ps | 1 | 11 | 00 |
| 1500ps | 0 | 00 | 01 |
| 2500ps | 0 | 01 | 10 |
| 3500ps | 0 | 10 | 11 |
| 4500ps | 0 | 11 | 00 |
Sem reset, cada borda deve cumprir:
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:
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 , ou seja, 11. «Onze bordas totais» não equivale a «onze incrementos após reset»: se a primeira reinicializa, há apenas dez incrementos.