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
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.
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/
René D. schrieb: > Für testbench ein super Einstieg > http://www.stefanvhdl.com/ Man kann es nicht oft genug sagen... ;-)
:
Bearbeitet durch Moderator
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
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.