www.mikrocontroller.net

Forum: FPGA, VHDL & Co. ModelSim: Simulation kontrolliert beenden


Autor: Martin Kohler (mkohler)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

Ich simuliere meine Designs mit ModelSim XE III/Starter 6.2g

Dabei habe ich das Problem, dass ich eine laufende Simulation nicht 
wirklich sauber beenden kann.
Bisher habe ich immer am Ende der Kontrollsignale eine solche Zeile 
eingefügt:
assert false report "Ende control signals" severity failure;

Dies führt zwar zum gewünschten Resultat (Simulation wird beendet), ist 
aber nicht wirklich sauber.

Gibt es da eine elegantere Möglichkeit?

Autor: Klaus Falser (kfalser)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Soviel ich weiss, ist die einzige Methode, mit der die Simulation 
wirklich "sauber" aufhört, keine Events mehr zu erzeugen.
Das heißt, man muß den Takt beenden und auch von außen keine Taktflanken 
mehr anliegen.
Ob es jemand wirklich so macht weiss ich nicht, ich jedenfalls nicht.
Meine Befürchtung war immer die, dass der Taktgenerator der am 
häufigsten aufgerufene Prozess ist, und deshalb die Simulation gebremst 
wird, aber eigentlich ist das ein Blödsinn....

Autor: SuperWilly (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Alternative:

Man definiert sich ein Testbench-Signal

signal sim_status : string (1 to 10) := "INITIAL ";


Wenn die Simulation beendet werden soll, wird das Signal geändert, 
bspw.:

sim_status <= "FINISHED";


In einem do-Skript könnte man dieses Signal abfragen:

when {/sim_status == "FINISHED"} {
echo "@ t= $now ENDE der Simulation"
quit -f

Autor: Duke Scarring (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Bei mir sieht es ungefähr so aus:
  signal running: boolean := true;

  ...

  clk <= not clk after t_period/2 when running;

  ...
  
  control_simulation: process
  begin

    wait for whatever;

    running <= false;
    wait;
  end process;


Duke

Autor: Martin Kohler (mkohler)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Danke für die Antworten.

Ich habe jetzt ein separates Signal "simulation_running" eingefügt, 
welches ich am Ende der Tests auf 0 setzt.
Dadurch setze ich den Clock Process und einen weiteren Generator Process 
auf "wait", so dass keine weiteren Events mehr entstehen.
Die Simulation hört nun wie gewünscht auf zu laufen.

Ob das der "saubere" Weg ist - keine Ahnung ;-)

PS: zuerst hat es mich "erwischt", weil simulation_running ganz zu 
Beginn der Simulation noch undefiniert war und somit der Clock gar nie 
zum Laufen kam.

Autor: Matthias (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@Klaus Falser: Mein Kollege hat hier eine Lösung eingebracht, bei der 
ein Prozess die Clock erzeugt und das beendet sobald ein Signal auf eins 
geht. Das schaut dann ungefähr so aus:
  gen_clk : process is
  begin  -- process
    loop
      MainClock    <= '0';
      wait for clock_low_time;
      MainClock    <= '1';
      wait for clock_high_time;
      exit when simulation_finished;
    end loop;
    wait;
  end process;

wobei die Konstanten und Signale natürlich woanders definiert sind. Das 
funktioniert auch recht gut und gibt (wenigstens in der Theorie) den 
Vorteil, dass kombinatorische Schleifen, die auch ohne Takt noch Events 
erzeugen, entdeckt werden können.

Autor: Matthias (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Grmpf, ich sollte so Threads bis zum Ende lesen, sorry, mein Fehler.

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.