Hallo Zusammen,
ich bin gerade nach längerer Fehlersuche auf ein seltsames Verhalten
gestoßen: Innerhalb eines synchronen Prozesses berechne möchte ich eine
zwei Werte addieren und einen subtrahieren, und das Ergebnis im Register
acc1 speichern. Komischerweise unterscheidet sich das Verhalten der
synthetisierten Schaltung je nachdem, in welcher Reihenfolge ich die
Summanden hinschreiben. Vielleicht kann mir ja jemand schnell auf die
Sprünge helfen, warum VHDL das Kommutativgesetz hier außer Kraft
setzt...
1 | signal d_in : unsigned(d_width - 1 downto 0);
|
2 | signal acc1 : unsigned(d_width + 1 downto 0);
|
3 | variable ddc_out : unsigned(d_width - 1 downto 0);
|
4 |
|
5 | ...
|
6 |
|
7 | -- Folgende Zeile erzeugt fehlerhaftes Verhalten
|
8 | acc1 <= d_in - ddc_out + acc1;
|
9 |
|
10 | -- Folgende Zeile verhält sich korrekt
|
11 | acc1 <= acc1 + d_in - ddc_out;
|
Danke schonmal,
Peter