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.
As aulas podem ser lidas gratuitamente. Inscreva-se para salvar o progresso.
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 atual | Bit 0 aceito | Bit 1 aceito |
|---|---|---|
| S0 | S0, hit=0 | S1, hit=0 |
| S1 | S10, hit=0 | S1, hit=0 |
| S10 | S0, hit=0 | S1, 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.
Ver os dados da forma de onda
| Sinal | Forma de onda | Valores do barramento |
|---|---|---|
| bit aceito | 10101 | |
| estado depois | 23452 | S1 → S10 → S1 → S10 → S1 |
| hit depois | 0.101 |
Implemente a saída de detecção registrada
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
endmodulehit 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
- 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.