Altifigence Academy

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.

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

SystemVerilog
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;
endmodule

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

EinstellungWert
Anfängliche Registerwerte, LSB zuerst[true, true]
Reset portrst · Active high · 1 cycle
Maximum cycles / time5 / 5000ps

Eingabestimuli

json
[
  {
    "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.

Die fünf steigenden Flanken der Übung
Wellenformdaten anzeigen
Wellenformdaten: Jedes Zeichen steht für ein Intervall, ein Punkt hält den vorherigen Zustand und p ist ein Taktzyklus.
SignalWellenformBuswerte
edge23452E0 → E1 → E2 → E3 → E4
reset10...
count before2345211 → 00 → 01 → 10 → 11
count after2345200 → 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 Flankerstcount davorcount danach
500ps11100
1500ps00001
2500ps00110
3500ps01011
4500ps01100

Ohne Reset muss je Flanke gelten:

ck+1=(ck+1) mod 4c_{k+1}=(c_k+1)\bmod 4

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.

ck+1={0rk=10rk=0 ∧ ek=1 ∧ ck≥9ck+1rk=0 ∧ ek=1 ∧ ck<9ckrk=0 ∧ ek=0c_{k+1}=\begin{cases}0 & r_k=1\\0 & r_k=0\ \land\ e_k=1\ \land\ c_k\ge 9\\c_k+1 & r_k=0\ \land\ e_k=1\ \land\ c_k<9\\c_k & r_k=0\ \land\ e_k=0\end{cases}

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 11 mod 4=311\bmod4=3, dargestellt als 11. Elf Flanken insgesamt sind nicht elf Inkremente nach Reset: Ist die erste ein Reset, bleiben nur zehn Inkremente.

Lesson files

counter-top.sv ↓counter-inputs.json ↓

Deine Auswahl gilt für diesen Browser. Du kannst sie jederzeit in der Fußzeile ändern.