FPGA mit VHDL
VHDL-Simulations-Datei Testbenchinstanziierung
Im Instanziierungsteil von VHDL-Testbench-Dateien gibt es erst einmal zwei Bereiche:
Die Entity und die Architecture
Eine Testbench hat keine Entity beziehungsweise eine leere Entity, so das es hier nicht viel zu erklären gibt.
In der Architecure befindet sich die "Logic" der Einheit.
Die Architecture ist wiederum untergliedert in Componenten-Instanziierungen, Signaldefinitionen sowie dem echten Inhalt beginnend mit "begin".
Leider ist es damit noch nicht getan: den im folgenden Teil werden zuerst die ober instanziierten Componenten "verdrahtet", dann folgen die Concurrent-Statements sowie eine oder mehrer Prozesse.
Der Reihe nach:
- In einer Testbench gibt es mindestens eine Einheit, eine weiteres "externe Bauteile", nämlich das zu testendene FPGA.
 Aber auch in Testbenchens ist es möglich weitere externe Bauteile einzubinden - was auf jedem Fall Sinn macht.
- Die Signaldefinitionen müssen, im Gegensatz zur Synthese-Datei, alle Signale definiert werden.
 Es macht Sinn die Signal in der Reihenfolge anzuordnen, in der sie später im Simulator erscheinen sollen.
 Das spart Zeit bei der Umgruppierung der Signale im Siimulator.
 Weiterhin werden hier die Zustände der Statemachines definiert.
- "begin" leitet dann den echten Logikteil ein.
- Nach diesem Begin folgt zuerst einmal die Verdrahtung der externen Bauteile. Hier werden wieder Ports definiert, wobei links die internen Signale der externen Bauteile und rechts die Signale in dieser Einheit benannt werden.
- Auch das Simulations-Werkzeug kennt generell zwei Arten von "Logik-Verdrahtung/Erzeugung": die Concurrent-Statements und die Process-Statements.
- Concurrent-Statements sind keine getakteten Logikteile. Sie sind immer verfügbar und haben nur die Laufzeitkriterien zu erfüllen. Ein UND-Glied ist zum Beispiel ein solches. Man kann das auch als "Clock-freie Logik" bezeichnen.
- Alles was in einem Process steht, wird mit einem Takt verschaltet und hat immer eine Register-Funktion (D-FlipFlop). Alles was rechts vom Gleichheitszeichen steht, wird erst mit dem nächsten Takt in das Signal geschrieben.
 So steht dort eigentlich fast immer "process (CLK, RST)".
 Das Bedeutet, dass dieser Prozess eine Sensitivitätsliste (Sensitivity List) mit dem Clock-Signal und dem Reset-Signal hat.
 In Testbenches können auch Pozesse ohne Sensitivitätsliste verwendet werden.
 In einer Testbench können auch ganz andere Signalart verwendet werden. Synthesefähig sind aber im weitesten Sinne nur Clock (Taktsignal) und Reset.
- In einer Testbench-Datei müssen auch die Stimulatoren für Clock und Reset eingefügt werden. Im Beispiel unten sehen Sie die Instanziierung.
Instanziierungs-Grundgerüst einer VHDL-Datei für die Simulation (Testbench)
Die komplette Vorlage für VHDL-Testbench-Quelltexte kann auch downgeloaded werden.
ENTITY testbench IS
END testbench;
ARCHITECTURE testbench_verschaltung OF testbench IS
-- Component Declaration
Component externes-chip
   Port (
      CLK_OUT   : out std_logic;
      RST_OUT   : out std_logic
   );
end Component;
Component fpga-chip
   Port (
      CLK   : in std_logic;
      RST   : in std_logic
   );
end Component;
signal   CLK_OUT   : std_logic;
signal   RST_OUT   : std_logic;
BEGIN
-- Component Instantiation
EXTERNAL: externes-chip
   PORT MAP(
      CLK_OUT   => CLK_OUT,
      RST_OUT   => RST_OUT
      );
INTERNAL: fpga-chip
   PORT MAP(
      CLK   => CLK_OUT,
      RST   => RST_OUT
      );
-- ###########################################
-- System-Prozesse
-- ###########################################
RESET_PROC : PROCESS
BEGIN
   RST <= '1';
   wait for 150*clk_period; -- 1usec Reset
      RST <= '0';
      wait;
END PROCESS;
CLOCK_PROC : PROCESS
BEGIN
   CLK <= '0';
   wait for clk_period/2;
   CLK <= '1';
   wait for clk_period/2;
END PROCESS;
END testbench_verschaltung;
