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;