Altifigence Academy

40 / 63 · Übung

Labor: Serielle Datenbewegung und Bitreihenfolge prüfen

Mit Bitfolgen und Ganzzahlreferenz Richtung, verworfene Bits und Latenz nach Reset prüfen.

Versuchsobjekt und Beobachtungsbedingungen

An jeder steigenden FlankeSteigende Flanke Übergang des Takts von 0 auf 1. Nicht zu verwechseln mit dem gesamten hohen Pegelintervall CLK=1. Mehr erfahren rücken die unteren zwei alten q-Bits nach links, din kommt in Bit 0. Vergleichen Sie die Folge bei 1,0,1,1.

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,
    input logic din,
    output logic [2:0] q
);
    // Old q[1:0] and din are captured together at each rising edge.
    always_ff @(posedge clk)
        if (rst) q <= 3'b000;
        else q <= {q[1:0], din};
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[false, false, false]
Reset portrst · Active high · 1 cycle
Maximum cycles / time5 / 5000ps

Eingabestimuli

json
[
  {
    "inputs": {
      "din": [
        false
      ]
    }
  },
  {
    "inputs": {
      "din": [
        true
      ]
    }
  },
  {
    "inputs": {
      "din": [
        false
      ]
    }
  },
  {
    "inputs": {
      "din": [
        true
      ]
    }
  },
  {
    "inputs": {
      "din": [
        true
      ]
    }
  }
]

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. Die erste Spalte ist ResetReset Steuerung zur Rückkehr in einen festgelegten Anfangszustand. Synchron/asynchron und Priorität gegenüber anderen Steuerungen müssen definiert werden. Mehr erfahren; din=0 zählt dort nicht als Datenbit. Vergleichen Sie die vier folgenden Eingaben mit der JSON-Reihenfolge.

Eingangsstimulus und Zustandsverschiebung der drei Bits
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...
din0101.
q after23452000 → 001 → 010 → 101 → 011

Ergebnisse vergleichen

5 cycles · q=011. Je steigender Flanke folgt 000 → 001 → 010 → 101 → 011.

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.

Konkatenation unabhängig prüfen

Wird die RTL-KonkatenationKonkatenation Hängt Bitfolgen aneinander. Die Ergebnisbreite ist die Summe der Operandenbreiten; dies ist keine Zahlenaddition. Mehr erfahren als Testantwort kopiert, kann derselbe Fehler an beiden Stellen stehen. Nutzen Sie eine Referenz aus unsigned-GanzzahlarithmetikUnsigned Interpretation einer Bitfolge als nichtnegative Ganzzahl. Der n-Bit-Bereich ist 0 bis 2^n−1 und kann sich von der signed-Interpretation derselben Bits unterscheiden. Mehr erfahren.

Qk+1=(2Qk+dk) mod 8Q_{k+1}=(2Q_k+d_k)\bmod 8

Nach Reset liefern 1,0,1,1 die Folge 0→1→2→5→30\to1\to2\to5\to3. Als 3-Bit-Zahlen muss sie dem Zeitdiagramm entsprechen. Zuletzt gilt 2⋅5+1=112\cdot5+1=11; die unteren drei Bits ergeben 3.

Empfangene BitsEingangq nach FlankeGanzzahl
0Reset0000
110011
200102
311015
410113

Wählen Sie bei reset=0, enable=1 nacheinander din=1,0,1,1 und takten Sie jeweils: q=001,010,101,011. Verwenden Sie dieses Schrittmodell zur Vorhersage und vergleichen Sie es anschließend mit realen RTL-Ergebnissen. Enable erlaubt auch den Stopptest der Erweiterung.

Vor der RTL-Ausführung die Bitreihenfolge vorhersagen

Der synchrone reset hat Vorrang vor enable. Bei enable=0 bleibt der gespeicherte Wert erhalten. q=000; q_next = (2q + din) mod 8

Ein einzelnes Bit zur Richtungsprüfung verfolgen

Geben Sie nach Reset einmal 1 und dreimal 0 ein: 001 → 010 → 100 → 000. Die erste 1 muss Bit 0,1,2 durchlaufen und verschwinden. Nur gleichförmige Null- oder Einsmuster können Richtungsfehler verdecken.

Bei erstmaliger Speicherung an Flanke kk erreicht das Bit in einem dreistufigen RegisterRegister Speichert einen Zustand aus mehreren Bits. Die synchronen Register dieses Kurses übernehmen festgelegte Eingaben an Taktflanken. Mehr erfahren Bit 2 nach Flanke k+2k+2. Wird die Latenz stattdessen ab dem sendenden externen Register gezählt, ändert sich der Bezug. Geben Sie Start und Ziel im Bericht an.

Erweiterung: Nur gültige Eingaben schieben

Angenommen, valid wird ergänzt. Bei valid=0 q zu halten ist etwas anderes als eine Pipeline, die jeden Zyklus Daten und ein gesondertes valid-Bit schiebt. Erstere zählt angenommene Bits, letztere verstrichene Taktzyklen. Beide dürfen nicht mit derselben Sollzustandsfolge geprüft werden.

Selbst ausprobieren

Nach Reset sind die gültigen Bits 1,0,1. Vor und nach dem zweiten liegt je ein invalid-Zyklus, der q hält. Bestimmen Sie das letzte q und wann die erste 1 Bit 2 erreicht.

Erklärung lesen

Nur drei gültige Eingaben ändern den Zustand: zuletzt q=101. Die erste 1 erreicht Bit 2 an der Flanke des dritten gültigen Bits. Nach erster Speicherung sind zwei weitere Verschiebungen nötig; die zwei invalid-Zyklen verlängern die reale Zeit.

Lesson files

shift-top.sv ↓shift-inputs.json ↓

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