HwTest schrieb:
> a <= 0; -- wird ignoriert
Das wird nicht ignoriert, sondern hier
> a <= 1;
erhält a einen "aktuelleren" Wert, den a am Prozessende übernimmt.
HwTest schrieb:
> Ok, verständlich, aber rxDataCounter wird nie größer als DATA_LENGTH-1,
> wenn das Signal nur an dieser einen Stelle verändert wird, oder?
Doch, es wird an dieser Stelle genau DATA_LENGTH groß:
rxDataCounter <= rxDataCounter + 1;
Denn einen Zyklus vorher war es ja noch DATA_LENGTH-1 groß:
1 | if uartRxEmpty = '0' then
|
2 | -- byte received, save data
|
3 | rxMemory(rxDataCounter) <= uartRxData;
|
4 | rxDataCounter <= rxDataCounter + 1; -- hier wird ein neuer Wert für rxDataCounter berechnet aber NICHT zugewiesen
|
5 | dataReceived <= true;
|
6 |
|
7 | -- if last data, next state
|
8 | if rxDataCounter = DATA_LENGTH-1 then -- hier wird der nicht inkrementierte Wert von rxDataCounter zum Vergleich verwendet
|
9 | rxDataCounter <= 0; -- <- zweite Zuweisung
|
10 | dataReceived <= false;
|
11 |
|
12 | state <= STATE_EXEC;
|
13 | end if;
|
14 |
|
15 | end process; -- hier erhält rxDataCounter den oben inkrementierten Wert
|
Kurz: in einem Prozess "gewinnt" die letzte Zuweisung (vor einem
Prozessende oder wait) an ein Signal. Bis zu dieser Zuweisung "behält"
das Signal seinen Wert.