in Schleife inkrementieren

Gast #604277
Lesenswert?

Hallo alle zusammen!
Ich verzweifel langsam. Innerhalb einer Schleife, möchte ich ein Signal 
(16-bit) erhöhen.
Dazu habe ich im Moment folgenden Code, der Taktsynchron arbeitet.
1
signal zahler : STD_LOGIC_VECTOR(0 to 15)
2

3
if Bus2IP_Clk'event and Bus2IP_Clk = '1' then
4
...
5
  for i in 0 to 20000 loop
6
    zahler <= CONV_STD_LOGIC_VECTOR(i,16);
7
  end loop;
8
...

Seltsamerweise erfolg die Zuweisung zu dem Signal "zahler" nur, wenn 
schon die ganze Schleife durchlaufen ist (also wird der Wert 20000 
zugewiesen).
Es soll aber kontinuierlich hochgezählt werden.
Wäre nett, wenn mir irgendjemand einen Tip geben kann und auch erklären 
kann, wieso sich das obere Codesegment so verhält.

Danke!
Klaus
#604314
Lesenswert?

Das kann nicht funktionieren. Eine for-Schleife in VHDL ist nicht gleich 
einer for-Schleife in C! In VHDL dient das Konstrukt nur dazu, 
Schreibarbeit zu sparen. Deine Schleife wird also zu:
1
zaehler <= '0';
2
zaehler <= '1';
3
...
4
zaehler <= '2000';
Und das dabei 2000 rauskommt, duerfte klar sein.

Was du brauchst, ist ein synchroner Prozess, der in jedem Takt dem 
Signal einen um eins hoeheren Wert zuweist.
Gast #604355
Lesenswert?

Jupp, Schleifen in VHDL werden AFAIK immer ausgerollt (und die 
Wahrheitstabelle anschließend optimiert, falls möglich) und ergeben 
entsprechende Hardware. Also Vorsicht, häufig entsteht kaskadierte 
(=langsame) Logik oder Arithmetik.
Die Zuweisung eines Signals findet immer erst beim Verlassen des 
processes statt (oder bei einem wait).

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren