VHDL: negativer Exponent in math_real

Gast #2879047
Lesenswert?

Hallo,

ich möchte mir eine Arkustangens-Tabelle basteln, mit VHDL und 
Synthese-Werkzeug Synplify. Formel sieht wie folgt aus:
value = atan(2^(-2) * 16)
1
use ieee.math_real.all;
2
[...]
3
architecture of ... is ...
4
begin
5
integer value <= integer(math_rad_to_deg*arctan(real(2**(-2))*16));

Folgende Fehlermeldung wird bei den Synthese ausgepuckt:
@E: CD450 :Arithmetic operator ** with negative exponent -2

Das müsste doch eigentlich so gehen, negative Exponenten sollten doch 
erlaubt sein. Was mache ich falsch?
Gast #2882558
Lesenswert?

Hallo nochmal,

ich brech gleich ab, ich komme schon wieder nicht weiter. Ich bastele 
mir gerade für eine Filterstruktur die Filterkoeffizienten zusammen. Die 
habe ich als auf 1 normalisierte Werte in einem zweidimensionalen Array 
gespeichert:
1
architecture...
2
  type c_t is array (0 to 10, 0 to 7) of real;
3
  constant c:c_t := ((1.00000,0.50000,0.00000,0.00000,0.00000,0.00000,0.00000,0.00000),
4
                     (0.00000,1.00000,0.50000,0.00000,0.00000,0.00000,0.00000,0.00000),
5
                     ...
6
                     (0.00000,0.00000,0.00000,0.00000,0.00000,0.00000,0.00000,1.00000));
7
begin -- architecture

Mit dem Array möchte ich nun ein zweites initialisieren, die 
Koeffizienten allerdings mit einem konstanten Faktor (2**x) 
multiplizieren. Ich möchte also die Position des Kommas verändern können 
(zur Synthese, nicht zur Laufzeit). Dann muss ich das nicht immer erst 
mittels externem Programm berechnen lassen und neu für VHDL formatieren.

1
architecture...
2
  constant my_fact: integer <= 64;
3

4
  type my_c_t is array (0 to 10, 0 to 7) of integer range -integer(my_fact) to integer(my_fact);
5
  signal my_c: my_c_t;
6

7

8
begin --architecture
9
  lines: for my_line in 0 to 10 generate
10
  begin
11
    rows: for my_row in 0 to 7 generate
12
    begin
13
      my_c(my_line,my_row) <= integer(c(my_line,my_row) * real(my_fact));
14
    end generate rows;
15
  end generate lines;

Ich sehe nicht, was hier falsch ist, bekomme aber den Fehler "Real value 
must evaluate to a constant for synthesis", der auf die Wertzuweisung in 
der for-Schleife zeigt. "c" ist doch schonmal als Konstante deklariert. 
Außerdem sollte "c" doch konstant sein, sie wird schließlich nirgendwo 
sonst gebraucht oder verändert. Ersetze ich "c" durch einen 
Fließkommawert, verschwindet die Fehlermeldung. Wo ist hier der Fehler 
versteckt?

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