Altifigence Academy

29 / 37 · Conceito

Projeto integrado: detector do padrão 101 com sobreposição

Aplique minimização de estados, entrada válida, saída registrada e referência independente em um projeto.

Fixe primeiro os requisitos

Numa 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 com valid=1, bit_in é aceito. Se os últimos bits aceitos terminarem em 101, hit vale 1 durante o ciclo seguinte. Sobreposição é permitida: 10101 deve detectar nos bits 3 e 5. Com valid=0, o estado é mantido e hit=0; reset inicializa estado e hit.

Armazene apenas o histórico necessário

S0 significa ausência de prefixo correspondente; S1, sufixo 1; S10, sufixo 10. Após completar 101, seu último 1 pode iniciar outro padrão, portanto retorna-se a S1.

Estado atualBit 0 aceitoBit 1 aceito
S0S0, hit=0S1, hit=0
S1S10, hit=0S1, hit=0
S10S0, hit=0S1, hit=1

Cada coluna registra uma borda, com entradas anteriores e estados «depois» atualizados. O alinhamento 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. Parte-se de S0 após reset e valid=1 em todas as colunas. Manter S1 após detectar o terceiro bit permite detectar também o quinto.

Duas detecções sobrepostas em 10101
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
bit aceito10101
estado depois23452S1 → S10 → S1 → S10 → S1
hit depois0.101

Implemente a saída de detecção registrada

SystemVerilog
module pattern_101 (
  input logic clk, rst, valid, bit_in,
  output logic hit
);
  typedef enum logic [1:0] {S0, S1, S10} state_t;
  state_t state;
  always_ff @(posedge clk) begin
    if (rst) begin
      state <= S0;
      hit <= 1'b0;
    end else begin
      hit <= 1'b0;
      if (valid) begin
        case (state)
          S0: state <= bit_in ? S1 : S0;
          S1: state <= bit_in ? S1 : S10;
          S10: begin
            state <= bit_in ? S1 : S0;
            hit <= bit_in;
          end
          default: state <= S0;
        endcase
      end
    end
  end
endmodule

hit armazena num 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 o resultado calculado a partir do estado e da entrada aceita naquela borda. Não responde imediatamente a mudanças de bit_in entre bordas como uma saída Mealy puramente combinacional. O exemplo é estudado como SystemVerilog geral; suporte de sintaxe e evidência de execução do motor didático de clock único são verificados separadamente.

Calcule critérios de aceitação de forma independente

Construa uma string apenas com bits aceitos e, a partir do comprimento três, compare seus últimos três caracteres com 101. Não é necessário copiar a codificação de estados da FSMMáquina de estados Modelo que determina o próximo estado e as saídas a partir do estado armazenado e das entradas. Transições, saídas e reset devem ser definidos em conjunto. Saiba mais.

  • 101 → hit em 3.
  • 10101 → hit em 3 e 5.
  • 11101 → hit em 5.
  • 1001 → nenhuma detecção.
  • 1,0, depois reset e então 1 → nenhuma detecção.
  • Inserir valid=0 entre ou depois de 1,0 → mesmos resultados por número de aceitação.

A prática de sequências verifica a função com entradas válidas contínuas. Não a interprete como verificação de reset, pausas valid ou temporização física.

Alterar as entradas

Experimente

Se, após detectar 101, o retorno mudar para S0, qual sequência mínima difere da especificação original?

Ler a explicação
  1. O circuito correto detecta nas entradas 3 e 5. Retornar a S0 impede reutilizar o último 1 da primeira detecção como início da próxima e perde a detecção 5.

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