So erstellen Sie eine selbstüberprüfende Testbench
Eine selbstprüfende Testbench ist ein VHDL-Programm, das die Korrektheit des zu testenden Geräts (DUT) überprüft, ohne sich auf einen Bediener zu verlassen, der die Ausgabe manuell überprüft. Die selbstüberprüfende Testbench läuft völlig selbstständig und gibt am Ende eine „OK“- oder „Failed“-Meldung aus.
Jedes VHDL-Modul sollte eine zugehörige selbstüberprüfende Testbench haben. Es ist wichtig, jederzeit verifizieren zu können, dass alle Module das beabsichtigte Verhalten aufweisen. Zum Beispiel, wenn Sie Änderungen am DUT, einem Submodul oder einem Schnittstellenmodul vornehmen. Wir alle wissen, dass Dinge kaputt gehen können, und Ihr bestes Werkzeug, um diese Probleme zu erkennen, ist die selbstüberprüfende Testbench.
Das zu testende Gerät
Lassen Sie uns direkt einsteigen und ein Beispiel für eine selbstüberprüfende Testbench erstellen. Zuerst brauchen wir etwas zum Testen, ein DUT. Dafür habe ich das Modul im folgenden Code erstellt. Es ist ein Binär-zu-Gray-Code-Konverter.
library ieee;
use ieee.std_logic_1164.all;
entity gray_converter is
port (
bin : in std_logic_vector;
gray : out std_logic_vector
);
end gray_converter;
architecture rtl of gray_converter is
begin
process(bin) is
begin
gray(gray'high) <= bin(bin'high);
for i in bin'high - 1 downto bin'low loop
gray(i) <= bin(i + 1) xor bin(i);
end loop;
end process;
end architecture;
Gray-Code ist ein alternatives Zahlencodierungsschema, das sich von der regulären Binärcodierung unterscheidet. Die Haupteigenschaft und der Hauptzweck des Gray-Codes besteht darin, dass sich beim Zählen zwischen benachbarten Zahlenwerten nur ein Bit ändert.
Dezimalzahl
Binär
Grau
0
0000
0000
1
0001
0001
2
0010
0011
3
0011
0010
4
0100
0110
5
0101
0111
6
0110
0101
7
0111
0100
8
1000
1100
9
1001
1101
10
1010
1111
11
1011
1110
12
1100
1010
13
1101
1011
14
1110
1001
15
1111
1000
Die obige Tabelle zeigt, wie sich Gray-Code von Binärcode unterscheidet.
Die Prüfbank
Wir beginnen mit der Erstellung der grundlegenden Testbench und der Instanziierung des DUT darin. Der folgende Code zeigt die Testbench-Datei mit dem instanziierten DUT und allen erforderlichen Importen.
library ieee;
use ieee.std_logic_1164.all;
use ieee.numeric_std.all;
use std.env.finish;
entity gray_converter_tb is
end gray_converter_tb;
architecture sim of gray_converter_tb is
signal bin : std_logic_vector(3 downto 0) := (others => '0');
signal gray : std_logic_vector(3 downto 0);
begin
DUT : entity work.gray_converter(rtl)
port map (
bin => bin,
gray => gray
);
end architecture;
Beachten Sie, dass wir std.env.finish importieren was VHDL-2008 erfordert. Wenn Sie versuchen, die Testbench in ModelSim zu kompilieren, ohne etwas zu ändern, erhalten Sie die folgende Fehlermeldung:
# ** Warning: gray_converter_tb.vhd(6): (vcom-1516)
Package "STD.ENV" does not exist in this language version.