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

Dieselbe Schaltung in VHDL

Nach dieser Lektion: Ich kann eine kleine Schaltung in VHDL schreiben und mit GHDL übersetzen.

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

Zwei Sprachen für dieselbe Schaltung

VHDL ist neben Verilog die zweite verbreitete Hardwarebeschreibungssprache. Sie beschreibt dieselben Schaltungen, verlangt aber mehr Schreibarbeit und prüft strenger. Wer beide lesen kann, versteht Entwürfe aus beiden Welten.

Ein Alarm, der nur auslöst, wenn Fenster und Anlage beide „an“ sind, ist in beiden Sprachen eine einzige Zeile.

Am Ende dieser Lektion

Notiz

Ich kann eine kleine Schaltung in VHDL schreiben und mit GHDL übersetzen.

Schlüsselwörter

BegriffWas er bedeutetBeispiel
Entityder Kasten einer Schaltung mit Name und Anschlüssen
Architecturedas Innere der Schaltung, wie sie rechnet
std_logicder Typ eines Drahts, der 0, 1 oder unbekannt sein kann
Analysierendie Dateien lesen und auf Fehler prüfenghdl -a
Elaborierenaus den Dateien ein Programm bauenghdl -e

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

Entity ist der Kasten, Architecture das Innere

In Verilog ist alles ein Modul. VHDL trennt zwei Dinge: Die Entity beschreibt den Kasten mit seinen Anschlüssen, die Architecture beschreibt, was darin geschieht.

Dafür sind die Typen strenger. Ein Draht ist ein std_logic, und die Operatoren sind Wörter: and, or, xor, not.

Dieselbe Idee in beiden Sprachen

IdeeVerilogVHDL
Eine Schaltungmodule name(...) ... endmoduleentity name is ... end entity; architecture ...
Ein Einganginput aa : in std_logic
Ein Draht bekommt einen Wertassign y = a & b;y <= a and b;
UND, ODER, XOR, NICHT& | ^ ~and or xor not
Groß- und Kleinschreibungwird unterschiedenwird nicht unterschieden

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

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.

Verilog: die zwei Zeilen des Halbaddierers

Befehl
grep assign 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.

VHDL: dieselben zwei Zeilen

Befehl
grep '<=' half_adder.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.

GHDL analysiert, elaboriert und läuft

GHDL arbeitet in Schritten. ghdl -a analysiert die Datei: Es prüft Schreibweise und Typen und merkt sich das Ergebnis in work-obj93.cf.

ghdl -e elaboriert: Es baut ein Programm gleichen Namens neben die Dateien. Danach liefe ghdl -r. Die Schaltung alarm unten hat keinen Testbench, deshalb enden Sie beim Bauen.

Die Datei alarm.vhd

Code: c
library ieee;
use ieee.std_logic_1164.all;

-- Die entity ist der Kasten: Name, Eingaenge, Ausgang.
entity alarm is
  port (fenster, scharf : in std_logic; sirene : out std_logic);
end entity;

-- Die architecture ist das Innere: hier eine einzige Zeile.
architecture rtl of alarm is
begin
  sirene <= fenster and scharf;
end architecture;

Die Datei alarm.vhd schreiben

Befehl
printf '%s\n' 'library ieee;' 'use ieee.std_logic_1164.all;' 'entity alarm is' '  port (fenster, scharf : in std_logic; sirene : out std_logic);' 'end entity;' 'architecture rtl of alarm is' 'begin' '  sirene <= fenster and scharf;' 'end architecture;' > alarm.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.

Analysieren

Befehl
ghdl -a alarm.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.

Elaborieren

Befehl
ghdl -e alarm

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

Das gebaute Programm ansehen

Befehl
ls alarm

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

GHDL nennt Zeile und Spalte eines Fehlers

VHDL ist streng. Fehlt ein Semikolon, hört GHDL beim Analysieren auf und sagt, wo. Die nächsten zwei Befehle machen eine Kopie von alarm.vhd ohne das Semikolon in Zeile 8 und analysieren sie.

Lesen Sie die erste Zeile der Meldung: Datei, Zeile, Spalte, dann der Grund.

Eine Kopie ohne Semikolon machen

Befehl
sed 's/scharf;/scharf/' alarm.vhd > alarm_falsch.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.

Die fehlerhafte Datei analysieren

Befehl
ghdl -a alarm_falsch.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.

Ein häufiger Fehler

Warnung

Viele denken, ghdl -e führe die Schaltung schon aus, weil dabei ein Programm entsteht. Es baut aber nur das Programm. Erst ghdl -r führt es aus. Die drei Schritte heißen analysieren, elaborieren, ausführen, in dieser Reihenfolge.

Ü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.