Industrielle Fertigung
Industrielles Internet der Dinge | Industrielle Materialien | Gerätewartung und Reparatur | Industrielle Programmierung |
home  MfgRobots >> Industrielle Fertigung >  >> Industrial programming >> VHDL

VHDL meistern: Umfassende Einführung für FPGA- und ASIC-Design

Tutorial – Einführung in VHDL

VHDL ist ein furchtbares Akronym. Es steht für VHSIC Hardware Description Language – ein Akronym im Akronym, großartig! VHSIC bedeutet Very High Speed Integrated Circuit. Ausgeschrieben ist VHDL also Very High Speed Integrated Circuit Hardware Description Language. Puh, ganz schön lang. VHDL ist eine der beiden Sprachen, die in Ausbildung und Industrie zum Design von FPGAs und ASICs verwendet werden. Falls Sie mit diesen faszinierenden Schaltungen nicht vertraut sind, sollten Sie sich zunächst mit FPGAs und ASICs vertraut machen. VHDL und Verilog sind die beiden Sprachen, die Digitaldesigner zur Beschreibung ihrer Schaltungen nutzen – sie unterscheiden sich grundlegend von klassischen Software-Sprachen wie C und Java.

Im folgenden Beispiel erstellen wir eine VHDL-Datei, die ein UND-Gatter beschreibt. Zur Erinnerung: Ein einfaches UND-Gatter hat zwei Eingänge und einen Ausgang. Der Ausgang ist nur dann 1, wenn beide Eingänge 1 sind. Unten sehen Sie das UND-Gatter, das wir mit VHDL beschreiben werden.

Ein UND-Gatter

Los geht's! Die fundamentale Einheit in VHDL heißt Signal. Nehmen wir vorerst an, ein Signal kann entweder 0 oder 1 sein (es gibt weitere Möglichkeiten, darauf kommen wir später). Hier ist grundlegende VHDL-Logik:

signal and_gate : std_logic;
and_gate <= input_1 and input_2;

Die erste Codezeile definiert ein Signal vom Typ std_logic mit dem Namen and_gate. std_logic ist der am häufigsten verwendete Typ für Signale, es gibt aber noch andere. Dieser Code erzeugt ein UND-Gatter mit einem Ausgang (and_gate) und zwei Eingängen (input_1 und input_2). Das Schlüsselwort and ist in VHDL reserviert. Der Operator <= ist der Zuweisungsoperator. Wenn Sie den Code laut lesen: „Das Signal and_gate BEKOMMT input_1 UND-verknüpft mit input_2.“

Sie fragen sich vielleicht, woher input_1 und input_2 kommen. Wie der Name sagt, sind sie Eingänge dieser Datei – Sie müssen die Tools darüber informieren. Ein- und Ausgänge einer Datei werden in einer Entity definiert. Eine Entity enthält einen Port, der alle Ein- und Ausgänge definiert. Erstellen wir eine einfache Entity:

entity example_and is
  port (
    input_1    : in  std_logic;
    input_2    : in  std_logic;
    and_result : out std_logic
  );
end example_and;

Das ist Ihre grundlegende Entity. Sie definiert eine Entity namens example_and und drei Signale – zwei Eingänge, einen Ausgang, alle vom Typ std_logic. Ein weiteres VHDL-Schlüsselwort vervollständigt das Ganze: Architecture. Eine Architecture beschreibt die Funktionalität einer bestimmten Entity. Stellen Sie sich eine Doktorarbeit vor: Die Entity ist das Inhaltsverzeichnis, die Architecture der Inhalt. Erstellen wir eine Architecture für diese Entity:

architecture rtl of example_and is
  signal and_gate : std_logic;
begin
  and_gate    <= input_1 and input_2;
  and_result  <= and_gate;
end rtl;

Der Code definiert eine Architecture namens rtl der Entity example_and. Alle von der Architecture verwendeten Signale müssen zwischen den Schlüsselwörtern is und begin deklariert werden. Die eigentliche Logik steht zwischen begin und end. Fast fertig. Noch eines: Sie müssen den Tools mitteilen, welche Bibliothek verwendet wird. Eine Bibliothek definiert, wie sich bestimmte Schlüsselwörter in Ihrer Datei verhalten. Nehmen Sie vorerst einfach hin, dass diese beiden Zeilen ganz oben in Ihrer Datei stehen müssen:

library ieee;
use ieee.std_logic_1164.all;

Glückwunsch! Sie haben Ihre erste VHDL-Datei erstellt. Hier ist die vollständige Datei:

library ieee;
use ieee.std_logic_1164.all;

entity example_and is
  port (
    input_1    : in  std_logic;
    input_2    : in  std_logic;
    and_result : out std_logic
  );
end example_and;

architecture rtl of example_and is
  signal and_gate : std_logic;
begin
  and_gate    <= input_1 and input_2;
  and_result  <= and_gate;
end rtl;

Kommen Sie sich vor, als hätten Sie viel Code für ein simples UND-Gatter schreiben müssen? Erstens: UND-Gatter sind nicht simpel. Zweitens: Sie haben recht – VHDL ist eine sehr ausführliche Sprache. Gewöhnen Sie sich daran, dass etwas, das in Software trivial war, in einer HDL wie Verilog oder VHDL deutlich länger dauert. Aber bitten Sie doch mal einen Softwareentwickler, ein Bild auf einem VGA-Monitor zu erzeugen, das Conways Game of Life zeigt – und staunen Sie, wie ihnen der Kopf schwirrt! Übrigens: Dieses Video wurde mit VHDL und einem FPGA erstellt. Das werden Sie bald auch können!

Als Nächstes besprechen wir ein weiteres fundamentales VHDL-Schlüsselwort: process.

VHDL

  1. String-Listen in VHDL erstellen: Best Practices & Beispiel
  2. FPGAs erkunden: Anwendungen, Vorteile & Einstieg in VHDL
  3. VHDL-Testbench-Simulation sauber beenden
  4. Getakteten Prozess in VHDL erstellen: Praktischer Leitfaden
  5. Ihr erstes FPGA bauen: LED Blink Tutorial (VHDL & Verilog)
  6. FPGA Block RAM aus Textdateien mit VHDLs TEXTIO-Bibliothek initialisieren
  7. VUnit 101: Praktischer Leitfaden für automatisierte VHDL-Verifikation
  8. VHDL & Verilog meistern: Saubere kombinatorische & sequentielle Logik schreiben
  9. Constrained Random Verification mit OSVVM meistern
  10. Selbstprüfenden VHDL-Testbench erstellen – Praxisleitfaden