29 / 37 · Concepto
Proyecto integrado: detector del patrón 101 con solapamiento
Aplique minimización de estados, entrada válida, salida registrada y referencia independiente en un diseño.
Las lecciones se pueden leer gratis. Inscríbete para guardar el progreso.
Fije primero los requisitos
En un flanco ascendenteFlanco ascendente Instante en que el reloj pasa de 0 a 1. Se distingue del nivel alto, que abarca todo el intervalo con CLK=1. Más información con valid=1 se acepta bit_in. Si los últimos bits aceptados terminan en 101, hit vale 1 durante el ciclo posterior. Se permite solapamiento: 10101 debe detectar en los bits 3 y 5. Con valid=0 se conserva el estado y hit=0; reset inicializa estado y hit.
Almacene solo la historia necesaria
S0 significa que no hay prefijo coincidente; S1, que el sufijo es 1; S10, que es 10. Después de completar 101, su último 1 puede iniciar otro patrón, por lo que se vuelve a S1.
| Estado actual | Bit 0 aceptado | Bit 1 aceptado |
|---|---|---|
| S0 | S0, hit=0 | S1, hit=0 |
| S1 | S10, hit=0 | S1, hit=0 |
| S10 | S0, hit=0 | S1, hit=1 |
Cada columna registra un flanco, con entradas previas y estados «después» actualizados. La alineación no representa propagación físicaRetardo de propagación Tiempo desde un cambio de entrada hasta que la salida se estabiliza en el valor correcto. La equivalencia lógica y el comportamiento temporal son propiedades distintas. Más información. Se parte de S0 tras reset y valid=1 en todas las columnas. Conservar S1 tras detectar el tercer bit permite detectar también el quinto.
Ver los datos de la forma de onda
| Señal | Forma de onda | Valores del bus |
|---|---|---|
| bit aceptado | 10101 | |
| estado después | 23452 | S1 → S10 → S1 → S10 → S1 |
| hit después | 0.101 |
Implemente la salida de detección 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 almacena en un registroRegistro Circuito que almacena varios bits de estado. Los registros síncronos de este curso capturan la entrada especificada en el flanco de reloj. Más información el resultado calculado desde el estado y la entrada aceptada en ese flanco. No responde inmediatamente a cambios de bit_in entre flancos como una salida Mealy puramente combinacional. El ejemplo se estudia como SystemVerilog general; soporte sintáctico y evidencia de ejecución del motor didáctico de un solo reloj se comprueban aparte.
Calcule criterios de aceptación de forma independiente
Construya una cadena solo con bits aceptados y, desde longitud tres, compare sus últimos tres caracteres con 101. No hace falta copiar la codificación de estados de la FSMMáquina de estados Modelo que determina el siguiente estado y las salidas a partir del estado almacenado y las entradas. Deben definirse conjuntamente las transiciones, las salidas y el reset. Más información.
- 101 → hit en 3.
- 10101 → hit en 3 y 5.
- 11101 → hit en 5.
- 1001 → ninguna detección.
- 1,0, luego reset y después 1 → ninguna detección.
- Insertar valid=0 entre o después de 1,0 → mismos resultados por número de aceptación.
La práctica de secuencias comprueba la función con entradas válidas continuas. No la interprete como verificación de reset, pausas valid o temporización física.
Cambiar las entradas
Inténtalo tú
Si tras detectar 101 cambia el retorno a S0, ¿qué secuencia mínima difiere de la especificación original?
Leer la explicación
- El circuito correcto detecta en las entradas 3 y 5. Volver a S0 impide reutilizar el último 1 de la primera detección como inicio de la siguiente y pierde la detección 5.