Lässt es sich mit cremefarbenem Papier, einer Tönung, mehr Kontrast oder größerer Schrift besser lesen? Wählen Sie Ihre Farben und Ihre Schrift, einmalig für alle Seiten.

Kostenlose Lektion

Eine Wellenform lesen (VCD)

Nach dieser Lektion: Ich kann an einer Wellenform ablesen, was bei jedem Takt geschah.

Lektion, 55 Min.8 BefehleDigitaldesign-Lab: Verilog, VHDL und yosys in einer privaten Ubuntu-VM

Warum zeigt der Zähler anfangs Unsinn?

Eine Wellenform zeigt, wie sich die Signale einer Schaltung im Lauf der Zeit ändern. Der Simulator schreibt sie in eine VCD-Datei (Value Change Dump). Wer diese Datei lesen kann, sieht Takt für Takt, was die Schaltung getan hat.

So finden Entwickelnde Fehler, die im Quelltext unsichtbar sind, zum Beispiel einen Zähler, der beim Einschalten eine falsche Zahl zeigt.

Am Ende dieser Lektion

Notiz

Ich kann an einer Wellenform ablesen, was bei jedem Takt geschah.

Schlüsselwörter

BegriffWas er bedeutetBeispiel
Signalein Draht oder Bus der Schaltung, dessen Wert sich ändertclk
Wellenformder zeitliche Verlauf der Signale
VCD-Dateieine Textdatei, die jede Änderung eines Signals festhält
Busmehrere Bits, die als eine Zahl geltenq[3:0]
Zeitschrittwie viele Zeiteinheiten eine Spalte der Anzeige umfasst

Die Zellen, die Lernende ausfüllen, bleiben in dieser Vorschau leer.

Eine VCD-Datei ist Text mit Zeitmarken

Eine VCD-Datei besteht aus zwei Teilen. Im Kopf steht für jedes Signal eine Zeile $var mit Breite, Kurzkennung und Name. Danach kommen Zeitmarken wie #15.

Unter einer Zeitmarke steht nur, was sich dann ändert. Ein Bit schreibt der Simulator als 1": Wert, dann Kennung. Ein Bus beginnt mit b: b1 ! heißt, das Signal ! hat den Wert 1.

Was die Zeilen des Ausschnitts heißen

ZeileBedeutung
$var reg 1 " clk $endDas Signal clk ist 1 Bit breit und hat die Kennung "
#15Ab hier ist die Zeit 15
b1 !Das Signal mit der Kennung ! (der Bus q) hat jetzt den Wert 1
1"clk springt auf 1
#20Ab hier ist die Zeit 20
0"clk springt auf 0

Die Zellen, die Lernende ausfüllen, bleiben in dieser Vorschau leer.

Den Zähler simulieren und die Datei ansehen

Die ersten Befehle übersetzen den gegebenen Zähler samt Testbench und führen ihn aus. Dabei schreibt $dumpfile die Datei out/counter.vcd.

grep var zeigt die Kopfzeilen. Die Signale stehen zweimal da, einmal im Testbench und einmal im Zähler, aber mit gleicher Kennung. sed zeigt den Teil zwischen zwei Zeitmarken.

In den Ordner hdl wechseln

Befehl
cd ~/hdl

Hier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.

Zähler und Testbench übersetzen

Befehl
iverilog -o /tmp/zaehler counter.v counter_tb.v

Hier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.

Simulieren und die Datei schreiben

Befehl
vvp /tmp/zaehler

Hier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.

Die Signale im Kopf der Datei

Befehl
grep var out/counter.vcd

Hier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.

Alles zwischen den Zeitmarken 15 und 20

Befehl
sed -n '/^#15/,/^#20/p' out/counter.vcd

Hier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.

Wie viele Zeitmarken hat die Datei?

Befehl
grep -c '^#' out/counter.vcd

Hier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.

vcd2txt macht aus der Datei Zeilen und Spalten

Das Werkzeug vcd2txt zeichnet jedes Signal als Zeile. Jede Spalte steht für einen Zeitschritt, den Sie als Zahl dahinter angeben.

Bei einem Bit steht # für 1 und _ für 0. Ein Bus zeigt seine Zahl, ein x ist unbekannt. Probieren Sie zwei Zeitschritte aus und vergleichen Sie, was Sie sehen.

Eine Spalte je 5 Zeiteinheiten

Befehl
vcd2txt out/counter.vcd 5

Hier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.

Eine Spalte je 10 Zeiteinheiten

Befehl
vcd2txt out/counter.vcd 10

Hier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.

Ein häufiger Fehler

Warnung

Viele denken, ein größerer Zeitschritt zeige dasselbe nur kürzer. Wählen Sie ihn aber so groß wie die Periode des Takts, liest die Anzeige den Takt immer im selben Moment. Dann sieht clk wie tot aus. Wählen Sie den Zeitschritt höchstens so groß wie die halbe Periode.

Über dieses Lab und seinen Quellcode: Digitaldesign-Lab: Verilog, VHDL und yosys in einer privaten Ubuntu-VM

Sie unterrichten eine Gruppe? Weisen Sie dieses Modul Ihren Studierenden zu, mit Handbuch für Lehrende, automatisch geprüften Aufgaben und einem Lab für jede Person.