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
| Begriff | Was er bedeutet | Beispiel |
|---|---|---|
| Entity | der Kasten einer Schaltung mit Name und Anschlüssen | |
| Architecture | das Innere der Schaltung, wie sie rechnet | |
| std_logic | der Typ eines Drahts, der 0, 1 oder unbekannt sein kann | |
| Analysieren | die Dateien lesen und auf Fehler prüfen | ghdl -a |
| Elaborieren | aus den Dateien ein Programm bauen | ghdl -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
| Idee | Verilog | VHDL |
|---|---|---|
| Eine Schaltung | module name(...) ... endmodule | entity name is ... end entity; architecture ... |
| Ein Eingang | input a | a : in std_logic |
| Ein Draht bekommt einen Wert | assign y = a & b; | y <= a and b; |
| UND, ODER, XOR, NICHT | & | ^ ~ | and or xor not |
| Groß- und Kleinschreibung | wird unterschieden | wird nicht unterschieden |
Die Zellen, die Lernende ausfüllen, bleiben in dieser Vorschau leer.
In den Ordner hdl wechseln
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.
Verilog: die zwei Zeilen des Halbaddierers
grep assign 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.
VHDL: dieselben zwei Zeilen
grep '<=' half_adder.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 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
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
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.vhdHier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.
Analysieren
ghdl -a alarm.vhdHier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.
Elaborieren
ghdl -e alarmHier 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
ls alarmHier 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
sed 's/scharf;/scharf/' alarm.vhd > alarm_falsch.vhdHier 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
ghdl -a alarm_falsch.vhdHier 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.