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
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
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
@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
> 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
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
@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