FPGA mit VHDL
Aufbau einer synthesefähigen VHDL-Datei
Aufgrund der vorgebenen Normung (VHDL 1987, VHDL 1993 und VHDL 2008) muss eine sehr strenge Struktur eingehalten werden.
VHDL wurde in erster Linie nicht für FPGAs entwickelt, sondern man suchte eine Möglichkeit, technische Vorgänge und Komponenten beschreiben zu können, um sie simulieren zu können.
Aus diesem Grund gibt es Konstrukte (aus FPGA-Sicht), die nicht ganz so selbsterklärend sind.
Aufbau für die Synthese
Nachfolgend sehen Sie in der Auflistung die Punkte, die für die Synthese notwendig sind.
Selbstverständlich sind VHDL-Dateien für die Synthese immer auch für die Simulation geeignet, da der Befehlsumfang für die Synthese (also für ein FPGA) nur ein Subset der kompletten Möglichkeiten von VHDL darstellt. Lesen Sie dazu auch den Artikel Unterschied zwischen der Synthese und der Simulation.
- Library-Definitionen
- Beschreibung der Ports der Einheit (Entity)
- Beschreibung der Architektur (Architecture)
- Komponentendeklaration externer Komponenten (Component)
- Signaldeklaration noch nicht deklarierter Signale (Ports der Entity sind schon oben deklariert)
- Prozeduren der Einheit (Procedure)
- Begin der Logikverschaltung
- Verschaltung externer Komponenten mit den Signalen dieser Entity
- Concurrent Prozesse (parallel laufende Signalverschaltung ohne Takt)
- getaktete Prozesse (werden immer mit einen Clock ausgeführt)
Beispielgerüst einer VHDL-Datei für die Synthese
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
USE IEEE.STD_LOGIC_ARITH.ALL;
use IEEE.std_logic_signed.all;
ENTITY test_arc IS
PORT (
clk : IN STD_LOGIC;
rst : IN STD_LOGIC;
a : OUT STD_LOGIC_VECTOR(7 DOWNTO 0);
b : OUT STD_LOGIC_VECTOR(7 DOWNTO 0);
c : OUT STD_LOGIC_VECTOR(7 DOWNTO 0);
d : OUT STD_LOGIC_VECTOR(7 DOWNTO 0);
e : IN STD_LOGIC_VECTOR(7 DOWNTO 0)
);
END test_arc;
ARCHITECTURE test OF test_arc IS
BEGIN
-- Concurrent Prozesse
d <= e OR "10100101";
-- getaktete Prozesse
do_process: PROCESS (clk, rst)
BEGIN
IF rst = '0' THEN
a <= (others => '0');
b <= (others => '0');
c <= (others => '0');
ELSIF clk'EVENT AND clk = '1' THEN
a <= a + '1';
b <= b + "1";
c <= c + "00000001";
END IF;
END PROCESS;
END test;
weitere Artikel zum Aufbau von VHDL-Dateien für die Synthese
Was ändert sich bei VHDL-Dateien für die Simulation?
VHDL-Dateien für die Simulation sind im Prinzip gleich aufgebaut und unterliegen der gleichen Norm, wie denen für die Synthese.
Die einizige Grundlegende Änderung ist, dass die Testbench keine Einheit ist, bzw. die Entity leer ist.
ENTITY testbench IS
END testbench;