29 / 37 · Konzept
Abschlussentwurf: Überlappende 101-Muster erkennen
Zustandsminimierung, gültige Eingaben, registrierte Ausgänge und unabhängige Prüfung verbinden.
Lektionen sind frei lesbar. Schreibe dich ein, um deinen Fortschritt zu speichern.
Zuerst die Anforderungen festlegen
An steigenden FlankenSteigende Flanke Übergang des Takts von 0 auf 1. Nicht zu verwechseln mit dem gesamten hohen Pegelintervall CLK=1. Mehr erfahren mit valid=1 wird ein bit_in angenommen. Enden die zuletzt angenommenen Bits auf 101, wird hit nach dieser Flanke einen Zyklus lang 1. Überlappung ist erlaubt: 10101 muss Treffer am dritten und fünften Bit liefern. valid=0 hält den Zustand und setzt hit=0; reset initialisiert beides.
Nur notwendige Vergangenheit speichern
S0 bedeutet kein passendes Präfix, S1 ein Ende auf 1, S10 ein Ende auf 10. Nach vollständigem 101 kann die letzte 1 das nächste Muster beginnen; deshalb folgt S1.
| Zustand | Angenommenes Bit 0 | Angenommenes Bit 1 |
|---|---|---|
| S0 | S0, hit=0 | S1, hit=0 |
| S1 | S10, hit=0 | S1, hit=0 |
| S10 | S0, hit=0 | S1, hit=1 |
Jede Spalte dokumentiert eine steigende FlankeSteigende Flanke Übergang des Takts von 0 auf 1. Nicht zu verwechseln mit dem gesamten hohen Pegelintervall CLK=1. Mehr erfahren. Eingänge gelten unmittelbar davor, Zustände mit „after“ unmittelbar nach der Aktualisierung. Die Spalten zeigen die Reihenfolge der Abtastungen, keine physische LaufzeitLaufzeit Zeit nach einer Eingangsänderung, bis der Ausgang auf dem richtigen Wert stabil ist. Logische Äquivalenz und zeitliche Eigenschaften sind getrennte Aussagen. Mehr erfahren. Nach Reset beginnt S0; valid ist überall 1. Der Treffer am dritten Bit lässt S1 zurück und ermöglicht den Treffer am fünften.
Wellenformdaten anzeigen
| Signal | Wellenform | Buswerte |
|---|---|---|
| accepted bit | 10101 | |
| state after | 23452 | S1 → S10 → S1 → S10 → S1 |
| hit after | 0.101 |
Einen registrierten Treffer implementieren
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 speichert die aus Zustand und angenommenem Eingang berechnete Ausgabe in einem RegisterRegister Speichert einen Zustand aus mehreren Bits. Die synchronen Register dieses Kurses übernehmen festgelegte Eingaben an Taktflanken. Mehr erfahren. Anders als ein rein kombinatorischer Mealy-Ausgang reagiert es nicht sofort auf bit_in zwischen Flanken. Dieses allgemeine SystemVerilog-Beispiel ist gesondert auf unterstützte Syntax und Ausführungsnachweise der bereitgestellten Einzeltakt-Engine zu prüfen.
Erfolg unabhängig berechnen
Eine Referenz kann nur angenommene Bits an einen String anhängen und ab Länge drei dessen letzte drei Zeichen mit 101 vergleichen. FSM-CodierungenZustandsautomat Modell, das aus gespeichertem Zustand und Eingabe Folgezustand und Ausgänge bestimmt. Übergänge, Ausgänge und Resetregeln werden gemeinsam definiert. Mehr erfahren müssen dafür nicht kopiert werden.
- 101 → Treffer 3
- 10101 → Treffer 3,5
- 11101 → Treffer 5
- 1001 → kein Treffer
- 1,0, dann reset, danach 1 → kein Treffer
- valid=0 zwischen oder nach 1,0 einfügen → gleiche Ergebnisse nach Annahmenummer
Das folgende Bitfolgenmodell prüft kontinuierlich gültige Eingaben. Es belegt keine Prüfung von Reset, valid-Stopps oder physischem Timing.
Eingaben ändern
Selbst ausprobieren
Welche kürzeste Eingabefolge unterscheidet den Entwurf von der Spezifikation, wenn nach 101 nach S0 zurückgekehrt wird?
Erklärung lesen
- Korrekt sind Treffer am dritten und fünften Bit. Mit Rückkehr nach S0 kann die letzte 1 des ersten Treffers nicht als Anfang des nächsten dienen; der fünfte Treffer fehlt.