FPGA schrieb:
> if (value = "11111111111111111111111111111111") then --4294967295
> value <= "00000000000000000000000000000000";
> end if;
Das brauchst du bei einem Vektor nicht. Der läuft von X"FFFFFFFF" nach
X"00000000" allein über. Da muß nichts zurückgesetzt werden.
value <= value + "00000000000000000000000000000001";
Das macht das selbe:
value <= value + '1';
BTW: Diese direkte Vektorrechnung geht nur mit den alten Synopsys-Libs.
Die sollte man aber nicht verwenden, weil dort bei der Library-Angabe
nebenher auch ausgewählt wird, ob der Vektor signed oder unsigned ist.
Nimm statt dessen die numeric_std
BTW: Zur Abkürzung der Schreibweise ginge auch
X"FFFF" = "1111111111111111"
Insgesamt ist das eine böse Verquickung von kombinatorischem und
synchronem Design, verbunden mit einer unüblichen Schreibweise eines
Clock-Enables:
1 | counting : process ( puls, intcount, value)
|
2 | begin
|
3 | -- hier synchron mit unüblichem Clock-Enable (Puls)
|
4 | if rising_edge(puls)and Puls = '1' then
|
5 | value <= value + "00000000000000000000000000000001";
|
6 | end if;
|
7 |
|
8 | -- ab hier kombinatorisch
|
9 | if (value = "11111111111111111111111111111111") then --4294967295
|
10 | value <= "00000000000000000000000000000000";
|
11 | end if;
|
12 | end process;
|
Zudem ist intcount in der Sensitivliste unnnötig... :-/
Ich sehe gerade:
if rising_edge(puls)and Puls = '1' then
hier ist Puls='1' komplett unnötig, diese Abfrage wird von rising_edge()
mit erledigt :-o
Mach es so, und alles wird gut:1 | counting : process ( puls)
|
2 | begin
|
3 | if rising_edge(puls) then
|
4 | value <= value + '1'; -- Überlauf geht automatisch
|
5 | end if;
|
6 | end process;
|
Aber ich habe angesichts des Taktnamens (Puls) noch einen schlimmen
Verdacht: wieviele Takte hast du im ganzen Design?