www.mikrocontroller.net

Forum: FPGA, VHDL & Co. Bekomme Modelsim nicht in den Griff; Error: (vsim-3601)


Autor: Maik Ritter (kiamur)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

ich habe gestern angefangen mich mit Modelsim zu beschäftigen. Zuerst 
habe ich mal das Tutorial in der Modelsim Doku durchgearbeitet, wo ein 
Counter mit seiner testbensch getestet wird. Das hat funktioniert.

Jetzt wollte ich mal ein eigenes Modul testen. Ich nehme also das Modul, 
mache mir ein Modelsim Projekt, erstelle den Ordner work, kopiere dort 
das Modul hinein und erstelle eine Testbench. Anschließend wird alles 
kompiliert und mit der Testbench die Simulation gestartet.

Leider bekomme ich immer den Fehler
# ** Error: (vsim-3601) Iteration limit reached at time 0 ns.
# ** Note: (vsim-3602) Delays were truncated during elaboration of the 
design.

Ich habe herumgeforscht, und herausgefunden, dass ich irgendwo einen 
infinity loop habe, aber leider weiß ich nicht, was ich nun dagegen tun 
soll.

Hier ist mal das Modul und die Testbensch:
library ieee;
use ieee.std_logic_1164.all;

entity convert_2s_complement is
  port  (  clk      : in std_logic;
        in_binary  : in std_logic_vector(11 downto 0);
        out_2s_compl  : out std_logic_vector(11 downto 0));
end entity convert_2s_complement;

architecture convert_2s_complement_arch of convert_2s_complement is

