Altifigence Academy

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.

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 actuelBit 0 acceptéBit 1 accepté
S0S0, hit=0S1, hit=0
S1S10, hit=0S1, hit=0
S10S0, hit=0S1, 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.

Deux détections avec recouvrement dans 10101
Voir les données du chronogramme
Données du chronogramme : chaque caractère représente un intervalle ; un point maintient l'état précédent ; p représente un cycle d'horloge.
SignalForme d'ondeValeurs du bus
bit accepté10101
état après23452S1 → S10 → S1 → S10 → S1
hit après0.101

Réaliser une détection enregistrée

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 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.

Votre choix s’applique à ce navigateur. Modifiez-le à tout moment en bas de page.