25 / 63 · Übung
Labor: MUX-Vollprüfung und Analyse registrierter Ausgänge
Gleiche Eingaben auf kombinatorischen und registrierten Pfad anwenden und anhand von Wahrheitstabelle und Abtastzeit prüfen.
Lektionen sind frei lesbar. Schreibe dich ein, um deinen Fortschritt zu speichern.
Versuchsobjekt und Beobachtungsbedingungen
Bei sel=0 wird a, bei sel=1 b auf y ausgegeben. sampled_y speichert y an der steigenden TaktflankeSteigende Flanke Übergang des Takts von 0 auf 1. Nicht zu verwechseln mit dem gesamten hohen Pegelintervall CLK=1. Mehr erfahren und hält trotz Eingangsänderungen bis zur nächsten.
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.
Wählen Sie zunächst für a und b unterschiedliche Werte. Prüfen Sie die Auswahl a bei sel=0 und b bei sel=1 und vergleichen Sie jede Zeile der Eingabedatei.
y = sel ? b : a
SystemVerilog-Quelltext
module top (
input logic clk,
input logic a,
input logic b,
input logic sel,
output logic y,
output logic sampled_y
);
assign y = sel ? b : a;
// Explicit observation register: y remains purely combinational.
// The register makes this design eligible for logic-netlist-1 simulation.
always_ff @(posedge clk) sampled_y <= y;
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] |
| Reset port | Leer |
| Maximum cycles / time | 8 / 8000ps |
Jede Spalte entspricht einem Eintrag der folgenden Eingabedatei. Erwartetes y: 0,0,0,1,1,0,1,1. Das Diagramm prognostiziert die Funktion nach Eingabereihenfolge und zeigt keine Aktualisierungszeitpunkte von sampled_y.
Wellenformdaten anzeigen
| Signal | Wellenform | Buswerte |
|---|---|---|
| a | 0...1... | |
| b | 0.1.0.1. | |
| sel | 01010101 | |
| y expected | 0..1.01. |
Eingabestimuli
[
{
"inputs": {
"a": [
false
],
"b": [
false
],
"sel": [
false
]
}
},
{
"inputs": {
"a": [
false
],
"b": [
false
],
"sel": [
true
]
}
},
{
"inputs": {
"a": [
false
],
"b": [
true
],
"sel": [
false
]
}
},
{
"inputs": {
"a": [
false
],
"b": [
true
],
"sel": [
true
]
}
},
{
"inputs": {
"a": [
true
],
"b": [
false
],
"sel": [
false
]
}
},
{
"inputs": {
"a": [
true
],
"b": [
false
],
"sel": [
true
]
}
},
{
"inputs": {
"a": [
true
],
"b": [
true
],
"sel": [
false
]
}
},
{
"inputs": {
"a": [
true
],
"b": [
true
],
"sel": [
true
]
}
}
]Ergebnisse vergleichen
8 cycles · y=1 · sampled_y=1. Prüfen Sie bei 3000ps, dass y=1 und sampled_y=0 sind.
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.
Erwartete Ergebnisse zuerst aufschreiben
Berechnen Sie vor dem Simulationslauf für die obige Eingabereihenfolge selbst: . Damit werden alle acht Kombinationen geprüft, eine stärkere Aussage als ein einziger korrekter Endwert.
Der RegisterausgangRegister Speichert einen Zustand aus mehreren Bits. Die synchronen Register dieses Kurses übernehmen festgelegte Eingaben an Taktflanken. Mehr erfahren aktualisiert sich an steigenden Flanken, nicht bei Änderungen der Stimuli. Protokollieren Sie getrennt den kombinatorischen Wert vor und den Registerwert nach der Flanke.
Hier definiert der an Flanke abgetastete Eingang den anschließenden Zustand , also sampled_y. Auch bei gleicher Zeitkoordinate muss die Ereignisreihenfolge von Eingabe und Registeraktualisierung geprüft werden.
Drei Prüfungen zur Unterscheidung von Fehlern
- Vertauschte Auswahl: Sagen Sie vor der Änderung zu
sel ? a : bvoraus, welcher Vektor zuerst scheitert. Vektoren mit erkennen diesen Fehler nicht. - Verwechselter Beobachtungspunkt: Erklären Sie, weshalb der sofortige Vergleich von
sampled_ystattymit der kombinatorischen Lösung selbst korrekte Hardware fehlerhaft erscheinen lässt. - Unabhängigkeit vom ungewählten Eingang: Ändern Sie nur diesen und prüfen Sie, dass hält. Dem ausgewählten Eingang muss dagegen folgen.
Notieren Sie je Fehler Eingabe, Beobachtungszeit, Soll- und Istwert. „Das Zeitdiagramm sieht seltsam aus“ unterscheidet einen Auswahlfehler nicht von einer Zykluslatenz.
Erweiterungsaufgabe
Bei vier Datenbits umfasst der kombinatorische Eingaberaum Fälle. Vollprüfung ist weiter möglich; verwenden Sie zunächst 0, Maximum, 0101, 1010 und Walking-one-Muster, um Bitpositionsfehler schnell zu erkennen. Aktualisieren Sie auch Einstellungen und Eingabedatei für die neue Breite.
Selbst ausprobieren
Nach einer Abtastung von wird vor der nächsten Flanke nur auf 1 gesetzt. Bestimmen Sie nach der Logikverzögerung und sampled_y vor und nach der nächsten steigenden Flanke.
Erklärung lesen
. sampled_y bleibt bis zur nächsten steigenden Flanke 0 und speichert dann 1. Vorausgesetzt wird, dass die Eingänge während der erforderlichen Abtastzeit stabil sind.