29 / 37 · Concept
Projet de synthèse : détecteur de 101 avec recouvrement
Réunir réduction d'état, validité d'entrée, sortie enregistrée et vérification indépendante dans une conception.
Les leçons sont gratuites. Inscrivez-vous pour enregistrer vos progrès.
Fixer d'abord les exigences
Au front montantFront montant Instant où l'horloge passe de 0 à 1, distinct du niveau désignant tout l'intervalle CLK=1. En savoir plus où valid=1, acceptez bit_in. Si la fin des bits acceptés est 101, mettez hit à 1 pendant le cycle suivant ce front. Les recouvrements sont autorisés : 10101 doit produire hit aux troisième et cinquième bits. Avec valid=0, conservez l'état et mettez hit=0 ; reset initialise état et hit.
Ne mémoriser que le passé nécessaire
S0 signifie aucun préfixe correspondant, S1 une fin en 1, S10 une fin en 10. Après 101, le dernier 1 peut commencer le motif suivant : revenez donc à S1.
| État actuel | Bit 0 accepté | Bit 1 accepté |
|---|---|---|
| S0 | S0, hit=0 | S1, hit=0 |
| S1 | S10, hit=0 | S1, hit=0 |
| S10 | S0, hit=0 | S1, hit=1 |
Chaque colonne observe un front, entrées avant et états after après ; l'alignement n'est pas un retard physiqueRetard de propagation Temps nécessaire après un changement d'entrée pour que la sortie se stabilise à sa valeur correcte. Équivalence logique et caractéristiques temporelles sont distinctes. En savoir plus. Après reset en S0, valid vaut 1 partout. Le retour à S1 après la détection au troisième bit permet celle du cinquième.
Voir les données du chronogramme
| Signal | Forme d'onde | Valeurs du bus |
|---|---|---|
| bit accepté | 10101 | |
| état après | 23452 | S1 → S10 → S1 → S10 → S1 |
| hit après | 0.101 |
Réaliser une détection enregistrée
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 stocke dans un registreRegistre Circuit stockant plusieurs bits d'état. Les registres synchrones du cours capturent leur entrée définie sur un front d'horloge. En savoir plus une fonction de l'état et de l'entrée acceptée au front. Contrairement à une sortie Mealy purement combinatoire, il ne réagit pas immédiatement aux changements de bit_in entre fronts. L'exemple se lit comme du SystemVerilog général ; support syntaxique et preuves d'exécution dans le moteur pédagogique à horloge unique doivent être vérifiés séparément.
Calculer les critères de réussite indépendamment
Construisez une chaîne avec seulement les bits acceptés et, dès sa longueur 3, testez si ses trois derniers caractères valent 101. Cette référence ne copie pas l'encodage de la FSMMachine à états Modèle déterminant état suivant et sorties à partir de l'état stocké et des entrées. Transitions, sorties et reset sont définis ensemble. En savoir plus.
- 101 → hit en position 3.
- 10101 → positions 3 et 5.
- 11101 → position 5.
- 1001 → aucune détection.
- 1,0 puis reset, puis 1 → aucune détection.
- valid=0 inséré entre ou après 1,0 → même résultat en numéros d'entrées acceptées.
La manipulation de bits vérifie des entrées valides continues. Elle ne prouve pas reset, arrêts valid ou timing physique.
Modifier les entrées
Essayez vous-même
Si l'on revient à S0 après la détection de 101, quelle plus courte séquence diffère du contrat initial ?
Lire l’explication
10101 est le plus court cas différent. Le circuit correct détecte les entrées 3 et 5. Revenir à S0 perd le dernier 1 de la première détection comme début du motif suivant et manque la cinquième.