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