Multiplikation von real und int

Gast #2122065
Lesenswert?
• ▲
▼
Hallo!

Zunächst mal eine Beschreibung, was für ein Problem ich versuche zu 
lösen:

- ich möchte eine Konstante haben, mit der ein Filterkoeffizient 
festgelegt wird (Bereich 0 bis 1).  Der Wert soll im Klartext angegeben 
werden.

- zur Verwendung im eigentlich Code möchte ich eine zweite Konstante, in 
welcher der Koeffizient mit der passende Bitbreite skaliert drin steht.

Nun mein Versuch einer Lösung:
1
constant A:     real    := 0.5;         
2
  
3
constant B: integer := integer(A * 2**coeffWidth );
Das erzeugt leider beim Compilieren mit ModelSim die Fehlermeldung: No 
feasible entries for infix operator "*".

Die Variante
1
constant B: integer := integer(0.5 * 2**coeffWidth );
  funktioniert dagegen (allerdings möchte ich das vermeiden, da ich 
Konstanten zur Konfigutation, und die berechneten an unterschiedlicher 
Stelle stehen).

Warum funktioniert das ein und das andere nicht, in beiden Fällen wird 
doch eine Multiplikation von Real mit Int durchgeführt, oder nicht? Und 
wie kann ich das ganze nun elegant lösen?
Gast #2122197
Lesenswert?
• ▲
▼
D. I. schrieb:
> 0.5 kann man auch als fixed point interpretieren, da 0.1 in binär und
> dann ist es eine normale integer multiplikation

ok, das erklärt, warum das zweite funktioniert. Aber wie löse ich nun 
die Aufteilung zwischen Konfiguration und Berechnung elegant?

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