Forum: FPGA, VHDL & Co. Simulieren mit ISim, ein paar Feinheiten.


von Andreas B. (loopy83)


Lesenswert?

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

von D. I. (Gast)


Lesenswert?

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

von Christian R. (supachris)


Lesenswert?

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.

von Johann (Gast)


Lesenswert?

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?

von D. I. (Gast)


Lesenswert?

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

von Johann (Gast)


Lesenswert?

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.

von D. I. (Gast)


Lesenswert?

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

von Johann (Gast)


Lesenswert?

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.

von Andreas B. (loopy83)


Lesenswert?

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 :)

von Johann (Gast)


Lesenswert?

Bis jetzt habe ich es auch noch nicht anders hinbekommen. Vielleicht 
kennt ja jemand einen besseren Weg.

von Duke Scarring (Gast)


Lesenswert?

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

von D. I. (Gast)


Lesenswert?

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?

von Duke Scarring (Gast)


Lesenswert?

@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
Noch kein Account? Hier anmelden.