29 / 37 · Concetto
Progetto integrato: rilevatore di 101 sovrapposti
Applicare minimizzazione dello stato, validità, uscita registrata e verifica indipendente.
Le lezioni sono gratuite. Iscriviti per salvare i progressi.
Fissare prima i requisiti
Ai fronti di salitaFronte di salita Passaggio del clock da 0 a 1, distinto dall’intero intervallo di livello CLK=1. Approfondisci con valid=1 si accetta un bit_in. Se gli ultimi bit accettati terminano con 101, hit vale 1 per un ciclo dopo quel fronte. Sono ammessi pattern sovrapposti: 10101 deve dare hit al terzo e quinto bit. valid=0 mantiene lo stato e azzera hit; reset inizializza entrambi.
Memorizzare solo il passato necessario
S0 significa nessun prefisso corrispondente, S1 terminazione in 1, S10 terminazione in 10. Completato 101, l'ultimo 1 può iniziare il pattern seguente: si torna quindi a S1.
| Stato | Bit accettato 0 | Bit accettato 1 |
|---|---|---|
| S0 | S0, hit=0 | S1, hit=0 |
| S1 | S10, hit=0 | S1, hit=0 |
| S10 | S0, hit=0 | S1, hit=1 |
Ogni colonna registra un fronte di salitaFronte di salita Passaggio del clock da 0 a 1, distinto dall’intero intervallo di livello CLK=1. Approfondisci. Gli ingressi sono quelli immediatamente precedenti; gli stati con „after“ quelli subito dopo l’aggiornamento. Le colonne indicano l’ordine dei campioni, non il ritardo fisico di propagazioneRitardo di propagazione Tempo dalla variazione d’ingresso all’assestamento corretto dell’uscita. Equivalenza logica e proprietà temporali sono distinte. Approfondisci. Dopo reset si parte da S0 e valid è sempre 1. La rilevazione al terzo bit lascia S1, permettendo quella al quinto.
Mostra i dati della forma d’onda
| Segnale | Forma d’onda | Valori del bus |
|---|---|---|
| accepted bit | 10101 | |
| state after | 23452 | S1 → S10 → S1 → S10 → S1 |
| hit after | 0.101 |
Implementare un'uscita di rilevazione registrata
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 memorizza in un registroRegistro Memorizza uno stato di più bit. I registri sincroni del corso acquisiscono gli ingressi specificati al fronte di clock. Approfondisci il risultato calcolato da stato e ingresso accettato. Diversamente da un'uscita Mealy puramente combinatoria, non reagisce subito a bit_in fra i fronti. L'esempio SystemVerilog generale richiede un controllo separato della sintassi supportata e delle evidenze d'esecuzione dell'engine a clock singolo fornito.
Calcolare il successo indipendentemente
Il riferimento può concatenare solo i bit accettati in una stringa e, da lunghezza tre, confrontare gli ultimi tre caratteri con 101. Non serve copiare la codifica FSMMacchina a stati Modello che determina stato successivo e uscite da stato memorizzato e ingressi. Transizioni, uscite e reset si definiscono insieme. Approfondisci.
- 101 → hit alla posizione 3
- 10101 → hit alle posizioni 3,5
- 11101 → hit alla posizione 5
- 1001 → nessuna rilevazione
- 1,0, poi reset, poi 1 → nessuna rilevazione
- Inserire valid=0 fra o dopo 1,0 → stessi risultati per numero d'accettazione
Il modello seguente verifica ingressi continuamente validi. Non prova reset, stop valid o timing fisico.
Modifica gli ingressi
Prova tu
Qual è la sequenza minima che differisce dalla specifica tornando a S0 dopo 101?
Leggi la spiegazione
- I hit corretti sono al terzo e quinto bit. Tornando a S0, l’ultimo 1 della prima rilevazione non può iniziare la successiva e si perde il hit al quinto.