17 / 37 · Übung
Labor: Reset, Umlauf und Invarianten eines Zählers prüfen
Jede steigende Flanke mit einer Referenz vergleichen und Einflüsse von Initialwert, Reset und Breite trennen.
Lektionen sind frei lesbar. Schreibe dich ein, um deinen Fortschritt zu speichern.
Versuchsobjekt und Beobachtungsbedingungen
Starten Sie bei 3 und setzen Sie an der ersten steigenden FlankeSteigende Flanke Übergang des Takts von 0 auf 1. Nicht zu verwechseln mit dem gesamten hohen Pegelintervall CLK=1. Mehr erfahren zurückReset Steuerung zur Rückkehr in einen festgelegten Anfangszustand. Synchron/asynchron und Priorität gegenüber anderen Steuerungen müssen definiert werden. Mehr erfahren. Danach folgen 0,1,2,3,0. Auch bei aktivem Reset bleibt der Wert vor der Flanke unverändert.
Vor dem Start
Bereiten Sie ein Desktop-Projekt in Digital Design Studio und gültige Ausführungsberechtigungen vor. Speichern Sie jedes Beispiel als rtl/top.sv in einem eigenen Ordner.
SystemVerilog-Quelltext
module top (
input logic clk,
input logic rst,
output logic [1:0] count
);
// Active-high synchronous reset: sampled only at the rising clock edge.
always_ff @(posedge clk)
if (rst) count <= 2'b00;
else count <= count + 2'b01;
endmoduleAusführung
Wählen Sie in New analysis die Option Two-state single-clock v1. Clock port ist clk, die Periode 1000ps. Führen Sie mit den folgenden Werten Preflight und danach Run RTL simulation aus und vergleichen Sie die Ergebnisse.
| Einstellung | Wert |
|---|---|
| Anfängliche Registerwerte, LSB zuerst | [true, true] |
| Reset port | rst · Active high · 1 cycle |
| Maximum cycles / time | 5 / 5000ps |
Eingabestimuli
[
{
"inputs": {}
},
{
"inputs": {}
},
{
"inputs": {}
},
{
"inputs": {}
},
{
"inputs": {}
}
]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. E0–E4 sind die steigenden Flanken bei 500,1500,2500,3500,4500ps. Vergleichen Sie jede count-Spalte, nicht nur den Endwert.
Wellenformdaten anzeigen
| Signal | Wellenform | Buswerte |
|---|---|---|
| edge | 23452 | E0 → E1 → E2 → E3 → E4 |
| reset | 10... | |
| count before | 23452 | 11 → 00 → 01 → 10 → 11 |
| count after | 23452 | 00 → 01 → 10 → 11 → 00 |
Ergebnisse vergleichen
5 cycles · count=00. Prüfen Sie bei 500,1500,2500,3500,4500ps die Folge 00 → 01 → 10 → 11 → 00.
Diese Übung verwendet 0/1-RTL mit einem Takt. Sie enthält keine Testbench mit #delay, initial oder X/Z. Die Lernabschlussmarkierung dokumentiert den Lernfortschritt und ist kein tatsächliches Simulationsergebnis.
Erwartungszustände je Flanke berechnen
Das RegisterRegister Speichert einen Zustand aus mehreren Bits. Die synchronen Register dieses Kurses übernehmen festgelegte Eingaben an Taktflanken. Mehr erfahren startet bei 3, doch an der ersten steigenden Flanke hat Reset Vorrang. Initialisierung und Reset sind nicht dasselbe.
| Steigende Flanke | rst | count davor | count danach |
|---|---|---|---|
| 500ps | 1 | 11 | 00 |
| 1500ps | 0 | 00 | 01 |
| 2500ps | 0 | 01 | 10 |
| 3500ps | 0 | 10 | 11 |
| 4500ps | 0 | 11 | 00 |
Ohne Reset muss je Flanke gelten:
Ein Test nur des Endwerts 00 könnte falsche Zwischenzustände übersehen. Prüfen Sie die gesamte Zustandsfolge und die Resetpriorität getrennt.
Jeweils nur eine Versuchsbedingung ändern
- Auch mit Startwert 00 bleibt die Folge nach dem ersten Reset gleich. Das prüft die Unabhängigkeit vom Anfangswert.
- Mit Reset cycles=2 müssen beide ersten Flanken count=00 ergeben; der Zählbeginn verschiebt sich um eine Flanke.
- Bei drei Bit beträgt der Umlauf acht Inkremente. Prüfen Sie neben der Deklaration auch Konstantenbreiten, Initialisierungsarray und Laufzeit.
Auf Modulo-10 verallgemeinern
Vier Bits speichern 0 bis 15; einfaches Inkrementieren führt nach 9 nicht auf 0. Dafür braucht es eine eigene Folgezustandsfunktion.
Diese Definition führt auch unbenutzte Zustände 10–15 bei enable auf 0 zurück. Andere Regeln sind möglich, doch Spezifikation und Referenzmodell müssen dieselbe verwenden.
Selbst ausprobieren
Welchen count ergibt der ursprüngliche 2-Bit-Zähler nach elf unbedingten Inkrementen nach dem Reset der ersten Flanke? Rechnen Sie ohne Zwischenzustände.
Erklärung lesen
Nach Reset ist der Zustand 0, also , dargestellt als 11. Elf Flanken insgesamt sind nicht elf Inkremente nach Reset: Ist die erste ein Reset, bleiben nur zehn Inkremente.