begin
  process(clk)
  begin
    if(clk'event and clk = '1') then
        out_2s_compl <= not in_binary;
      --if(in_binary(11) = '1') then
      --  out_2s_compl <= '0' & in_binary(10 downto 0);
      --else
      --  out_2s_compl <= '1' & (not(in_binary(10 downto 0)) + 1);        
      --end if;
    end if;
  end process;
end architecture;
library ieee;
use ieee.std_logic_1164.all;

entity convert_2s_complement_test is
end convert_2s_complement_test;

architecture testbench of convert_2s_complement_test is

component convert_2s_complement
  port  (  clk      : in std_logic;
          in_binary  : in std_logic_vector(11 downto 0);
          out_2s_compl  : out std_logic_vector(11 downto 0));
end component;

signal bench_clk      : std_logic := '0';
signal bench_in_binary    : std_logic_vector(11 downto 0);
signal benchout_2s_compl  : std_logic_vector(11 downto 0);

begin
  C1: convert_2s_complement port map(clk => bench_clk, in_binary => bench_in_binary, out_2s_compl => benchout_2s_compl);
  
  CLOCK: process
  begin
    wait for 20 ns;
    bench_clk <= not bench_clk; 
  end process CLOCK;
  
  STIMULUS: process
  begin
    wait for 20 ns;
    bench_in_binary <= "100000000000";
    wait for 20 ns;
    bench_in_binary <= "000000000000";
    wait for 20 ns;
    bench_in_binary <= "011100011100";
    wait for 20 ns;
    bench_in_binary <= "111111111111";
  end process STIMULUS;
  
end testbench;

Kann das von euch einmal jemand "durchnudeln" und mir sagen, wo mein 
Fehler ist, damit ich endlich mal mit dem simulieren anfangen kann?!?

Vielen Dank und Gruß,
Maik

Autor: Duke Scarring (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
vcom *.vhd
vsim work.convert_2s_complement_test
add wave *
run 500 ns

Funktioniert augenscheinlich so, wie es im Quelltext dasteht.

Duke

Autor: Lothar Miller (lkmiller) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> Funktioniert augenscheinlich so, wie es im Quelltext dasteht.
Hätte ich auch erwartet...

@ Maik Ritter
Simulierst du die falsche Datei?

BTW:
Mir fällt auf, dass Änderungen am Takt bench_clk und die Änderung an 
bench_in_binary zeitgleich kommen. Das wird nicht deine Absicht sein. 
Zumindest jede zweite Zuweisung an bench_in_binary wird nicht 
verarbeitet werden. Du solltest die Taktfrequenz mindestens verdoppeln 
;-)

Autor: Matthias (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich schätze mal dass die Zeitauslösung zu hoch ist, zumindet habe ich 
dieselbe Iteration Limit Fehlermeldung sobald ich mit Zeitauflösungen >= 
100 ns simuliere.

Übrigens: fehlt da fürs Zweierkomplement nicht noch das Inkrement?

LG
Matthias

Autor: Klaus Falser (kfalser)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> Ich nehme also das Modul, mache mir ein Modelsim Projekt, erstelle den
> Ordner work, kopiere dort das Modul hinein und erstelle eine Testbench

Ich kann mir zwar nicht ganz vorstellen, dass es daran liegt, aber ich 
habe noch nie gehört, dass man in den Libraries herumkopieren darf.
Du solltest jedes Modul in die Library hineincompiliern.
Soviel ich weiss, gehören zur Library auch Indizes und andere 
Verwaltungsinformationen.

Autor: Maik Ritter (kiamur)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo an alle!

Vielen Dank für eure Hilfe!

@Duke: Genau das was da bei dir rauskommt wünsche ich mir, aber er gibt 
mir immer nur diese Fehlermeldungen aus, die ich gepostet habe. Du hast 
auch nichts in dem Quelltext geändert, oder? Kannst du vielleicht noch 
mal Schritt für Schritt schreiben, wie du meinen Quellen zum Laufen 
gebracht hast?!?

@Lothar: Nein, das mit den 20ns ist nur einer meiner verzeiwfelten 
Versuche gewesen etwas zum laufen zu bekommen . . . .

@Matthias: Das mit der Zeitauflösung werde ich gleich mal ausprobieren, 
aber warum ist das denn so, wenn es wirklich dann klappen sollte? Wenn 
du dir übrigens noch mal den auskommentierten Code im Modul anschaust, 
dann findest du auch das inkrement ;-)

@Klaus: Ich kopiere die beiden Dateien so wie es im Tutorial beschrieben 
ist in den Ordner work, danach öffne ich sie in Modelsim und kompiliere 
dann auch in Modelsim. Habe ich genauso mit den beiden Modelsim 
testfiles Counter und TCounter gemacht. Da hat auch die Simulation 
geklappt . . .

Gruß,
Maik

Autor: Matthias (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@Maik: Der Simulator benutzt intern eine Auflösung, die du ihm 
einstellst. Das ist die Auflösung, die er für Zeitschritte verwenden 
kann. Ich würde nicht mein Leben darauf verwetten, aber es müsste bei zu 
großer Auslösung (größer als Taktrate) eigentlich das passieren, dass 
der Simulator die nächste Taktflanke auf einen folgenden Delta-Delay 
Cycle zum selben Zeitpunkt schedult. Er kriegt nun also einen Haufen 
Flankenwechsel auf der clock mit Zeitabstand 20 ns, da er aber nur 
Zeitabstand 100 ns intern darstellen kann macht er eben einen 
Flankenwechsel bei 0 ns plus einem Delta Cycle daraus.

Am Ende kann er die Simulationszeit nicht weiterzählen sondern zählt nur 
Delta Delays ... bis er das Limit bei diesen erreicht.

Ich simuliere inzwischen prinzipiell mit 1 ps Zeitauflösung, weil auch 
so mancher IP Core feinere Auflösungen braucht und es nicht immer klar 
in der Dokumentation verrät.

LG
Matthias

Autor: Maik Ritter (kiamur)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi Matthias,

kannst du mir auch noch sagen, wo ich diese Auflösung einstelle? Unter 
Simulate-> Runtime Options habe ich das nicht gefunden . . .

Sorry wegen der Elementaren Fragen, aber ich finde die Doku zu Modelsim 
alles andere als verständlich, wenn man noch nie damit gearbeitet hat.

Gruß,
Maik

Autor: Duke Scarring (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@Maik:
Versuch mal folgendes:
vsim -t 1 ps work.convert_2s_complement_test

Bei mir steht (u.A.) folgendes in der modelsim.ini:
[vsim]
; Simulator resolution
; Set to fs, ps, ns, us, ms, or sec with optional prefix of 1, 10, or 100.
Resolution = ps

Duke

Autor: Maik Ritter (kiamur)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi Duke,

vielen Dank, jetzt läuft es. Man muss allerdings "vsim -t 1ps 
work.convert_2s_complement_test" schreiben, damit es geht.

Modelsim wird sicher noch für die eine oder andere Frage gut sein . . . 
;-)

Gruß,
Maik

Autor: FPGA-Vollprofi (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Du kannst das auch mit einem Projekt machen und vor der Simulation 
rechts unten klicken, dort wo die Datei ausgewählt wird. (Simulate)

"testbensch"
Der Testmensch und seine Testbensch auf der Restränsch, ISBN 
078-4575-3345, 1982

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.