Digitaldesign-Lab: Verilog, VHDL und yosys in einer privaten Ubuntu-VM

Dieses Lab gibt jeder lernenden Person das Werkzeug des digitalen Schaltungsentwurfs in einer einzigen Ubuntu-VM. Icarus Verilog und GHDL simulieren Schaltungen in Verilog und in VHDL, und yosys macht aus einem Entwurf Gatter. Die Lernenden beschreiben eine Schaltung, simulieren sie mit einer Testbench, lesen eine Wahrheitstabelle oder einen Signalverlauf und vervollständigen Entwürfe, die versteckte Testbenches bewerten.

Auf dem Rechner der Lernenden wird nichts installiert, und ein Board ist nicht nötig. Die Werkzeuge sind die echten, iverilog, vvp, ghdl und yosys, aus dem Archiv von Ubuntu. Ein Signalverlauf wird mit vcd2txt als Text gelesen oder mit vcd2svg als Bild gezeichnet und auf Port 8000 des Labs geöffnet, weil es keinen Viewer auf einem Desktop gibt.

Was die Lernenden lernen

Wie man eine Schaltung beschreibt und prüft. Ein Halbaddierer ist gegeben, ein Volladdierer wird geschrieben, in Verilog und noch einmal in VHDL, sodass dieselbe Schaltung in beiden Sprachen zu sehen ist. Ein Zähler zeigt, was ein Takt tut: Seine Signale werden in einer VCD-Datei aufgezeichnet und als Textzeilen gelesen. Danach vervollständigen die Lernenden einen 4-Bit-Zähler mit Freigabe und synchronem Reset und zählen die Gatter, die yosys daraus macht. So zeigt sich, dass ein Flipflop ein Bit speichert und ein Latch ein Fehler ist.

Die fünf Teile

Zuerst eine kombinatorische Schaltung in Verilog: die Wahrheitstabelle eines Halbaddierers lesen, dann einen Volladdierer schreiben. Zweitens ein Takt und ein Signalverlauf: ein gegebener Zähler, seine VCD-Datei, vcd2txt und vcd2svg. Drittens derselbe Volladdierer in VHDL mit den drei Schritten von GHDL, analysieren, elaborieren und ausführen. Viertens ein Zähler mit Freigabe und Reset, den die Lernenden vervollständigen. Fünftens yosys, mit hdl gates, um zu sehen, wie viele Zellen ein Entwurf braucht. Alles, was die Lernenden bearbeiten, liegt im Ordner hdl, und die README.md im Home-Ordner sagt, was zu tun ist, und verrät keine Lösung.

Im Browser ausführen

VM-Labs werden als Lab-Aufgabe in einem Modul angelegt, und das Beispiel steht auf der Seite des Labs. Die Maschine ist klein: eine CPU, 1 GB Arbeitsspeicher und 10 GB Festplatte. Die Simulatoren brauchen davon nur wenige Megabyte.

  1. Lab hinzufügen. Fügen Sie in einem Modul, das Sie unterrichten, eine Aufgabe hinzu und wählen Sie die Karte für das Ubuntu-VM-Lab. Die Seite zeigt statt einer Compose-Datei eine kurze Beschreibung der Maschine.
  2. Mit dem Beispiel beginnen. Die Seite bietet fertige Labs zum Einstieg an. Wählen Sie Digital design. Ein Beispiel ersetzt den Text, und Rückgängig holt Ihren zurück.
  3. Veröffentlichen und eigene Kopie starten. Veröffentlichen Sie und klicken Sie auf Starten. Das Setup-Skript des Labs installiert beim ersten Start der VM Icarus Verilog, GHDL und yosys aus dem Archiv von Ubuntu und schreibt die Hilfsbefehle, die Arbeitsdateien und die README, in wenigen Minuten.
  4. Terminal öffnen. Öffnen Sie das Terminal und lesen Sie die README.md im Home-Ordner. Port 8000 des Labs zeigt den Ordner mit den Bildern, die die Lernenden zeichnen.

Eine Basics-Lektion zu diesem Lab

Digital Design Basics ist eine kleine Lektion, die in diesem Lab, einer Ubuntu-VM, durchgeführt wird. Sie hat einen Einstieg, ein Ziel in der Form „Ich kann“, Schlüsselwörter, eine Einstiegsfrage, eine Kontrolle nach jeder Idee, einen häufigen Fehler und eine Abschlusskontrolle, und jeder Schritt hat eine Schaltfläche Ausführen, die den Befehl in das Terminal der Maschine tippt. Die Lernenden lesen einen Halbaddierer, simulieren ihn und lesen seine Wahrheitstabelle, lassen einen Zähler laufen und lesen seinen Signalverlauf als Text und simulieren denselben Halbaddierer in VHDL mit GHDL.

