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?