Altifigence Academy

40 / 63 · Prática

Prática: verifique o movimento serial e a ordem dos bits

Use referências binárias e inteiras para verificar direção, descarte de bits e latência após reset.

Circuito e condições de observação

Em cada 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, os dois bits inferiores do q anterior avançam para a esquerda e din entra no bit 0. Insira 1,0,1,1 e compare o movimento.

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 uma pasta independente.

Código SystemVerilog

SystemVerilog
module top (
    input logic clk,
    input logic rst,
    input logic din,
    output logic [2:0] q
);
    // Old q[1:0] and din are captured together at each rising edge.
    always_ff @(posedge clk)
        if (rst) q <= 3'b000;
        else q <= {q[1:0], din};
endmodule

Execução

Em New analysis, selecione Two-state single-clock v1. Configure Clock port=clk e 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[false,false,false]
Reset portrst · Active high · 1 cycle
Maximum cycles / time5 / 5000ps

Estímulos de entrada

json
[
  {
    "inputs": {
      "din": [
        false
      ]
    }
  },
  {
    "inputs": {
      "din": [
        true
      ]
    }
  },
  {
    "inputs": {
      "din": [
        false
      ]
    }
  },
  {
    "inputs": {
      "din": [
        true
      ]
    }
  },
  {
    "inputs": {
      "din": [
        true
      ]
    }
  }
]

Cada coluna registra uma borda, com entradas anteriores e estados «depois» após a atualização. 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. A primeira coluna é 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; seu din=0 não conta como dado armazenado. Compare as quatro entradas seguintes com a ordem do JSON.

Estímulos e movimento do estado de três bits
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...
din0101.
q depois23452000 → 001 → 010 → 101 → 011

Comparação dos resultados

5 cycles · q=011. Em bordas sucessivas: 000 → 001 → 010 → 101 → 011.

Usa-se RTL 0/1 de um único clock, sem testbenches #delay, initial ou X/Z. Concluir a aula registra aprendizagem, não um resultado real de simulação.

Confira a concatenação com uma referência independente

Copiar a mesma concatenaçãoConcatenação Operação que une sequências de bits lado a lado. A largura resultante é a soma de suas larguras; não é uma soma numérica. Saiba mais do RTL na resposta esperada pode duplicar o erro. Use um modelo inteiro unsignedunsigned Interpretação de uma sequência de bits como inteiro não negativo. Com n bits, o intervalo é de 0 a 2^n−1; pode diferir da interpretação signed dos mesmos bits. Saiba mais:

Qk+1=(2Qk+dk) mod 8Q_{k+1}=(2Q_k+d_k)\bmod 8

Após reset, 1,0,1,1 produz 0→1→2→5→30\to1\to2\to5\to3. Em binário de três bits, deve coincidir com a onda. No último passo, 2⋅5+1=112\cdot5+1=11, e manter os três bits baixos deixa 3.

Bits recebidosEntradaq após a bordaInteiro
0Reset0000
110011
200102
311015
410113

Com reset=0 e enable=1, selecione din=1,0,1,1 e avance uma vez a cada entrada: q será 001,010,101,011. Preveja com o controle passo a passo e depois compare com RTL real. Enable também permite testar a parada da ampliação abaixo.

Preveja a ordem dos bits antes de executar RTL

O reset síncrono tem prioridade sobre enable. Com enable=0, o valor armazenado é mantido. q=000; q_next = (2q + din) mod 8

Siga um bit para verificar a direção

Após reset, insira um 1 e três zeros: 001 → 010 → 100 → 000. O primeiro 1 deve passar pelos bits 0,1,2 e sair. Usar apenas padrões de zeros ou de uns pode esconder a direção incorreta.

Se a primeira captura ocorrer em k, esse bit chega ao bit 2 após a borda k+2 de 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 três estágios. Contar a partir da borda de lançamento de um registrador externo muda a origem. Indique sempre origem e destino no relatório.

Ampliação: desloque somente entradas válidas

Adicionar valid e manter q com valid=0 difere de um pipeline que desloca a cada ciclo junto com um bit valid independente. O primeiro avança por dados recebidos; o segundo, por ciclos de clock. Não verifique ambos com a mesma sequência de estados esperados.

Experimente

Após reset, os bits válidos são 1,0,1. Há um ciclo valid=0 antes e outro depois do segundo bit; neles q é mantido. Explique o q final e quando o primeiro 1 chega ao bit 2.

Ler a explicação

Apenas três entradas válidas mudam o estado: q final é 101. O primeiro 1 chega ao bit 2 na borda que armazena a terceira entrada válida. São necessários dois deslocamentos adicionais após a primeira captura; as duas pausas prolongam o tempo real.

Lesson files

shift-top.sv ↓shift-inputs.json ↓

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