Hallo zusammen, ich nutze ISE 11.3 in Verbindung mit ISim 11.3... Ich erstelle mir einen Testbench, ergänze die Stimulus, checke die Syntax und starte dann ISim aus dem ISE heraus. Nun ziehe ich meine interessanten internen Signale in die Waveform und lasse dann meine Simulation laufen. Ich finde einen Fehler, behebe den im vhdl Design und möchte nun wieder simulieren. Bisher habe ich aber leider keine Möglichkeit gefunden, die vhdl Dateien neu ins ISim zu laden. Ich muss immer wieder das Programm schließen und dann alle internen SIgnale wieder neu hinzufügen und konfigurieren... das nervt und ist zeitaufwendig. Ich habe bisher mit ModelSim XE getestet (kommt aber leider nicht mehr mit dem Fifo Gen 5.3 klar) und da konnte man eine .do Datei erstellen, die man dann einfach ausgeführt hat und schwups hatte man alles wie gewünscht. Gibt es diese Möglichkeit hier auch? Wenn ja, wie lautet die Syntax für diese Datei? Vielen Dank! MfG Andi
Bei 11.4 ist es einfach auch speichern einer Waveform-Datei im ISim und man kann angeben dass diese Waveformdatei automatisch mit dieser Testbench geladen wird wenn man rechts klickt auf Simulation
Zjm Modelsim XE noch. Mit jedem ISE Release gibts auch die neuen Core-Libs als vorkompilierte Dateien zum runterladen. Da ist auch der FIFO 5.3 dann drin. Allerdings nur für die jeweils aktuelle Version (6.4) die hat aber einen doofen bug momentan. Du kannst die Libs auch manuell übersetzen. Die Scripte sind bei Modelsim dabei.
Genau das interessiert mich auch weil ich genau das Problem habe. Ich benutze bereits die Version 11.4 Wenn ich meine Signale alle zurechtgerückt habe und die passenden Farben und Formate vergeben habe muß ich nur auf speichern drücken. Wenn ich dann einen Fehler im VHDL-Code behoben habe muß ich dann im ISE rechtsklick auf simulieren klicken und dann die Datei laden?
Johann schrieb: > Genau das interessiert mich auch weil ich genau das Problem habe. Ich > benutze bereits die Version 11.4 > > Wenn ich meine Signale alle zurechtgerückt habe und die passenden Farben > und Formate vergeben habe muß ich nur auf speichern drücken. > > Wenn ich dann einen Fehler im VHDL-Code behoben habe muß ich dann im ISE > rechtsklick auf simulieren klicken und dann die Datei laden? Du musst nur EINMAL spezifizieren welche waveform er verwenden soll für die testbench, dann läd er die bei jedem start automatisch nach
Was mir auch immer Probleme bereitet ist folgendes: Ich habe ein Design, hierzu gibt es eine Testbench. Wenn ich jetzt einen neuen Eingang hinzufüge ist dieser in der alten Testbench nicht vorhanden. Jetzt kann ich bei der Testbench manuell diesen Port hinzufügen. Kann man dies nicht automatisieren. z.B. Mausklick auf Testbench und auf aktualisieren klicken? Wenn man z.B. eine neue Testbench erzuegt, dann erzeugt er ja auch automatisch die Testbench aus den aktuellen Ein und Asugängen.
Johann schrieb: > Was mir auch immer Probleme bereitet ist folgendes: > > Ich habe ein Design, hierzu gibt es eine Testbench. Wenn ich jetzt einen > neuen Eingang hinzufüge ist dieser in der alten Testbench nicht > vorhanden. Jetzt kann ich bei der Testbench manuell diesen Port > hinzufügen. Kann man dies nicht automatisieren. > > z.B. Mausklick auf Testbench und auf aktualisieren klicken? > > Wenn man z.B. eine neue Testbench erzuegt, dann erzeugt er ja auch > automatisch die Testbench aus den aktuellen Ein und Asugängen. nein automatisch geht das nicht, entweder neue testbench erzeugen lassen (und die eigenen änderungen vorher speichern) oder eben manuell rein
Use Custom Waveform Configuration File anklicken anschließend die zuvor abgespeicherte Waveformkonfiguration unter dem Punkt "Custom Waveform Configuration File" angeben. Anschließend muß nur noch die Simulation gestartet werden und es wird immer dies gepsiechert Waveform automatisch geöffnet.
Alles klar, das funktioniert nun tadellos.... aber ich muss nun wirklich bei jeder Änderung im Projekt ISim neu starten? DANKE für die vielen Hinweise :)
Bis jetzt habe ich es auch noch nicht anders hinbekommen. Vielleicht kennt ja jemand einen besseren Weg.
Christopher D. schrieb: > nein automatisch geht das nicht, entweder neue testbench erzeugen lassen > (und die eigenen änderungen vorher speichern) oder eben manuell rein Oder man verwendet records. Bei jeder Erweiterung des records steht das Signal automatisch an beiden Enden zur Verfügung, ohne die entitys anfassen zu müssen. Duke
Duke Scarring schrieb: > Christopher D. schrieb: >> nein automatisch geht das nicht, entweder neue testbench erzeugen lassen >> (und die eigenen änderungen vorher speichern) oder eben manuell rein > > Oder man verwendet records. Bei jeder Erweiterung des records steht das > Signal automatisch an beiden Enden zur Verfügung, ohne die entitys > anfassen zu müssen. > > Duke Kannst du ein Beispiel geben?
@Christopher D.: Ungefähr so:
1 | -- global_types.vhd
|
2 | package global_types is |
3 | |
4 | type modual_a_in_t is record |
5 | flag : std_logic; |
6 | sig : std_logic_vector(31 downto 0) |
7 | end record; |
8 | |
9 | type modual_a_out_t is record |
10 | en : std_logic; |
11 | result : std_logic_vector(10 downto 0) |
12 | end record; |
13 | |
14 | |
15 | type modual_b_in_t is record |
16 | en : std_logic; |
17 | x : std_logic_vector(15 downto 0), |
18 | y : std_logic_vector(15 downto 0) |
19 | end record; |
20 | |
21 | type modual_b_out_t is record |
22 | value : std_logic_vector(15 downto 0) |
23 | end record; |
24 | |
25 | end package global_types; |
1 | -- global_components.vhd
|
2 | package global_components is |
3 | |
4 | use work.global_types.all; |
5 | |
6 | component modul_a is |
7 | port( |
8 | clk : in std_logic; |
9 | rst_n : in std_logic; |
10 | modul_a_in : in modual_a_in_t; |
11 | modul_a_out : out modual_a_out_t |
12 | );
|
13 | end component modul_a; |
14 | |
15 | component modul_b is |
16 | port( |
17 | clk : in std_logic; |
18 | rst_n : in std_logic; |
19 | modul_b_in : in modual_b_in_t; |
20 | modul_b_out : out modual_b_out_t |
21 | );
|
22 | end component modul_b; |
23 | |
24 | end package global_components; |
1 | -- modul_a.vhd
|
2 | |
3 | use work.global_types.all; |
4 | |
5 | entity modul_a is |
6 | port( |
7 | clk : in std_logic; |
8 | rst_n : in std_logic; |
9 | modul_a_in : in modual_a_in_t; |
10 | modul_a_out : out modual_a_out_t |
11 | );
|
12 | |
13 | architecture rtl of modul_a is |
14 | |
15 | begin
|
16 | ...
|
17 | end; |
1 | -- modul_b.vhd
|
2 | |
3 | use work.global_types.all; |
4 | |
5 | entity modul_b is |
6 | port( |
7 | clk : in std_logic; |
8 | rst_n : in std_logic; |
9 | modul_b_in : in modual_b_in_t; |
10 | modul_b_out : out modual_b_out_t |
11 | );
|
12 | |
13 | architecture rtl of modul_a is |
14 | |
15 | begin
|
16 | ...
|
17 | end; |
1 | -- modul_a_tb.vhd
|
2 | entity modul_a_tb is |
3 | end entity; |
4 | |
5 | use work.global_types.all; |
6 | use work.global_components.modul_a; |
7 | |
8 | architecture testbench of modul_a_tb is |
9 | |
10 | signal tb_clk : std_logic := '0'; |
11 | signal tb_rst_n : std_logic; |
12 | signal tb_modul_a_in : modual_a_in_t; |
13 | signal tb_modul_a_out : modual_a_out_t |
14 | |
15 | begin
|
16 | |
17 | ...
|
18 | |
19 | tb_clk <= not tb_clk after 10 ns; |
20 | |
21 | tb_modul_a_in.flag <= '0', '1' after 100 ns; |
22 | tb_modul_a_in.sig <= (others => '1'); |
23 | |
24 | dut: modul_a |
25 | port map( |
26 | clk <= tb_clk, |
27 | rst_n <= tb_rst_n, |
28 | modul_a_in <= tb_modul_a_in, |
29 | modul_a_out <= tb_modul_a_out |
30 | );
|
31 | |
32 | ...
|
33 | |
34 | end; |
Auf dem Toplevel würde ich keine records mehr verwenden. Duke P.S.: Code kann syntaktische Fehler enthalten.
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.