Forum: FPGA, VHDL & Co. Anleitung Testbench


von IH453 (Gast)


Lesenswert?

Hallo zusammen,

ich würde gerne verstehen, wie ich eine fertige Datei z.B. einen 
Addierer in eine Testbench einfügen kann? Die Testbench sollte dann alle 
X ns an die Eingänge des Addierers einen Wert anlegen und diesen nach Y 
auf Richtigkeit überprüfen.
Über eine softwareunabhängige Erklärung würde ich mich sehr freuen. Da 
ich gerne den Code, welcher dazu verwendet wird, verstehen möchte.

Im Internet habe ich bisher noch nicht das Richtige für mich gefunden 
und auch das Buch VHDL-Synthese liefert mir hier keine Erklärung, welche 
ich nachvollziehen kann.

Ich hoffe ihr könnt mir hier weiter helfen.


Gruß IH453

von Klaus (Gast)


Lesenswert?

Was genau ist Dein Problem beim Verständnis welcher Anleitung?

Es hat doch keinen Zweck, dass wir hier nun die 1001te Anleitung genau 
auf Dich zugeschnitten schreiben.
Zumal wir keinerlei Anhaltspunkte haben, worin sich unsere von den 
anderen Erklärungen unterscheiden sollte, damit Du sie verstehst.
Zumal die Wahrscheinlichkeit aufgrund der schieren Anzahl hoch ist, dass 
es sich eher um Dein individuelles Problem handelt als darum, dass 
sämtliche Anleitungen in allen relevanten Punkten völlig unverständlich 
formuliert sind.

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

IH453 schrieb:
> auch das Buch VHDL-Synthese
Ja nun, weil der erklärte Zweck dieses Buchen eben nicht die 
Sumilation, sondern die Synthese ist...

> Über eine softwareunabhängige Erklärung würde ich mich sehr freuen.
Jetzt mal ohne Witz: die hast du selber geliefert...
> Die Testbench sollte dann alle X ns an die Eingänge des Addierers einen
> Wert anlegen und diesen nach Y auf Richtigkeit überprüfen.
Das ist maximal Softwareunahängig. Darin kommt nicht mal die 
Beschreibungssprache vor, die bei dir auch nur aus eine kleinen 
Nebenbemerkung im vorletzten Satz erkennbar wird.

Um die Sache allgemein zu machen: eine VHDL-Testbench ist ein 
VHDL-Modul, das keinen Port nach aussen hat. In dieses VHDL-Modul wird 
der Prüfling (dein Counter) als Komponente eingebunden. Und dann mit 
Signalen und Signalverläufen an den Eingängen stimuliert. Die Ausgabe 
wird dann mit Abfragen (Assert) auf Richtigkeit überprüft.

Sieht dir das mal an:
http://www.lothar-miller.de/s9y/archives/78-Bubblesort.html
http://www.lothar-miller.de/s9y/archives/53-Drehgeber,-Encoder,-Quadraturdecoder.html
http://www.lothar-miller.de/s9y/archives/29-Division-in-VHDL.html
Und das: http://www.stefanvhdl.com/

von René D. (Firma: www.dossmatik.de) (dose)


Lesenswert?

Für testbench ein super Einstieg

http://www.stefanvhdl.com/

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

René D. schrieb:
> Für testbench ein super Einstieg
> http://www.stefanvhdl.com/
Man kann es nicht oft genug sagen... ;-)

: Bearbeitet durch Moderator
von IH453 (Gast)


Lesenswert?