Die Lektion schaut sich nur um und überlässt die eigentliche Aufgabe des Labs, den Volladdierer und den Zähler, den Lernenden. Sie verrät also keine Lösung.

Wie bewertet wird

Das Lab hat eine Prüfung. Sie läuft auf einer Kopie der gespeicherten Maschine und kompiliert drei Dateien der Lernenden, full_adder.v, full_adder.vhd und counter4.v, mit Testbenches, die die Lernenden nie sehen. Jede Testbench enthält ein Referenzmodell und vergleicht es mit dem Entwurf, beim Zähler vor und nach jeder Taktflanke, sodass ein nicht synchroner Reset auffällt. Die Testbench gibt eine Ergebniszeile mit einer Zahl aus, die die Prüfung jedes Mal neu zieht. Ein Entwurf kann die richtige Zeile also nicht selbst ausgeben, und ein Entwurf, der finish oder system aufruft, wird abgelehnt. Danach muss yosys den Entwurf ohne Latch lesen, und der Zähler braucht Flipflops und nicht mehr Zellen als ein einfacher Entwurf. Die erste Zeile der Ausgabe der Prüfung sagt, warum.

  1. Austeilen. Weisen Sie das Lab wie jede Aufgabe zu, auf Wunsch mit einem Abgabetermin. Jede lernende Person bekommt eine eigene VM, die zwischen den Sitzungen erhalten bleibt.
  2. Prüfung ausführen. Klicken Sie in der Klassenliste in der Zeile einer lernenden Person auf Prüfung ausführen. Das startet eine Kopie ihrer gespeicherten Maschine, die nicht zurückgespeichert wird, führt das Prüfskript des Labs als root aus und zeigt, ob es bestanden wurde, was es ausgegeben hat und wann. Die lernende Person erfährt das Ergebnis nicht.
  3. Bewerten. Lesen Sie die erste Zeile der Ausgabe der Prüfung: Sie sagt, was nicht stimmt, zum Beispiel versteckte Prüfungen mit falscher Ausgabe oder ein Entwurf, der ein Latch erzeugt. Geben Sie die Arbeit mit einer Begründung zurück, wenn mehr nötig ist.

Die Definition auf GitHub

Die Datei ist die ganze Lab-Definition, derselbe Text, den die Plattform ausführt: Größe, Port, Setup-Skript, Hilfsbefehle, Arbeitsdateien, README und Prüfung. Kopieren Sie sie und ändern Sie die Schaltungen oder die Testbenches, um ein längeres Lab zu bauen.

Dieses Lab ausprobieren, und was es kostet

Mit einem kostenlosen persönlichen Konto können Sie die Grundlagenlektionen in diesem Lab durcharbeiten, mit genug kostenlosem Guthaben pro Monat für die meisten Lektionen und ohne Karte. Für eine Klasse sind die ersten 365 Tage für eine Schule kostenlos, für bis zu 50 Lernende; danach zahlt sie je lernender Person und Jahr, alle Labs inklusive und Lehrkräfte kostenlos.

Häufige Fragen

Braucht das Lab eine Lizenz oder ein Board?
Nein. Icarus Verilog, GHDL und yosys sind Open Source und im Archiv von Ubuntu. Sie werden beim Start der VM der Lernenden installiert, wir verteilen also keines davon. Ein Board ist nicht nötig, weil nichts platziert oder verdrahtet wird.
Warum werden Signalverläufe als Text gelesen?
Ein grafischer Viewer braucht einen Desktop, den eine Terminal-VM nicht hat. Das Lab liest eine VCD-Datei mit vcd2txt als Textzeilen und zeichnet mit vcd2svg ein Bild. Ubuntu 26.04 liefert GHDL mit dem GCC-Backend, das die Testbench zu einem Programm kompiliert, deshalb schreibt ghdl -e eine ausführbare Datei neben die Dateien.
Können Lernende etwas kaputt machen?
Nur ihre eigene Kopie. Die Maschine einer Besucherin ohne Konto erreicht das Archiv von Ubuntu und sonst nichts, und wenn jemand eine Datei zerstört, stellt hdl reset sie so wieder her, wie sie ausgegeben wurde.
Wurde das Lab in einer echten VM von Lernenden getestet?
Das Setup-Skript, die Befehle der Lektion und die Prüfung, mit jedem Weg, sie zu täuschen, liefen in einem echten Ubuntu-26.04-Container, der die VM vertritt, auf einem arm64-Rechner. Eine gestartete VM der Lernenden, die die Bilder aus einer systemd-Unit auf Port 8000 ausliefert, und die amd64-Pakete auf den Maschinen der Lernenden sollten Sie vor einem Unterricht einmal ausprobieren.