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

Grundlagen des Digitaldesigns

Die ganze Lektion steht hier zum Lesen. Erstellen Sie ein kostenloses Konto, um sie in einem Live-Lab auszuführen.

Ubuntu-VM-Lab11 Min. Lesezeit10 Befehle

Ein Chip wird beschrieben, bevor er gebaut wird

Ein Handy-Chip enthält Milliarden von Schaltern. Niemand zeichnet sie einzeln. Ein Ingenieur schreibt die Schaltung als Text in einer Hardwarebeschreibungssprache, und ein Programm führt diesen Text aus, um zu sehen, was der Chip tun würde, lange bevor irgendetwas gebaut wird.

Am Ende dieser Lektion

Notiz

Ich kann eine kleine Schaltung in Verilog simulieren und die Tabelle und den Signalverlauf lesen, die sie liefert.

Schlüsselwörter

  • Modul: eine Schaltung mit Ein- und Ausgängen.
  • Testbench: ein Modul, das ein anderes ansteuert und ausgibt, was herauskommt.
  • Takt: ein Signal, das in gleichmäßigem Rhythmus steigt und fällt.
  • Signalverlauf: wie sich Signale mit der Zeit ändern.
  • Simulation: das Ausführen der Beschreibung auf einem Computer.

Zum Start: Was du schon weißt

Notiz

Antworte im Kopf. 1. Was ist 1 + 1 im Binärsystem? 2. Was ergibt ein UND-Gatter für zwei Einsen? 3. Was ist ein Bit? Die erste Antwort brauchst du gleich.

Bevor du anfängst

Notiz

Klicke oben in der Leiste dieser Lektion auf Lab starten. Dieses Lab ist eine ganze Ubuntu-Maschine nur für dich und braucht deshalb etwas länger zum Starten als ein Container. Jede Schaltfläche Ausführen tippt ihren Befehl ins Terminal der Maschine, einen nach dem anderen in derselben Sitzung. Wenn eine meldet, dass die Maschine noch startet, warte ein paar Sekunden und klicke noch einmal. Um zuzusehen oder eigene Befehle zu tippen, klicke in der Leiste auf Terminal öffnen.

Eine Schaltung ist ein kurzer Text

Deine Dateien liegen im Ordner hdl. Der erste Befehl wechselt hinein, der nächste gibt half_adder.v aus. Ein Halbaddierer addiert zwei Bits. Er ist ein einziges Modul mit zwei Eingängen, a und b, und zwei Ausgängen. sum ist a ^ b, also XOR, und carry ist a & b, also UND.

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.

Befehl
cat half_adder.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.

Eine Testbench führt sie aus und gibt die Tabelle aus

Das Werkzeug heißt Icarus Verilog. iverilog kompiliert die Schaltung und ihre Testbench zu einem Programm und gibt nichts aus, wenn alles klappt. vvp führt dieses Programm aus. Die Testbench probiert alle vier Eingaben und gibt eine Wahrheitstabelle aus: Die Zeile 1 1 ergibt carry 1 und sum 0, das ist binär 10, also 1 + 1 = 2.

Befehl
iverilog -o /tmp/half half_adder.v half_adder_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.

Befehl
vvp /tmp/half

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

Prüfe dich

Tipp

Welche Eingaben setzen carry auf 1? Antwort: nur a = 1 und b = 1, die Zeile, in der die Summe für ein Bit zu groß ist.

Ein häufiger Fehler

Warnung

Viele glauben, eine Verilog-Datei laufe Zeile für Zeile ab wie ein Python-Skript. Das stimmt nicht. Ein Modul beschreibt Teile, die alle im selben Moment existieren, und eine assign-Zeile ist eine Leitung, die immer ihren Eingängen folgt. Lies es wie eine Zeichnung, nicht wie eine Liste von Schritten.

Ein Takt und ein Signalverlauf

counter.v ist ein 4-Bit-Zähler: q steigt bei jeder steigenden Flanke von clk um eins, und rst setzt ihn auf 0. Seine Testbench erzeugt einen Takt und zeichnet alle Signale in einer VCD-Datei auf, out/counter.vcd. Der zweite Lauf gibt q nach 112 Zeiteinheiten aus: 10. Der dritte macht aus der Datei Text, eine Zeile je Signal und eine Spalte je 5 Zeiteinheiten. # ist 1 und _ ist 0. q bleibt 0, solange rst hoch ist, und steigt dann bei jedem Anstieg von clk um eins. dut.q ist dasselbe Signal im Inneren des Zählers.

Befehl
iverilog -o /tmp/counter 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.

Befehl
vvp /tmp/counter

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

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.

Prüfe dich

Tipp

Wie oft ist clk gestiegen, während q von 0 auf 10 ging? Antwort: zehnmal, einmal für jeden Schritt des Zählens.

Dieselbe Schaltung in VHDL

VHDL ist die andere verbreitete Sprache. GHDL führt sie in drei Schritten aus. ghdl -a analysiert die Dateien und prüft sie. ghdl -e elaboriert die Testbench und baut dabei ein Programm. ghdl -r führt es aus, und die Testbench meldet die vier Zeilen derselben Wahrheitstabelle: a, b, carry und sum.

Befehl
ghdl -a half_adder.vhd half_adder_tb.vhd

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

Befehl
ghdl -e half_adder_tb

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

Befehl
ghdl -r half_adder_tb

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

Abschlusscheck

Tipp

Antworte, ohne zurückzublättern. 1. Was tut eine Testbench? 2. Was tut vvp? 3. Welche drei Schritte hat GHDL? 4. Was zeigt, wann sich ein Signal ändert? Antworten: Sie steuert ein Modul an und gibt aus, was herauskommt; es führt die kompilierte Simulation aus; analysieren, elaborieren, ausführen; ein Signalverlauf. Öffne jetzt die README.md in deinem Home-Ordner mit cat ~/README.md: Du schreibst den Volladdierer und den Zähler.

Für Lehrkräfte

Tipp

Diese Lektion ist ein kleines Beispiel für eine Lektion, die in einem Lab durchgeführt wird: Die Schritte und die Schaltflächen Ausführen sind die Lektion, und das Lab ist die Kopie jeder lernenden Person. Sie läuft in einem VM-Lab: Jede lernende Person hat eine eigene Ubuntu-Maschine mit installierten Simulatoren, und eine Schaltfläche Ausführen tippt in ihr Terminal und zeigt, was ausgegeben wurde. Wichtige Lernpunkte: 1. Ein Modul ist eine Schaltung mit Ein- und Ausgängen. 2. Eine Testbench steuert es an und gibt die Wahrheitstabelle aus. 3. Ein Takt lässt eine Schaltung Schritt für Schritt wechseln, und ein Signalverlauf zeigt es. Häufiger Fehler: Verilog als Schritte der Reihe nach lesen. Material: das Lab und ein Browser. Tipp: Lassen Sie die Klasse vor dem vvp die vier Zeilen vorhersagen. Das Lab selbst hat eine Prüfung, die drei Entwürfe mit versteckten Testbenches bewertet. Kopieren Sie die Lektion in Ihr eigenes Modul und ändern Sie sie, oder bauen Sie mit dem Menü Lab im Lektions-Editor eine neue von Grund auf.

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

Sie unterrichten eine Klasse? Weisen Sie diese Lektionen Ihren Lernenden zu, mit Bewertung und einem Lab für jede lernende Person.