Hallo, das Prinzip, das hinter der Festkomma-Arithmetik steckt, ist mir glaub ich klar; nach dem Komma finden sich von links nach rechts die Bruchteile 1/2, 1/4, 1/8.... Wie ich es implementieren soll leider nicht so ganz. Eine Division / Multiplikation mit einer Zweier-potenz ist trivial. Ich muss aber leider mit dem Wert 60 multiplizieren... Wie stell ich das an? Ich würde intuitiv zuerst den Ganzzahl-Anteil multiplizieren, und dann die Nachkommastellen*60 drauf addieren. Aber wie muss ich die Nachkommastellen anschauen? Einfach aus dem Vektor ausschneiden und dann mal 60 nehmen ist ja logischerweise Unsinn.
Da 60 selbst eine Ganzzahl ist [1], geht das einfach: Den Wert der Festkommazahl als Ganzzahl interpretieren und mit der Ganzzahl 60 multiplizieren [2], und das Ergebnis als Festkommazahl interpretieren. Das funzt, weil die Festkommadarstellung A der Zahl A*2^(-n) entspricht (bei n Nachkommastellen in der Darstellung). Die Ganzzahldarstellung B=60 entspricht auch der Zahl B=60, und dann ist (A*2^(-n)) * B = (A*B) * 2^(-n) [1] Schwieriger wirds wenn beide Faktoren Festkommazahlen sind, insbesondere wenn du dabei weder Genauigkeit noch Wertebereich verlieren willst. Wenn du darüber stolperst ist das ne Fragestellung für sich wert. [2] Geht einfach aber langsam, wenn es einen Befehl für Ganzzahlmultiplikation gibt. Ansonsten ist 60*x = (64 - 4)*x = 64*x - 4*x = (x << 6) - (x << 2) -> Zweimal schieben, eine Subtraktion
Schau dir mal Rechnen in VHDL -> fixed_pkg an. Das nimmt einem solche Überlegungen nicht ganz ab, man kann sich aber trotzdem einiges an Handarbeit sparen.
Ich weiß, aber ist das Package denn "stable"? Und ich weiß nicht bzw. bezweifle, dass ich es auch in der Uni nutzen kann / darf...
VHDL-2006 ist stable, ist aber noch nicht vom IEEE abgesegnet. Die Pakete lassen sich mit den meisten Tools nur nach ein paar Anpassungen kompilieren.
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.