Danke für die Links.
Ich habe jetzt mit euren Links sowie mit dem folgenden Link 
(http://www.fpga-talk.de/forum/viewtopic.php?f=21&t=257) mal zwei Daten 
erzeugt.
(Die Links stellen ebenso die Quellenangabe dar.)

1
Datei 1 AND_3
2
3
library ieee;
4
use ieee.std_logic_1164.all;
5
use ieee.numeric_std.all;
6
7
entity AND_3 is
8
  port(
9
    A,B,C : IN STD_LOGIC;
10
    ABC_OUT : OUT STD_LOGIC;
11
    );
12
  end AND_3;
13
    
14
architecture STRUCT of AND_3 is
15
    
16
begin
17
  ABC_OUT <= A AND B AND C;
18
19
end architecture STRUCT

1
Datei 2 Testbench  TEST_vhd_ts_TB
2
3
LIBRARY ieee;                                               
4
USE ieee.std_logic_1164.all;                               
5
6
ENTITY TEST_vhd_ts_TB IS
7
ENDTEST_vhd_ts_TB;
8
9
ARCHITECTURE TEST_vhdl OF TEST_vhd_ts_TB IS
10
                                                  
11
SIGNAL A : STD_LOGIC;      -- Signale der Testbench
12
SIGNAL B : STD_LOGIC;
13
SIGNAL C : STD_LOGIC;
14
SIGNAL ABC_OUT : STD_LOGIC;
15
16
COMPONENT AND_3        -- Ports der zu testenden Datei
17
   PORT (
18
   A : IN STD_LOGIC;
19
   B : IN STD_LOGIC;
20
   C : IN STD_LOGIC;
21
   );  
22
END COMPONENT;
23
24
BEGIN  
25
   i1 : AND_3      -- Warum i1?        
26
   PORT MAP (      -- Signale der Testbench, werden auf
27
        -- die Ports der zu testenden Datei 
28
        -- übertragen
29
   A => A,          
30
   ABC_OUT => ABC_OUT,
31
   B => B,
32
   C => C,
33
   );
34
35
init : PROCESS                                               
36
37
TYPE input_signals IS RECORD
38
Ax, Bx, Cx : STD_LOGIC;
39
ABC_OUTx   :STD_LOGIC;
40
END RECORD
41
42
TYPE test_array IS ARRAY: in_array :=(("0","0","0","0"),  
43
-- Array mit Testwerten und Ergebnis erstellen
44
                  ("0","0","1","0"),
45
                  ("0","1","0","0"),
46
                  ("0","1","1","0"),
47
                  ("1","0","0","0"),
48
                  ("1","0","1","0"),
49
                  ("1","1","0","0"),
50
                  ("1","1","1","1"));
51
                                                                     
52
53
54
ClkProcess : PROCESS  -- Process um die Simulation zu beenden
55
BEGIN
56
IF stop_simulation = '1' THEN
57
ASSERT false REPORT "Simulation zu ENDE" SEVERITY note;
58
WAIT;
59
END IF;
60
                           
61
                           
62
                           
63
StimuProcess : PROCESS(clk)      -- StimuProcess
64
VARIABLE i : natural := 0;
65
BEGIN 
66
IF clk ='1' THEN        -- rising edge 
67
A <= test_array(i).Ax;
68
B <= test_array(i).Bx;
69
C <= test_array(i).Cx;
70
71
i := i+1;
72
IF (i>15) THEN stop_simulation <= '1'; END IF;
73
74
END IF;
75
END PROCESS;
76
77
Response      -- Vergleich?
78
79
                           
80
               
81
END architecture TEST_vhdl;

Zur Idee:

Ich versuche eine AND-Logik mit 3 Eingängen zu realisieren.
Kann man dies so realisieren?
Nun fehlt mir jedoch noch der Verleich, ob die Ausgänge korrekt sind. 
Diesen Vergleich würde ich gerne alle 20 ns durchführen. Hätte Ihr hier 
vielleicht noch einen Tipp für mich?


Gruß IH453

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

IH453 schrieb:
> Nun fehlt mir jedoch noch der Verleich, ob die Ausgänge korrekt sind.
> Diesen Vergleich würde ich gerne alle 20 ns durchführen. H
Falsche Denkweise. Du musst da nichts zeitgesteuert machen. Du kannst 
einfach auf die Änderung einen Signals reagieren, indem du es in die 
Sensitivliste eines Prozesses aufnimmst.

> Ich versuche eine AND-Logik mit 3 Eingängen zu realisieren.
> Kann man dies so realisieren?
Kann man, sieht aber umständlich aus. So insgesamt. Frage: funktioniert 
die Testbench bis hierher schon? Mit dem Ansehen der Waveform kann kam 
das ja ganz leicht
kontrollieren...

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.