Fehlermeldung beim arbeiten mit real Zahlen

#6862952
Lesenswert?

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:
1
   
2
   
3
LIBRARY ieee;
4
USE ieee.std_logic_1164.all;
5
USE ieee.numeric_std.ALL;
6
use IEEE.math_real.all;
7

8
ENTITY testbench_test IS
9

10
END testbench_test ;
11

12

13
ARCHITECTURE struct OF testbench_test IS
14

15
   SIGNAL diff1_real          : real;
16
   SIGNAL diff2_real          : real;
17
   SIGNAL kp_real             : real;
18
   SIGNAL prod1_real          : real;
19
   SIGNAL prod2_real          : real;
20
   SIGNAL vdiff_real          : real;
21

22

23

24
BEGIN
25
  
26
   
27
  
28
 
29
  kp_real <= 2.0;
30
  vdiff_real <= 4096.0;
31
  diff1_real <= 100.0;
32
  
33
  diff2_real <= 100.0;
34
   
35
  prod1_real <= diff1_real*kp_real;
36
  prod2_real <= diff2_real/vdiff_real;
37
  
38

39
END struct;
#6863933
Lesenswert?

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.
#6863942
Lesenswert?

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.
Gast #6864006
Lesenswert?

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(?).
#6864157
Lesenswert?

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.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren