Forum: FPGA, VHDL & Co. Wie Testbench formulieren und in ISE aufrufen ?


von FPGA-Fragender (Gast)


Lesenswert?

Hallo zusammen,

ich hab in der WEB ISE 8.1 einen VHDL Entwurf, der ohne Fehler bei der 
Synthes komplett durchläuft erstellt.

Ich bin schon seit Stunden dabei "rumzuwurschteln" einen Testbench zu 
schreiben, weil das manuelle Eingeben der Stimuli Werte viel zu 
umständlich ist.

Beispiel:
Die nachfolgende Entity habe ich entworfen.

ENTITY dct IS
   PORT (
     CLK                     : IN std_logic;
     RST                     : IN std_logic;
     start_section_one       : IN std_logic;
     get_next_Pixel_high     : IN std_logic_vector(7 downto 0);
     get_next_Pixel_low      : IN std_logic_vector(7 downto 0);
     z_zigzag_out_Ent        : OUT std_logic_vector(15 downto 0);
     zig_Zag_out_Valid_Ent   : OUT std_logic);
END dct;


Zusätzlich möchte ich als "interne Signale" der Entity die nachfolgenden 
Signale angezeigt/ausgegeben bekommen.

signal p1a                   :  std_logic_vector(18 downto 0);
signal start_section_two     :  std_logic;


Wenn ichs richtig kapiert hab, brauch ich ein .VHD file.

Dort entwerfe ich eine neue Entity mit beliebigem Namen und erzeuge per 
HDL Sprache Signale, welche den Input für die o.g. Entity darstellen.

Ich check nur nicht wie ich das schreiben muss.

Hier mein Gerüst

______________________________________________________________________ 
_

ENTITY testbench_of_dct IS
END testbench_of_dct;

ARCHITECTURE test_architecture OF testbench_of_dct IS

-- meine Signale die mit den ports von dct verbunden werden


signal:    tb_CLK                     : std_logic;
signal:    tb_RST                     : std_logic;
signal:    tb_start_section_one       : std_logic;
signal:    tb_get_next_Pixel_high     : std_logic_vector(7 downto 0);
signal:    tb_get_next_Pixel_low      : std_logic_vector(7 downto 0);
signal:    tb_z_zigzag_out_Ent        : std_logic_vector(15 downto 0);
signal:    tb_zig_Zag_out_Valid_Ent   : std_logic);


-- Signale die sonst noch gebraucht werden

signal:    my_counter                 :  std_logic_vector(15 downto 0);


COMPONENT dct
PORT (
     CLK                     : IN std_logic;
     RST                     : IN std_logic;
     start_section_one       : IN std_logic;
     get_next_Pixel_high     : IN std_logic_vector(7 downto 0);
     get_next_Pixel_low      : IN std_logic_vector(7 downto 0);
     z_zigzag_out_Ent        : OUT std_logic_vector(15 downto 0);
     zig_Zag_out_Valid_Ent   : OUT std_logic);

END COMPONENT;



BEGIN


my_dct : dct PORT MAP (tb_CLK , tb_RST, tb_start_section_one,
                       tb_get_next_Pixel_high, tb_get_next_Pixel_low,
                       tb_z_zigzag_out_Ent, tb_zig_Zag_out_Valid_Ent );

PROCESS

-- Am Anfang sollen alle Input Parameter auf 0 stehen
-- 1. Takt  RST wechselt auf High
-- 2. Takt  RST wechselt auf LOW
-- 3. keine Veränderung
-- 4. Takt  start_section_one geht auf High und bleibt weiterhin High
-- 5. Takt  die Daten von tb_get_next_Pixel_high und
            tb_get_next_Pixel_low nehmen definierte werte an.
--          ca. 300 Zeilen

for my_counter = 0 to 300
  case my_counter is

      when "00000000"   => tb_get_next_Pixel_high  <= "110011"  ;
                           tb_get_next_Pixel_low   <= "100011"  ;
                           RST <= '0'

      when "00000001"   => tb_get_next_Pixel_high  <= "110011"  ;
                           tb_get_next_Pixel_low   <= "100011"  ;
                           RST <= '1'
.. 300 Werte usw.

next my_counter

END PROCESS;

END test_architecture;

_________________________________________________________________


Wie kann ich nun erklären, welche Signale angezeigt werden sollen ?

Wie kann ich die internen Signale anzeigen lassen ?

Wie muss ich die .vhd Datei aufrufen, damit sie als TEstbench erkannt 
wird und mir die Signale im Simulator angezeigt werden ?

Kann mir jemand den codeschnippsel ergänzen damit ich wenigstens mal 
eine lauffähige Version habe. Die kann ich dann selber meinen Wünschen 
noch anpassen.

