Expression is not constant. ERROR.

Gast #2953479
Lesenswert?

Hey,

ich bin gerade dabei eine Countdown file zu schreiben. Ich bekomme aber 
in Line 55 immer folgenden Fehler:

ERROR:HDLCompiler:411 - "/home/gu95din/Master1/IC_Design/Countdown.vhd" 
Line 55: Expression is not constant.

Kurzer Hintergrund: Das Signal hour und das Signal min werden durch die 
Countdownsteuerung verändert und sollen als String an die main-Datei 
zurückgegeben werden. Ich habe die Integer Signale hour und min eben 
getestet, ob sie ein oder zwei stellig sind, um immer ein jeweils 
zweistelliges Stringsignal am Ausgang zu bekommen.

Any ideas ?
Angehängte Dateien:
#2953569
Lesenswert?

Der Fehler sitzt bei dem 'image(hour)? Kann nicht gehen, ist (weil hour 
sich eben während des Laufs ändern kann) eine dynamische Berechnung, was 
nur in der Simulation geht, aber nicht in der Synthese. Da musst du wohl 
oder übel selber eine Funktion/Entity schreiben, die das nach ASCII 
konvertiert.

Der ganze Code sieht mir auch danach aus, als würdest du sonst eher C 
programmieren ;)
Gast #2953774
Lesenswert?

Okay, gibt Sinn. Danke dir. Dass heißt, bei statischen bzw. constanten 
Signalen würde das Attribut 'image gehen (oder besser gesagt, es 
funktioniert nur bei solchen?)?

Und ja, du hast schon recht. Bin noch Neuling in VHDL. Woran siehst du 
das denn ? Es ist doch eigentlich alles synchron oder nicht ?
Gast #2953800
Lesenswert?

Georg A. schrieb:
> Der Fehler sitzt bei dem 'image(hour)? Kann nicht gehen, ist (weil hour
> sich eben während des Laufs ändern kann) eine dynamische Berechnung, was
> nur in der Simulation geht, aber nicht in der Synthese. Da musst du wohl
> oder übel selber eine Funktion/Entity schreiben, die das nach ASCII
> konvertiert.
>
> Der ganze Code sieht mir auch danach aus, als würdest du sonst eher C
> programmieren ;)


Noch was:
Ist es denn gar nicht möglich die Buchstaben als Character zu übergeben 
? Also denkst du, die beste Variante ist es, binäre Signale zu übergeben 
oder denkst du an eine Möglichkeit, mithilfe einer Funktion die Integer 
in Character umzuwandeln ? Also so ähnlich:

case INTEGERZAHL is
  when 0      => w <= '0';
  when 1      => w <= '1';
  when 2      => w <= '2';
...
end case;
#2953808
Lesenswert?

> Dass heißt, bei statischen bzw. constanten Signalen würde das Attribut
> 'image gehen (oder besser gesagt, es funktioniert nur bei solchen?)?

Die Synthese ist gegenüber der Simulation deutlich eingeschränkter. Das 
trifft insb. eingebaute Funktionen, deren Implementierung in HW entweder 
gar nicht absehbar oder sehr komplex werden könnte. Ein typisches 
Beispiel wäre eine while-Schleife mit variabler Abbruchbedingung (von 
Signalen abhängig). Wenn die innerhalb eines getakteten Prozesses steht, 
heisst das ja, dass die Schleife das Ergebnis in einem Takt liefern 
muss. Und das würde bedeuten, dass die HW für ALLE Schleifendurchläufe 
parallel synthetisiert werden müsste. Nur weiss man gar nicht, wieviele 
das sind...

Mit zur Synthesezeit konstanten Eingaben kann der Synthesizer das 
Ergebnis natürlich vorab ausrechnen.

> Woran siehst du das denn ?

zB. an der Nutzung von Strings. Wie sollen die den in HW dargestellt 
werden? 4*20*8Bit Ausgänge oder wie? Dann "if rising_edge(uni_enable)" 
im ungetakteten Prozess... Das geht gar nicht... Auch der Stil der 
gesamten Statemaschine (wenn sie überhaupt so geht...) ist arg 
gewöhnungsbedürftig.

Desweiteren ist die Methode, Zustandsfortschaltung und Berechnung des 
neuen Zustands in zwei (oder gar drei) getrennen Prozessen zu machen, 
zwar akademisch gern gesehen, hilft aber auch nicht unbedingt bei der 
Entwicklung.

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