Ich habe gerade Folgendes festgestellt:
Wenn Ich einen 16 Bit Vector, also "15 downto 0" mit einem zu großen
Wert initialisiere, erhalte ich umgeklappte Werte:
negative_maximum <= std_logic_vector (to_signed (-32769,16));
liefert einen Wert von 32767 positiv und damit funktioniert nichts.
Aus Bit-Sichtweise ist es richtig, was da passiert, aber sollte der
Compiler nicht erkennen, dass die Initialisierung falsch ist? Es ist ja
ein Überlauf?
Das ist schön! Was ist das für ein Compiler?
Ich verwende den ModelSIM Altera und der meldet "no Errors , no
warnings"
- die files sind alle auf "check Synthesis" gesetzt
- "suppress warnings" ist sowohl für die IEEE als uch Synopsis AUS
- bei "report warnings" sind alle 5 check boxen aktiv
was kann man noch tun?
Markus F. schrieb:> W.S. schrieb:>> was kann man noch tun?>> Das Design simulieren (run -all). Dabei kommt das Problem ans Licht.
Genau, bei dem Problem handelt es sich aus VHDL/Modelsim-Sicht um ein
Laufzeitfehler und kein Compilefehler.
Das '<=' ist eine Signalzuweisung, wird also erst zur Laufzeit
"ausgeführt"; bei ":=" also Variablen, Constanten
erfolgt dagegen die Ausführung "sofort".
Es ist also keine "Initialisierung" wie der TO es nennt. Bei
Initialisierungen wird ein ":=" verwendet.
Das Problem liegt wohl auch darin, das der TO von einem "Compiler" im
Sinne von C-Compoiler spricht. Es aber ein Simulator/Interpreter oder
ein Synthesetool ist das den VHDL-Code verarbeitet. besser könnte es
also sein, hier nicht von "Compiler" zu sprechen.
> was kann man noch tun?
Den Code durch das Synthesetool jagen, das könnte eine Warning/Info in
den Syntheseloogs hinterlassen.
C. A. Rotwang schrieb:> Den Code durch das Synthesetool jagen, das könnte eine Warning/Info in> den Syntheseloogs hinterlassen.
Schön wärs, wenn da der Output brauchbar wäre. Leider wird man gerade
bei Xilinx mit Warnungen nur so zugeschüttet. Die wirklich wichtgen
Warnungen muß ich mir mit grep aus den log-Dateien ziehen.
> Das '<=' ist eine Signalzuweisung, wird also erst zur Laufzeit> "ausgeführt"; bei ":=" also Variablen, Constanten> erfolgt dagegen die Ausführung "sofort".
Ja, aber der Modelsimcompiler meckert trotzdem nicht.
Dafür warnt der Simulator (vsim und run -all) jetzt zweimal...
W.S. schrieb:> was kann man noch tun?
Du könntest mal GHDL probieren. Da werden teilweise verständlichere
Fehlermeldungen generiert.
Duke
C. A. Rotwang schrieb:> Es ist also keine "Initialisierung" wie der TO es nennt. Bei> Initialisierungen wird ein ":=" verwendet.
Und blöderweise stört sich nicht jeder Compiler an der fehlerhaften
Initialisierung, und gibt auch die Warnung aus der numeric_std nicht
aus...
Duke Scarring schrieb:> Dafür warnt der Simulator (vsim und run -all) jetzt zweimal...
Der Compiler vom Active-HDL stört sich auch nicht an der
Initialisierung (0 Errors, 0 Warnings). Aber der Simulator warnt
zweimal, einmal bei der Elaboration (wg. Initialisierung) und einmal zur
Runtime (wg Zuweisung). Man muss aber auch dort schon sehr genau
hinschauen:
Duke Scarring schrieb:> W.S. schrieb:>> was kann man noch tun?> Du könntest mal GHDL probieren. Da werden teilweise verständlichere
Das wäre eine Möglichkeit, ja.
Wobei: Bisher hatte Ich eigentlich schon Vertrauen in den ModelSIM.
Eine eigene Frage?
Dieser Thread ist über 9 Jahre alt.
Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.