ERROR:Xst:1532

Gast #1423270
Liebe Kollegen!

Ich wollte gerade mein Programm synthetisieren und bekomme immer 
folgendne Fehler:

line 81: Real operand is not supported in this context.

Ich verwende nur real Werte. Die Codezeile sieht so aus.
safe := (num*(1.0/denom));


Hat jemand eine Lösung?

Danke im Voraus für die Hilfe.

Z.E.R.O.
Moderator (Firma: Titel) Persönliche Seite #1423280
> Ich wollte gerade mein Programm synthetisieren
Mit welchem Synthesewerkzeug für welche Plattform?

> Ich verwende nur real Werte.
Lies mal nach, ob real Berechnungen von der Synthese unterstützt werden.
(Antwort: schon möglich)

> safe := (num*(1.0/denom));
Lies mal nach, ob eine real Division von der Synthese unterstützt wird.
(Antwort: sicher nicht)

> line 81: Real operand is not supported in this context.
Da steht es schon. Hier kannst du das nicht machen   :-/


BTW:
> Ich verwende nur real Werte.
Das ist schlecht, nur sehr ausgewählte FPGAs haben eine FPU.
Gast #1423298
Ich verwende Xilinx ISE 10.1

Das ist der erste Real Fehler, den ich bekomme. Also baue ich darauf, 
dass sie unterstützt werden.

Wenn ich bei der Division 1.0/denom schreibe funktioniert es. Nur wenn 
ich das Ergebnis mit etwas multiplizieren will bekomme ich die 
Fehlermeldung.

Ich weis, dass Real werte nicht das gelbe vom Ei sind aber leider 
brauche ich die Dinger. Verwende sie das erste mal. Sonst benötige ich 
max. einen Integer.

Ist schon klar, dass ich das nicht so machen kann. Die Frage ist was 
kann ich machen?

LG
Z.E.R.O.
Gast #1423620
>Die Frage ist was
>kann ich machen?

Na zum beispiel mal die Frage von Lothar beantworten:
>Mit welchem Synthesewerkzeug für welche Plattform?

Sauron
Gast #1423687
Na, wenn der Threadtitel "ERROR:Xst:1532" heisst, ist das Werkzeug 
eigentlich offensichtlich ;)

Da ich aber noch nie real benutzt habe, kann ich zum eigentlichen 
Problem nichts sagen. Funktionieren die beim xst wirklich oder geht das 
nur, weil die Werte Konstanten sind?
Gast #1424131
> Vielleicht kann mir jemand einen Tip geben!?

Der kam schon:

>> safe := (num*(1.0/denom));
>Lies mal nach, ob eine real Division von der Synthese unterstützt wird.

Dann schau mal bitte in xst.pdf unter VHDL language support nach, was 
XST wirklich kann.

Abgesehen davon, wäre ein Stück mehr Code sehr hilfreich. Welchen Typ 
haben z.B. Deine Variablen und warum verwendest Du überhaupt Variablen?

Duke
Gast #1424177
Die Variablen sind vom Typ real. Ich verwende Variablen weil ich die 
Werte innerhalb des Prozesses mehrmals verändere. Signale würden den 
Wert ja erst am Ende des Prozesses annehmen.

Das mit dem 1.0/... habe ich schon getestet. Das geht allerdings kann 
ich das Ergebnis dann nicht mit einem Real Wert multiplizieren.
Gast #1424563
Wie kommen den die Werte als real überhaupt her, insb. denom? Ich habe 
den starken Verdacht, dass die Division auch überhaupt nur geht, weil 
xst irgendeine Konstantenpropagierung erkennt und damit in der HW gar 
keine Division machen muss.
Gast #1424703
Leider nein, ich gebe die Werte zwar nicht aus (kein I/O - geht ja 
nicht) aber innerhalb der Entity verändern sie sich. Die Werte verlassen 
nicht einmal die Entity deshalb habe ich gehofft, dass es irgendwie 
funktioniert mit Real zu arbeiten.

Die Alternative wären Integer Werte aber die sind mir etwas zu ungenau. 
Ev. multipliziere ich die Real mit 100, wandel sie in Integer um und 
wenn ich mit der Rechnung fertig bin wieder durch 100 und zurück in 
Real. Ist auch ungenau aber nicht mehr so schlimm. Der Rest des Modules 
vergleicht im wesentlichen nur noch die Werte (Real) miteinander.

Z.E.R.O.
Moderator (Firma: Titel) Persönliche Seite #1424750
> Die Alternative wären Integer Werte aber die sind mir etwas zu ungenau.
Warum meinst du, dass real-Zahlen genauer wären?
Wenn du 10000.0 + 0.0001 rechnest, was kommt mit real wohl heraus?
Wenn du 1000000000.0 + 1.0 rechnest, was kommt dann raus?
Und jetzt nimmst du 1000000000 + 1 als 32 Bit integer, was gibt das?

Floats/Reals haben bei gleicher Wortbreite lediglich einen höheren 
Dynamikbereich, denn die größte und die kleinste darstellbare Zahl ist 
durch den Exponenten eklatant größer als bei Integern.
Moderator (Firma: Titel) Persönliche Seite #1425513
> Ich habe Werte von -10 bis +10.
> Damit habe ich eine ausreichende Genauigkeit.
Du hast bei einer 32-bit Float-Zahl nur 23 Bit für die Mantisse.
Damit kannst du also knapp 7 Zehnerstellen genau auflösen.
Wenn du einen Float-Wert von 100000000,0 hast und 1,0 dazuaddierst, hast 
du anschliessend immer noch 100000000,0    :-o

Bei einer 32-Bit Integer Zahl hast du 9,5 Zehnerstellen, eine Addition 
von 100000000 + 1 wird also 100000001 ergeben. Das ist nach landläufiger 
Interpretation genauer, weil der kleinere Teil der Addition nicht 
einfach untergeht.

Wenn du also Zahlenwerte von z.B. 10.0000000 bis -10.0000000 darstellen 
willst, ist eine Festkommaberechnung schneller und sinnvoller.

Kurz und gut:
Float(Real) ist nicht genauer als eine gleich breite Integer-Zahl.

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 17 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [vhdl]VHDL-Code[/vhdl]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.