Hallo zusammen,
ich habe mir eine Testbench gebaut um einen neuen Block zu testen.
Das funktioniert soweit auch sehr gut.
Um allerdings das korrekte Runden in dem Block zu testen, habe ich die
Rechnungen parallel mit real Zahlen nachgebaut.
Aber bei der Multiplikation oder auch Division von zwei Real Signalen
bekomme ich beim Starten der Simulation in Modelsim folgende
Fehlermeldung:
** Fatal: (vsim-3421) Value 1.#INF for prod2_real is out of range
-1e+308 to 1e+308.
Ganz egal welche Zahlen ich verwende.
Wenn ich aber für die Berechnung keine Signale verwende sondern nur
einen Zahlenwert benutze, dann gibt es keinen Fehler.
Hat jemand eine Idee?
Danke und Gruß
Daniel
Hier das Minimalbeispiel:
Empfehler schrieb:> Daniel P. schrieb:>> Hat jemand eine Idee?>> schreib der deklaration auch eine initialisierung dran.
Danke für den Tipp.
Ich habe die Signale mit einer Zahl ungleich 0 initialisiert und jetzt
klappt es.
Lothar M. schrieb:> Hilft dir zwar nicht viel weiter, aber: der ISIM kanns ohne Meckern.
Also das sollte SEHR zu Denken geben, insb. bei dem Quelltext.
Sigi schrieb:> Also das sollte SEHR zu Denken geben, insb. bei dem Quelltext.
Stimmt, ich habe da einen Verdacht und muss mal die Reihenfolge der
Signalzuweisungen umsortieren. Es hat den Anschein, als ob der ISIM das
Top-Down und nicht gleichzeitig macht.
Sigi schrieb:> Lothar M. schrieb:>> Hilft dir zwar nicht viel weiter, aber: der ISIM kanns ohne Meckern.>> Also das sollte SEHR zu Denken geben, insb. bei dem Quelltext.
Nö. In VHDL werden nicht explizit initialisierte Signale implizit mit
dem Wert <type>'LEFT initialisiert.
So, wie's hier aufgeschrieben ist, spielt's (wegen concurrent
statements) keine Rolle, ob die "Initialisierung" (die keine ist) über
oder unter der Rechnung steht, im ersten Simulationsschritt wird die
Rechnung jedenfalls mit den implizit initialisierten Werten
durchgeführt.
und
real'left * real'left ergibt nun mal #inf.
VHDL definiert nirgends, ob 'infinity' ein erlaubter Wert für ein real
ist oder nicht (ModelSim nimmt offensichtlich Letzteres an, ghdl z.B.
nicht).
M.E. völlig akzeptabel und überhaupt nicht besorgniserregend.
Lothar M. schrieb:> Sigi schrieb:>> Also das sollte SEHR zu Denken geben, insb. bei dem Quelltext.> Stimmt, ich habe da einen Verdacht und muss mal die Reihenfolge der> Signalzuweisungen umsortieren. Es hat den Anschein, als ob der ISIM das> Top-Down und nicht gleichzeitig macht.
wenn da nirgends #inf auftaucht, macht ISIM das m.E. falsch.
Markus F. schrieb:> Nö. In VHDL werden nicht explizit initialisierte Signale implizit mit> dem Wert <type>'LEFT initialisiert.
Das ist schon klar (std_logic ist ja auch immer 'U'), darum
ging's aber nicht. Erstaunlisch ist, das es bei Lothar
geklappt hat. (und dann noch mögliche Interpretationen des
Quelltextes, du schreibst ja auch von "Initialisierung")
Markus F. schrieb:> und> real'left * real'left ergibt nun mal #inf.
Die Fehlermeldung aus Post 1 bezieht sich aber auf die
Division, und da bin ich bis jetzt davon ausgegangen,
dass die Fehlermeldung Oben so iO ist, die Simulation
von ISIM aber nicht. und hier schreibst du:
Markus F. schrieb:> VHDL definiert nirgends, ob 'infinity' ein erlaubter Wert für ein real> ist oder nicht
Muss ich mal nach suchen, bin bis jetzt immer davon ausgegangen,
dass REAL auf IEEE754 basiert, und da ist es doch wohl eindeutig
definiert(?).
Sigi schrieb:> Erstaunlisch ist, das es bei Lothar> geklappt hat.
Ja, das mit dem 'left ist klar, aber warum es dann da im allerersten
Augenblick nicht gleich scheppert wundert mich schon auch. Dienstag
schau ich mir das nochmal an.
Sigi schrieb:> Die Fehlermeldung aus Post 1 bezieht sich aber auf die> Division,
Mein ModelSim (10.1d und 10.5b) meldet mit dem Design vom 1. Post den
Fehler hier:
** Fatal: (vsim-3421) Value inf for prod1_real is out of range -1e+308
to 1e+308.
Also bei der Multiplikation und nicht bei der Division. Auch wenn ich
die Multiplikation auskommentiere, kommt bei der Division kein Fehler
(fühle mich bestätigt). Das ModelSim vom TO scheint kaputt zu sein.
Markus F. schrieb:> Sigi schrieb:> Das ModelSim vom TO scheint kaputt zu sein.
vielleicht liegt es ja auch an unterschiedlichen Settings in der
modelsim.ini.
Ich tippe da mal auf 'NoRangeCheck = 1'
1
; Inhibit range checks on all (implicit and explicit) assignments to