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 ?
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 ;)
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 ?
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;
> 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.
Das, was da angehängt ist, taugt bestenfalls für die Simulation: ein if rising_edge() mitten im kombinatorischen Prozess... :-o Dazu noch Zähler in der Kombinatorik, das gibt die mit der Zwei-Prozess-Schreibweise gern gemachten kombinatorischen Schleifen. Such einfach mal danach...
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.