www.mikrocontroller.net

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


Autor: Andreas B. (loopy83)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: D. I. (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Christian R. (supachris)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Johann (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: D. I. (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Johann (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: D. I. (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Johann (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Andreas B. (loopy83)
Datum:

Bewertung
0 lesenswert
nicht 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 :)

Autor: Johann (Gast)
Datum:

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

Autor: Duke Scarring (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: D. I. (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: Duke Scarring (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@Christopher D.:

Ungefähr so:
-- global_types.vhd
package global_types is

  type modual_a_in_t is record
    flag : std_logic;
    sig  : std_logic_vector(31 downto 0)
  end record;

  type modual_a_out_t is record
    en     : std_logic;
    result : std_logic_vector(10 downto 0)
  end record;


  type modual_b_in_t is record
    en : std_logic;
    x  : std_logic_vector(15 downto 0),
    y  : std_logic_vector(15 downto 0)
  end record;

  type modual_b_out_t is record
    value : std_logic_vector(15 downto 0)
  end record;

end package global_types;
-- global_components.vhd
package global_components is

use work.global_types.all;

component modul_a is
  port(
    clk         : in  std_logic;
    rst_n       : in  std_logic;
    modul_a_in  : in  modual_a_in_t;
    modul_a_out : out modual_a_out_t
  );
end component modul_a;

component modul_b is
  port(
    clk         : in  std_logic;
    rst_n       : in  std_logic;
    modul_b_in  : in  modual_b_in_t;
    modul_b_out : out modual_b_out_t
  );
end component modul_b;

end package global_components;
-- modul_a.vhd

use work.global_types.all;

entity modul_a is
  port(
    clk         : in  std_logic;
    rst_n       : in  std_logic;
    modul_a_in  : in  modual_a_in_t;
    modul_a_out : out modual_a_out_t
  );

architecture rtl of modul_a is

begin
  ...
end;
-- modul_b.vhd

use work.global_types.all;

entity modul_b is
  port(
    clk         : in  std_logic;
    rst_n       : in  std_logic;
    modul_b_in  : in  modual_b_in_t;
    modul_b_out : out modual_b_out_t
  );

architecture rtl of modul_a is

begin
  ...
end;
-- modul_a_tb.vhd
entity modul_a_tb is
end entity;

use work.global_types.all;
use work.global_components.modul_a;

architecture testbench of modul_a_tb is

  signal tb_clk         : std_logic := '0';
  signal tb_rst_n       : std_logic;
  signal tb_modul_a_in  : modual_a_in_t;
  signal tb_modul_a_out : modual_a_out_t

begin

  ...

  tb_clk <= not tb_clk after 10 ns;

  tb_modul_a_in.flag <= '0', '1' after 100 ns;
  tb_modul_a_in.sig  <= (others => '1');

  dut: modul_a 
    port map(
      clk         <= tb_clk,
      rst_n       <= tb_rst_n,
      modul_a_in  <= tb_modul_a_in,
      modul_a_out <= tb_modul_a_out
    );

  ...
  
end;

Auf dem Toplevel würde ich keine records mehr verwenden.

Duke

P.S.: Code kann syntaktische Fehler enthalten.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [vhdl]VHDL-Code[/vhdl]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.