40 / 63 · Übung
Labor: Serielle Datenbewegung und Bitreihenfolge prüfen
Mit Bitfolgen und Ganzzahlreferenz Richtung, verworfene Bits und Latenz nach Reset prüfen.
Lektionen sind frei lesbar. Schreibe dich ein, um deinen Fortschritt zu speichern.
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
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};
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 | [false, false, false] |
| Reset port | rst · Active high · 1 cycle |
| Maximum cycles / time | 5 / 5000ps |
Eingabestimuli
[
{
"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.
Wellenformdaten anzeigen
| Signal | Wellenform | Buswerte |
|---|---|---|
| edge | 23452 | E0 → E1 → E2 → E3 → E4 |
| reset | 10... | |
| din | 0101. | |
| q after | 23452 | 000 → 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.
Nach Reset liefern 1,0,1,1 die Folge . Als 3-Bit-Zahlen muss sie dem Zeitdiagramm entsprechen. Zuletzt gilt ; die unteren drei Bits ergeben 3.
| Empfangene Bits | Eingang | q nach Flanke | Ganzzahl |
|---|---|---|---|
| 0 | Reset | 000 | 0 |
| 1 | 1 | 001 | 1 |
| 2 | 0 | 010 | 2 |
| 3 | 1 | 101 | 5 |
| 4 | 1 | 011 | 3 |
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.
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 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 . 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.