Das produzieren von z.b. 300 Zeilen ist kein Problem. Meine Stimuli 
Werte hab ich sowiso schon in Excel Tabellen da brauch ich nur Cut and 
Paste machen.

Herzlichen Dank für jede Hilfe

Gruß vom FPGA-Fragenden

von Stefan H. (stefanhanke)


Lesenswert?

FPGA-Fragender wrote:

> Wie kann ich nun erklären, welche Signale angezeigt werden sollen ?
Das wird (normalerweise?) nicht in der VHDL-Quelldatei gemacht, sondern 
im Simulator selbst. Es gibt da sicher Kombinationen Editor+Simulator, 
die erlauben, per Metainformationen ("attribute" in VHDL) dem Simulator 
Steueranweisungen zu geben, da habe ich allerdings keine Ahnung -- und 
das brauchst du auch gar nicht ... also vergess das gleich wieder ;-)

> Wie kann ich die internen Signale anzeigen lassen ?
Falls du nicht sehr genau weisst, was du suchst, solltest du darauf 
achten, dass die Synthese deine Hierarchie abbildet. Dadurch wird es 
sehr viel einfacher, "interessante" Signale zu finden. Rechtsklick auf 
"Synthesis" im "Processes"-View.

> Wie muss ich die .vhd Datei aufrufen, damit sie als TEstbench erkannt
> wird und mir die Signale im Simulator angezeigt werden ?
Zuerst Rechtsklick auf die VHDL-Quelldatei im "Sources"-View, 
"Properties", da stellst du "Association -> Simulation only" ein. Dann 
den "Sources"-View auf "Behavioral Simulation" stellen. Jetzt müsste die 
Datei hier angezeigt werden. Die Datei anwählen. Der "Processes"-View 
enthält nun eine Option zum Starten der Simulation.

Bei der Erstellung kannst du VHDL-Testbench als "Dateityp" angeben. 
Damit erscheint die Datei im "Source"-View nur unterhalb den 
Simulationen. Der "Processes"-View erlaubt dir dann, die Simulation 
(ISIM) zu starten.

> Kann mir jemand den codeschnippsel ergänzen damit ich wenigstens mal
> eine lauffähige Version habe. Die kann ich dann selber meinen Wünschen
> noch anpassen.
Wenn du eine Testbench mittels des Wizards erstellst, dann ist die per 
se lauffähig, tut aber nichts interessantes. Da kannst du dann deinen 
Stimuli reinsetzen.

> Das produzieren von z.b. 300 Zeilen ist kein Problem. Meine Stimuli
> Werte hab ich sowiso schon in Excel Tabellen da brauch ich nur Cut and
> Paste machen.
Du machst in VHDL eh schon genug CopynPaste... ;-)

 -- stefan

von FPGA-Fragender (Gast)


Lesenswert?

Hallo Stefan,

danke für Deine Antworten :-))

Leider komme ich nicht weiter.

Wenn ich in der ISE eine neue Source hinzufüge dann kann ich bei den 
Properties Testbench ( Name z.B. "MyTB" ) auswählen und starten. Soweit 
so gut.

Das Timing Diagramm erscheint und ich kann von Hand auch meine Stimuli 
eingeben. Soweit auch gut.

Nun speichere ich das ganze und möchte eben diesen Testbench "MyTB" per 
Text Edito öffnen um die Stimuli von Hand per Cut and paste zu setzen.

Und genau darin besteht ja mein Problem. Ich finde nicht die richtige 
Datei, die ich nun editieren müsste.

In der Datei MyTB.tbh stehen die Stimuli nicht drin.

Bin echt am verzweifeln.  :-<<

Kann mir nicht evtl. jemand eine Beispiel Testbench posten und daran 
meine o.g. Fragen kurz beantworten.

Gruß vom FPGA-Fragenden

von Falk (Gast)


Lesenswert?

@FPGA-Fragender

>Wenn ich in der ISE eine neue Source hinzufüge dann kann ich bei den
>Properties Testbench ( Name z.B. "MyTB" ) auswählen und starten. Soweit
>so gut.

Ich weiss nicht ob die Menus bei ISE 8.1 noch 100% die gleichen sind. In 
ISE 4.3 geht das so.

Project -> New Source -> Typ VHDL test bench, Namen eingeben-> im Fenser 
das zugehörige VHDL File (welches getestet werden soll) angeben.

Dann ist deine Testbench eine neue Datei im Projektexplorer. Die kannst 
du ganz normal wie jede andere VHDL Datei anzeigen und bearbeiten.

Mfg
Falk

von Stefan H. (stefanhanke)


Lesenswert?

> Das Timing Diagramm erscheint und ich kann von Hand auch meine Stimuli
> eingeben. Soweit auch gut.

