Hallo zusammen,
ich habe mit folgender Funktion ein Problem im Quartus:
1 | FUNCTION summe(
|
2 | zahl1 : STD_LOGIC_VECTOR;
|
3 | zahl2 : STD_LOGIC_VECTOR;
|
4 | index : NATURAL
|
5 | ) RETURN STD_LOGIC_VECTOR IS
|
6 | VARIABLE v_summe : STD_LOGIC_VECTOR(11 downto 0);
|
7 | VARIABLE v_tmp_summe : STD_LOGIC_VECTOR(11 downto 0);
|
8 |
|
9 | BEGIN
|
10 | v_tmp_sum := (OTHERS => '0');
|
11 |
|
12 | FOR i IN 0 TO 2 LOOP
|
13 | IF index < 8 THEN
|
14 | v_tmp_summe(zahl1'HIGH+index+i downto index+i) := zahl1;
|
15 | v_summe := v_summe + v_tmp_summe;
|
16 | ELSE
|
17 | EXIT;
|
18 | END IF;
|
19 |
|
20 | END LOOP;
|
21 |
|
22 | RETURN v_summe;
|
23 | END;
|
Dabei wird mir angemeckert, dass die "left bound" und "right bound" in
dieser Zeile nicht konstant sind.
1 | v_tmp_summe(zahl1'HIGH+index downto index) := zahl1;
|
Sollen sie ja auch nicht sein, da ich in einem Takt mehrere Additionen
ausführen will.
Die Funktion wurde erfolgreich mit Modelsim simuliert, nur Quartus stört
sich an dieser Zeile bzw. dem Hochzählen des Index.
Wie kann ich diese Fehlermeldung umgehen und dennoch meine Funktion nach
aktuellem Stand umsetzen?
Möchte nach der ganzen Simulation meines Projektes jetzt nur ungern
alles noch einmal umbauen bzw. eine andere Art der Umsetzung wählen, nur
weil Quartus nicht versteht, was ich von ihm möchte :)
Vielen Dank!
Holger
PS: Was die Gatterlaufzeiten bei mehreren Additionen pro Takt betrifft,
bin ich mir bewusst, dass das ein Problem werden könnte. Die Taktraten
sind aber niedrig genug!