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.
cd hdlHier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.
cat half_adder.vHier 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.
iverilog -o /tmp/half half_adder.v half_adder_tb.vHier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.
vvp /tmp/halfHier 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.
iverilog -o /tmp/counter counter.v counter_tb.vHier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.
vvp /tmp/counterHier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.
vcd2txt out/counter.vcd 5Hier 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.
ghdl -a half_adder.vhd half_adder_tb.vhdHier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.
ghdl -e half_adder_tbHier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.
ghdl -r half_adder_tbHier 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.