> Nun speichere ich das ganze und möchte eben diesen Testbench "MyTB" per
> Text Edito öffnen um die Stimuli von Hand per Cut and paste zu setzen.

Das widerspricht sich! :)

Eine Testbench ist eine ganz normale VHDL-Quelldatei und hat die Endung 
"vhd". Wenn du sie MyTB im Wizzard genannt hast, dann liegt sie im 
Dateisystem unter dem Namen "MyTB.vhd".

 -- stefan

von FPGA-Fragender (Gast)


Lesenswert?

Hallo Stefan und Falk,

wollte mich nochmals melden und ganz herzlich bei Euch bedanken.

Ich bin jetzt dahinter gekommen wie die Sache läuft.

Der entscheidende Hinweis war für mich, dass der Testbench eine ganz 
normale VHD Datei ist, bei <create Source> gibt man jedoch als Typ 
Testbench ein ( Das ist das entscheidende )

Obwohl jetzt eine ganz normale VHD Datei angelegt wird, frage das System 
auf welche zu simulierende VHD Datei man sich beziehen möchte.
Entsprechend auswählen und fertig.

Danach ist nur noch zu beachten, dass man vor dem Anklicken des Timing 
Symbols mit dem Curor den entsprechenden Testbench auch markiert hat.

Von da an war die Sache nicht mehr schwer. Hatte nur noch das Problem, 
dass ich die Stimuli Werte als Signed Integer Werte angeben möchte.

Mit der Typ Konvertierungs Funktion

Beispiel:

get_next_Pixel_high <= conv_std_logic_vector(107,8) ;


kann man das Problem leicht lösen.

Nach dem Motto: Nimm den Integer Wert 107 und wandle ihn in einen 8 Bit 
breiten std_logic_vector um. Funktionier übrigens auch gut mit negativen 
Werten.

Das Einbinden der entsprechenden LIb nicht vergessen und gut ists.

use IEEE.STD_LOGIC_ARITH.ALL ;

Zum Schluss noch eine Frage:

Mein Simulation als reine Verhaltenssimulation sieht schon sehr 
vielversprechend aus.

Nun hab ich noch die Möglichkeit eine "Post Rout Simulation" zu machen.

D.h. dort werden dann die echten physikalischen Laufzeitverhalten 
berücksichtigt. ( denke ich jedenfalls )

Nun meine Frage: Ist diese Post Route Simulation wirklich die "unterste 
Eben".

Duch die Übersicht in den Xilinx Hilfedateien bzgl. Simulation wurde 
total verwirrt bzgl. der manigfaltigen Arten von Simulationen, die 
möglich sind.

ca. 6 oder 7 Abstraktions Stufen werden durchlaufen.

Kann mir bitte jemand erklären, welche Möglichkeiten ich mit der 
kostenlsoen WEB ISE 8.1 hab um möglichst Hardware Nahe mein Entwurf zu 
testen, damit er dann später auch tatsächlich verlässlich läuft.

( Welcher Simulator, welche Schritte muss ich gehen )

Nochmals ganz großen Dank für Eure Tipps und Hiweise

Ich finde das Forum SSSSuuuuuuuuper

Einige engagieren sich da ganz toll.

Gruß vom FPGA-Fragenden

von Falk (Gast)


Lesenswert?

@FPGA-Fragender

>Nun hab ich noch die Möglichkeit eine "Post Rout Simulation" zu machen.
>D.h. dort werden dann die echten physikalischen Laufzeitverhalten
>berücksichtigt. ( denke ich jedenfalls )

Ja.

>Nun meine Frage: Ist diese Post Route Simulation wirklich die "unterste
>Eben".

Ja.

>ca. 6 oder 7 Abstraktions Stufen werden durchlaufen.

Naja, praktisch gibts bei FPGAs nur 3

1.) Verhaltenssimulation (Bahavioural); reine Logik, unendlich schnell
2.) Post Mapping; Logik mit Verzögerunger, allerding Verdrahtung noch 
unendlich schnell
3.) Post Place & Route; Logik mit Verzögerung, Vrdrahtung mit 
Verzögerung

Bei CPLDs gibt nur 1. nd 3.

>Kann mir bitte jemand erklären, welche Möglichkeiten ich mit der
>kostenlsoen WEB ISE 8.1 hab um möglichst Hardware Nahe mein Entwurf zu
>testen, damit er dann später auch tatsächlich verlässlich läuft.

Wenn dein Design sauber synchron aufgebaut ist (was es besser sein 
sollte), brauchst du nur eine verhaltenssimulation. Dann einfach noch im 
UCF die Taktfrequenz angeben und der Timing Analyzer prüft 
vollautomatisch ob diese eingehalten werden kann.

MfG
Falk

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.