Forum: FPGA, VHDL & Co. "Manueller Überlauf" bei einem Counter


von Frank (Gast)


Lesenswert?

Hallo zusammen,

ich habe ein Problem, denke dass es trivial zu lösen ist, aber komme 
einfach nicht auf den passenden Lösungsansatz.

Ich habe einen 12-bit-Counter, der mit Inkrementen >1 gezählt wird. 
Nehmen wir als Bsp. Inkrement 5.

Nun möchte ich eine Grenze festlegen, bei der der Counter überlaufen 
soll.
Nehmen wir als Bsp. 3198.

Mein Counter zählt also munter los und kommt irgendwann bei der 3195 an.
Nun würde ich mit einer normalen Abfrage
1
if counter > 3198 then
2
 counter <= (others => '0');
3
end if;
erst zur 4000 kommen und im kommenden Takt würde ich den Counter auf 0 
setzen. Einmal blöd, weil ich dann Werte grüßer meiner maximalen Grenze 
habe und nochmal blöd, weil mein Überlauf nicht geht und ich dann wieder 
mit 0 anfange und nicht mit dem Überlaufwert.

Ich möchte den Counter also genau einen Takt nach der 3195 auf 2 gesetzt 
haben. Der Startwert nach dem Überlauf ist ja auch nicht immer konstant.

Ich möchte also gerne so zählen (mal anschaulich ohne 0 gezählt):
...., 3185, 3190, 3195, 0002, 0007, 0012, ...

Hat jemand eine Idee dazu?
Ist quasi wie eine Uhr mit Überlauf bei 60min oder 12h, nur dass ich 
hier immer im 5min Schritten zählen möchte. :)

Vielen Dank!
Frank

von Georg A. (georga)


Lesenswert?

if counter+increment>limit then
  counter<=counter+increment-limit
else
  counter<=counter+increment
end if

Syntax muss man sich dazudenken...

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

Frank schrieb:
> counter <= (others => '0');
Zuallererst würde ich einen counter vom Typ integer machen. Dann lässt 
sich das alles viel leichter schreiben und schöner lesen...

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.